プログラミングと道具 - エディタ編

1999/9/20

プログラミングの道具

 プログラミングの道具とはどのようなものでしょうか?コンパイラとかビルダ(make)、デバッガ、ソースチェックツール、それらを統合したIDEも道具でしょう。でも一番に思い付くのはおそらくエディタではないでしょうか?今回は道具の中でもこのエディタと、プログラミングの関係について書きます。

エディタの役割

 エディタはプログラムを書くための「ペン」のようなものだと思います(キーボードも含めて「ペン」と言うべきでしょうが)。
 頭の中に浮かんだロジックをソースへと実体化する作業において、これをよどみなく行うためには良い「ペン」が必要です。プログラミングに慣れてくるとこのロジックの実体化という部分がどんどんもどかしくなってくるものです。良いエディタはこのもどかしさを軽減し、プログラミングの効率を大きく向上させてくれます。
 またエディタはいろいろなプログラミング支援機能により、プログラマがプログラミングの本質に集中できるようにしてくれます。逆にエディタの機能が不足している場合にはプログラミングの本質以外の部分でプログラマがいろいろと考えなければならなくなります。
 では具体的に良いエディタについて考えてみましょう。

良いエディタの基本

 基本的な部分としては、

(1)動作が軽快
(2)すばやく(ホームポジションから手を離さずに)カーソルの移動ができる

 あたりが重要でしょう。1文字入力する度に動作がもたついているようでは、とてもスムーズにロジックの実体化などできません。また文字の入力はホームポジションに手を置いて行うことが多いですから、ここからあまり手を動かさずにカーソルの移動も行えるようになっていてほしいです。私は普段Muleを使っていますが、カーソルの移動にはCTRL+F/B/N/Pを使います。これが使えないソフトをたまに使うといらいらしてしまいます。

プログラミング支援機能

 プログラミングに特化したエディタ(Muleもそうですし、VBやDelphiに付属のエディタもそうでしょう)にはプログラミング支援機能が入っています。「支援」といっても機能によってはプログラミングのスタイルすら変えてしまうようなものもあります。
 以下、私が「ありがたい」と思うプログラミング支援機能について述べていきます。
 まずは地味ですが自動インデント機能。改行したときに次のカーソル位置を自動的にインデントした位置にしてくれたり、入力済みの行を前後の関係に応じて自動インデントしてくれたりします。時々おせっかいだと思うこともありますが、入力の早さ、コンパイルより前の段階での文法チェックなど役に立つことの方が多いです。似た機能としてカッコの対応表示機能もあります。
 カラーシンタックス表示機能はその言語の予約語(キーワード;C言語ならifとかwhileとかいろいろ)を例えば赤、コメントを例えば青で表示するといった機能です。この機能の有無はエディタ上でのソースの見易さという点でかなりの差が生じます。また従来ならコメントとプログラムが混ざらないように意識して空行を入れたりしていたのですが、これが不要(色で分けて表示されるので混ざらない)になったりと、プログラミングのスタイルの変化をもたらしまた。
 入力補完機能とは関数や変数名の先頭何文字かを入力すればこれで始まる関数・変数名の候補が出てきたり、クラスインスタンス名を入力すればメソッドやメンバ名が候補として出てきたりするものです。タイプ数を減らす効果もありますが、それよりも関数やクラスの簡単なリファレンスの機能として重宝します。DelphiやVBのエディタではこの機能がかなり充実しています。Muleではダイナミックアブリビエーションという機能があります。これはDelphiやVBのものに比べるとより汎用的な入力補完機能ですがタイプ数は劇的に減ります。Muleを使っていてこの機能を知らなかった方は是非一度使ってみてください(意外と知らない方が多いのです)。病みつきになります。
 関数ジャンプ(タグジャンプ)機能ブラウズ機能はある関数(他のソースにあるものでも)へすばやくジャンプできたり、関数やクラスの構成を表示するブラウザからこれらへジャンプできたりする機能です。このあたりの機能がさらに進めば(すでにかなり進んでいるのかもしれませんが)、ソースファイルの構成などについてプログラマが悩んだりすることはなくなっていくのかもしれません(もちろん関数のソース外への公開・非公開といった点においてはここについては考えなければなりませんが)。
 他にもいろいろありますが、主なものは以上です。
 これとエディタの支援機能ではないのですが、プログラミングスタイルに影響を及ぼすものとしては「エディタの表示行数・桁数」も大きな部分を占めるでしょう。なるべく1画面で多くの処理を見渡したいがために行数を節約するような記述をする、というのは何かエディタ(と画面解像度)にあわせてプログラミングをしているようで本質的ではないように思えます。また「関数は1画面に収まるくらいの大きさに」という教え(?)は人間の記憶力の限界(大きな関数ではその処理の全貌を把握しずらい)を考慮したものでしょうが、こういったこと(単純な、人間の能力的な制限)はエディタ側で何か支援できそうに思えます(具体的な案はまた別の機会に書きます)。

おわりに

 エディタはプログラミングにおいて非常に重要な道具です。これを良いものにすることはプログラミングの効率を向上させることになります。今使っているエディタよりももっと良いエディタがないか探してみると良いでしょう。
 また、こういった道具などによるプログラミングの効率向上がすすめばすすむほど、プログラミングの本質的な部分(プログラム言語・開発環境固有のテクニックではなく、より普遍的な問題)がプログラム開発の効率を大きく左右するようになります。プログラム開発者は、普段からプログラミングにおける「本質」の部分をとらえられるセンスを磨いておくべきでしょう。















脚注:

Mule(Emacs)のダイナミック・アブリビエーション:
 あるバッファで例えば以下のような1行を入力しておきます。

int longLongVariable;

 次にこのバッファ中で"long"と入力した後、M-/(メタキー+スラッシュ)とすると、"longLongVariable"というように補完されます。バッファ中にlongで始まる単語が複数ある場合にはM-/とするたびにこれらが循環して補完されます。
 戻る



メール アイコン
ご意見・ご感想はこちらへ
トップ アイコン
トップへ