Submit Search
TDD with RDD: Clojure/LispのREPLで変わる開発体験
0 likes
24 views
Kent Ohashi
テスト駆動開発(test-driven development)とREPL駆動開発(REPL-driven development)を組み合わせて、より快適な開発フローを実現しよう!
Software
Read more
1 of 27
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
More Related Content
Similar to TDD with RDD: Clojure/LispのREPLで変わる開発体験
(20)
PDF
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
PDF
Javascript as an Embedded DSL - Expression Problemの解法例
Yasuyuki Maeda
PDF
Tddのすゝめ
将 高野
PDF
TDDを研ぎ究める
pocketberserker
PDF
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
KEY
TDD #NagoyaTesting
kyon mm
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
Tomoharu ASAMI
PPTX
TDDをやってみた
Yuta Kawadai
PDF
Tdd
Takaya Kotohata
PDF
#027 tddのさわり
森下 智裕
PPT
wankuma #28
高見 知英
PDF
JS開発におけるTDDと自動テストツール利用の勘所
Koji Nakamura
PDF
Agileツール適合化分科会(tddとbdd)
masanori kataoka
PDF
TDDってなんなの?(What is TDD)
seichi23
PDF
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
PDF
Tdd
Tsukasa Oishi
PDF
ソフトウェア工学2023 11 テスト
Toru Tamaki
PPTX
LINTから理解するTDD
Masafumi Sasaki
PPT
第4部「Tddとペアプロのめざめ」
Hiromu Shioya
PDF
世界をすこしだけ前に進めるということ
Yukei Wachi
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
Javascript as an Embedded DSL - Expression Problemの解法例
Yasuyuki Maeda
Tddのすゝめ
将 高野
TDDを研ぎ究める
pocketberserker
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
TDD #NagoyaTesting
kyon mm
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
Tomoharu ASAMI
TDDをやってみた
Yuta Kawadai
Tdd
Takaya Kotohata
#027 tddのさわり
森下 智裕
wankuma #28
高見 知英
JS開発におけるTDDと自動テストツール利用の勘所
Koji Nakamura
Agileツール適合化分科会(tddとbdd)
masanori kataoka
TDDってなんなの?(What is TDD)
seichi23
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
Tdd
Tsukasa Oishi
ソフトウェア工学2023 11 テスト
Toru Tamaki
LINTから理解するTDD
Masafumi Sasaki
第4部「Tddとペアプロのめざめ」
Hiromu Shioya
世界をすこしだけ前に進めるということ
Yukei Wachi
More from Kent Ohashi
(20)
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
PDF
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
PDF
From Scala/Clojure to Kotlin
Kent Ohashi
PDF
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
Kent Ohashi
PDF
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
Kent Ohashi
PDF
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
PDF
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
Kent Ohashi
PDF
RDBでのツリー表現入門2024
Kent Ohashi
PDF
ミュータビリティとイミュータビリティの狭間: 関数型言語使いから見たKotlinコレクション
Kent Ohashi
PDF
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
PDF
Team Geek Revisited
Kent Ohashi
PDF
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Kent Ohashi
PDF
Clojureコレクションで探るimmutableでpersistentな世界
Kent Ohashi
PDF
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
Kent Ohashi
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
PDF
実用のための語源学入門
Kent Ohashi
PDF
メタプログラミング入門
Kent Ohashi
PDF
労働法の世界
Kent Ohashi
PDF
Clojureで作る"simple"なDSL
Kent Ohashi
PDF
RDBでのツリー表現入門
Kent Ohashi
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
From Scala/Clojure to Kotlin
Kent Ohashi
🐬の推し本紹介2024: 『脱・日本語なまり 英語(+α)実践音声学』
Kent Ohashi
do Notation Equivalents in JVM languages: Scala, Kotlin, Clojure
Kent Ohashi
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
Kotlin Meets Data-Oriented Programming: Kotlinで実践する「データ指向プログラミング」
Kent Ohashi
RDBでのツリー表現入門2024
Kent Ohashi
ミュータビリティとイミュータビリティの狭間: 関数型言語使いから見たKotlinコレクション
Kent Ohashi
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
Kent Ohashi
Team Geek Revisited
Kent Ohashi
Scala vs Clojure?: The Rise and Fall of Functional Languages in Opt Technologies
Kent Ohashi
Clojureコレクションで探るimmutableでpersistentな世界
Kent Ohashi
英語学習者のためのフランス語文法入門: フランス語完全理解(?)
Kent Ohashi
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
実用のための語源学入門
Kent Ohashi
メタプログラミング入門
Kent Ohashi
労働法の世界
Kent Ohashi
Clojureで作る"simple"なDSL
Kent Ohashi
RDBでのツリー表現入門
Kent Ohashi
Ad
TDD with RDD: Clojure/LispのREPLで変わる開発体験
1.
TDD with RDD Clojure/LispのREPLで変わる開発体験 #NextbeatTechBar 1
2.
のシニアエンジニア スタートアップの起業家と投資家のための業務効 率化/連携プラットフォームを開発している 主要技術スタック: & TypeScript の運営企業 ,
などの関数型言語と関数型プログ ラミングの実践が好き Java, , Clojure, KotlinとJVM言語での開発実務 に長く取り組んできた lagénorhynque🐬カマイルカ 株式会社スマートラウンド Kotlin Server-Side Kotlin Meetup Clojure Haskell Scala 2
3.
ClojureでRDDとTDDのハイブリッドな開発スタイル を実践しよう 3
4.
1. TDDとRDD 2. TDD
with RDD 3. Clojureでの実践例 4
5.
1. TDDとRDD 5
6.
[IMO] プログラミングで体感的に大きな割合を占める 対話的プロセス 言語 対話の相手 (高度な型システムを持つ)静的 型付き言語 コンパイラ (高度なREPL開発環境と動的性質 を持つ)
Lisp系言語 REPL その他の多くの言語 ユニットテストor/and (ログ付 きの実行を含む)デバッガー 6
7.
対話の延長上にある3種類の開発スタイル コンパイラとの対話→型駆動開発(type-driven development) REPLとの対話→REPL駆動開発(REPL-driven development, RDD) ユニットテストとの対話→テスト駆動開発(test- driven development,
TDD) 7
8.
試行錯誤の探索的なプロセス ツールに助けられたり惑わされたりしながら進む 高速で高頻度なフィードバックループ 反応を見て、書き換えて、反応を見る繰り返し 設計の漸進的改善の機会でもある ユニットテストによるフィードバックと一定の動作 保証は高度なコンパイラやREPLを補完しうる 複数を組み合わせて実践しよう💡 8
9.
2. TDD with
RDD 9
10.
テスト駆動開発(TDD) 0. 満たすべき仕様を整理する 1. 🟥Red:
仕様に対応するテストコードを書いて(想定 通り)テストをパスしないことを確かめる 2. 🟩Green: テストをパスする最小限の実装を与えて テストをパスすることを確かめる 3. 🟦Refactor: 内部実装(コード設計)を改善して引き 続きテストをパスすることを確かめる→再び1.へ 10
11.
コードを読み取り、評価し、出力する繰り返し REPL (read-eval-print loop) ;;
[Clojure] REPL内で素朴なrepl関数を定義し実行してみる user=> (defn repl [] (loop [] (-> (read) ; 入力の読み取り (eval) ; 評価 (prn)) ; 出力 (recur))) ; 再帰(= ループ) #'user/repl ; 関数定義式の評価結果 user=> (repl) (+ 1 2) ; 入力 3 ; 出力 (map inc [1 2 3]) ; 入力 (2 3 4) ; 出力 11
12.
REPL駆動開発(RDD) 1. ✍️Write: 小さなコード(任意の式)を書く 2.
🔍Eval: 式を評価し結果を確かめる→再び1. へ 12
13.
TDD with RDD 1.
✍🔍️テスト対象の式を書いて評価する 2. ✍🔍テスト用の式を書いて評価し結果を確かめる 🟥意図通りでない→再び1. へ 🟩意図通り→(適宜)テストケースに記録する 3. 🟦内部実装を改善して評価結果が意図通りである (or テストをパスする)ことを確かめる→再び1. へ 13
14.
3. Clojureでの実践例 14
15.
事前準備: テストコード用ファイル (ns clj-tdd-with-rdd.core)
; 名前空間(モジュール)の宣言 (defn fizzbuzz [n]) ; 関数の定義(※ボディはまだ空) 15
16.
事前準備: プロダクトコード用ファイル (ns clj-tdd-with-rdd.core-test (:require [clj-tdd-with-rdd.core
:as sut] ; テスト対象 [clojure.test :as t])) ; 標準のテストライブラリ (t/deftest test-fizzbuzz ; テスト関数の定義 (t/testing "3の倍数ならFizz") ; テストケースの説明 (t/testing "5の倍数ならBuzz") (t/testing "3の倍数かつ5の倍数ならFizz Buzz") (t/testing "3の倍数でも5の倍数でもなければ整数の文字列")) 16
17.
エディタでファイルを開き、REPLに接続する 17
18.
関数の定義と適用の式を評価してみる 18
19.
関数定義を書き換えてそれぞれ評価してみる 19
20.
テストケースに書き換えて評価してみる 20
21.
類似のケースを追加してテスト全体を実行してみる 21
22.
さらに続けて…… 22
23.
プロダクトコードとテストコードを書き上げた 23
24.
リファクタしてみた 24
25.
リファクタリング後もテストをパスする😌 25
26.
リッチなREPLは探索的な開発フローを加速する♾️ Lisp系言語のREPLはいいぞ😈 (他言語でも同じような開発体験がしたい) 26
27.
Further Reading cf. Clojure/ClojureScript関連リンク集> REPL駆動開 発 『テスト駆動開発』 Type-Driven
Development with Idris Idris: A Language for Type-Driven Development 型駆動開発|プログラング言語Idrisに入門させた い(v0.9) 27
Download