綺麗なコードを書けばドキュメントは不要。というのは100%に限りなく近いレベルであり得ないと思っている。こと業務システムにおいては。

業務周りのドキュメントがないのは本当に厳しいと感じている。コードがどうしようもないのは修正はともかく、どういう実装をしているのかは、まあ追えばわかる。修正はともかく…。しかしながら、なぜそうなってるかについてはどうしてもわからない。これを知るには業務知識が必要になる。もちろん、これはずっと感じていることだが、ここ数日でまたぶり返している。この業務周りの知識問題は自システムで完結しないような、外部と連携するケースでは顕著で、外部のシステムのその仕様も把握しておかないといけない。もちろん、これらも後から追って調べることはできる。できるが、時間がかかりすぎる。

少し前に、はてな社がPHPからScalaに置き換えたときにインタビューの記事を読んだ。その時にこういう(業務知識にかかわらずの)リバースエンジニアリングをはてなでは"考古学"といっているらしい。それを読んだとき私は、すごく優しい言葉だなと思った。

私は人間ができていないので、こういう作業を心穏やかに行うことができない[1]。やっているうちに、だんだんと怒りや失望に近い感情がわいてくる。それは、きっと自分ならドキュメントを残す、残していたという気持ちと、ここに書くことができない個人的な愛憎入り交じる想いが、加わるから…だとおもう。

以前は、ドキュメントは残して当たり前だという、それに疑問を持たなかった。しかしながら、最近は結構な思い上がりではないかと思っている。どこまで残せば「残した」と胸を張って言えるのか。私が残していると思っているレベルは、他の人からすれば、そのレベルに達していないのではないか。正直なところ、チケットレベルではかなり詳細に残しているが、それを正規のドキュメントに落とし込んでいるかというとかなり怪しい。これは言い訳をするといろいろと理由があって、以前の自分はチケットに書いたものをサマライズしてRedmineのWikiに残せばいい。と思っていた。思っていたが、RedmineのWikiはそこそこの規模のドキュメントを書こうとするといろいろと厳しい。あと、自分がMarkdownからHTMLを生成する、いわゆる静的サイトジェネレータの類に慣れ過ぎたこともあって、それらでドキュメントを生成したいと思うことが多い。だが、これはチームで合意が取れてないし、勝手にやっていいかどうかも悩ましい問題ではある。それに、これらはだいたいAlgoliaで全文検索する前提のものが多いので公開できない類のものには向かないとも思っている。ただ、いずれにせよ、リポジトリ含めてしまって、コードの変更と同時にコミットを入れるのが最も良いのではないかと思っている。近いものは近いところに集約した方がいい。

数名にヒアリングを繰り返し、Gitのあやふやなログと、自分の持ちうる業務知識を組み合わせて、当時なぜそれが実装されたかということと、使い方を想像する。が、どこをどうコードを読んでも、動かしてみても、思ったように動かない。再度ヒアリングした結果、私が想定した使い方が誤っていたことがわかった。一通りわかって、やはりこのレベルなら自分ならドキュメントを残した、とまでは言い切れないけど、それができないなら、せめてコードにまともなコメントは残してコミットログもちゃんと書いただろうと思う。機能名も実際の機能と若干乖離しており誤解を招きやすい。(し、現に私がそれで誤解した)

こういうことをやるたびに、ソフトウェア開発が心底しんどいと思う。そして、おそらく大半の開発現場はこういう感じだろう。まだ自分が身を置いている環境は、技術的にも開発スタイル的にも相当良い方だと思う。良い方だと思うので世の大半の現場はもっと厳しいものなのではないか。そして少しのミスで大きな影響を及ぼす可能性もある。繊細で責任重大。良く書いているけど、自分はわざわざこの職種に期待して他職種から入ってくる人の気持ちが全く理解できない。隣の芝生は青いんだろう。きっと。でも、その青い芝は本当にごくわずかにしかないんじゃないかと思う。もしかしたら全くないのかもしれない。でも人は学習できないのでそれを求めてしまう。


最近は仕事が詰まっているので、馬車馬のように働かねばならないと思っている。なによりこういう割り込みのような作業が降ってくる。降ってくるだけならともかく、こういうアンドキュメンティッドなものはすごく調査と対応に時間がかかる。それらを消化するだけでも通常時間内で終わらない。自分の悪いところは、こういう作業を他人に回すのが申し訳ないと思って引き受けてしまうところにあると思う。正直アンドキュメンティッドで自分が実装していないものに関しては程度の差はあれ誰が調査しても同じだと思っている。加えて今日はネットワークおじさん業とパスワードリセットおじさん業にも勤しんだ。こういうことをやっていると重めの長期タスクが消化できない。

生憎自分はこういう場合に残業するというやり方を除いてどうやって作業を処理しきるのかを知らない。知らないので、頑張って残業を試みるが、長らく残業と無縁の環境にいると、残業するというのはなかなかに難しい。ソフトウェア開発は、仕事は、人生は、大変厳しい。おわり。


  1. 心の中でエスパー業やお気持ちお察し業と思いながらやっている ↩︎