13
会社でClojure使ってみて分かったこと 2014.10.10 Clojure夜会LT

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

Embed Size (px)

DESCRIPTION

Clojure の Recruit Technologies で利用事例.

Citation preview

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

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

Clojure夜会LT

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

Page 2

自己紹介

(def me {:name “吉田尚弘”

:company “リクルートテクノロジーズ”

:job [“サーバサイドエンジニア”]

:lang {:java “about 10 years”

:clojure “1 month” }})

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

Page 3

今日話すこと

採用箇所

利用フレームワーク

開発環境

よかったところ

苦労したところ

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

Page 4

採用箇所

ログインログから攻撃と思われるアクセスを抽出して、メール通知するバッチ。

定期実行

分析SQL

メール送信

ここ

運用者とか マネージャとか

・リアルタイム検知/ブロックではない

・インターバル実行でログを拾ってメール

ログイン

ログ

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

Page 5

採用箇所

本来はこれを導入したかった。

http://qiita.com/kawasima/items/e79ca6841d0d0067b9c6

「ログインログの収集と不正アクセス検知」

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

Page 6

利用フレームワーク

http://www.luminusweb.net/

・Webアプリ開発に必要な機能が「最低限」揃っている

・オートコンパイルやStack Traceの表示など開発支援の機能もある

・Clojure初心者がさくっとWEBアプリ開発するには取っ付きやすい。

-> 今回のようなアプリであれば数十分〜数時間で実行可能jarの作成まで可。

Luminus : A Clojure Web Framework

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

Page 8

開発環境

Intellij + La Clojure

・Javaのコードアシストあり

・pom.xmlを書いてMavenPJ化するとclojureのコードアシストもできる

・Intellijからリモートデバッグで起動中のプロセスに接続可

※Light Tableの方がよさげ

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

Page 9

よかったところ

Javaと比較して圧倒的に短いコード量

<-java7

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

Page 10

よかったところ

Clojureで書くとこんな感じ。

Java8のStream APIやFunctionを駆使すればJava7よりはシンプルに記載可能だが限定的。

resultset-seqのような強力な関数はない。

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

Page 11

よかったところ

Javaの資産をフル活用可能

commons-emailを利用したメール送信例

・dependencyに追加するだけ

・たいていのライブラリはclojureでラップされている(jdbc/log4j)

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

Page 12

苦労したところ

Immutableな世界

立ち上がりに時間はかかる

Java出身の人は、Java8 -> Scala -> Clojureの順で触っていくと、 習得が早いかも

Function & Stream -> mutable & immutable -> immutable

徐々に抵抗がなくなるはず

性能をJavaと同等に引き上げるのが一番難しい

デバッグ

遅延シーケンスを現実化しながら中を確認

スタックトレースの行番号と実際のエラー位置が異なるケースがある

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

Page 13

まとめ

Enterpriseにおいてもミッションクリティカルでなければ十分Clojureは利用できると思う

言語機能

シーケンス / プロトコル / マクロ / 豊富な標準関数

関数型

JVM

充実したフレームワーク/ライブラリ

大規模システムにも適用可能

シンプルなルール

technology-radar-2014-01 technology-radar-2014-07