42-コマンドラインツールを使う

プログラマが知るべき97のこと」の42個目のエピソードは、コマンドラインツールとIDEに関する話です。コマンドラインツールとIDEテキストエディタIDEといったテーマに関しては、時には宗教戦争となる危険なネタとして知られています。結局の所は好みの問題と言えるのですが*1、お互いにメリット/デメリットを主張しているに過ぎません*2。自分はIDE派ですが、コマンドラインツールを覚えることが重要であるという、このエピソードの主張には全面的に同意します。
自分の得意とするJavaIDEが特に高度に発達した言語です。また、高機能なIDEのほとんどが無償で利用することができる特殊な言語と言えます。今、Eclipse無しでJavaの開発は考えられません。NetBeansなど他の高機能なIDEも存在しますが、Eclipseを使いこなした上で選択していたり、幾つかのEclipseの得意としない分野*3について使い分けをしているJavaプログラマが多いと思われます。静的型付の強い言語であるJavaIDEとの相性は抜群です。Eclipseのクイックフィックスに代表される「もしかして?」の機能を使いこなすと、IDEと対話するようなプログラミングが可能になります。プログラマはある程度のヒントをIDEに与えれば、自動的にかつ正確なコードを提案してくれるのです。また、Eclipseがサポートしてくれるおかげで、Javaは冗長な構文を味方に付けていると言えます。このような背景からEclipseJavaの一部と考える人も多くいます*4
しかし、IDEは非常に有用ですが、このエピソードで語られるように、裏側で何が行われているのかを知る必要がないことが最大の問題です。IDEコマンドラインツールなどで行っているような処理を、ボタンやコンテキストメニューから簡単に実行するためのツールです。それがエディタなどと統合されて今の形があります。したがって、IDEを使っているという点とコマンドラインツールを使えるかという点は直接の関係はありません。ところが、IDEからJavaを学び初めそのまま何年もたった人にはjavacの使い方すら知らない人は多くいます。職場環境や学習意欲の問題といえばそれまでですが、コマンドラインツールを使えなければまともにプログラミングが出来なかった頃には考えられなかった問題でしょう。それが、嫌IDE派がIDEを嫌う理由の1つだと思います。
勉強会やセミナーなどでプロのJavaプログラマEclipseを使ってデモを行うと、Javaプログラマだけでなく普段はテキストエディタを使っているような層からも驚愕される場面があります。「えっ?何したの?」という具合に冗長で長いJavaのコードが生成されていく様子は、EclipseJavaの持つ不思議なコラボレーションです。しかし、高度な補完を行う背景にはリファクタリングのノウハウがあります。リファクタリングのスキルがあるからこそ魔法のように使っているように見えるのであり、単にツールのメニューを選択しているわけではないのです。
IDE派の人は「俺はコマンドラインツールも使えるけど、もっと効率的にコードを書くためにIDEもフル活用しているんだよ」と言えるようになりましょう。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

*1:噛みつかないでくださいね

*2:白熱すると相手の好みの批判となります

*3:SwingのGUIエディタなど

*4:Javaは、Java言語、API、Runtime(VM)に加え、Eclipse(IDE)で構成される