masayuki5160's diary

名古屋でエンジニアしてます。

TDDをはじめてみたら気づきが多くて驚いている

興味を持ったきっかけ

そもそものきっかけは転職活動時に受けたある企業からテストコードを書くことを採用試験時に要求されたことでした。 それまでテストコードをちゃんと書いたこともなかった僕は採用試験に向けてxUnit系のツールの使い方を覚えるのもあれだな、と思い、今から思えば非常に雑に書いたコードを提出しました。 もちろんその結果、採用は見送りw

その後、他の企業での採用が決まったわけですが、どうしてもその時のテストコードを書く試験が気になっていました。 なんでテストコードを採用試験で書かせたんだろう、ということですね。

それからなんやかんや自分で調べてTDDにたどり着き、というのが始めるまでの僕のきっかけでした。

興味を持ってから

それからやったことは例えば以下。

qiita.com

qiita.com

この辺は自分で本を読みながら試行錯誤していた時です。(今でもだいぶ試行錯誤してますがw) そしてそのあと、和田さんのセミナーに参加しました。

event.shoeisha.jp

自腹で名古屋から参加ということでちょっと海外行くくらいお金かかったんですが、このセミナーに参加してやっとTDDの入り口に立てた気がしたのはほんとです。 特によかったのは、

  • 和田さん、安井さんから直接話を聞ける
  • セミナーの大半を占める実習時間の中でわからない点は和田さん、安井さんからのアドバイスをすぐもらえる
  • 強制的にTDDする時間になる

というあたりでしょうか。 あまり頻繁にやっているセミナーではないのでほんとたまたま参加できてよかったです。

現場でTDD

セミナーを受けてから一番感じたのはTDDは座学でゴニョゴニョするよりは現場で実践を繰り返すのが一番良さそうだ、ということでした。 それは例えば以下資料でもいわれていて、自分の思ってることがそんなずれてなさそうだな〜という確認にもなった。

習うより慣れさせろ、と14ページあたりで記述があるがほんとそうだな、と思った。

そしてちょうどタイムリーに勤め先でTDDを始めることになった。(タイミング良すぎw) でも経験者もいないってことでたまたまセミナーを受けてきたての僕がまずはTDDの紹介をすることになった。 内容としては、

  • TDDの概念ざっくり10min
  • decodeでの和田さんのライブコーディングを一緒に見る 40min
  • セミナーで和田さん、安井さんから聞いてきた内容のシェア 10min

で1時間ほど。 時間をみてもらえるとわかるが、和田さんのライブコーディングを一緒に見る時間をだいぶ多くとった。 ここで僕がTDDを実演してもいいわけだけど、それよりは和田さんがやってる方が説得力あるからな〜というのと(このタイミングでは、何を言うかより誰が言うか、の方が大事だよな〜と感じた)、擬似的にTDDを一緒にやっている体感が得られそうだったから。

FizzBuzz問題のTDDライブコーディングは20分頃からで、その辺りから一緒に動画をみた。 僕が和田さん、安井さんのセミナーで2人がペアプロでTDDをしてくれる様子をみたときも自分の今までの考えがぶっ壊されるくらい衝撃を受けたわけだが、それが参加してくれている人にもおきているような様子があった。

その後は、実際に一部の開発でTDDをしてみたりTDDの練習問題をモブプロで言語別にチームを別れて取り組んでみたりしている。

TDDを通しての気づき

まだ始まったばかりだし、僕自身のTDDやテストコードを書いてきた経験値が少ないのもあってあれだが、例えばこんな気づきがある。

  • ある程度複雑な処理でもテストコードがあるから手戻り少なく開発を進められることがある
  • 途中でTDDじゃなくなってきそうな時もあるが、少なくともサイクルを意識してるのでリファクタリングをマメにする
  • TDDはいい手法だけどそこにとらわれすぎるのもよくない
  • オブジェクト指向についての理解がしっかりあるとよりTDDがいいサイクルでまわりそう
  • 自分がオブジェクト指向を理解仕切れてなさそうなことに気づいたw

と、タイトル倒れの気づきリストで書き出してみてビックリだがこのままにしとくw 個人的には最後の項目が大きくて、大学でもわけのわからないオブジェクト指向の講義を受けたしエンジニアとしてもいくらかコードを書いてきたのにまだ理解が曖昧だったんだ、という気づきはほんとによかった。

この気づきは実はほんとについ最近のもの。そこで以下本を読んだ。

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

新品価格
¥3,024から
(2018/9/23 15:46時点)

