【44】IDE を知る

ハインツ・カブーズ(Heinz Kabutz)

 1980 年代に「プログラミング環境」と言えば、ほとんどのプログラマにとって、あの素晴らしき「テキストエディタ」だけでした。どれほど恵まれているプログラマでも同じ状況でした。最近では当たり前の機能のように思われているシンタックスハイライトですら贅沢で、誰もが使えるというわけではありませんでした。コードをきれいにフォーマットする機能は外部ツールになっていたので、プログラマが逐一実行する必要がありました。コードを 1 ステップずつ実行するデバッガもやはり外部ツールで、使う際には、暗号のようなコマンドをたくさん打ち込まねばならなかったのです。

 1990 年代になると、プログラミング用のツールを売れば大きな利益につながるということを企業が認識し始めました。それで生まれたのがいわゆる IDE(Integrated Development Environment:統合開発環境)です。これは簡単に言えば、従来から広く使われていたテキストエディタに、コンパイラ、デバッガ、コードフォーマッタなどのツールの機能を組み込んだようなものです。また IDE が生まれる頃には、マウスやメニューを使う GUI が一般化していたので、暗号のようなコマンドを覚える必要もなくなりました。マウスを使ってメニューを選べば操作できるようになったのです。

 21 世紀には、IDE は当たり前の存在になり、他の分野でのマーケットシェアを獲得するために IDE を無料配布する企業も増えました。最新の IDE は、驚くほど機能が豊富です。私が気に入っているのは、自動リファクタリング機能、中でも「メソッドの抽出」という機能です。これはメソッド中の一部のコードを選ぶと、その部分を新たなメソッドとして切り出してくれる機能です。どういうパラメータを渡すべきかもすべてツールが自動的に判断してくれるので、非常に簡単にコード編集を行うことができます。私が使っている IDE には、新たに作ったメソッドで置換可能な箇所が既存コードの中にないか探す機能もあります。もし見つかれば、置換するか否かをこちらに尋ねてくれます。

 最新の IDE には、社内のコーディング規約を強制的に守らせる機能もあります。たとえば Java の場合「すべてのパラメータを final 宣言すること」というルールが定められている企業もあります。この種のルールを守るのはかなり大変で、私は個人的に時間の無駄ではないか、とも思います。IDE にルールの強制機能があれば事情は変わってきます。あらかじめ「こういうルールがある」と設定しておけば、常に気をつけている必要はなくなるからです。もし final 宣言していないパラメータがあれば、警告を出してくれるでしょう。この機能はバグの検出にも役立ちます。たとえばオートボクシングされたオブジェクトの比較に“==”を使用している箇所の自動検出などは有効でしょう。プリミティブ型の値がラッパークラスにオートボクシングされた場合、“==”を使うと、値が同一かではなくインスタンスが同ーかが比較されてしまうため、バグの可能性が高いのです。

 幸か不幸か、今や IDE は使うのに訓練や学習をほとんど必要としないものになっています。私がはじめて UNIX マシンで C のプログラミングをした時は、vi エディタを使う必要があり、その使い方を習得するのにかなりの時間を要しました。vi エディタの学習曲線は、かなりの急勾配と言えるでしょう。いったんコツがわかると急激に理解が進むのですが、最初の段階では非常に苦労をするのです。しかし苦労して身につけた技術は、その後ずっと役立ってくれているので、苦労は十分報われたと言えます。実際この原稿を書くのにも vi を使っています。反対に IDE の学習曲線は非常に緩やかです。苦労せずに使い始められるのですが、その後はなかなか上達しないことが多いのです。長い間、基本的な使い方しか知らないという状態が続いてしまいます。

 私は新しい IDE について学ぶ時は最初にキーボードショートカットを覚えるようにしています。たとえば、コーディング中、変数をインライン化する必要が生じたとします。もちろんメニュー操作でそれはできるのですが、キーボードから手を離してマウスを持つと、それで思考の流れが中断してしまいます。Ctrl+Shift+I というショートカットを覚えていれば、マウスを使う必要がなく、思考の流れを中断せずに作業が進められます。マウスをずっと使っていれば、ショートカットを覚える必要もなく楽ですが、集中力が何度も途切れる分、生産性は低下してしまいます。同様のことはタッチタイピングにも言えます。タッチタイピングは習得するのに時間もかかり、最初は大変ですが、習得することで得られる利益の大きさを考えれば、最初の苦労は何でもないでしょう。

 最後に、私たちプログラマには UNIX があります。UNIX には、習得は容易ではないが、一度習得してしまえばコーディング作業の効率化に非常に役立つツールが多数あります。たとえば、コードレビューで「システム中に同じ名前のクラスが多数あるらしい」と気づいたとします。その場合、実際に同じ名前のクラスがどのくらいあるかは、次のように findsedsortuniqgrep といったツールを使えば簡単に確認できます。

find . -name "*.java" | sed 's/.*\///' | sort | uniq -c | grep -v "^*1" | sort -r

 家に修理に来る配管工はブロートーチ(簡易型溶接機)という専門の道具を当然使えるはずです。IDE は今やプログラマにとってのブロートーチかもしれません。今後は、IDE をどう使えば生産性を上げられるか、時間をかけて学んでいくべきでしょう。