Subscribed unsubscribe Subscribe Subscribe

SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

過去の自分の仕事に怒り狂う.

life

ここ数日、仕事でツールを作っている。どういうツールかというとURLが嫌ってほど並べられたリストを読み込んでクロールしたり自然言語処理したりして良さげな辞書を生成するというものだ。ざっくりし過ぎて何がなんだかわからないと思うが、重要なことはこのツールを作る過程で僕は自分に対して怒りを隠し切れないということだ。

このツールは何も初めて作るものではない。半年ほど前にあまりにも面倒な作業に嫌気が差してサクッと書いたコードになる。コードの規模的に1000行もない、とても小さなコードだ。今、さらに必要となった機能を二つほど作って、既存のものに取り込もうとしている。そしていざ取り込もうとした時に気付く。あれ、既存のやつ、テスト書いてねぇ、と。

勿論、全くテストを書いてなかったわけではない。しかし、我ながら酷いと思うのが、アサーションとかを一切使わずにprint文で結果出力をターミナルで確認して、returnで「テストok!」と返ってくるようになっていた。アホかと。何がok!なのかと。まだ100歩譲って全てのfunctionに対して挙動の確認をしているのなら良かったが、どう見てもそもそもテストが足りてない。coverageもなにもない。ツール自体、問題なく動くんだけど、この時点でこのツールに対する信頼性は失われた。

そして既存のコードに対するテストを書くところからスタートした。やれやれ、余計な作業増やしやがって、とぼやきながら。しかしテストを書こうとするとなかなかfunctionのまとまりが悪い。何個の機能が一つになってるんだよ、とまた悪態を吐く。そして始まるリファクタリング。テストを機能単位に分けて、それに応じて既存コードにメスを入れていく。
見ていくと大きく二つの動きをするフローがあった。確か引数にtypeを定義して、そのtypeを見て分岐するようにしたんだった。半年前を思い出す。あぁ、こんな制約あったなぁ、と。そもそもこれが一つのclassの中にあることが気持ち悪かったので、super classを作った後に二つのclassに分けてやった。しょっぱい話だが、こんなカプセル化もままならないレベルのコードになっていた。

とまぁこうした過去の自分が残した技術負債に対してリファクタリングを施していると本来やりたかったことがまだ出来ていなかったりする。よくある話だ。この時になって、テストぐらい書いておけば、と後悔してももう遅い。逆にこいつを触るのが再び自分で良かったと思う。他人だったら恨みを買ってたかもしれない。

ここでの学びは、他人や未来の自分がコードを読んだ時に理解出来るように綺麗にしておこうというものだ。当たり前過ぎて肩透かし感があるが、人の恨みを買うわけにはいかない。書き捨てのコードじゃない限り最低限テストは書こう。なんだか最近テスト志向が強過ぎて回し者みたいになっている気がする。
過去の自分の仕事に対して怒りを覚えたのならその分成長したということなのだろうか。今の自分のコードがベストプラクティスではないだろうから、これはずっと続いていくのかもしれない。そうやって人は仕事の中で成長していくのだ。圧倒的成長。

落とし所を間違えた。圧倒的成長で終わると全てがチープに見える。いやまぁ当たり前のことしかこの文章の中には書いていないんだからいいんだけど。最近、どうしたら文章が上手くなるのかと考えている。優れたエンジニアを雇いたいなら文章の上手いやつを雇え、とDHH(Railsの作者)も言ってたしね。最近記事をよく上げるのはその訓練のためだ。こうした訓練を通じて僕らは成長を重ねていくのだろう。圧倒的成長。あ、チープに見える。

Remove all ads