連載
» 2007年03月07日 08時00分 UPDATE

新入学生/新社会人応援企画:あるWebプログラマーの作業環境――豪傑の三種の神器【前編】 (2/2)

[はてな 伊藤直也,ITmedia]
前のページへ 1|2       

Webアプリケーション開発三種の神器

 Webアプリケーション開発には、プログラムを書くためのエディタはもちろんのこと、小さなコマンドラインツールからデバッガ、大きなテスト用ツールまでさまざまなものを利用します。それらすべてを紹介するのは難しいので、ここではわたしが個人的に「三種の神器」と思っている次の3つのソフトウェアを紹介します。

  • GNU Emacs(テキストエディタ)
  • GNU screen(端末マルチプレクサ)
  • Zsh(シェル)

エディタはGNU Emacsで決まり

 プログラムを書くに当たって最も利用頻度が高いものといえば、間違いなくエディタだと思います。わたしは以前からEmacsを愛用しています(図3)

図3 図3 Emacsの画面

 Emacsの何が良いかは挙げればきりがないのですが、一言でいうと「プログラマーがプログラムを書くために作られたエディタ」であるところでしょう。

 例えばプログラムを書く際には、カーソルをその行の先頭や行末に移動したり、1行をまとめて消すといった類の操作を頻繁に行います。そのためそれら操作はショートカットで簡単に行えるのが望ましく、さらに言うとキーボードのホームポジションに置いた手をあまり動かさずに押下できるキーバインドが理想的です。Emacsのキーバインドは、そういったかゆいところが非常に丁寧に設計されており、一度手になじむと、一般的なエディタでプログラムを記述する場合の数倍の効率で作業できるようになります(問題は頭の回転までは数倍にならないところですが)。

 なお、一般的なシェルのカーソル移動キーバインドは、デフォルトでEmacsキーバインドと同一になっています(例えば「Ctrl+Aキーで行頭に戻る」など)。ですから、Emacsキーバインドを覚えると、シェル操作が非常に効率的に行えるという特典もあります :)。

 キーバインド1つとってもこんなあんばいですが、Emacsにはほかにもいろいろな利点があります。

  • プログラミング言語に応じてソースコードが色付けされる
  • ソースが自動でインデント(整形)される(自動整形なしではもうソースコードは書けません)
  • 大量のファイルを編集する際も、ウインドウ1つで扱える。またショートカットキー1つでそれらを切り替えられる
  • ファイラがエディタに統合されているので、必要なファイルを瞬時に探し出すことができる
  • 任意の個所のマーキング、アンドゥや置換、コピーした内容をさかのぼって取り出せるなど、プログラミングに必要な機能はすべて持っている
  • 一度入力した単語を動的に補完できる(動的略語展開と呼ばれます)。例えば「p」と打ってショートカット1つで「printf」と補完するなど
  • Emacs上からCVSやSubversionなど、ソースコードのバージョン管理システムにアクセスする手段が提供されている

 利点を挙げるとキリがないのでこのくらいにしておきます :)。プログラマーでEmacsを利用したことがない方は、だまされたと思ってぜひ一度トライしてみてください。ただし、Emacsは高度な半面、非常にとっつきにくいエディタでもあります。一般的なエディタであれば、特にマニュアルなどに目を通さなくても問題なく扱得るところですが、Emacsの場合そうはいきません。「エディタの使い方を覚える」のではなく「プログラミングに必要な道具の使い方を覚える」つもりで、チュートリアルから始めることをオススメします。

 なお、はてな社内のプログラマーは、大半がEmacs、残る数人がVimでコードを書いています。EmacsとVimは、どちらもとっつきにくいエディタですが、一度手になじめば手放せないツール、ということですね。

WindowsではMeadow、Mac OS XではCarbon Emacs

 ところでEmacsは、各種プラットフォーム向けに移植されているという点も特徴的です。わたしがWindowsからMac OS Xにスムーズに移行できたのは、WindowsでもMac OS XでもEmacsが使えたからこそです。

 WindowsではMeadow、Mac OS XではCarbon Emacsが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 ミニバッファをインクリメンタルサーチ可能にする
表1 エディタの使い勝手を良くするEmacsスクリプト
拡張の名前 概要
emacs-w3m Emacs上でテキストブラウザを動作させる
riece Emacs上でIRCチャットを行うための拡張
navi2ch Emacs上で2ちゃんねるを閲覧するための拡張
表2 ネットワークサービスを利用するEmacsスクリプト
拡張の名前 概要
ruby-mode Rubyスクリプトを記述する際のモードを追加する(Rubyのソースコードに付属)
ecmascript-mode ECMAScript(JavaScript)を記述する際のモードを追加
表3 各種プログラミング言語用のEmacsスクリプト

