Webアプリケーション開発には、プログラムを書くためのエディタはもちろんのこと、小さなコマンドラインツールからデバッガ、大きなテスト用ツールまでさまざまなものを利用します。それらすべてを紹介するのは難しいので、ここではわたしが個人的に「三種の神器」と思っている次の3つのソフトウェアを紹介します。
プログラムを書くに当たって最も利用頻度が高いものといえば、間違いなくエディタだと思います。わたしは以前からEmacsを愛用しています(図3)。
Emacsの何が良いかは挙げればきりがないのですが、一言でいうと「プログラマーがプログラムを書くために作られたエディタ」であるところでしょう。
例えばプログラムを書く際には、カーソルをその行の先頭や行末に移動したり、1行をまとめて消すといった類の操作を頻繁に行います。そのためそれら操作はショートカットで簡単に行えるのが望ましく、さらに言うとキーボードのホームポジションに置いた手をあまり動かさずに押下できるキーバインドが理想的です。Emacsのキーバインドは、そういったかゆいところが非常に丁寧に設計されており、一度手になじむと、一般的なエディタでプログラムを記述する場合の数倍の効率で作業できるようになります(問題は頭の回転までは数倍にならないところですが)。
なお、一般的なシェルのカーソル移動キーバインドは、デフォルトでEmacsキーバインドと同一になっています(例えば「Ctrl+Aキーで行頭に戻る」など)。ですから、Emacsキーバインドを覚えると、シェル操作が非常に効率的に行えるという特典もあります :)。
キーバインド1つとってもこんなあんばいですが、Emacsにはほかにもいろいろな利点があります。
利点を挙げるとキリがないのでこのくらいにしておきます :)。プログラマーでEmacsを利用したことがない方は、だまされたと思ってぜひ一度トライしてみてください。ただし、Emacsは高度な半面、非常にとっつきにくいエディタでもあります。一般的なエディタであれば、特にマニュアルなどに目を通さなくても問題なく扱得るところですが、Emacsの場合そうはいきません。「エディタの使い方を覚える」のではなく「プログラミングに必要な道具の使い方を覚える」つもりで、チュートリアルから始めることをオススメします。
なお、はてな社内のプログラマーは、大半がEmacs、残る数人がVimでコードを書いています。EmacsとVimは、どちらもとっつきにくいエディタですが、一度手になじめば手放せないツール、ということですね。
ところでEmacsは、各種プラットフォーム向けに移植されているという点も特徴的です。わたしがWindowsからMac OS Xにスムーズに移行できたのは、WindowsでもMac OS XでもEmacsが使えたからこそです。
WindowsではMeadow、Mac OS XではCarbon EmacsがEmacsの移植版*になります。インストールや操作方法については、それぞれ以下のサイトが参考になるでしょう。
Emacsのもう1つ大きな特徴として拡張性の高さがあります。Emacsは標準の状態でもたくさんの機能を持っていますが、任意の拡張スクリプト(Emacs Lisp)を導入することで、さまざまな機能を追加できます。
わたしが利用している拡張の幾つかを表1、表2、表3に紹介します。これ以外にも、標準でC、C++、Java/Perlなどメジャーな言語用のモードがサポートされていますし、欲しいものはたいていWeb上で手に入ると思います。
拡張の名前 | 概要 |
---|---|
ElScreen | EmacsにGNU Screenライクなウィンドウ切り替え機能を追加する |
kill-summary | キルリング(過去にコピーした内容)の一覧を表示し選択ヤンク(ペースト)できるようにする |
session.el | 過去に開いたファイルなどの履歴を保存する。地味なようで非常に便利。解説 |
minibuf-isearch.el | ミニバッファをインクリメンタルサーチ可能にする |
拡張の名前 | 概要 |
---|---|
emacs-w3m | Emacs上でテキストブラウザを動作させる |
riece | Emacs上でIRCチャットを行うための拡張 |
navi2ch | Emacs上で2ちゃんねるを閲覧するための拡張 |
拡張の名前 | 概要 |
---|---|
ruby-mode | Rubyスクリプトを記述する際のモードを追加する(Rubyのソースコードに付属) |
ecmascript-mode | ECMAScript(JavaScript)を記述する際のモードを追加 |
Emacsに慣れ親しむと「何でもかんでもEmacsのキーバインドで操作したい!」という欲求にかられます。例えばWebブラウザのURL入力欄。Ctrl+Eキーでカーソルを行末に持っていき、Ctrl+Hキーで1文字削ったり。あるいはタブブラウザのタブを、まるでEmacsのバッファ切り替えのようなキーバインドで切り替えてみたり。
これを実現する、Emacs使いには夢のようなソフトウェアがあります。それがxkeymacsです。Windows向けのソフトウェアですが、これを導入すると、すべてのWindowsアプリケーションでEmacsキーバインドが利用できるようになります*。
などなど、そのすべてがEmacsキーバインドになります。Emacsキーバインドを適用させたくないアプリケーションはそのむね設定できたりと、かゆいところにも手が行き届いたツールです。Emacsユーザーの方はぜひ一度お試しください。
皆さんは、デスクトップ上に幾つぐらいウインドウを開いていますか? 特にターミナルエミュレータは、例えば「2つのコマンド出力を比較したい」、あるいは「何かコマンドを実行しつつ、待ち時間に別の作業をしたい」といったことから、むやみにウインドウの数が増える傾向にあります。すなわち、
原始的な方法:ターミナルを2つ起ち上げて、それぞれで同じホストにログイン、両者を使い分ける
という状況です。これでは作業が増えてくると、画面上がターミナルウインドウだらけになって使いづらいでしょう。そこで、
一歩進んだ方法:タブ型エミュレータのPoderosaなどを使って同じホストにログイン、両者を使い分ける
という方法があります。Poderosaは便利でオススメです。とは言っても、やはり単一のホストに何度もログインするのは面倒でしょう。もう一歩進めて、
別な方法:GNU screenを利用して1つのログインセッションに対して複数ウインドウを起ち上げる
というのはいかがでしょうか。GNU Screenは端末マルチプレクサに分類されるソフトウェアで、これを利用することで1つの端末で同時に複数の仮想端末を起ち上げ操作できます。つまり、1つのターミナルウインドウの中で必要に応じて画面を複数に切り替えられる、というわけです。
図4がScreenの使用例です。Screenには画面を2分割する機能もありますので、ここではそれを使ってみました。どちらもMac OS X上のローカルマシンでの出力です。上部はMySQLクライアントを操作しているところ、下部はシェルでコマンドを実行しているところになります。
見づらいかとは思いますが、最下段には「0 mysql 1 ls 2 zsh」と出力されています。現在3つのウインドウを開いていて、それぞれで別の出力が吐き出されていることを示しています。各画面はキー操作で簡単に切り替えられます。
Screenには複数仮想端末の機能以外にも、
などの機能があり、コマンドラインシェルをヘビーに利用するUNIXハッカーにとっては、間違いなく必須ツールといえるでしょう(といいつつ、わたしもScreenを本格的に使い始めたのはつい1年ほど前だったりしますが……)。
Screenの使い方は、
などが参考になるでしょう*。
さて、次回は三種の神器の締めくくりとなるZshを紹介します。Bashやtcshと比較して、機能的に大きく違うわけではありませんが、細かな使い勝手でほかのシェルにはない便利さが感じられると思います。
正確には、Carbon EmacsはGNU EmacsをMac OS X GUIサポートでビルドしたものです。
Mac OS Xは標準で各種アプリケーションがEmacsキーバインドに対応している。とはいっても、Windowsでxkeymacsを使うときほど徹底されていない。Mac OS X環境でも使えるxkeymacsのようなソフトウェアがリリースされるのを待つばかりだ。
また、筆者の主観によって、Screen関連の話題を、
にまとめてある。こちらもぜひ参考にしてほしい。
本記事は、オープンソースマガジン2006年5月号「オープンソースで作る新生活環境」を再構成したものです。
Copyright © ITmedia, Inc. All Rights Reserved.