私は「ログ」を書きながらプログラムを作る。ログについて馴染みのない方のために少しサンプルをお見せしよう。以下のログは私がテキストエディタを作成するときに書いていたログの一部である。
1992-XX-XX 検索機能を導入した。ファンクションキーも使えるようになった。(Version 0.35)1992-XX-XX 漢字が混在しているときの検索にバグあり。文字列比較関数 samestr を修正。(Version 0.36)
1993-XX-XX ファイルの書き込みが遅いので fast.c 修正。バッファサイズを変更。(Version 0.37)
1993-XX-XX 検索の修正と同じ修正を置換にも適用する。アルゴリズム悪い。要最適化。(Version 0.38)
私がプログラムを開発しているときのログはだいたい上記のような感じで進んでいく。その日の日付、問題となっているバグ、修正箇所、検討事項などが記入される。時にはファイル名や関数名などの修正の詳細情報も記入されることがある。また、将来行いたいと考えている修正の覚え書きも書くことがある。
プログラムの開発は、短くて二週間、長くて数ヶ月から数年に渡るものであるから、このような日誌(ログ)はとても貴重な記録となる。私が趣味で作っているテキストエディタのログは初めのエントリが 1992-05-09 となっているから一年以上前だし、ものによっては3年前から書きはじめているログもある。
ソフトのバグ取りに疲れたとき、ログを読みかえすのはとても楽しく、また生産的な作業である。例えば、ある機能を便利だと思ってソフトに付け加え、しばらくたってそれを削除し、後になって(すっかりそのいきさつを忘れて)再び付け加えていたりする。それだけ私の記憶なんてあてにならないという証拠である。
* * *
ログというのはもともと「航海日誌」のことである。船長が、自分の船の現在位置、進む方向、船の状態などを記録する日誌のことである。
プログラムを開発していくという作業も、航海のようなものである。現在どこまで開発できたか、これからどういう順番で何を開発していくのか、現在のプログラムの状態はどうか、開発ツールで不都合は生じていないか、開発スタッフの技量は十分か…そういったことを一歩一歩確認しつつ進まなくてはならない。そのための航海日誌が役に立つのは当然のことと言える。
ログに書くのは必ずしもはっきりしたことばかりとは限らない。むしろ現時点でよくわからない項目について書いた方が重要なこともある。常に未知の要因(unknown factors)というものは存在する。それこそログに記録すべきことである。後にその未知の要因が解決したときに、それがいつ発生したかという履歴となるからだ。
長年のログが蓄積されてくると、それは単なる作業記録を越えて自分発見の手がかりとなってくる。自分の習慣、陥りやすいパターン、自分の良い点・悪い点、…それらに光が当てられてくるのである。
* * *
ログはあなたの航海日誌である。もしあなたの船が宝島にたどりつけないとしても、あなたの書いたログ自身があなたの貴重な宝物になってくれるに違いない。
* * *
自分もログを書いてみようかと思ったあなたへの参考書を紹介しよう。 『スーパーエンジニアへの道』(G.M.ワインバーグ著、木村泉訳、共立出版)である。 この第七章「自分自身への気づきを高める法」が日誌についてとても啓発的な内容となっている。ご一読を強く勧める。
それからログの実例として、クヌース博士が自動組版システム TeX を作ったときの全ログが次の本に収録されている。 "Literate Programming" (Donald E.Knuth, 1992, CSLI) (和訳) 『文芸的プログラミング』である。この本の11章 "The Error Log of TeX(1978-1991)" はまるまる TeX82 を開発したときのログに充てられている。
(Oh!PC、1995年5月15日)