アジャイル時代のオブジェクト脳のつくり方 Rubyで学ぶ究極の基礎講座

新品価格
¥3,024から
(2018/9/23 15:47時点)

後者の本にはTDDに関して記述があります。 この本でTDDについて本格的に学ぶのはオススメしませんがオブジェクト指向とTDDについてやさしめに話が進んでいくのでそこは素晴らしい本だと思っています。 前者の本はJavaの本で後者の本の元になった本のようで内容がそっくりですがRubyに慣れていない僕にとってはちょうどいい練習問題が参考になりました。

そんなこんなでオブジェクト指向という考えがTDDには欠かせないんだな、と気づき、改めて手元にあるこの本を読んだらなるほどでした。

実践テスト駆動開発 (Object Oriented SELECTION)

新品価格
¥4,536から
(2018/9/23 15:48時点)

まだ全部読みきれてないのであれですがサブタイトルにも、 テストに導かれてオブジェクト指向ソフトウェアを育てる 、とある。 色々納得がいき、自分に今足りないものに気づけました。

TDD練習問題

ちなみに和田さんと安井さんのセミナーでやった練習問題が公開されています(安井さんありがとうございますmm) 正月明けにもう一度自分で取り組んでみたのが下記です。

github.com

順番逆ですが問題はこれです。

gistc906216ab1fdf68a133ba0fbade1a395

お題3までしか解いてないですがはじめて解いた時とだいぶ内容が変わって自分で驚きました。

おわり

以上です。 今年は引き続きTDDに取り組みつつテストコードを書く経験値を増やしていこうと思います。

"継続的インテグレーション入門"をもう一度読んだ

継続的インテグレーション入門

新品価格
¥3,456から
(2017/9/15 07:53時点)

4、5年前に読んだ際には理解仕切れない部分が多く、改めて読み直してみました。
この本自体は入門という位置付けにあり、初版が2009年ということもあるのでその辺りを考慮しながら読み必要があるケースもあるが総じてCIについてこれから学ぼうとする人々にとってこれ以上ない本なんですね、やっと理解できました。オススメしている方が多いのも頷ける。

オススメな読者

たとえば以下のような方にはこの本をオススメできると思います。

  • CIについてとりあえず全容を知りたい、学び始めたいと考えている方
  • すでにCI環境が整った職場で働いているが実はよく理解仕切れていない方
  • 試行錯誤して自動ビルド環境までは整えたがそこから進めない方(もう一度トライするきっかけになるかも?)
  • ソフトウェアの品質を高めたいと考えている方

僕の場合は3つ目の"自動ビルド環境までは・・・"のに当てはまりますね。
iOS、Androidアプリの自動ビルド環境を整えることがプロジェクトに良い影響があると思い導入はしたものの、それ以上は取り組めませんでした。引き続き環境を整えていくことが品質向上にも繋がるとは知りつつもなかなか進まず、心残りだったのが再度この本"継続的インテグレーション入門"を読んだ理由です。

この本で学べないこと

  • 詳細な環境構築、手順
  • Jenkinsについて
  • ユニットテストに関する詳細

などです。
他にもあるかと思いますが、本書ではCIに関する全容を扱っておりより突っ込んだ内容については別の書籍を参考にするよう書かれています。
最近はJenkinsであったりSelenium、そしてユニットテスト関連の書籍も数多く出てますのでむしろちょうどいいように思います。
他の書籍をよく読んではいないのですが、この"継続的インテグレーション入門"で書かれていることが陳腐化しているということはなく、むしろCI全般を丁寧に扱っている本はいまだにこれだけだな、というようなことになるのかと思います。

以上です。

"起業のファイナンス"を読んだ

起業のファイナンス増補改訂版

新品価格
¥2,484から
(2017/8/6 20:31時点)

ちょうど知りたかったことがまとまっていた非常に読みやすい本でしたのでご紹介。

おすすめする読者

こんな方には気づきがあっていい本だと思います。

  • ベンチャー企業で働く方
  • これからベンチャーで働こうかと考えている人
  • ベンチャーに興味がある人

おそらくファイナンス周りの専門の方には易しい内容なのでしょうか? この辺りは専門外なのでさっぱりですが、一部の章は僕にとっては若干難解でした。

事前知識としておそらく株に関する知識があると読みやすいだろうと思います。 (平易な文章で書いてあるので株についてあまり知らなくても読み進めることはできますが感覚的にわかりづらいかもしれません。)

