会社でClojure使ってみて分かったこと 
2014.10.10 
Clojure夜会LT
Page 2 
自己紹介 
(def me {:name “吉田尚弘” 
:company “リクルートテクノロジーズ” 
:job [“サーバサイドエンジニア”] 
:lang {:java “about 10 years” 
:clojure “1 month” }})
Page 3 
今日話すこと 
採用箇所 
利用フレームワーク 
開発環境 
よかったところ 
苦労したところ
Page 4 
採用箇所 
ログインログから攻撃と思われるアクセスを抽出して、メール通知 するバッチ。 
定期実行 
分析SQL 
メール送信 
ここ 
運用者とか 
マネージャとか 
・リアルタイム検知/ブロックではない 
・インターバル実行でログを拾ってメール 
ログイン 
ログ
Page 5 
採用箇所 
本来はこれを導入したかった。 
http://qiita.com/kawasima/items/e79ca6841d0d0067b9c6 
「ログインログの収集と不正アクセス検知」
Page 6 
利用フレームワーク 
http://www.luminusweb.net/ 
・Webアプリ開発に必要な機能が「最低限」揃っている 
・オートコンパイルやStack Traceの表示など開発支援の機能もある 
・Clojure初心者がさくっとWEBアプリ開発するには取っ付きやすい。 
-> 今回のようなアプリであれば数十分〜数時間で実行可能jarの作成まで可。 
Luminus : A Clojure Web Framework
Page 7 
利用フレームワーク 
テンプレートエンジン 
https://github.com/yogthos/Selmer 
ルーティング 
https://github.com/weavejester/compojure 
WEBコンテナ 
https://github.com/noir-clojure/lib-noir 
https://github.com/weavejester/ring-server 
DBアクセス 
https://github.com/korma/Korma 
lein new luminus myapp 
cd myapp 
lein ring server
Page 8 
開発環境 
Intellij + La Clojure 
・Javaのコードアシストあり 
・pom.xmlを書いてMavenPJ化するとclojureのコードアシストもできる 
・Intellijからリモートデバッグで起動中のプロセスに接続可 
※Light Tableの方がよさげ
Page 9 
よかったところ 
Javaと比較して圧倒的に短いコード量 
<-java7
Page 10 
よかったところ 
Clojureで書くとこんな感じ。 
Java8のStream APIやFunctionを駆使すればJava7よりはシンプルに記載可能だが限定的。 
resultset-seqのような強力な関数はない。
Page 11 
よかったところ 
Javaの資産をフル活用可能 
commons-emailを利用したメール送信例 
・dependencyに追加するだけ 
・たいていのライブラリはclojureでラップされている(jdbc/log4j)
Page 12 
苦労したところ 
Immutableな世界 
立ち上がりに時間はかかる 
Java出身の人は、Java8 -> Scala -> Clojureの順で触っていくと、 習得が早いかも 
Function & Stream -> mutable & immutable -> immutable 
徐々に抵抗がなくなるはず 
性能をJavaと同等に引き上げるのが一番難しい 
デバッグ 
遅延シーケンスを現実化しながら中を確認 
スタックトレースの行番号と実際のエラー位置が異なるケースがある
Page 13 
まとめ 
Enterpriseにおいてもミッションクリティカルでなければ十分 Clojureは利用できると思う 
言語機能 
シーケンス / プロトコル / マクロ / 豊富な標準関数 
関数型 
JVM 
充実したフレームワーク/ライブラリ 
大規模システムにも適用可能 
シンプルなルール 
technology-radar-2014-01 
technology-radar-2014-07

会社でClojure使ってみて分かったこと

  • 1.
  • 2.
    Page 2 自己紹介 (def me {:name “吉田尚弘” :company “リクルートテクノロジーズ” :job [“サーバサイドエンジニア”] :lang {:java “about 10 years” :clojure “1 month” }})
  • 3.
    Page 3 今日話すこと 採用箇所 利用フレームワーク 開発環境 よかったところ 苦労したところ
  • 4.
    Page 4 採用箇所 ログインログから攻撃と思われるアクセスを抽出して、メール通知 するバッチ。 定期実行 分析SQL メール送信 ここ 運用者とか マネージャとか ・リアルタイム検知/ブロックではない ・インターバル実行でログを拾ってメール ログイン ログ
  • 5.
    Page 5 採用箇所 本来はこれを導入したかった。 http://qiita.com/kawasima/items/e79ca6841d0d0067b9c6 「ログインログの収集と不正アクセス検知」
  • 6.
    Page 6 利用フレームワーク http://www.luminusweb.net/ ・Webアプリ開発に必要な機能が「最低限」揃っている ・オートコンパイルやStack Traceの表示など開発支援の機能もある ・Clojure初心者がさくっとWEBアプリ開発するには取っ付きやすい。 -> 今回のようなアプリであれば数十分〜数時間で実行可能jarの作成まで可。 Luminus : A Clojure Web Framework
  • 7.
    Page 7 利用フレームワーク テンプレートエンジン https://github.com/yogthos/Selmer ルーティング https://github.com/weavejester/compojure WEBコンテナ https://github.com/noir-clojure/lib-noir https://github.com/weavejester/ring-server DBアクセス https://github.com/korma/Korma lein new luminus myapp cd myapp lein ring server
  • 8.
    Page 8 開発環境 Intellij + La Clojure ・Javaのコードアシストあり ・pom.xmlを書いてMavenPJ化するとclojureのコードアシストもできる ・Intellijからリモートデバッグで起動中のプロセスに接続可 ※Light Tableの方がよさげ
  • 9.
    Page 9 よかったところ Javaと比較して圧倒的に短いコード量 <-java7
  • 10.
    Page 10 よかったところ Clojureで書くとこんな感じ。 Java8のStream APIやFunctionを駆使すればJava7よりはシンプルに記載可能だが限定的。 resultset-seqのような強力な関数はない。
  • 11.
    Page 11 よかったところ Javaの資産をフル活用可能 commons-emailを利用したメール送信例 ・dependencyに追加するだけ ・たいていのライブラリはclojureでラップされている(jdbc/log4j)
  • 12.
    Page 12 苦労したところ Immutableな世界 立ち上がりに時間はかかる Java出身の人は、Java8 -> Scala -> Clojureの順で触っていくと、 習得が早いかも Function & Stream -> mutable & immutable -> immutable 徐々に抵抗がなくなるはず 性能をJavaと同等に引き上げるのが一番難しい デバッグ 遅延シーケンスを現実化しながら中を確認 スタックトレースの行番号と実際のエラー位置が異なるケースがある
  • 13.
    Page 13 まとめ Enterpriseにおいてもミッションクリティカルでなければ十分 Clojureは利用できると思う 言語機能 シーケンス / プロトコル / マクロ / 豊富な標準関数 関数型 JVM 充実したフレームワーク/ライブラリ 大規模システムにも適用可能 シンプルなルール technology-radar-2014-01 technology-radar-2014-07