ここでは、開発効率を上げる上で重要な要素について
僕が今まで感じてきた事を述べようと思う。
多くの現場では、開発時のローカル環境についてあまり関心を持っていない。
しかし、ここを整備することは開発の効率を上げる上で非常に重要な要素だということを
是非知っておいてほしい。
例えば、僕が以前関わっていたあるプロジェクトでは
Webアプリの開発をwar方式でデプロイする方式で行っていた。
これはリリース時には一般的な手法だが、開発時にこれを行うべきではない。
warファイルは全てを一つにまとめている為、JSP一つを更新しただけで
全てのファイルをデプロイし直すといったような無駄が発生してしまう。
再デプロイに約1分掛かるとすると、JSPを50回修正して確認するだけで
1時間程のタイムロスが発生することになる。
さらに、これによって開発者に掛かるストレスを考慮に入れると
そのロスは倍程度に膨れ上がるだろう。
warを展開した形でデプロイすることによって、JSPの変更は
対象のファイルのみ更新するだけで良いことになる。
これによって掛かる時間はせいぜい3~5秒程度(JSPの複雑さにもよるが)。
先程と比べてどれだけ効率が良いかわかっていただけると思う。
ちなみにJSPではなくVelocityを使えば、その時間はさらに短く0.1秒程度となる。
このように、ローカル環境の整備は開発効率を上げる最も基本的な手段なのだ。
どれだけテストをしても、開発にはバグが発生し
デバッグという作業が必要になることがある。
これをいかにスムーズに行うかというのも、重要な事だ。
デバッグが面倒な現場というのは実際に多い。
その理由として、以下のようなものがある。
これはテストの方法とバグの挙げ方に問題がある。
テスターは、バグが発生したときの事を詳しく、丁寧に知らせなければならない。
ただ「○○がおかしい」などと書いたところで、開発者はそのバグを直そうとはしない。
○○という環境でテストしたところ、××という結果になった。 実際には△△という結果になることが正しいので、その部分を調査し直してほしい。
テスターにも、バグを直すために最善の事をしようとする意識が必要だ。
開発者はそうでなくても疲れているのだから(笑)。
複数に分かれたシステムや、データに依存するバグなどの場合
そのバグを発生させるのに多大な時間を費すことがある。
これを解決する最良の方法は「テストした時と同じ環境でデバッグをする」という事。
しかしそれが出来ない場合が多い。
「テスト環境は皆が使っているので、そこでデバッグをするのが困難」
「テストしたのは1週間ほど前なので、そもそも同じ条件でテストすることが出来ない」
こんな理由があるだろう。
致命的なのは後者の場合。バグを修正するのが後になればなる程、それに掛かる時間は増大する。
理想は、テスターがバグを発見したらその場で開発者に報告することだ。
こうすれば、開発者はおそらく瞬時にバグの原因をつきとめられる。
実際に直すのは後でもいい。原因さえわかれば、開発者はいつでもそのバグを直せるのだから。
これは一番起きてはいけない事態で、これが発生するようならローカル環境の見直しを図るべきだ。
こういったバグが発生してしまうと、開発者はそれを修正しても確認することが出来ず
次回のサーバリリース時にまで問題は持ち越される事となってしまう。
全てのバグは、ローカルで確認・修正できなければならない。
これが出来ないような現場では、テストの自動化など出来るはずも無い。
多くのプロジェクトでは、設定ファイルという外部ファイルを使っている。
これがトラブルの原因になるのだ。
勝手に設定ファイルを追加しておいて、それが無いと動かないという話はよく聞く。
外部ファイルを扱うときは、極めて慎重にならないといけない。
それがいつもあなたの期待する内容とは限らないのだ。
データベースの内容でも同じ。
もし期待と異なる内容が格納されていた場合に
それを適切に「開発者に」教えてあげるメッセージを出力しているだろうか。
ほとんどの現場では、これがなされていない。
そのせいで開発者は苦労し、プログラムを実行することが嫌になってしまうのだ。
そこで、他の開発者やテスターがこういう事態に出くわしたら
すぐに開発者のところに行って直してもらうようにすると良い。
開発者自身が気付いていないという事も往々にしてあるからだ。
設定ファイルを使うときは、必ず「デフォルト値」を設定するようにする。
こうすれば、もしこの設定項目が存在しなくてもエラーにはならず
プログラムは正常に動作する。
設定ファイルはあくまで「カスタマイズ項目」として使い、
それがあることを想定したような作りは避けるべきなのだ。
もしそうせざるを得ないときは、設定ファイルのサンプルとドキュメントを書く。
そうしないと、誰もそのプログラムを使いたいとは思わない。