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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ayato
October 09, 2015
Programming
6.3k
3
Share
REPL-Oriented
ayato
October 09, 2015
More Decks by ayato
See All by ayato
マイクロサービス内で動くAPIをF#で書いている
ayato0211
1
1.4k
Clojureという言語が私逹にもたらしたもの
ayato0211
6
3.2k
3年間考え続けてきたWebアプリケーションにおけるテストの話
ayato0211
3
300
Re:REPL-Driven Development
ayato0211
3
1.4k
Meta Template Engine
ayato0211
2
1.2k
超変換! Hiccup data structure!!
ayato0211
2
650
About Integrant
ayato0211
0
590
Muscle Assert
ayato0211
0
310
Clojureを用いたWebアプリケーション開発
ayato0211
2
3.2k
Other Decks in Programming
See All in Programming
The free-lunch guide to idea circularity
hollycummins
0
410
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
180
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
170
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
220
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
340
20260320登壇資料
pharct
0
160
Coding as Prompting Since 2025
ragingwind
0
680
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
490
KagglerがMixSeekを触ってみた
morim
0
370
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
5
2.4k
存在論的プログラミング: 時間と存在を記述する
koriym
5
770
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
170
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to train your dragon (web standard)
notwaldorf
97
6.6k
30 Presentation Tips
portentint
PRO
1
270
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Being A Developer After 40
akosma
91
590k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
A designer walks into a library…
pauljervisheath
211
24k
Faster Mobile Websites
deanohume
310
31k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
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