Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Clojureという言語が私逹にもたらしたもの
Search
ayato
June 30, 2018
Programming
6
3.1k
Clojureという言語が私逹にもたらしたもの
Hackers Champloo 2018の資料
ayato
June 30, 2018
Tweet
Share
More Decks by ayato
See All by ayato
マイクロサービス内で動くAPIをF#で書いている
ayato0211
1
940
3年間考え続けてきたWebアプリケーションにおけるテストの話
ayato0211
3
270
Re:REPL-Driven Development
ayato0211
3
1.3k
Meta Template Engine
ayato0211
2
1.1k
超変換! Hiccup data structure!!
ayato0211
2
620
About Integrant
ayato0211
0
570
Muscle Assert
ayato0211
0
280
Clojureを用いたWebアプリケーション開発
ayato0211
2
3.1k
翻訳にまつわるエトセトラ
ayato0211
6
1.2k
Other Decks in Programming
See All in Programming
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
450
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.4k
Inside of Swift Export
giginet
PRO
1
310
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
170
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
440
SidekiqでAIに商品説明を生成させてみた
akinko_0915
0
110
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
520
マンガアプリViewerの大画面対応を考える
kk__777
0
440
MCPサーバー「モディフィウス」で変更容易性の向上をスケールする / modifius
minodriven
4
320
Migration to Signals, Resource API, and NgRx Signal Store
manfredsteyer
PRO
0
140
ビルドプロセスをデバッグしよう!
yt8492
0
210
iOSでSVG画像を扱う
kishikawakatsumi
0
180
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.1k
What's in a price? How to price your products and services
michaelherold
246
12k
Designing for humans not robots
tammielis
254
26k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
250
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
950
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Facilitating Awesome Meetings
lara
57
6.6k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
The Pragmatic Product Professional
lauravandoore
36
7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Transcript
#hcmpl Clojureという言語が 私達にもたらしたもの あやぴー@Cybozu Startups, inc. Twitter: _ayato_p GitHub: ayato-p
ちょっと気になる
#hcmpl あやぴー •Cybozu Startups, inc. •Shibuya.lisp •Clojure/Emacs/筋トレ •沖縄"は修学旅行以来 •ロイズ石垣島の塩チョコレートが好き
#hcmpl こんなの書いてました✍️ •中の人です
#hcmpl サイボウズスタートアップス 情報サービスをとおして 世界の豊かな社会生活の 実現に貢献する
#hcmpl サイボウズスタートアップス •サイボウズさんの子会社ではない' •B向けのサービスをいくつか提供しています •安否確認サービス •kintone連携サービス •国内有数のClojure企業 •Lisp Meetupの会場提供 •Shibuya.lispなのに五反田
#hcmpl 今日話すこと •Clojureの簡単な紹介 •Clojureを使った開発の現場 •フレームワークがないWebアプリ開発 •REPL駆動開発 •マイナー言語起用の裏話 •Clojureを採用した理由 •エンジニア採用の話
#hcmpl Clojureの紹介
#hcmpl Clojureとは •Lisp •関数プログラミングのための言語 •確立されたプラットフォームと共存できる言語 •並行処理のために設計された言語 $MPKVSFࢲ͕ͭͬͨ͘ɻ Rich Hickey(@richhickey)
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2
3)) ;;=> (2 3 4) 演算子(≒関数)
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2
3)) ;;=> (2 3 4) 被演算子(=引数)
#hcmpl Clojureの読み方 (inc 1) ;;=> 2 (map inc '(1 2
3)) ;;=> (2 3 4) フォーム(≒式)
#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}
#hcmpl 特徴 •動的な開発 => REPL駆動開発 •関数プログラミング => 第一級関数 •Lisp =>
S式 •実行時ポリモーフィズム => マルチメソッド •並行プログラミング => STM、イミュータブル •JVMにホストされた言語 => Java
#hcmpl IUUQTDMPKVSFPSHBCPVUSBUJPOBMF Object Orientation is overrated
#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."
#hcmpl 今日イチバン推したい特徴 •データと関数が完全に分離されている •Clojureプログラムでは、データを関数で操作して、 目的のデータに変換していく •ほとんどのコレクション型はSequentialまたは Associativeとして扱える データ 関数 関数
データ データ
#hcmpl Clojureを使った 開発の現場
#hcmpl 合言葉は… グッバイWAF!グッバイORM!
#hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNEBJLTZBORVBOOBQMBZGSBNFXPSLGBMTFCB[JZPOBUVQVGBMTFTIJGBOH
#hcmpl 時代の選択 IUUQTTQFBLFSEFDLDPNLLVCVOIPXUPTBGFMZVQHSBEFSBJMT
#hcmpl フレームワークの問題 •バージョンアップに苦労している •メジャーバージョンが変わる度に破壊的な変更が入る •どんな言語、どんなフレームワークにもある問題 •どんなに優れたチームでもある程度苦労する •フレームワークから外れると途端につらくなる •実はフレームワークに依存しない方がよいのでは…?
#hcmpl ClojureにはWAFがない •正確に言えば、そういう試みはいくつか存在する •Duct, Arachne, etc... •いずれも決定打に欠けるという印象 •Ringを中心としたライブラリの組み合わせが主流 •ほとんどのライブラリはWebアプリケーションの ためだけのものではない
•例えば、バリデーションライブラリはHTML フォームと分離されている方がよい * WAF = WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
#hcmpl Ring •RubyのRack, PythonのWSGIのようなもの •HTTPの詳細を隠蔽し、リクエストとレスポンスの情報を シンプルで統一された抽象化することが目的 )551ϦΫΤετΛϚοϓʹม 3JOH ϋϯυϥʔ ؔ
リクエスト レスポンス ϚοϓΛ)551Ϩεϙϯεʹม
#hcmpl Ringハンドラー •いわゆるコントローラー •マップを受けてマップを返す"ただの関数" •アノテーションや暗黙的なルールなどが必要ない •明示的でシンプル、わかりやすい (defn handler [req] {:status
200 :headers {"Content-Type" "text/html"} :body "Hello, world"})
#hcmpl 自分のコード ライブラリの組み合わせ •ライブラリ選択、組み合わせの自由がある •フレームワークの場合、FWがシステムの起動/ 停止に責任を持つ •ライブラリの場合、自分のコードがシステムの 起動/停止に責任を持つ 自分のコード フレームワーク
ライブラリ
#hcmpl IUUQUPNBTQOFUCMPHMJCSBSZGSBNFXPSLT
#hcmpl ORMが流行らない土壌 •デファクトなJDBCラッパーでは、問い合わせ結果と してマップのシーケンスが返却される •任意のテーブルに対応したクラスなどではなく、 ただのマップなので通常のデータと変わらない •Rich Hickeyがコミュニティに影響を与えている •Simplicity Matters,
Effective Programs, etc •metabase/toucanなどの試みはある
#hcmpl REPL駆動開発
#hcmpl ClojureのREPLぽいこと •実行中のプログラムに影響を与えることができる •プログラムを調査するのが簡単 •ファイルに保存しないでプログラムを変更できる •エディタとREPLを統合することができる •ブラウザと接続することができる(ClojureScript)
#hcmpl 編集 保存 実行, テスト コンパイル 一般的な言語 Clojure ?
#hcmpl 編集 保存 実行, テスト コンパイル 編集 評価 一般的な言語 Clojure
#hcmpl REPL DEMO
#hcmpl マイナー言語起用 の裏話
#hcmpl 小さな会社の生存戦略 •↓良いサービス作りたい✨ •↓優秀なエンジニアが必要✨ •↓ブランドを構築しないといけない✨ •技術マーケティングが必要なのでは!?
#hcmpl 条件 •採用面で競合が少ないこと •日本で一番になれる可能性があるテーマであること •すぐに廃れないこと(FWやライブラリで選択しない) •エンジニアが成長出来るテーマであること •テーマに対するチャレンジにワクワクできること •テーマにアンテナを張るエンジニアが優秀である場合が 多いこと •ニッチでも良い(大量の採用は考えてない)
#hcmpl 選ばれたClojure •条件に当てはまっていた •社内にClojureに関する知見を持った メンバーがいた •当たり前だけど使えそうかどうかとい うのもしっかり考慮されてます
#hcmpl 採用できてる?
#hcmpl
#hcmpl 成功…? •PHPエンジニアの採用に比べると応募はある •どうしても未経験が多いので難しい •育てる気があればわりとなんとかなる •興味を持ってくれる層は優秀そうな人が多い印象 •母数は圧倒的に少ない、けど競合も少ない
#hcmpl ビジネス的には?
#hcmpl 順調 •この3年でふたつのシステムを開発 •どちらも保守や機能開発がうまくいっている •今年は新しく開発を始めるシステムがある
#hcmpl まとめ
#hcmpl もたらされたもの •オブジェクト指向言語以外でのプログラミング •フレームワークに依存しないシステム •シンプルさの重要性 •REPLによる素早いフィードバックループ •Clojureコミュニティとの関係 •Rich Hickeyの考え方 •採用面での優位性
#hcmpl Enjoy Clojure