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