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
REPL 指向 第 13 回 #渋谷java @_ayat_p / Cybozu Startups, Inc.
Slide 2
Slide 2 text
REPL 指向至高 第 13 回 #渋谷java @_ayat_p / Cybozu Startups, Inc.
Slide 3
Slide 3 text
(def _ayato_p {:name "あやぴー" :lang [:clojure] :company "Cybozu Startups, Inc."})
Slide 4
Slide 4 text
(def _ayato_p {:name "あやぴー" :lang [:clojure] :company "Cybozu Startups, Inc."}) 最近 Clojure しか 書けなくなりました
Slide 5
Slide 5 text
はじめに
Slide 6
Slide 6 text
"REPL の話をします"
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
とは言ったけど
Slide 9
Slide 9 text
"Java の"とは一言も 言ってない :P
Slide 10
Slide 10 text
"Java の"とは一言も 言ってない :P "Clojure の" REPL の話をします
Slide 11
Slide 11 text
今日話すこと
Slide 12
Slide 12 text
•改めて REPL とは •Clojure における REPL とは •REPL 駆動開発
Slide 13
Slide 13 text
改めて REPL とは
Slide 14
Slide 14 text
•最近の言語はだいたい備えている •Ruby -> irb, Python -> ipython •Kotlin, Scala など JVM 言語でも! (そろそろ Java でも !?)
Slide 15
Slide 15 text
•Read-Eval-Print Loop •読んで、評価して、出力する繰り返し
Slide 16
Slide 16 text
•Read-Eval-Print Loop •読んで、評価して、出力する繰り返し #とは
Slide 17
Slide 17 text
# 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"
Slide 18
Slide 18 text
# 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
Slide 19
Slide 19 text
# 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
Slide 20
Slide 20 text
# 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
Slide 21
Slide 21 text
•対話的に開発するためのツール •考えた機能を確認しながら実装できる •(閉じた) REPL 環境に蓄積される •たぶん便利(?)
Slide 22
Slide 22 text
•対話的に開発するためのツール •考えた機能を確認しながら実装できる •(閉じた) REPL 環境に蓄積される •たぶん便利(?) その REPL 本当に便利ですか?
Slide 23
Slide 23 text
Clojure における REPL とは
Slide 24
Slide 24 text
たぶんあなたはこう思っている? 「 "Clojure における REPL" ? 他の言語と同じだろ? 」
Slide 25
Slide 25 text
たぶんあなたはこう思っている? 「 "Clojure における REPL" ? 他の言語と同じだろ? 」 違うんです
Slide 26
Slide 26 text
Clojure の REPL • Clojure は実行時に Clojure コンパイラの機 能をフルで使える • REPL 上での実行はファイルのロードと同じよ うに動く • テキストエディタ等と協調動作しやすいよう になっている
Slide 27
Slide 27 text
違い • ファイルベースのワークフロー ( e.g. save -> auto-compile -> reload ) が必要ない • 実行中のプログラム環境を直接触れる • ライブラリですら REPL 上で再定義可能 • 環境を触る機能が充実している ( clojure.repl, tools.namespace とか ) • 本番環境ですら REPL を接続出来る
Slide 28
Slide 28 text
;; 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"
Slide 29
Slide 29 text
こういう経験ありませんか? • ファイル全体を更新したく ないけど、一部変更を反映 させたい • 開発時に素早くマイグレー ションしたい • SQL をインクリメンタルに 書きたい • もっと早くトライアンドエ ラーしたい • ブラウザの環境を使いたい (in AltJS) • あの関数の名前が思い出せ ない • ドキュメントだけだと分か らないから試してみたい • etc, etc...
Slide 30
Slide 30 text
こういう経験ありませんか? • ファイル全体を更新したく ないけど、一部変更を反映 させたい • 素早くマイグレーションし たい • SQL をインクリメンタルに 書きたい • もっと早くトライアンドエ ラーしたい • ブラウザの環境を使いたい (in AltJS) • あの関数の名前が思い出せ ない • ドキュメントだけだと分か らないから試してみたい • etc, etc... Clojure なら 簡単に解決可能
Slide 31
Slide 31 text
•REPL は Clojure での開発でなくては ならない存在 •むしろ REPL と適当なエディタで十分 ( Rich Hickey は実際に Emacs と事実上 REPL だけで開発しているとかなんとか) •逆に REPL ないとつらい
Slide 32
Slide 32 text
•REPL は Clojure での開発でなくては ならない存在 •むしろ REPL と適当なエディタで十分 ( Rich Hickey は実際に Emacs と事実上 REPL だけで開発しているとかなんとか) •逆に REPL ないとつらい REPL が開発を 加速させる
Slide 33
Slide 33 text
REPL 駆動開発
Slide 34
Slide 34 text
•REPL Driven Development •REPL で素早いフィードバックを得る
Slide 35
Slide 35 text
ワークフロー 考える/ コードを書く 思った通りに動く? REPL で試す テストを書いて 仕様を固める * ͷৗͰ͢
Slide 36
Slide 36 text
• Clojure の特徴も相まって REPL 上であら ゆる関数が簡単に実行可 • REPL を使ってボトムアップ開発 • REPL で関数の定義やドキュメントが読める (悩んだら REPL に聞ける)
Slide 37
Slide 37 text
副産物的なもの •REPL からあらゆるコマンドを実行可 (サーバーを起動したり、マイグレーションしたり) •JVM の起動オーバーヘッドがない
Slide 38
Slide 38 text
デメリット(?) •まれに REPL 上の定義が残ってて誤動 作するときがある •テスト書きたくなくなる (だって動いてるし…)
Slide 39
Slide 39 text
まとめ
Slide 40
Slide 40 text
•REPL 駆動開発は楽しい •Clojure の REPL は最高 •Clojure 最高
Slide 41
Slide 41 text
Enjoy Clojure