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
REPL-Oriented
Search
ayato
October 09, 2015
Programming
3
5.8k
REPL-Oriented
ayato
October 09, 2015
Tweet
Share
More Decks by ayato
See All by ayato
Clojureという言語が私逹にもたらしたもの
ayato0211
6
2.9k
3年間考え続けてきたWebアプリケーションにおけるテストの話
ayato0211
3
230
Re:REPL-Driven Development
ayato0211
3
1.2k
Meta Template Engine
ayato0211
2
1k
超変換! Hiccup data structure!!
ayato0211
2
560
About Integrant
ayato0211
0
500
Muscle Assert
ayato0211
0
220
Clojureを用いたWebアプリケーション開発
ayato0211
2
3k
翻訳にまつわるエトセトラ
ayato0211
6
1.2k
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
260
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
390
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
380
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
260
Spatial Rendering for Apple Vision Pro
warrenm
0
110
Security_for_introducing_eBPF
kentatada
0
110
情報漏洩させないための設計
kubotak
2
290
MCP with Cloudflare Workers
yusukebe
2
220
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
790
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
How to Ace a Technical Interview
jacobian
276
23k
Fireside Chat
paigeccino
34
3.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Facilitating Awesome Meetings
lara
50
6.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Optimising Largest Contentful Paint
csswizardry
33
3k
For a Future-Friendly Web
brad_frost
175
9.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Visualization
eitanlees
146
15k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Transcript
REPL 指向 第 13 回 #渋谷java @_ayat_p / Cybozu Startups,
Inc.
REPL 指向至高 第 13 回 #渋谷java @_ayat_p / Cybozu Startups,
Inc.
(def _ayato_p {:name "あやぴー" :lang [:clojure] :company "Cybozu Startups, Inc."})
(def _ayato_p {:name "あやぴー" :lang [:clojure] :company "Cybozu Startups, Inc."})
最近 Clojure しか 書けなくなりました
はじめに
"REPL の話をします"
None
とは言ったけど
"Java の"とは一言も 言ってない :P
"Java の"とは一言も 言ってない :P "Clojure の" REPL の話をします
今日話すこと
•改めて REPL とは •Clojure における REPL とは •REPL 駆動開発
改めて REPL とは
•最近の言語はだいたい備えている •Ruby -> irb, Python -> ipython •Kotlin, Scala など
JVM 言語でも! (そろそろ Java でも !?)
•Read-Eval-Print Loop •読んで、評価して、出力する繰り返し
•Read-Eval-Print Loop •読んで、評価して、出力する繰り返し #とは
# e.g.) Ruby REPL irb(main):001:0> def hello irb(main):002:1> "Hello,
world" irb(main):003:1> end => nil irb(main):004:0> hello => "Hello, world"
# e.g.) Ruby REPL irb(main):001:0> def hello irb(main):002:1> "Hello,
world" irb(main):003:1> end => nil irb(main):004:0> hello => "Hello, world" READ & EVAL READ & EVAL
# e.g.) Ruby REPL irb(main):001:0> def hello irb(main):002:1> "Hello,
world" irb(main):003:1> end => nil irb(main):004:0> hello => "Hello, world" PRINT PRINT
# e.g.) Ruby REPL irb(main):001:0> def hello irb(main):002:1> "Hello,
world" irb(main):003:1> end => nil irb(main):004:0> hello => "Hello, world" LOOP
•対話的に開発するためのツール •考えた機能を確認しながら実装できる •(閉じた) REPL 環境に蓄積される •たぶん便利(?)
•対話的に開発するためのツール •考えた機能を確認しながら実装できる •(閉じた) REPL 環境に蓄積される •たぶん便利(?) その REPL 本当に便利ですか?
Clojure における REPL とは
たぶんあなたはこう思っている? 「 "Clojure における REPL" ? 他の言語と同じだろ? 」
たぶんあなたはこう思っている? 「 "Clojure における REPL" ? 他の言語と同じだろ? 」 違うんです
Clojure の REPL • Clojure は実行時に Clojure コンパイラの機 能をフルで使える •
REPL 上での実行はファイルのロードと同じよ うに動く • テキストエディタ等と協調動作しやすいよう になっている
違い • ファイルベースのワークフロー ( e.g. save -> auto-compile -> reload
) が必要ない • 実行中のプログラム環境を直接触れる • ライブラリですら REPL 上で再定義可能 • 環境を触る機能が充実している ( clojure.repl, tools.namespace とか ) • 本番環境ですら REPL を接続出来る
;; file (ns example.core) (defn inner-fn []) (defn outer-fn []
(inner-fn)) ;; repl e.c> (outer-fn) => nil e.c> (defn inner-fn [] "This is inner fn") => #'example.core/inner-fn e.c> (outer-fn) => "This is inner fn"
こういう経験ありませんか? • ファイル全体を更新したく ないけど、一部変更を反映 させたい • 開発時に素早くマイグレー ションしたい • SQL
をインクリメンタルに 書きたい • もっと早くトライアンドエ ラーしたい • ブラウザの環境を使いたい (in AltJS) • あの関数の名前が思い出せ ない • ドキュメントだけだと分か らないから試してみたい • etc, etc...
こういう経験ありませんか? • ファイル全体を更新したく ないけど、一部変更を反映 させたい • 素早くマイグレーションし たい • SQL
をインクリメンタルに 書きたい • もっと早くトライアンドエ ラーしたい • ブラウザの環境を使いたい (in AltJS) • あの関数の名前が思い出せ ない • ドキュメントだけだと分か らないから試してみたい • etc, etc... Clojure なら 簡単に解決可能
•REPL は Clojure での開発でなくては ならない存在 •むしろ REPL と適当なエディタで十分 ( Rich
Hickey は実際に Emacs と事実上 REPL だけで開発しているとかなんとか) •逆に REPL ないとつらい
•REPL は Clojure での開発でなくては ならない存在 •むしろ REPL と適当なエディタで十分 ( Rich
Hickey は実際に Emacs と事実上 REPL だけで開発しているとかなんとか) •逆に REPL ないとつらい REPL が開発を 加速させる
REPL 駆動開発
•REPL Driven Development •REPL で素早いフィードバックを得る
ワークフロー 考える/ コードを書く 思った通りに動く? REPL で試す テストを書いて 仕様を固める * ͷৗͰ͢
• Clojure の特徴も相まって REPL 上であら ゆる関数が簡単に実行可 • REPL を使ってボトムアップ開発 •
REPL で関数の定義やドキュメントが読める (悩んだら REPL に聞ける)
副産物的なもの •REPL からあらゆるコマンドを実行可 (サーバーを起動したり、マイグレーションしたり) •JVM の起動オーバーヘッドがない
デメリット(?) •まれに REPL 上の定義が残ってて誤動 作するときがある •テスト書きたくなくなる (だって動いてるし…)
まとめ
•REPL 駆動開発は楽しい •Clojure の REPL は最高 •Clojure 最高
Enjoy Clojure