#101 中級エンジニアにならテスト駆動開発やってるよね?単体テストをかけえい!

2022/12/18 ·

  • 本日、順平くん久しぶりの参戦久しぶり久しぶりです、おかれさまでしたここ数回、のりさんと撮ってたんですけど前回か前々回か、前々々回か単体テストしろっていうのでやんなきゃなーって話をしてたので単体テストしろって話をします単体テストですね今日はその中でもテスト駆動開発うわー出た



  • TDDってやつですねはいはいはいはいはいはいイケてるやつイケてるやつTDDってやつなんですがテストドライブドリブンドリブンかデベロップメントデベロッピングデザインどっちだろう調べますテストドライブテストドリブンデベロップメントですねデベロップメントの方ですねはいの話をしますはいで今日のお話ははいこれを聞くだけで



  • なんとなくテスト駆動開発をやれちゃうそしてテスト駆動の大切さがわかるそして付随して雑学が増えるといううんちくも語れちゃううんちく語っちゃうっていう回をします3拍子揃ってますねで早速いきたいんですが早速いきたいんですがテスト駆動開発って知ってますかじゅんぺいくんえーと言っていいですか僕が知ってるというか



  • 思ってるのは設計の段階からテストを意識してテストがやりやすくなるように設計していくようなイメージですかねテストメインでやっていくぞっていう感じのイメージですどうでしょうイメージは合ってるんですがやり方はちょっと違いますね多分



  • 違った気持ちの問題じゃないよねそれを実現するための具体的なアクションの話ですねっていうのでやり方をざっくり言うとの前にすいません単体テストそもそもなんで書いた方がいいのかっていうところこれは本当によく言われる話の復習



  • なんですけどまず単体テストってメソッドとかっていう単位で本当にこれ思った通り動いてるかなっていうコードそれに対して合格か不合格かが出てくるコードなんですけどこれなんでいいかって言われてるかというと



  • 後工程にバグ持ち越しづらいよねっていうのでどういうことかというとプログラムってメソッドとかクラスとかそういうコードの塊を全体で動かして結果としてはユーザーが作れたりする何かのユーザーがやりたい課題解決ができるものだと思うんですけどガッチャンコした後だと伝言ゲームみたいなもんなんでメソッド同士の



  • 情報のそごは生まれないんですけど結局人間が作ってるので組み合わせることによって何かでエラーが起きやすくなる確率的にもそれを一人一人一つ一つのメソッドちゃんと動くようにできるので後工程になってからバグが見つかりづらくなるよねなるほど車がいろんなパーツで構成されてて



  • それぞれのパーツがちゃんと動いてるかどうかをチェックしてるっていうイメージですよねその通りですタイヤはタイヤでOKみたいなそうですシートはシートでOKってそうですあれなんですよねだからそののりさんの例えで言うとアクセル踏んでも進まんってなった時にこれはアクセルペダルが問題なのかエンジンが問題なのかエンジンとタイヤをつないでるなんかそのシャーシなんかそこら辺が問題なのかはいはいはい



  • っていうのが分からなくなる前にそれぞれちゃんと点検しましょうねっていうなるほど単体でちゃんと動いてることがテストできてれば繋げた時の問題じゃねって言えるとそうですそうですすいませんねなんかビュッフェで例えなくて申し訳ないんですけどもいやそんなにビュッフェでも例えれたかも例えました今の反省ですはい



  • 1つ目2つ目よく言われるのがリファクタリングしやすくなるよねってのが言われていてどういうことかというとですねリファクタリングこれコードをより保守しやすいつまり見やすいとかバグが出にくいようなシンプルな書き方するとか一般的には機能を変えずに中身の構造を分かりやすくすることみたいないい説明いい説明なんですけどね本当に



  • 結果を変えずにっていうところがポイントで結果が変わってないよねっていうのって単体テストで調べやすいんですねやっぱり単体テストってもう本当に何入れたら何が返ってくるっていう試験なのでそれが合格し続けてるってことは中身どんなに書き換えても動作変わってないわっていうのが分かるとうんうんうん



  • 人間が追うと辛いので単体テストをバーンって回した時に変わってないぜって言ってくれるのが単体テストそれよりリファクタリングしやすくなると言われてますねなるほどだからこそコードを書くんだったら単体テスト書いていこうじゃないかとよく言われるそりゃそうですよ同じ仕事するなら給料多い方がいいですよねみたいなもんですよね同じコード書くならテストあった方がいいんですよじゅんぺくん書いてますか



  • それがですね書かなかったんですよね今の現場いろいろあっていろいろあるのはいろいろ言ってみてそれはですねJavaのJUnit



  • テストのものあったんですけどDJユニットっていうのを使ってそれがうまく動かなかったんですよね試みたんですけどそれが俺がやってみて動かなかったのもそうですし先輩エンジニア歴長めの人に最終的にやってもらったんですけどそれでも動かなくて



  • お客さんに相談してじゃあそれ使わずにやっていこうかっていう形でやらなかったです今回掘り下げづらい事情がありそうで掘り下げるの怖いんですけど言語のバージョンとかライブラリとかいろいろあったのかなわかんないけどねあの辺ちょっと設定もむずいしねそうなんですねわかんないけど



  • そうなのかな? 続くねえか。わかんないです。ちょっと僕Java触ったことないんですけど単体テストは多分基本的にライブラリ入れて実行すれば動くはず。まあなんかSpringに組み込まれてそうな気もするけど。あ、フレームワークにもする。なるほど。そういうのあり。なんか、独自フレームワークでなんか色々ちょっとガイダンスとかも見たんですけどちょっとダメでしたね。



  • そういう事情がありつつその事情については残念ながら解決できないんですがよく言われるのは時間ないっていう話ありますね時間ない動いちゃったら次行きたくなっちゃうんですよね本当そうですよね時間ないはでも後から出てきた言い訳かもしれないとにかくめんどくさいいやーまさしくその通りだと思いますまさしくその通りそれをそれってでも



  • テスト駆動開発じゃないからそうなってるんですよねほう言うねっていう話をさせてください本日なんですが参考文献テスト駆動開発っていう本ですそのままこれはケントベックさんが元書いてて出た読んでは和田さんが訳したやつですね有名な本で有名プログラマーランキング



  • トップ10に入ってますねケントベックさん入ってますねそんなランキングあるんですかJユニット作ったって言いましたっけJユニット作ったのケントベックさんですねまさしく飛行機で作ったって噂のそうペアプロで3時間で



  • っていうケントベックさんが書いた本ではあるんですがちょっとその中からすっごい一冊の本なんでまあまあなボリュームあるんですけどもテスト駆動開発の概要だけ今日は本当にもう大抽出してお送りしていきますありがたいまずこれはねやってみるのが早いんでまずやってみてより詳しいことを知りたいって言ったら本買って読んでくださいなるほど



  • このラジオの位置づけとしては本当にもうさらっと撫でるだけなのでまたより詳しい話は来年やるかもしれませんもしくはやらないかもしれないまずテスト駆動開発ざっくり流れを見てみましょうテスト駆動開発っていうのは本当にざっくり言うとテストからコード書こうっていう



  • 話です普通というか一般的なイメージだとまず実装してからテストするけどテストコードを書いてから実装していこうってことですねその通りですコードももう書いちゃうんですねテストコードから書きますそれがスタートなんですねそれがスタートですこれはだから普通に書いてるとそうじゃないから新鮮だと思うんですけどどういうことかというのをちょっとお話させてください



  • テストコードじゃねえなテスト駆動開発の流れはレッドグリーンリファクタリングっていうのを繰り返していく流れになってます急に色言われたなと思ってると思うんですけどまずレッドはい



  • 作りたいもののテストをまず作ってそのテストが通らない状態を作りますコードないからあえて通らないグリーンテストが通るように本体のコードを実装します最後リファクタリングテストが通る範囲でより良いコードを書けるように遂行しますこの遂行し終わったら



  • ひょっとしたらこれなんかもうちょっとメソッド分割しちゃうかいいとかなんかいろいろ出てくるかと思うのでより良いようにレッドに戻ってまたテストコードを書き直してグリーンにしてリファクタリングにしてグルグルグルグルって回していく作り方をするのがテスト駆動開発でざっくりってことは



  • 実際のコードないけど頭の中でどういうパーツを用意しなきゃいけないっていうのができてないと単体テストを用意するのはめっちゃむずい気がするんですけどそこを頑張るってことですかそうですねそこを頑張るって話なんですがコード書くときって実際そうだと思うんですよこれはちょっと最後にやろうと思ったんですが具体的な話を



  • 踏まえながらやったほうが分かりやすい気がしたので話の順番を急にガーンって変えてちょっと実践しながらやり方を学んでみましょうか実践できるんですか非常にチャレンジングですよ音声だけでコーディングをやっていくやばい



  • 頑張って追いついてきてくださいわかりました銀行の口座管理システムを思い浮かべていただいてあなたは今から銀行の口座同士のお金の送金部分実装してねって言われたとしますオブジェクト思考でコードが書かれているのを想像していただいて銀行のお金の送金なのでとあるユーザーのある口座



  • から別の口座に送金するっていうものを実装しますトランザクションで出た例えそう一番分かりやすい結局これがなるほどマネークラスっていうのがもともとあって多分マネークラスのオブジェクトを操作する部分を実装するとします今回実装するのはその中でもアカウントコントローラーっていう口座をコントロールするクラスの



  • 送金部分なのではいセンドメソッドだけを考えてください センドメソッドセンドメソッドはい講座とコントローラーの送金センドメソッドじゃあまずテスト駆動開発なのでレッドを考えます レッド作りたいものをテストをまず作りテストが通らない状態を作っていますじゃあセンドメソッドで作りたいものって何でしょうね 難しいですかねセンドメソッドで作りたいものこれは



  • どうしようかなぁじゃあ順平君をガイドしながら何とか実装してってもらおうかな 進出なるほど僕は頑張ってオペレーターするので順平はなんていうんだペアプロディオペレーターとドライバー ドライバー準備はドライバーしてもらいますはいナビゲーターとドライバーがナビゲーターとドライバーかもしれない 確かにええええええいや違うなぁまいっかなのでじゃあ僕が喋るんだね



  • じゃあこのセンドメソッドってAさんからBさんにお金を送りたいわけじゃないですかはいアカウントコントローラー作るときにAさんからBさんというか口座Aから口座Bにお金を送るわけなんですけどアカウントコントローラーのインスタンス作るときにはフロムの口座Aっていう情報が入っているのではいセンドメソッドにはおそらく送り先と送る料金何円送るかBさんにはい



  • っていうのがなんかインプットとして入りそうですね入りそうです引数で渡すと当て先と料金をで長屋間屋で送金されて結果は成功しましたが帰ってくると良さそうだと今インプットとアウトプットが考えられましたよねなんとなくじゃあもうこれですでにテストがかけるんですよおー



  • テストコードをどう書くかというとテストコードは今回メソッドセンドメソッドのテストなのでテストアカウント正常形を考えましょうか今回じゃあ命名規則としてテストノーマル正常形ノーマルのアカウントコントローラーセンドみたいなテストコードを書くとしてその中で宛先と料金を



  • 定義してそのアカウントコントローラー先導メソッドに宛先と料金を渡すと何らかの結果が返ってくるとその結果が今回の成功したら成功で返ってくるだけサクセスとかします一旦簡単にその返り値がサクセスになる行動をかけばよいカットしやすいカットしにくいやつやめてください



  • いやこれやっぱり残高返した方がいいな残高返した方がいいか残高返しましょうごめんなさい残高返すっていう残高はいAAさんの残高そうポーザAの残高返すはいで帰ってきたらそれをアサートって言って伝わりますか僕は伝わります挿入アサートはですねアサートはAとBを比較して



  • 比較じゃないなアサートの後につける条件がトゥルーだったらOKだしフォルスだったらちげーよって言ってくれるやつです検証するみたいなテストの時によく出るやつですねよく出るやつ単語の意味としては言い張るとか断言するって意味らしいんですけど単体テストで言うと確かめたい項目を確認するメソッドじゃないけどそういうコマンドというかメソッドとして使われるんですねはい



  • だからその結果がちゃんと残高になってるかっていうテストコードが書けるはずなんですよここまで大丈夫ですか?大丈夫ですじゃあそうなるコードを実際に書いていきましょうっていうので次グリーンに入ります実装部分ですねでじゃあグリーンでコード書いてって見るじゃないですかただここで一個困ったことが発生しますほう



  • これはもう完全に想像なのではいそんなん違うよっていうのもあるかもしれないですけど想像に違うもいいもありませんそうですねはい実装してったらおどうやらその実際に送金するときにそのDBになんか操作するじゃないですかはいDBに操作するメソッドこれ単体テストなのでDB触りたくないんですよ確かにあDBMockにしなきゃいけないとMockというかまあMockうんうんうん



  • テスト用のDB立てなきゃいけないぞってなるじゃないですか1個のメソッドのテストしたいのに他のメソッドも関係してきたらそっちのメソッドぶっ壊れたらこっちも壊れちゃうじゃんっていうことですよね単体テストは基本的に他のリソース触らない他のテストに影響を及ぼさないっていう原則があるんですけどそういうのがちょいちょい出てくるんですねレッドグリーンリファクタリングその時は必要に応じてテストコードのように戻っていただいて



  • DBを作りながらテストが通るようにコードを実装していきますよし通りましたこれはもういいですよねスキップして実装終わりました実装したぞって言った通り宛先と料金を入れたらちゃんと講座Aの残高が返ってくるメソッドが返ってきたとおめでとうございます一旦通りましたありがとうございます



  • じゃあちょっと実際に実際にじゃねえや今結構大急ぎでコードを書いてたのでリファクタリングしていきましょうというところで変数名改善したりとかなんかループとかないかないなちょっとシンプルなメソッドなのでリファクタリングはちょっと例えづらいんですけどいろいろリファクタリングを進めていってグリーンのままリファクタリングができましたと今回これで便利なのがリファクタリングがすごい楽にできていてなぜかというと



  • どんなにコードを変えても単体テストが通ってる時点でもともとやりたかった引数として宛先料金を渡してリザルトとして講座Aの残額が返ってくるこれさえ守ってれば別にいいわけなんですよもともとやりたかったことはそれだからそれが保証されるように単体テストがかけてるのでリファクタリングはもう本当に好き勝手やっていいとなるほどねレッドに戻らなければとりあえず安全だろうとそうですリファクタリングの範囲では



  • 今本当にアカウントコントローラーの鮮度っていうかなり役割としては最小化されているいいメソッドの例えだったんでこれで終わるんですけどもしもうちょっと抽象的なメソッドだった場合具体的に言うと思い浮かばないんですけどもそこからもう一個下にメソッド必要だよねとかある場合はもう一回レッドに戻るわけなんですよ関数を切り出してとかでその切り出した



  • 例えばDBを触る場合に直接DB触っちゃダメだとここの急にDBのトランザクションを入れなさい制限があった場合に急に入れる用のメソッド作らなきゃダメだったんだなって後から思うわけなんですよその場合テストコードに戻りまして新しいメソッドを使ってそのメソッドに対して正しいものを投げて正しいものが返ってくるっていう



  • Mockを作るでMockでそれを使ってないとRedになる単体テストを書くんですよMockでそれを使ってないとRedになる単体テストを書く例えばDBにトランザクションを投げるときに宛先と料金を投げてだからなんだろうなアップデートでいいのかなアップデートアカウントうわーメソッド名苦手パッと考えるの苦手Bさんの講座を変えるっていうメソッドを動かさなきゃいけないと思うんですけどはいはい



  • その外部メソッドに対して正しい引数を与えてルカっていう試験を足すんですねそうするとまたレッドになるわけなんですよそのメソッドを使ってないよねっていうので次にじゃあそれをグリーンにするためにそのメソッドを使うようにコードを書き換えてでグリーンを通してっていうようなサイクルでメソッドの切り出しもこのレッドグリーンディファクタリングの流れでぐるぐる回すとそうやって最小化されて最もシンプルなコードをどんどん作り上げていく



  • っていうのがざっくりテストコードのテスト駆動開発の流れになってますなるほどはいとりあえず新しい動きが追加されたらそれのテストも書いていけよとそうですねなのでちょっとポイントとしては何回も同じこと言うことになるかもしれませんがテストファーストってテストから書くべきでテストから書くべきだけどその中でもアサートファーストシステム構築が終わったらこうなるとかコードが書き終わったらこのように動くっていうところからどんどん定義していくんですねうんうん



  • 今回の鮮度で言うと宛先と料金を送ったら結果が残高口座への残高が返ってくるっていうのから書き始めてそれに必要な周囲の関数とか元々用意しておくべきデータとかは後からどんどん足していって正しいテストにしていくっていうのがテスト駆動開発のざっくりとした流れになります先ほどレコーダーがスコーンってクラッシュしてはい



  • 話がブチ切れになってるかもしれませんがなるほど締めに入りたいと思います本日の話なんですがテスト駆動開発のなんとなくの流れが分かったかなと思いますレッドグリーンリファクタリングどうやってやるんだろうというところですねテストコードを書く時間がないんじゃなくてテストコードから書くんだとなるほどねそれが全体としてコードを書く時間ですよっていうところがポイントだったのかなと個人的に思いますなるほど



  • ちなみにテスト駆動開発ってなんかテスト最初に書くよってだけを考えるとすごくシンプルな法則なのかなって気がするんですけど何を学びたい人があの本読めばいいんですか本についてはこれより詳しいことが書いていてその詳しいことが何かっていうと



  • どういうテストコードがいいとされるかとかあとMockとかテストダブル用意するものはどういう風なものであるべきかとかあとはそのテストコードを書くことで悪いコードを書かなくて済むって話なんですけど悪いコードとは何かとかいいコードとは何かみたいなところも触れてるなるほど面白そう本当に面白いんですが



  • ちょっと今日伝えきれないので読んでくださいって感じですそうですねはいはいでももともと雑学が増えるって話をしたんですけどレコーダーがクラッシュしたのでまた次回ということで申し訳ないですがはい雑学はまた今度ということで今度ですねこれはもう話すなってレコーダーが言ってたかと捉えましたのでおぼし飯はいすいませんがはい



  • 今回なしではいわかりましたちなみにどうなんでしょうテストコード慣れてないから思うのかもしれないですけどテスト駆動開発の方が開発にかかる実感が結構いる気がしてるんですけどそこら辺どうなんですか普通にかかるもんなんですかねテスト駆動開発だとテスト駆動開発の方が時間がかかりますそれはその通りで



  • であとは単体テストの書く難易度が変わるんですよやっぱり関数によって難しいやつは難しいしでこれはちょっとどこまで推奨するか分かんないんですけども単体テストを書く行動を限定するとかっていうやり方もあるらしいですね



  • DBのトランザクション周りとかっていうのをどっかの記事で見た気もしますけどそれはよくわかってません僕は割と全部書いてるなるほどねここだけは担保したいよねっていうところを集中的にやるみたいなそうですねあまりにも場合分けが多いとかなのかな場合分けが多いのをできるだけ作らないようにするのはもちろんですけどね確かに



  • 本当にレッドグリーンリファクタリングのサイクルは数分で一周させたいっていうところが本には書いてたので数分で一周させれるようになるらしいんでそう考えるとそんなに時間かかんないのかもしれないですねあとあれですよね最初にテスト書くってことはコードが多分品質劣化しにくいと思うんで長期的に見たら後々回収できるかもねっていう気が



  • なんとなくしてますあとあれですねのりさんが前のエピソードで擬似プログラミングの話をしてたと思うんですけどだいぶ前ですねざっくり言うとコードを書く前にコメントとかなんかでこういう風に動くといいよねみたいなものを書いていくってことを言ってた気がするですけど



  • このテスト駆動って擬似プログラミングなんですよね要するに入り口と出口どうなってるといいよねっていうのをテストコードに落としてるだけなんでだからもともと頭の中とかあとは実際のコード書くときにやってたどういう風に動けばいいんだろうっていう工程でテストコード書いてるだけって考えるとそんなに増えないのかもしれませんし増えるかもしれないなるほど確かに個人的には増えるとは思ってないんだけどねどうなんでしょうねあれじゃないですか



  • 比較対象どっちかにもよると思うけど実装してテストコード書くのと実装だけしてテストコード書かないのだと書かない方が早く終わるケースもあるよねっていう感じだよねすみません訂正します絶対に書かない方が早いなぜならテストコード書くときに詰まるのがこのMockどうやって作るんじゃっていうのが結構あって分かりやすいのだとAWSですよ



  • AWSで例えばラムダっていう関数実行するサーバーレスのやつでなんかやるときにEFSとかS3とか別のサービスと連携するときの単体試験書くのってやや工夫が必要でS3にファイル保存できたときに返ってくるやつよく分かんないじゃないですかドキュメント見ないとねS3とかまだみんなやってるからいいんですけどマイナーサービス使うときに



  • ないとかあるんですよねライブラリ標準のMockがそういう時にそれをちょっと作らないといけなくて稼働がかかりますそこにそうなんだそれはちょっとめんどくさいんでそういうのがあると単体テスト書くと余計な時間がかかるそれは別に単体テスト書かなかったら実際に動かして詰まる詰まって何返ってきてんだっていうのを標準数量かなんかで出して



  • ってやらなきゃいけないのが単体テストでできるようになるタイミングの違いなのかもしれないですけど詰まるときはそれで詰まりますねなるほど時間はかかるそうですよねやらなくていいプロジェクトというかマジで時間なかったらやらない方がいいと思いますその代わり発注者に品質落ちるけどいい?っていいねって言ったやつここに書いておいて



  • しっかり握っていくとそう握っていくのが大事トラブラないようにはい今回のバージョン1っていうお話としてやらせていただいたのではい来年またその精度を上げた話できればなと思ってます僕らも深掘りの部分ですかねそうですね僕らも勉強してるのでずっとうんうんうん多分エピソード前半じゃないなこの今まで話した内容もブラッシュアップ版が後から出て出したりできるといいなと思ってるのであー確かに何個かあるねそうそうそう悔い残るやつ悔い残るやついっぱいあるんでね笑



  • コードと一緒ですよそうですね1年前に見てなんでこんな話し方しちゃったんだろうみたいなのもやっぱあるのでね以上テスト駆動開発のお話でしたはいエンディングトークということでいいですかお願いします皆さん技術書買うときどこで買ってますネットネット



  • ネットネットですネットか僕の一個おすすめの体験があってブックオフに行こうっていうブックオフ?はいブックオフってねすっごいワクワクするんですよ本屋さんってその本屋さんがしっかりしてたら絶対その本あるんですよある何でもある何でもあるじゃないですか何なら頼めるじゃないですか発注できる



  • なんですけどブックオフってその時の品揃えが違っててしかももしその時の自分が欲しい本がジャストであった時に半額ぐらいで買えるんですよっていうワクワク感があるんでブックオフおすすめですよっていう話をちょっとしたい今全部しませんでした?今全部したよねこの前買ったんですよブックオフでマイクロサービスのさ



  • オライリーの蜂の絵柄のやつわかります?僕第2版が今月実は出たんですけどそれを知らずに買ってしまったんですね第1版を綺麗と思って状態綺麗だったし値段も安くなってたんでこれはちょっと掘り出しもんだわって買ったんですよで



  • 第2版出ること後で知ってめっちゃ打ちひしがれてたんですけど言うて第1版と第2版そんな変わらんべみたいなって思ってこの前ブックファーストって本屋さん行ったんですね分厚さが別の本ぐらいになってましたねそんな違うんだ2倍ぐらいになっててそんな違うんだ違う本じゃないよねってチラチラ見て同じ本だったんですけどっていうことはあるので版だけは気を付けた方がいいかもしれないですねちょっと今の聞いて怖いなと思いました



  • いやいやもっと安定感ある本とかあるからありますね隣月の神話とかねググれば済む話ですからねググれば済むあれはちょっと注意不足でしたなんですけど需要と供給がマッチした時に格安で本手に入るんでちょっとねブックオフおすすめですねで僕の中でブックオフオンラインダメですか僕もネットのブックオフオンラインが使えますねたまにちょいコアだけどね



  • ちょい怖いですたまに普通にメモ書きめちゃめちゃしてるやつ売ってる時あるからなるほど前の人の情報分かんないじゃんだから本に線引いてあるとここ大事なのかなって勝手に思っちゃうっていう弱点があるのねノリさんの個人的弱点ってこと?人間みんななるんじゃないのそれなるなるなる前の人が線引いてたら大事そうだなって思っちゃうんですよ



  • なるべく現地行って線引かれてないかどうか見た方がいいと思う多分のりさんってガチャみたいに絶対にあるじゃなくてあったりなかったりするっていうところ楽しんでるんじゃないかなと思ってギャンブラー制?ランダム制というかブックオフオンラインだと全部あると思うんですよブックオフオンライン確かに全部ありそうただブックオフオフラインブックオフはあったりなかったりすると思うのであったりなかったりする



  • そういう楽しさあると思いますそれかちなみに僕の中での一番おすすめのブックオフはおぎくぼ店ですねでかいんですかおぎくぼ店はなんか技術書がすっごいいっぱいあってあの品ぞれ変わりますねマジではいいかないと思いますですよねはい遠いですよねはいわかります遠いんですよねはいっていうねあのガチャガチャでしたはいでもまあブックオフはい



  • 技術書あんま見たことない売ったことあるけど買ったことないな売ったこと逆にないなすごいな純増してるんですね純増してるどんどん積んじゃってるまあだからとりあえずブックオフ行って見てみるのは楽しいのでおすすめですというお話でしたそれじゃあ皆さんテストから書きましょうはい



  • バイバイブックオフで食堂開発を買おう売ってないなあってかダメですね著者に還元しましょうし新品で買いましょうバイバイひまじんプログラマーではあなたのフィードバックを募集していますちょっとやりとりしたい人はメール気軽に送りたい人はGoogleフォームツイートをお願いします詳細は説明欄を見てくださいホッドキャストのフォローコメント評価してくれるとバカ騒ぎしますそれではまた次回

0:00 35:12

#101 中級エンジニアにならテスト駆動開発やってるよね?単体テストをかけえい!