twadaさんとライオン

#TDDBC 長岡に参加してTDDを入門しました

2/9(土)長岡でTDDBC(TDDブートキャンプ)が開催されました。

TDDBC 長岡 2019-02 – connpass

密かに憧れだった、@twadaさんが来るという事実に衝撃が走った。

ということで速攻参加登録しました。

なぜ参加したのか

ぼくはWeb制作会社上がりのフロントエンドエンジニアなわけですが、最近は主にWebアプリ開発の実装をしています。

で、フロントエンドといえど広告系とシステム開発系は全くの別分野です。サッカーとラグビーぐらい畑が違います。

広告系のお仕事は基本的に時間が無いのでわーーっと作って確認して公開って流れが普通でして、テストを書くことはバチクソ稀です。
しかもフロントのテストなんて特に書かない。

そういった業界的事情もあり、ちょっと規模の大きなアプリケーションでテストを書かずに実装を進めると、変更した部分と全然違うところで不具合が出たり、どうにかこうにか動いてる状態に手入れるのツラいわ……状態でにっちもさっちもいかないという。そんなこんなでエンジニアを辞めたくなるときがあるんですね。
テストを書くスタンスの畑で育たなかったおかげでそのつけが回ってきてるわけです。

テスト書かなきゃな、、とは思っててもとにかく腰が重い、、、と思ってたところでTDDBCの情報が! なんと長岡で!
ぼくはこの最大のチャンスを逃すわけにはいかなかったのです。

例のライオン現る

twadaさんとライオン

twadaさんの自己紹介にはあの有名なライオンが……。
いつも見るたびにごめんなさいって気持ちになるやつ。

こいつは「ワイルド・サバンナ」というスタンドらしい。
オフラインで見れて超感動ものです。

終始笑いを誘うtwadaさんのワードセンスがとても印象的でした。

何をしたのか

午前中はtwadaさんの基調講演でTDDとは何なのか、FizzBuzz問題でのTDDデモを見ながらひたすら話を聞きしました。

ざっくり要点をまとめると、

  • 実装者の不安を解消するのがテストである
  • 実装対象の問題を小さく分割する
  • TODOを作成して進める(GitHub Flavored Markdown がおすすめ)
  • 簡単なテストから始める(はじめは設計の目的が強いため。難しいものから始めると挫折する)
  • テストケースは日本語(母国語)がおすすめ
  • 1. テストを失敗させる。(Red)
  • 2. まずはとにかくテストを通す。(Green)
  • 3. リファクタリングはその後。(Refactor)
  • 歩幅を小さくする
  • テスト→仮実装→三角測量→実装
  • テスト→仮実装→実装
  • テスト→明白な実装
  • テストの構造化とリファクタリング
  • describeブロックでグルーピング&構造化する
  • テストが仕様書になるように
  • 全部「テスト駆動開発」に書いてあります。

という感じです。

お昼を挟んで午後、2人1組になってペアプロをしながらお題に沿った実装をTDDでテストを書きながら実践しました。
お題は「軽減税率」ということで、商品から軽減税率を求める実装を行いました。
軽減税率の世界 – gist

ぼくとペアになった方は日頃からテストを書いてるらしく(!)、Jestの使い方を教えてもらいつつ、、どうテストしていくかみたいな観点をリードしてもらいました。
おかげでTDDの実践はスムーズにできていたように思います。

最後は各チームごとに、どんなコードを書いてどんなことを意識したかなどを紹介しながら全員にコードレビューをしてもらい、twadaさんからもアドバイスをいただきました。

当日のコードはこちら。
https://github.com/yuhiisk/20190209-TDDBC/tree/master/lib

テストの書き方も人それぞれで、奥の深さを感じました。
最高に有益&楽しかったです。

感想

これまでにテストを書く習慣を身につけようとしましたが、テストを書く意味を理解できなかったり、そもそもこれで書き方合ってるのかとか、結局書くの面倒だなとかで導入のハードルがかなり高く感じて断念してました。
でもこういったイベントでテストの重要性を理解して手を動かすと、「あ、テストってこういうことか」と気づくことができて、テスト君とかなり友達になれた気がします。
「まずテストに触れてみる」というきっかけにはとても良いイベントだと思いました。

反省点としては、テストフレームワークのAPIを事前にもっと調べておくべきでした。
1年前にちょこっと書いてたので、行く前にざっと公式リファレンス読んでおけば大丈夫かな〜と思っていたのが間違いでした。。
Jestであればdescribe, test(it), assert文などはある程度自分で書いてみて、使い方を理解しておくことは重要です。

あと、ペアプロ中にTAの方から「この商品データにはIDはないの?」と聞かれ、「え、それって要らなくね?お題の本質的な話じゃなくね?」とペアで不安に駆られ、要らない思考をしてしまったのが少し残念でした。
別に言わなくても良かったんじゃないすかね、それは。

最後に

今回のTDDBCではとても有意義な時間を過ごすことができました。
2週間くらい経ってしまいましたが、未だテストを書く気満々です!

TDDBCが気になるそこのあなた。全国で開催されているのでぜひ参加してください。
http://devtesting.jp/tddbc/

(次は上越でやったら面白いかもしれないですね???)

twadaさん、主催の高野さん、スタッフの皆さんお疲れ様でした。

参考書籍

twadaさんが最後に紹介していたTDD・テストに関する参考書籍です。紹介されていたもの全てではないですが、自分用のメモ書きとして。

twadaさん翻訳の名著「テスト駆動開発」。イベント後に速攻でポチりました。

created by Rinker
¥3,024 (2019/09/21 20:42:56時点 Amazon調べ-詳細)

 

こちらはテストの範囲について書かれた2つ。
どこまで書けばいいのかわからなかったので、次のステップとして読みたい。

 

テストのないレガシーなプロジェクトにどうテストを持ち込むかを戦略的に紹介している書籍。
ぼくが今一番必要としているトピック。

 

こちらはどちらかというと戦術的な内容だそう。

 

最後にモダンなテスト駆動開発手法に書かれた1冊。

フロントエンドエンジニア/面白法人カヤックなどのWeb制作会社に勤務したのち、故郷の新潟に戻り独立。JSフレームワークAngularやFirebase、Google Cloud Platformを使ったWebアプリ開発が得意。 また、Udemyのプログラミング解説の講師、writer-app.comの自主開発や上越TechMeetupの主催などを行っています。