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