また、これからベンチャー企業で働く、ベンチャー企業に興味がある、という方にもおすすめですね。 とはいえ、興味があるから、とって読むボリュームの本ではないかもしれませんが、気づきのある本ですので何かのきっかけにもなるはずです。

どんなことが書いてあるのか?

なかなか言いにくいのですが、ざっくりいうとベンチャーの生態系について書かれている、というのが個人的な印象です。 もちろんベンチャーのファイナンスについて書かれているのですが、それを語るのにベンチャー企業に関係する様々な話題を取り扱っています。 一つ一つが著者の経験に基づいているようで非常に説得力があります。 これからも何度か読み直すことになるだろう本だなと思います。

以下記事でもおすすめしましたが、逆説のスタートアップ思考もベンチャー界隈の話が書かれていますが、こちらよりファイナンスよりの内容が濃い本、というというとわかりやすいかもしれません。

masayuki5160.hatenablog.com

エンジニアとはいえこういったお金周りのお話は知っておいて損はないと思っています。 ましてベンチャー企業のようなリスキーな環境を選んで働くのであれば尚更その方がいいのではないでしょうか。 すでにチャレンジしている方も、これからチャレンジしようかと考えている方にもおすすめできる素晴らしい本だと思います。

以上です。

プログラミング言語の実装を深く知りたいエンジニアにおすすめ、"Rubyで作るRuby"を読んだ

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

新品価格
¥2,592から
(2017/5/21 20:17時点)

読みました、非常にいい本でした。

個人的に読むのをおすすめする人

特に以下のような方におすすめです。

  • 今までインタプリタ等について学んだことがあるが途中(構文解析あたり)で挫折した人
  • とりあえずプログラミングができるようになったけど、もうそろそろ一皮向けたいな、という人
  • Rubyに興味のある人

インタプリタ等について学ぼうとする人は多くいると思います。 世に出てる言語処理系の本の大半は構文解析についてまず解説が始まると思うんですが、これがなかなか読み辛く、一冊読み終えずにドロップしているのではないでしょうか。かくいう僕もなんどもチャレンジしているものの、しっかり読み終えた本は少ないのが正直なところです。 一方で本書は非常に読みやすく今まで挫折した人にも激しくおすすめできます。

こんな本にもっと早く出会いたかった。

本書をおすすめする理由についてざらっと

おすすめできる理由を羅列するとこんなところ。

  • Rubyコミッタの方が書いた本であり、言語処理系の書籍の中では出版が新しい
  • イラスト付きで理解が進みやすい
  • 構文解析について理解するのは大事だが、本書ではそこを最小限にとどめつつ、インタプリタの実装について全体像を伝えることに注力している
  • ページ数が少なく、なんとか理解できる気がしてくるw(130ページほど)
  • 全体的に文章が読みやすい(これは完全に主観、ですが、言語処理系の本はアカデミックな雰囲気のものも多く、それと比較すると非常に読みやすい)
  • 本書のタイトル通り実装がC or C++でないからプログラム読みやすい

特にすごいと思ったのは、インタプリタの実装の全体をまず読者に伝えようとしているアプローチをとっている点です。構文解析の大切さを説きつつも筆者は下記のように本書の中で述べています。

この本の裏のテーマは、すでにRubyや他言語のプログラミングを知っている方に、「インタプリタの実装」というのはそんなに難しいものではない、ということを伝えることでした

こういうアプローチの言語処理系の本は多分初めてなんじゃないのかな、と思います。

というわけで以上です。Ruby使いもそうでない方も、ぜひ一度手にとってはどうでしょうか、では〜。

Scratch勉強中です、意外に楽しいので大人にもおすすめ。

CoderDojo Japan公式ブック Scratch(スクラッチ)でつくる! たのしむ! プログラミング道場

新品価格
¥2,052から
(2017/5/20 17:36時点)

こちらのテキストを参考にしながらScratchを勉強中です、思っていたより楽しく楽しんでいます。 試しに作ったものは以下です、ぜひ合わせてプログラムも見てみてください。

僕も実際にちゃんとScratchで作ってみたのは初めてでしたが、コードを書くのは簡単でも確かにプログラミングの考え方を要求されることは実感しました。改めてScratchはよくできているなと感動してしまいました。なんとか作品を仕上げようとする中で自然とイベント駆動プログラミングを身につけていくように思います、細かいことは後回しにしてもこれが感覚的に理解できるなら後からまとまった体系的な知識を入れても理解が早いだろうなと思いました。

引き続きScratchを色々検証し楽しみたいと思います。

masayuki5160.hatenablog.com