Cotton Bolls: 開発環境としてのMake
« オブジェクト生成のUniform Access | トップページ | トートロジーのアンチパターン »
2004.02.22
開発環境としてのMake
ワークフローを無視したシステムは使いにくい.いくらデータモデルがしっかりして見栄えがよくても,ユーザが行う作業に合ってないのは良くないシステムだといえる.これは業務システムだけでなく,プログラマの開発環境にも当てはまることだ.
例えばXPlannerというツールがある.XPのストーリー管理を行うツールだ.ストーリー管理はXPの重要項目の一つなので,毎回新しいプロジェクトが始まるたびにXPlannerの導入を検討する.だが,いつも少し使うだけでやめてしまう.確かに見栄えはいいのだが,ストーリーの編集,見積もりと実工数の入力,どれも自分のスタイルに合っていない.XPlannerが想定しているワークフローと自分が普段行っているワークフローが違うのだ.だから,ストーリーの管理にはいつも自前のツールを使っている.
IDEについても同じことがいえる.もっとも,プログラマが行う作業(ビルド,実行,テスト等)はそんなに変わらないため,それほどXPlannerのような使いにくさはない.しかし,開発作業にはプロジェクト特有のものも含まれている.そういったものをどんどんカスタマイズして開発環境を改善していきたい.だが,IDEの仕組みによってはカスタマイズの余地がなかったり,あったとしてもプラグインの作成などかなりの労力が必要だったりする.
一方,Makeは自由にカスタマイズ可能な開発環境が構築できるツールだ.必要に応じてMakefileにターゲットを追加していくだけでどんどん使いやすくなる.コマンドラインで動くツールがあれば,それらを組み合わせてよりいっそう便利な環境に育てていける.つまり,自分のワークフローに合うように作業を自動化し,開発スピードを上げていくことができるのだ.
例えば,あるファイルサーバに置いてある仕様書(Excelファイル)を見ながら開発する必要があったとしよう.このとき,別のSEがいて,もっぱらこのExcelファイルを編集して仕様書を作成していたとする.ファイルをそのまま開いてしまうと仕様書を編集しているSEが保存できなくなるので,このファイルを一旦ローカルにコピーして開くか,そのファイルを読み取り専用で開かなければならない.こういう場合,MakefileにExcelを読み取り専用で開くコマンドを書く.ターゲット名はview-specにしておこう:
view-xls = ruby -e"\ require 'win32ole';\ excel=WIN32OLE.new('Excel.Application');\ excel.visible=true;\ excel.workbooks.open('$(1)',{'ReadOnly'=>true})" spec-xls = \\server\share\仕様書.xls view-spec: $(call view-xls,$(spec-xls))
view-xlsは,RubyのWin32OLEを使ったExcelファイルを読み取り専用で開くファンクションの定義だ.$(call view-xls,[Excelファイル名])でファイルをオープンできる.こうしておけば,
$ make view-spec
とするだけで仕様書を見ることが可能だ.わざわざ共有フォルダにあるファイルをコピーし,マウスをダブルクリックして開く必要はない.
さて,IDEを使っている人はMakeのターゲットをIDEのメニューコマンドと考えればわかりやすいと思う.ビルド,リビルド,テストなど,プロジェクトメニューあるコマンドは,
$ make build $ make rebuild $ make test
というターゲットが対応する.また,IDEでは編集中のファイルに対するコマンドもある.こういうコマンドに対応するのがサフィックスルールだ.例えば,Foo.javaを実行したい場合,Makefileに
%.run:build java $*
と書いておけば,
$ make Foo.run
とするだけで実行してくれる(もっとも,Fooすら入力が面倒なのでEmacs-lispでmake Foo.runと展開するコマンドを作ることも多いが).
このように,Makefileは自分に合ったメニューコマンドをどんどん定義していくようなものだ.IDEに比べて不便なのは,複数ディレクトリにわたるプロジェクトの扱いが面倒なことと,メニュー一覧を出すことができないことだろう.しかし,コマンドラインで実行できるツールがあればなんでもできるのはすごく便利だ.
Javaの開発だけならEclipseの方がいいだろうが,Makeを使いこなせればどんな言語でも対応できてしまうし,ビルド前にコードジェネレータをはさんだり自由自在だ.Antはソフトウェアのデプロイやパッケージングには適しているかもしれないが,開発環境としての視点が抜けている.だから日々の開発にAntは使えない.僕にとって,Makeはこれからもずっと手放せられないツールになるだろう.
08:40 PM in Make | 固定リンク
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/221437
この記事へのトラックバック一覧です: 開発環境としてのMake: