第2回 WEwLC 読書会

Working Effectively with Legacy Code という本がある。
"Legacy Code" とは、この本では「テストコードが書かれていないコード」という定義だ。定義を聞いただけでなぜかもの悲しい気持ちになれる言葉というのもなかなかあるまい。*1


この本は、(他の人が書いたのか自分で書いたのかはおいといて)"Legacy Code" が目の前にあって、それに機能を追加しないといけない人のために、許される時間や対象コードのタイプなどに応じてどのような手法がありうるのかをカタログ化して列挙してくれている。
カタログといっても「手法のアルファベット順に列挙」のような血の通ってなさそうな代物ではなく、各章のタイトルは "I Need to Make a Change. What Methods Shoud I Test?" とか "I Need to Make a Change, but I Don't Know What Tests to Write" とか "I Don't Understand the Code Well Enough to Change It" とか "This Class Is Too Big and I Don't Want It to Get Any Bigger" とかとか、開発者なら誰しも思わず「呼んだ?」と振り向いてしまいそうなものになっている。他にもどんな章題があるか見たければ、このページの "Table of Contents" で目次と Preface が拝める。
id:t-wada さんによると著者はバリバリの Unit Test 原理主義者らしいのだが、そういう尖った人にありがちな一般人置いてけぼり感もなく、紹介されている手法はおおむね現実的であり、かつ今困っている現場の人達を応援したいというメッセージが全体に溢れているので、読んでいて「それでうまく行くくらいなら苦労はねーよ」的な不快感に晒されることはまずない。
そうは言っても銀の弾丸は無いので( "We Feel Overwhelmed. It Isn't Going to Get Any Better" という名前の章が一章まるまる使って「がんばれ!」と書いてあることからもそれがわかる)、この本で全てが解決するなんて夢を見ることは当然できないわけだが。


自分のことを翻ってみると、実のところテストはとても苦手だ。
unit test や TDD の価値は大いに承知しているにもかかわらず、いざとなると最初にテストから書き始めるなんてできた試しがない。
仕方なく後付けでテストを書くわけだが、テストコードをとても書きにくいコードになってしまっていて……
いきなり test first までいかなくてもいいから、せめてテストコードが書きやすいコードを書ける体になりたいと常々思っていた。


で、この本を読めば、とりあえずテストが書きにくいコードと書きやすいコードの境目が見えてくるんじゃないかという期待をしており、7/5 にサイボウズ・ラボにて開かれた読書会にも今回初めて参加してみた。
第一回から参加したかったのだが、たまたまその時忙しかったことに加えて、ぶっちゃけ、ちょっと会場が遠いなあ、と(苦笑)。
というわけで第二回は自分の会社を会場提供することで、読書会を手近に呼び寄せるというメソッドを駆使して参加してみたわけだ。前回の場所の方が良かったのにという人ごめんなさい(笑)。


てな感じで読書会の記事のはずだったのに書評のようになってしまった。これ以上紙数を稼ぐのもなんなので、読書会の模様は他の参加者の方の記事に任せるとして、一点だけ。


どうしたら TDD で開発できるようになりますか? と id:t-wada さんにストレートに尋ねてみたところ、やりたいことに対して実装がすぐに頭に浮かぶ人には TDD は向いていないとの答えが。
むむ、たまにいる「息をするようにコードを書く人」とかは TDD 全然駄目ってことかー。
自分はさすがにそこまでの境地に達しているわけではないが、プログラムは第二母国語だと思いこんでいるので、TDD に向かない人に分類されてしまうのだろうなあ。残念?
やはり当初のもくろみ通り、テストが書きにくいコードと書きやすいコードの境目を見極めていくしか無さそうだ……


次回以降も特に都合が悪くならない限り参加&会場提供(サイボウズ・ラボ)するつもりなので、ご興味のある方は是非ご参加あれ。

他の参加者の方達のレポート


懇親会では一部の人がうっかり油断して MS 好き好き光線(Vista除く)を乱射していたようだ。また、さすがテストコードに想いを寄せる徒の集いだけあって、id:t-wada さんもいた片方のテーブルでは 4 時間にも及ぶ懇親会の間ずっと ExcelSilverlight についてのライトニングトークが十数本繰り広げられていたんだとか。え? TDD なにそれおいしいの?
まあ、お酒が入っていたことだしみんな細かいところまでは覚えてないだろう。配信されていなくて本当に良かった。


p.s.
Excel は 2000/2003 がいいか、97 で十分か、という話があったが、記憶違いでなければ「選択範囲内で中央」の機能が 2000 からで、これがあるとないではシートをプログラム(VBARuby)で生成する時の手間が大きく変わるし、できあがったシートの扱いやすさも全然違うので、やはり 2000 以降が望ましい。
って、例の MS 好き好き光線出してた人が言ってましたよ。

*1:ちなみに本の序文にも "To me, legacy code is simply code without tests. I've gotten some grief for this definition." と書いてある。