PHPというかWebシステムの開発で、大きな部分を占める作業/操作を考えると、IDEよりEmacsのほうがいいんじゃないかという話。
開発環境というのは開発中に行う作業の手助けなり軽減なりをするものだと思っているので、自分なりに開発中に何をしているのかを考えてみた。
1:文字列検索
定義場所がどうとかそんなレベルじゃなくて、1つのファイル内で「あの処理の修正」とか「あの変数の確認」とか。
文字列検索は文字列操作と同じレベルで容易にできるべきもので、それができない開発環境は思考を妨げていると思ってしまう。
文字列操作->文字列検索->文字列操作で、キーボードから手が離れるとかもってのほか。
EmacsはCtrl+sで即インクリメンタルサーチに入れる。基本。
occurやmoccurやgrepや、それらのanythingインターフェースもある。
2:ファイル検索
ファイルが一覧で表示されていることが重要なのではなくて、目的のファイルをすぐに開けることが重要だと思う。
確かにファイル一覧があると「開発しているなー」みたいな気分にはなるけれども。
20ファイル並ぶなかで目的のファイルを目で探すよりも、100ファイルあろうが1000ファイルあろうが目的のファイルを容易に検索/開くことができたほうがよっぽど効率がいい。
ファイル検索で、キーボードから手が離れるとか(ry
Emacsは単純にシェルのような補完もできるし、anything-find-project-resorces.elとかanything-project.elなんかでプロジェクト内ソースを一気に検索も可能。
3:コピーペースト
「同じ処理をガシガシコピペする」なんてことではなくて。
処理を入れ替えるだけでもカットしてペーストする。そのときにたった1つしかコピーの履歴をもてないことに疑問を持つべき。
PowerPointですらクリップボードの履歴を持つ。
コピーしたりカットした結果が履歴に残る機能があるだけで、「今コピーされているものが何か」を考えなくて済む。
とりあえずコピー/カットして、履歴から必要なものをペーストすればいい。操作をundoできることの安心感と一緒。
Emacsにはkill-ringがある。
4:文字列補完
ソースコードを書くときに文字列入力をできるだけ減らせれば、思考に入力が追いつく。typoも減らせる。
文字列補完はやはりIDEのインテリジェンスなところが目立つ。構文解釈をしていろんな情報を付加して出すとか。
でも、毎度毎度同じようなメソッドの補完が欲しいのかというとそうではない。
単純な略語補完だったり、そもそも補完してほしくなかったり。そこの操作もカスタマイズできて初めて思考を助ける機能になると思う。
それに補完候補を出すために処理に時間がかかっていては本末転倒。
結論
自分はよく「anything.elすげー」とか「auto-complete.elすげー」とかいろいろ騒いでいたりするのだけれども、それ以前の問題としてWebシステム開発にはEmacsとかVimのほうがいいんじゃないかと思ってきたということ。
とはいえ結局慣れなんだとは思う。IDEで多くをこなす人も近くにいるし。マウス操作が半端じゃない。
あと「考える時間が大半なんだから、開発環境よりも思考時間を短縮できることを考えたほうが効率がいい」という凄腕プログラマの発言にも納得できる。
とは思うんだけれども、「id:k1LoWは変態だからEmacsを使ってる」みたいな思考停止発言をされると「お前は自分が最も使う時間が長いであろう開発環境を見直したことがあるのか」と言いたい。
んでもって「おまえこそEmacsで思考停止だ」とばかりにIDEがWebシステム開発において優れている部分をガンガン知らしめて欲しい。