xkeymacsでWindowsもEmacsキーバインドに

 Emacsに慣れ親しむと「何でもかんでもEmacsのキーバインドで操作したい!」という欲求にかられます。例えばWebブラウザのURL入力欄。Ctrl+Eキーでカーソルを行末に持っていき、Ctrl+Hキーで1文字削ったり。あるいはタブブラウザのタブを、まるでEmacsのバッファ切り替えのようなキーバインドで切り替えてみたり。

 これを実現する、Emacs使いには夢のようなソフトウェアがあります。それがxkeymacsです。Windows向けのソフトウェアですが、これを導入すると、すべてのWindowsアプリケーションでEmacsキーバインドが利用できるようになります*

  • Webのフォームに何かを入力するとき
  • Excelに文章を書き込むとき
  • エクスプローラで画面をスクロールさせるとき
  • ブラウザで1つ前の画面に戻るとき

などなど、そのすべてがEmacsキーバインドになります。Emacsキーバインドを適用させたくないアプリケーションはそのむね設定できたりと、かゆいところにも手が行き届いたツールです。Emacsユーザーの方はぜひ一度お試しください。

GNU Screenで、ターミナルだらけからおさらば

 皆さんは、デスクトップ上に幾つぐらいウインドウを開いていますか?  特にターミナルエミュレータは、例えば「2つのコマンド出力を比較したい」、あるいは「何かコマンドを実行しつつ、待ち時間に別の作業をしたい」といったことから、むやみにウインドウの数が増える傾向にあります。すなわち、

原始的な方法:ターミナルを2つ起ち上げて、それぞれで同じホストにログイン、両者を使い分ける


という状況です。これでは作業が増えてくると、画面上がターミナルウインドウだらけになって使いづらいでしょう。そこで、

一歩進んだ方法:タブ型エミュレータのPoderosaなどを使って同じホストにログイン、両者を使い分ける


という方法があります。Poderosaは便利でオススメです。とは言っても、やはり単一のホストに何度もログインするのは面倒でしょう。もう一歩進めて、

別な方法:GNU screenを利用して1つのログインセッションに対して複数ウインドウを起ち上げる


というのはいかがでしょうか。GNU Screenは端末マルチプレクサに分類されるソフトウェアで、これを利用することで1つの端末で同時に複数の仮想端末を起ち上げ操作できます。つまり、1つのターミナルウインドウの中で必要に応じて画面を複数に切り替えられる、というわけです。

 図4がScreenの使用例です。Screenには画面を2分割する機能もありますので、ここではそれを使ってみました。どちらもMac OS X上のローカルマシンでの出力です。上部はMySQLクライアントを操作しているところ、下部はシェルでコマンドを実行しているところになります。

図4 図4 GNU Screenを使用しているところ

 見づらいかとは思いますが、最下段には「0 mysql 1 ls 2 zsh」と出力されています。現在3つのウインドウを開いていて、それぞれで別の出力が吐き出されていることを示しています。各画面はキー操作で簡単に切り替えられます。

 Screenには複数仮想端末の機能以外にも、

  • リモートマシンにログインして何かジョブを実行中に回線を切っても後で復帰できる
  • 画面出力をさかのぼってスクロールさせることができる
  • 画面上の文字をコピーして、別の端末にコピーできる

などの機能があり、コマンドラインシェルをヘビーに利用するUNIXハッカーにとっては、間違いなく必須ツールといえるでしょう(といいつつ、わたしもScreenを本格的に使い始めたのはつい1年ほど前だったりしますが……)。

 Screenの使い方は、

などが参考になるでしょう*

次回は

 さて、次回は三種の神器の締めくくりとなるZshを紹介します。Bashやtcshと比較して、機能的に大きく違うわけではありませんが、細かな使い勝手でほかのシェルにはない便利さが感じられると思います。

このページで出てきた専門用語

Emacsの移植版

正確には、Carbon EmacsはGNU EmacsをMac OS X GUIサポートでビルドしたものです。

すべてのWindowsアプリケーションでEmacsキーバインドが利用できるようになります

Mac OS Xは標準で各種アプリケーションがEmacsキーバインドに対応している。とはいっても、Windowsでxkeymacsを使うときほど徹底されていない。Mac OS X環境でも使えるxkeymacsのようなソフトウェアがリリースされるのを待つばかりだ。

参考になるでしょう

また、筆者の主観によって、Screen関連の話題を、

にまとめてある。こちらもぜひ参考にしてほしい。


本記事は、オープンソースマガジン2006年5月号「オープンソースで作る新生活環境」を再構成したものです。


前のページへ 1|2       

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