Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clojureという言語が私逹にもたらしたもの

5335315769ef28d5b1b2ddbd776cef2d?s=47 ayato
June 30, 2018

 Clojureという言語が私逹にもたらしたもの

Hackers Champloo 2018の資料

5335315769ef28d5b1b2ddbd776cef2d?s=128

ayato

June 30, 2018
Tweet

Transcript

  1. #hcmpl Clojureという言語が 私達にもたらしたもの あやぴー@Cybozu Startups, inc. Twitter: _ayato_p GitHub: ayato-p

    ちょっと気になる
  2. #hcmpl あやぴー •Cybozu Startups, inc. •Shibuya.lisp •Clojure/Emacs/筋トレ •沖縄"は修学旅行以来 •ロイズ石垣島の塩チョコレートが好き

  3. #hcmpl こんなの書いてました✍️ •中の人です

  4. #hcmpl サイボウズスタートアップス 情報サービスをとおして 世界の豊かな社会生活の 実現に貢献する

  5. #hcmpl サイボウズスタートアップス •サイボウズさんの子会社ではない' •B向けのサービスをいくつか提供しています •安否確認サービス •kintone連携サービス •国内有数のClojure企業 •Lisp Meetupの会場提供 •Shibuya.lispなのに五反田

  6. #hcmpl 今日話すこと •Clojureの簡単な紹介 •Clojureを使った開発の現場 •フレームワークがないWebアプリ開発 •REPL駆動開発 •マイナー言語起用の裏話 •Clojureを採用した理由 •エンジニア採用の話

  7. #hcmpl Clojureの紹介

  8. #hcmpl Clojureとは •Lisp •関数プログラミングのための言語 •確立されたプラットフォームと共存できる言語 •並行処理のために設計された言語 $MPKVSF͸ࢲ͕ͭͬͨ͘ɻ Rich Hickey(@richhickey)

  9. #hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2

    3)) ;;=> (2 3 4) 演算子(≒関数)
  10. #hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2

    3)) ;;=> (2 3 4) 被演算子(=引数)
  11. #hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2

    3)) ;;=> (2 3 4) フォーム(≒式)
  12. #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}
  13. #hcmpl 特徴 •動的な開発 => REPL駆動開発 •関数プログラミング => 第一級関数 •Lisp =>

    S式 •実行時ポリモーフィズム => マルチメソッド •並行プログラミング => STM、イミュータブル •JVMにホストされた言語 => Java
  14. #hcmpl IUUQTDMPKVSFPSHBCPVUSBUJPOBMF Object Orientation
 is overrated

  15. #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."
  16. #hcmpl 今日イチバン推したい特徴 •データと関数が完全に分離されている •Clojureプログラムでは、データを関数で操作して、
 目的のデータに変換していく •ほとんどのコレクション型はSequentialまたは Associativeとして扱える データ 関数 関数

    データ データ
  17. #hcmpl Clojureを使った 開発の現場

  18. #hcmpl 合言葉は… グッバイWAF!グッバイORM!

  19. #hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNEBJLTZBORVBOOBQMBZGSBNFXPSLGBMTFCB[JZPOBUVQVGBMTFTIJGBOH

  20. #hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNLLVCVOIPXUPTBGFMZVQHSBEFSBJMT

  21. #hcmpl フレームワークの問題 •バージョンアップに苦労している •メジャーバージョンが変わる度に破壊的な変更が入る •どんな言語、どんなフレームワークにもある問題 •どんなに優れたチームでもある程度苦労する •フレームワークから外れると途端につらくなる •実はフレームワークに依存しない方がよいのでは…?

  22. #hcmpl ClojureにはWAFがない •正確に言えば、そういう試みはいくつか存在する •Duct, Arachne, etc... •いずれも決定打に欠けるという印象 •Ringを中心としたライブラリの組み合わせが主流 •ほとんどのライブラリはWebアプリケーションの
 ためだけのものではない

    •例えば、バリデーションライブラリはHTML フォームと分離されている方がよい * WAF = WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
  23. #hcmpl Ring •RubyのRack, PythonのWSGIのようなもの •HTTPの詳細を隠蔽し、リクエストとレスポンスの情報を シンプルで統一された抽象化することが目的 )551ϦΫΤετΛϚοϓʹม׵ 3JOH ϋϯυϥʔ ؔ਺

    リクエスト レスポンス ϚοϓΛ)551Ϩεϙϯεʹม׵
  24. #hcmpl Ringハンドラー •いわゆるコントローラー •マップを受けてマップを返す"ただの関数" •アノテーションや暗黙的なルールなどが必要ない •明示的でシンプル、わかりやすい (defn handler [req] {:status

    200
 :headers {"Content-Type" "text/html"} :body "Hello, world"})
  25. #hcmpl 自分のコード ライブラリの組み合わせ •ライブラリ選択、組み合わせの自由がある •フレームワークの場合、FWがシステムの起動/ 停止に責任を持つ •ライブラリの場合、自分のコードがシステムの 起動/停止に責任を持つ 自分のコード フレームワーク

    ライブラリ
  26. #hcmpl IUUQUPNBTQOFUCMPHMJCSBSZGSBNFXPSLT

  27. #hcmpl ORMが流行らない土壌 •デファクトなJDBCラッパーでは、問い合わせ結果と してマップのシーケンスが返却される •任意のテーブルに対応したクラスなどではなく、
 ただのマップなので通常のデータと変わらない •Rich Hickeyがコミュニティに影響を与えている •Simplicity Matters,

    Effective Programs, etc •metabase/toucanなどの試みはある
  28. #hcmpl REPL駆動開発

  29. #hcmpl ClojureのREPLぽいこと •実行中のプログラムに影響を与えることができる •プログラムを調査するのが簡単 •ファイルに保存しないでプログラムを変更できる •エディタとREPLを統合することができる •ブラウザと接続することができる(ClojureScript)

  30. #hcmpl 編集 保存 実行,
 テスト コンパイル 一般的な言語 Clojure ?

  31. #hcmpl 編集 保存 実行,
 テスト コンパイル 編集 評価 一般的な言語 Clojure

  32. #hcmpl REPL DEMO

  33. #hcmpl マイナー言語起用 の裏話

  34. #hcmpl 小さな会社の生存戦略 •↓良いサービス作りたい✨ •↓優秀なエンジニアが必要✨ •↓ブランドを構築しないといけない✨ •技術マーケティングが必要なのでは!?

  35. #hcmpl 条件 •採用面で競合が少ないこと •日本で一番になれる可能性があるテーマであること •すぐに廃れないこと(FWやライブラリで選択しない) •エンジニアが成長出来るテーマであること •テーマに対するチャレンジにワクワクできること •テーマにアンテナを張るエンジニアが優秀である場合が
 多いこと •ニッチでも良い(大量の採用は考えてない)

  36. #hcmpl 選ばれたClojure •条件に当てはまっていた •社内にClojureに関する知見を持った メンバーがいた •当たり前だけど使えそうかどうかとい うのもしっかり考慮されてます

  37. #hcmpl 採用できてる?

  38. #hcmpl

  39. #hcmpl 成功…? •PHPエンジニアの採用に比べると応募はある •どうしても未経験が多いので難しい •育てる気があればわりとなんとかなる •興味を持ってくれる層は優秀そうな人が多い印象 •母数は圧倒的に少ない、けど競合も少ない

  40. #hcmpl ビジネス的には?

  41. #hcmpl 順調 •この3年でふたつのシステムを開発 •どちらも保守や機能開発がうまくいっている •今年は新しく開発を始めるシステムがある

  42. #hcmpl まとめ

  43. #hcmpl もたらされたもの •オブジェクト指向言語以外でのプログラミング •フレームワークに依存しないシステム •シンプルさの重要性 •REPLによる素早いフィードバックループ •Clojureコミュニティとの関係 •Rich Hickeyの考え方 •採用面での優位性

  44. #hcmpl Enjoy Clojure