自分が理想とする開発環境

自分は以前から、開発者にとっていい環境とはなんだろうかな、と考えていました。
自分が思うに、開発者が好きなIDEを使い、危険なコードは極力ツール類で検出し、ビルドはコマンド一発できて、CIサーバによってビルドが壊れた状態などをいち早く認知する、
そうすることで、開発者は「関心ごとの分離」*1ができるんじゃないかなと思っています。
あと、自動化できることは自動化で、ということもやることで、同じ労力をかけても質と量ともに高くなるのではと思っています。
自分としては「レバレッジを利かせる」という表現がしっくりきています。


それで、そういうことができそうな理想とする開発環境、ということ考えてみました。
以前から漠然と思っていたり、こうなるといいんじゃないかなと思っていることを、まとめてみます。
一応、それなりの規模のJavaのプロダクトである、という前提です。

  1. SCM*2
  2. ITS(BTS
  3. CI
  4. コミット後、即座にCIサーバがビルドを行い、結果をレポート
  5. 多種多様な静的解析ツール
  6. メモリリーリークやデットロック検出機構とテストフレームワーク
  7. プロファイリングツール
  8. GUIのテストフレームワーク
  9. 仮想化による迅速なテスト環境構築と、CIサーバの並列ビルド、複数環境ビルド
  10. IDEは開発者が好きなものをできれば選択できるように
  11. ビルドはコマンド一発で*3
  12. ビルドツールはIDEの対応があるもので*4
  13. IDE用のメタファイルはビルドツールが管理*5
  14. 個人が使うタスク管理ツール*6
  15. 各ツールの連携が上手く取れていること、もしくは連携できる別のツールがある*7
  16. 開発者による各種ツール開発、ツールのプラグイン開発



取り止めが無いですが、今のところ思いつく理想です。
理想は理想として現実は直視する必要はありますが、こういったことを目指して行きたいと思います。
とりあえず、目下SubversionやHudsonの導入を行っていこうとしてます。
道のりは長く実現できないものも出てくると思いますが、最終ゴールを明確にし直近のゴールを立てていこうと思います。


千里の道も一歩から

*1:あれもこれも考えている状態は生産性が落ちるので、今やるべきことのみ考えるようにする

*2:最低でもトランザクション機能があるもの

*3:id:daisuke_mはスマートビルドと表現している

*4:今だと、Maven2NetbeansEclipseプラグインで、IDEAが標準で対応している

*5:Maven2で「mvn eclipse:eclise」で.projectや.classpathが生成される、ようなこと

*6:例えばTugboat.GTDなど

*7:wikiリポジトリブラウザなど