Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
#hcmpl Clojureという言語が 私達にもたらしたもの あやぴー@Cybozu Startups, inc. Twitter: _ayato_p GitHub: ayato-p ちょっと気になる
Slide 2
Slide 2 text
#hcmpl あやぴー •Cybozu Startups, inc. •Shibuya.lisp •Clojure/Emacs/筋トレ •沖縄"は修学旅行以来 •ロイズ石垣島の塩チョコレートが好き
Slide 3
Slide 3 text
#hcmpl こんなの書いてました✍️ •中の人です
Slide 4
Slide 4 text
#hcmpl サイボウズスタートアップス 情報サービスをとおして 世界の豊かな社会生活の 実現に貢献する
Slide 5
Slide 5 text
#hcmpl サイボウズスタートアップス •サイボウズさんの子会社ではない' •B向けのサービスをいくつか提供しています •安否確認サービス •kintone連携サービス •国内有数のClojure企業 •Lisp Meetupの会場提供 •Shibuya.lispなのに五反田
Slide 6
Slide 6 text
#hcmpl 今日話すこと •Clojureの簡単な紹介 •Clojureを使った開発の現場 •フレームワークがないWebアプリ開発 •REPL駆動開発 •マイナー言語起用の裏話 •Clojureを採用した理由 •エンジニア採用の話
Slide 7
Slide 7 text
#hcmpl Clojureの紹介
Slide 8
Slide 8 text
#hcmpl Clojureとは •Lisp •関数プログラミングのための言語 •確立されたプラットフォームと共存できる言語 •並行処理のために設計された言語 $MPKVSFࢲ͕ͭͬͨ͘ɻ Rich Hickey(@richhickey)
Slide 9
Slide 9 text
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2 3)) ;;=> (2 3 4) 演算子(≒関数)
Slide 10
Slide 10 text
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2 3)) ;;=> (2 3 4) 被演算子(=引数)
Slide 11
Slide 11 text
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2 3)) ;;=> (2 3 4) フォーム(≒式)
Slide 12
Slide 12 text
#hcmpl Clojureの読み方 (defn rename-keys [map kmap] (reduce (fn [m [old new]] (if (contains? map old) (assoc m new (get map old)) m)) (apply dissoc map (keys kmap)) kmap)) (rename-keys {:foo 1} {:foo :bar}) ;;=> {:bar 1}
Slide 13
Slide 13 text
#hcmpl 特徴 •動的な開発 => REPL駆動開発 •関数プログラミング => 第一級関数 •Lisp => S式 •実行時ポリモーフィズム => マルチメソッド •並行プログラミング => STM、イミュータブル •JVMにホストされた言語 => Java
Slide 14
Slide 14 text
#hcmpl IUUQTDMPKVSFPSHBCPVUSBUJPOBMF Object Orientation is overrated
Slide 15
Slide 15 text
#hcmpl – Alan J. Perlis "It is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures."
Slide 16
Slide 16 text
#hcmpl 今日イチバン推したい特徴 •データと関数が完全に分離されている •Clojureプログラムでは、データを関数で操作して、 目的のデータに変換していく •ほとんどのコレクション型はSequentialまたは Associativeとして扱える データ 関数 関数 データ データ
Slide 17
Slide 17 text
#hcmpl Clojureを使った 開発の現場
Slide 18
Slide 18 text
#hcmpl 合言葉は… グッバイWAF!グッバイORM!
Slide 19
Slide 19 text
#hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNEBJLTZBORVBOOBQMBZGSBNFXPSLGBMTFCB[JZPOBUVQVGBMTFTIJGBOH
Slide 20
Slide 20 text
#hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNLLVCVOIPXUPTBGFMZVQHSBEFSBJMT
Slide 21
Slide 21 text
#hcmpl フレームワークの問題 •バージョンアップに苦労している •メジャーバージョンが変わる度に破壊的な変更が入る •どんな言語、どんなフレームワークにもある問題 •どんなに優れたチームでもある程度苦労する •フレームワークから外れると途端につらくなる •実はフレームワークに依存しない方がよいのでは…?
Slide 22
Slide 22 text
#hcmpl ClojureにはWAFがない •正確に言えば、そういう試みはいくつか存在する •Duct, Arachne, etc... •いずれも決定打に欠けるという印象 •Ringを中心としたライブラリの組み合わせが主流 •ほとんどのライブラリはWebアプリケーションの ためだけのものではない •例えば、バリデーションライブラリはHTML フォームと分離されている方がよい * WAF = WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
Slide 23
Slide 23 text
#hcmpl Ring •RubyのRack, PythonのWSGIのようなもの •HTTPの詳細を隠蔽し、リクエストとレスポンスの情報を シンプルで統一された抽象化することが目的 )551ϦΫΤετΛϚοϓʹม 3JOH ϋϯυϥʔ ؔ リクエスト レスポンス ϚοϓΛ)551Ϩεϙϯεʹม
Slide 24
Slide 24 text
#hcmpl Ringハンドラー •いわゆるコントローラー •マップを受けてマップを返す"ただの関数" •アノテーションや暗黙的なルールなどが必要ない •明示的でシンプル、わかりやすい (defn handler [req] {:status 200 :headers {"Content-Type" "text/html"} :body "Hello, world"})
Slide 25
Slide 25 text
#hcmpl 自分のコード ライブラリの組み合わせ •ライブラリ選択、組み合わせの自由がある •フレームワークの場合、FWがシステムの起動/ 停止に責任を持つ •ライブラリの場合、自分のコードがシステムの 起動/停止に責任を持つ 自分のコード フレームワーク ライブラリ
Slide 26
Slide 26 text
#hcmpl IUUQUPNBTQOFUCMPHMJCSBSZGSBNFXPSLT
Slide 27
Slide 27 text
#hcmpl ORMが流行らない土壌 •デファクトなJDBCラッパーでは、問い合わせ結果と してマップのシーケンスが返却される •任意のテーブルに対応したクラスなどではなく、 ただのマップなので通常のデータと変わらない •Rich Hickeyがコミュニティに影響を与えている •Simplicity Matters, Effective Programs, etc •metabase/toucanなどの試みはある
Slide 28
Slide 28 text
#hcmpl REPL駆動開発
Slide 29
Slide 29 text
#hcmpl ClojureのREPLぽいこと •実行中のプログラムに影響を与えることができる •プログラムを調査するのが簡単 •ファイルに保存しないでプログラムを変更できる •エディタとREPLを統合することができる •ブラウザと接続することができる(ClojureScript)
Slide 30
Slide 30 text
#hcmpl 編集 保存 実行, テスト コンパイル 一般的な言語 Clojure ?
Slide 31
Slide 31 text
#hcmpl 編集 保存 実行, テスト コンパイル 編集 評価 一般的な言語 Clojure
Slide 32
Slide 32 text
#hcmpl REPL DEMO
Slide 33
Slide 33 text
#hcmpl マイナー言語起用 の裏話
Slide 34
Slide 34 text
#hcmpl 小さな会社の生存戦略 •↓良いサービス作りたい✨ •↓優秀なエンジニアが必要✨ •↓ブランドを構築しないといけない✨ •技術マーケティングが必要なのでは!?
Slide 35
Slide 35 text
#hcmpl 条件 •採用面で競合が少ないこと •日本で一番になれる可能性があるテーマであること •すぐに廃れないこと(FWやライブラリで選択しない) •エンジニアが成長出来るテーマであること •テーマに対するチャレンジにワクワクできること •テーマにアンテナを張るエンジニアが優秀である場合が 多いこと •ニッチでも良い(大量の採用は考えてない)
Slide 36
Slide 36 text
#hcmpl 選ばれたClojure •条件に当てはまっていた •社内にClojureに関する知見を持った メンバーがいた •当たり前だけど使えそうかどうかとい うのもしっかり考慮されてます
Slide 37
Slide 37 text
#hcmpl 採用できてる?
Slide 38
Slide 38 text
#hcmpl
Slide 39
Slide 39 text
#hcmpl 成功…? •PHPエンジニアの採用に比べると応募はある •どうしても未経験が多いので難しい •育てる気があればわりとなんとかなる •興味を持ってくれる層は優秀そうな人が多い印象 •母数は圧倒的に少ない、けど競合も少ない
Slide 40
Slide 40 text
#hcmpl ビジネス的には?
Slide 41
Slide 41 text
#hcmpl 順調 •この3年でふたつのシステムを開発 •どちらも保守や機能開発がうまくいっている •今年は新しく開発を始めるシステムがある
Slide 42
Slide 42 text
#hcmpl まとめ
Slide 43
Slide 43 text
#hcmpl もたらされたもの •オブジェクト指向言語以外でのプログラミング •フレームワークに依存しないシステム •シンプルさの重要性 •REPLによる素早いフィードバックループ •Clojureコミュニティとの関係 •Rich Hickeyの考え方 •採用面での優位性
Slide 44
Slide 44 text
#hcmpl Enjoy Clojure