プログラマの主な仕事は、テキストエディットです。
いきなり断定からはじまりましたが、これは事実です。
プログラマの仕事は、テキストエディット以外にもいろいろあります。
ソフトウェア開発は、とても複雑な作業です。
見積、スケジューリング、進捗管理、要件定義、基本設計、詳細設計、テスト計画、単体テスト、結合テスト、統合テスト … etc。
やるべきことは、嫌になるほどあります。
それでもなお、いやしくもプログラマであるのなら、中心となるアクティビティはやはりコーディングです。
他のすべての作業は、コーディングに十分な時間がとれるように計画し、うまくコーディングできるように準備し、意図通りにコーディングできたかを確認するためのものです。
すべては、コーディングを中心に回っているのです。
まあ、少なくとも本来は。
コーディングという作業は、テキストエディットに他なりません。
プログラマにとって、テキストエディタは画家の筆であり、彫刻家のノミ、写真家のカメラです。
ですから、自分自身に合ったエディタを探すことと習熟することは、生産性や品質に大きく影響します。
今回は、このコーディングのための必須ツールである、エディタのハナシです。
僕のエディタ遍歴
Emacs
僕の場合、結局 Emacs に辿り着きました。
Emacs は、Emacs Lisp というフルスペックのプログラミング言語を備えていて、これによって非常に高度な拡張が可能になっています。
Emacs 本体も、大部分が Emacs Lisp で実装されています。
このような自己記述的なあり方は、Eclipse などとも共通しますね。
非常に歴史のあるエディタなので、プラグインもかなり充実しています。
そして、これが大事なところなんですが、大昔からあるエディタだからこそ、完全にキーボードだけで操作できます。
手をホームポジションからほとんど動かすことがないため、テキストエディットが高速になり、気が散る機会が減ります。
途中で右手をキーボードから離して、マウスをチラ見して握り、またキーボードに戻って、ホームポジションを指先の感触でさぐるなんていう動作を今までいったい何回繰り返したでしょうか。
そのたびに、視線がディスプレイを離れ、一瞬集中が弱まってしまいます。
一生のうち、トイレで過ごす時間とマウスをまさぐるのに費やす時間の、どっちが多いでしょう。
というカンジで、僕はテキストエディットに関しては、できるだけマウス使わない派です。
Textastic
iPhone、およびiPadでは、それぞれ Textastic Code Editor for iPhone と Textastic Code Editor for iPad - Alexander Blach を使っています。 残念ながら iPhone を使うのをやめたので、現在は Textastic も使ってません。
80以上の言語でシンタックスハイライティングが可能で、Groovy にも対応しています。
また、フリックを使ってほとんどの記号をキーボード切り替えなしで入力することができる拡張キーや、カーソル移動を細かく制御できるナビゲーションホイールなど、コード入力を快適にする工夫がいろいろ cool です。
jEdit
Emacs の前は、jEdit (Macのみで動作する同名の国産エディタがありますが、それじゃないです) を使ってました。
jEdit は、個性的で素晴らしいエディタです。
Java で実装されていて、MAC、Unix、Windows、 OS/2、および VMS で動作します。
現時点で 200 以上のプログラミング言語をサポートしているので、たいていの場面で困ることはないでしょう。
BeanShell という、Java とよく似たシンタックスのスクリプトを採用していて、マクロ機能も強力です。
豊富なカスタマイズオプションと、プラグインマネジメントシステムを備えていて、非常に多くのプラグインが提供されています。
FTP プラグインを使えば、リモートホスト上のファイルを直接編集することもできます。
ただし、今のところ Markdown のサポートは、貧弱と言わざるをえません。
HTML にレンダリングした結果をエディタ内、またはブラウザを起動してプレビューするプラグインがありますが、編集中のテキストをリアルタイムにハイライトしたり、リンクを機能させたりすることはできないようです。
それと、jEdit もかなりの部分をキーボードだけで操作することができるんですが、そのための設定にちょっと時間がかかり過ぎるかんじがします。
また、キーボードで操作できないプラグインも多いので、完全にキーボードオンリーにはなりません。
秀丸エディタ
ずっと昔は、秀丸エディタを使っていたこともあります。
秀丸エディタは、動作が軽快なのが、最大の魅力です。
こちらもまあまあのマクロ機能を備えていますが、Emacs や jEdit のマクロ言語と比べると、いささか見劣りがします。
プラグインシステムはありません。
サポートサイトで、サードパーティ製のシンタックスハイライティングの定義ファイルやマクロのリストを公開していますが、整理なしで羅列されているので、同じことを目的とするものが複数登録されていることがよくあったりして、目的のものを探すのが面倒です。
その他のエディタ
Emacs にたどり着く前には、ターミナルでアクセスしなければならないリモートの Unix 系の環境では、Vim を使っていたこともあります。
当時の僕にとっては、ただ直感的でないだけで、GUI の使えない環境でやむをえず使う代替物でしかありませんでした。
初心者にとっては、本当のパワーよりも直感的であることのほうが魅力的なものです。
たどり着いた先がたまたま Emacs でなかったとしたら、おそらく Vim を使っていたでしょう。
やむをえず使ったといえば、インストールが制限されていて、他に選択肢がないときにさくらエディタを使ったこともあります。
が、そのまま使い続けたくなるような魅力は感じませんでした。
IDE について
IDE といえば、代表的なのは Eclipse と Microsoft Visual Studioですね。
この 2 つでは、僕は圧倒的に Eclipse が好きです。
カスタマイズ性の高さもその理由ですが、プロプライエタリなものにロックインされるのも好きじゃないからです。
このところ、.NET 関連の開発をする機会がないのが幸いです。
最近は、プライベートではもっぱら IntelliJ IDEA を使っています。
けっこう気に入ってきているのですが、まだ使い始めて日が浅いため、これについてはまだ何も言えません。 結局、不満はありつつも IDE は Eclipse に収斂してきました。
こういった IDE のリッチなサポートにすべてを任せるのが、一番だと考えていた時期もありました。
一つの IDE を常に起動しておき、できる限りの作業をそこで済ませます。
それができない場合でも、IDE はバックグラウンドに立ち上げたままにしておき、1 日が終わるまでは、なるべく IDE を終了させない。
OS のデスクトップを作業スペースにするのをやめて、IDE そのものを作業スペースにするわけです。
このやりかたは、ある程度はうまくいきます。
起動の回数を減らすことで、IDE の最大の弱点である起動に費やされる時間を最小限に圧縮し、また IDE にとどまり続けることで、コンテキストスイッチングも軽減することができます。
しかし、やがてはこれにもうんざりしてきます。
やはり、いかんせん遅すぎます。
待ち時間は最小化できても、あれこれいろんなことで、ちょくちょく作業がインタラプトされるのが、次第に耐え難くなってきます。
今まさに頭の中に流れ込んできているインスピレーションを、新鮮なまま逃さず書き留めるにはニブすぎるのです。
IDE のオプションでオフにできるものは、すべてオフにした方がいいという意見を聞いたことがあります。
たしかに、そうすれば割り込みの頻度はかなり下がるはずです。
でも、僕はその意見には懐疑的です。
どんなにイライラさせられるとしても、IDE のたいていの機能はそれなりの理由があって装備されているのです。
すべてのオプションをオフにするのなら、素直にエディタを使ったほうがいいと思います。
IDE の豊富な機能は、魅力的です。
ある面では、その機能が作業の効率を大幅に上げてくれます。
でも、ときにはそれがかえって邪魔になることもあります。
いろんなことができるということは、いろいろ気を散らすネタがあるということでもあるのです。
IDE は、重量級のツールです。
巨大なコードベースの全体を把握し、あっちを覗いたりこっちをいじったりする必要がある場合には非常に有効ですが、範囲を絞って小回りのきくエディタで作業することができるなら、それにこしたことはないのです。
大型船には大型船の、タグボートにはタグボートの役割があるということです。
今は、Emacs と IDE を、場合によって使い分けています。
エディタに求めるもの
さて、このようなエディタの変遷は、僕がエディタに何を求めているのか ー つまり、僕に合うエディタとはどういうものなのかを示唆しています。
今まで、僕はいったい何が欲しくてエディタを変えてきたのか、考えてみるとこういうことなんじゃないかと思います。
- 動作が軽快であること
- キーボードだけで全ての操作ができること
- 多くのプラットフォームで動作すること
- 高いカスタマイズ性
- 幅広い言語に対応したハイライティングやコードアシスト
- 強力なマクロ
- ネットワークごしのエディット機能
多くのプラットフォームで動作するという条件には、カスタマイズした内容のポータビリティも含みます。
この込み入った条件は、最初から明らかだったわけではありません。
長年のコーディング経験の中で、徐々に積み上がってきたものです。
1 つの決まった言語しか使っていなかった時には、幅広いプログラミング言語のサポートなど気にしませんでした。
Windows でしか仕事をしていなかった時には、マルチプラットフォームのサポートには注意を払いませんでした。
WEB アプリケーションのクライアントサイドスクリプトを嫌になるほどいじくりまわしてみるまでは、ネットワークごしのエディット機能にあまり必要性を感じませんでした。
Emacs は、上記の様々な条件を完全に満たしています。
現在、仕事上 Mac、Windows、および Linux を使ってます。
それら全ての環境で、Emacs を使用することができます。
しかも、Mac と Windows では、DropBox 経由で設定を共有しています。 今は github 経由でやってます。
本番環境にあるサーバでは、セキュリティ上さすがにムリですが、それでも設定ファイルを手動で持っていけば、ほぼそのまま利用できます。
そんなわけで、今のところ僕は Emacs + Textastic Code Editor を愛用しています。
ところで、 [Emacs] の素晴らしい能力を十分に活かすためには、プラグインの導入によるカスタマイズが欠かせません。
その点で、
Emacsテクニックバイブル ~作業効率をカイゼンする200の技~ はとてもいいガイダンスになります。
[Emacs] に同梱のチュートリアルで、基本的な操作はすぐに覚えることができますので、それから、この本に掲載されているプラグインから使いそうなものを手当たり次第に入れてみるだけで、簡単にロケットスタートできます。
それで物足りなくなったときには、どうやったら他のプラグインを探しだしてインストールできるのかも、この本を読めばすぐわかるようになっています。