炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

三十路からの TDD


どうも アクトインディ Advent Calendar 2015 も 12 日目になりました。本日の担当は namikata です。今日は TDD について記事を書きたいと思います。

皆さんは、仕事とプライベートはきっちりと分けたいタイプですか?僕は、仕事とプライベートはできるだけごちゃ混ぜにしたいタイプで、趣味を仕事に出来たらどんなに幸せだろう、と常々考えています。アクトインディで働くことになったのも、

元々趣味でやってたプログラミングで飯を食べていけるようになりたかった 子どもが生まれてから外出頻度が800%増しになった(家にいる方が子育て大変)

と、プライベートと密接に絡み合った理由からで、日々、どうやったら仕事がもっと楽しくなるだろうか、と考えながら仕事をしています。「楽しく仕事をする」がモットーであるので、長い間付き合っていくプロダクトのコードには我が子のような感情を持ちたいわけです。実子と同じレベルで愛情を注いであげたいと常々思っています。

こんな話が、どうして TDD に関係してくるかというと、僕の場合は、仕事のモチベーションとして、プロダクトのコードをリファクタリングしてブラッシュアップしていくことはとても大切なことの一つになります。書き直したいと思っても、影響が分からなくてそのままずっと放置することは、子どもがグレていくのを黙って見ているのと一緒で、全然楽しくありません。新機能を追加してサービスを成長させていくのはもちろんのこと、日々、仕事を通して、皆さんスキルアップしていくもので、以前書いたコードをリファクリングしたくなることは多々あることだと思います。なんてったって、我が子ですからねヽ(´`)

  1. 楽しく仕事したいです
  2. プロダクトのコードは成長に合わせて常にブラッシュアップ(リファクタリング)していきたいです
  3. TDD チャレンジしてみたいよね

って感じで TDD への興味が湧いた感じになります。プログラム業務未経験だったので、アクトインディでは、約1ヶ月ぐらい研修をさせてもらいました。研修を通して、どのように TDD の思想を学んで、プロジェクトに参加して行ったのかを紹介できればと思います。実践は Rails プロジェクトになります。

TDD チャレンジしてみたいと思っているけど、どう進めたら分からない。といった人に少しでも参考になればいいな、と思っています。

1. TDD をやる意欲を高めよう

まずはテストファーストの大切さを知って TDD にチャレンジする意欲を高めましょう。なんだか TDD と聞くと、えらく難しく感じてしまいますが、まずは難しいと思うことを払拭することが大事だと思います。TDD のチャレンジ意欲を上げるには、和田さんの動画がうってつけだと思います。動画では、難しいことは全然していないので、自分でもやれそう感を味わうことができます。全ての動画に目を通しましょう。

「実演テスト駆動開発」 WEB+DB PRESS Vol.35特集 特設ページ 「実演!リファクタリング」 WEB+DB PRESS Vol.37特集 特設ページ

2. Everyday Rails - RSpecによるRailsテスト入門 を買って、読んで、やる

やれそう感が出てきたら、実際に書いていくのが一番です。そこでオススメなのが、Everyday Rails - RSpecによるRailsテスト入門 です。本のサブタイトルも「テスト駆動開発の習得に向けた実践的アプローチ」となっており、とても分かりやすい内容で、実習も充実しています。

large.png

Everyday Rails - RSpecによるRailsテスト入門

この本を一冊通してやることで、自分でもテスト書き始めていけそう感が非常に高まります。

3. 実際のプロダクトでテストを書く

もうこの段階で、実際のプロダクトのソースに目を通した時に、テストのない Model や Controller を見たら、「なんでテスト書いてないの?」っていうちょっと上から目線で物事を見てしまう汚い大人になっているはずです(自分はまだ戦力にすらなっていないのに)。なんでテスト書いてないの?って思えることは非常に良いことですが、上から目線は直ちに捨てましょう。

Everyday Rails を読了していれば、もう基礎はマスターしているはずです。Everyday Rails 片手に、本番のプロダクトで積極的にテストを書いていきましょう。プロジェクト参加当初は、モデルの役割が分からなかったり、サービスに対しての知識が乏しかったりして、いきなりプログラムを改修するとなると、理解が乏しい分、中々辛い作業になることが多いと思います。テストを書くことから始めれば、テストを書きながらモデルの役割を理解できたり、メソッドの行っていることを把握できたりと、仕様を理解していくことができ、テストをしっかり書くことで、プログラムのメンテナンス性も上がっていくので、プロジェクトにもしっかり貢献することができます。プロジェクトへの参加が浅い方は、まずはテストコードを書きながら、プロダクトに対する理解を深めていくのは、結構いいんじゃないかな、と思います。

実際に TDD を意識してやってみて

テストを書くのは大変な作業ですが、駆け出しプログラマーこそ、まずはテストコードを書く癖を付けることはとてもいい事だと感じました。

  • どのようなテストを書けば良いかを考えることは、どうしたら要件を満たすかを考えることになり、実装したいモデルやメソッドの設計につながっていきます。
  • テストを書いていたのに、考慮が足りずにバグが見つかった時は、なんでテストケースで拾えなかったか、設計の反省材料として振り返ることができます。

何より、テストがあるお陰で積極的にリファクタリングができるので、自分が書いたコードへの愛情もきっと深まっていくはず (-ω-)ヾ(・ω・)

アクトインディでは、テストを書く意識が高い方が多いので、お陰様で、一緒になっていつも楽しく仕事に取り組ませてもらってます。早く戦力になれるように成長しないとですね。