|
|
Emacs(いーまっくす)はUNIXで生まれた高機能でカスタマイズ性の高いプログラマ向けのテキストエディタである。
Emacs はエディタの範疇を超え、テキスト処理のための包括的ワークベンチ、あるいはアプリケーション実行環境であるといえる。Emacs は長い歴史を持っており、ゼロからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流の GNU Emacs の開発はもともとは一連の Unix 環境(と VMS)を主なターゲットとしていたが、各種の OS への対応もなされてきており、Windows など多くの環境で利用することができる。
Emacs は当初フリーソフトウェア財団 (FSF) のリチャード・ストールマン氏により、エディタteco上のマクロとして開発された。Emacs は Editor MACroS の略である。
後に、Javaで有名なジェームス・ゴスリングの手で Gosling Emacs として書き改められた。このときに Lisp(Moclisp と呼ばれる)言語によるカスタマイズ機能、およびエディタ自身の機能を拡張できる機能が含められた。
現在主に使われているのは、リチャード・ストールマン氏によってゼロから書き直された GNU Emacs とよばれている Emacs である。GNU Emacs も Emacs Lisp とよばれる Lisp をベースにしたカスタマイズ言語を持っている。
Emacs の親戚を複数形で Emacsen とよぶことがある。Emacsen のはっきりした定義があるわけではないが、GNU Emacs を中心とした主なバリエーションには以下のようなものがある : NEmacs、Epoch、Nepoch、Mule、FSF Emacs (GNU Emacs)、XEmacs、Lucid Emacs、Meadow、NTEmacs。
また、サブセットとして Micro Emacs, mg (Micro GNU Emacs), ng (Nihongo Micro GNU Emacs) などがあるがこれらは一般に Emacsen には含めない。Emacs ライクなエディタとなるとさらに多いが、マクロ言語として Common Lisp を採用した xyzzy などがある。
Emacs のキー操作は、キーボード上の文字の配置とは関係なく、機能の名称をベースにしたキー配列を持つことが特徴である。たとえば、カーソルの上下左右はそれぞれ C-p, C-n, C-b, C-f に割り当てられている(ここで C-? は Emacs で使われるキー操作の表記で、コントロールキーを押しながら別のキーを押すことをあらわす)が、それぞれ Previous, Next, Back, Forward という英単語の頭文字からきている。また、vi にある編集モード、カーソル移動モードなどのモードを持たないモードレスな操作モデルを持つ。
これらのキー操作は前述の Emacs Lisp を使ってすべて根本的にカスタマイズ可能である。Emacs 上で vi の操作をエミュレートするエミュレータもいくつかある (vi-mode, viper-mode)。
Emacs の日本語版が NEmacs (Nihongo Emacs) であり、多国語対応版が Mule (MUltilingual enhancement to GNU Emacs) である。NEmacs および Mule は電子技術総合研究所(電総研)の半田剣一氏らによって開発された。Mule はアラビア語などの右から左へ記述する言語をふくめた複数言語の1ファイル中での混在と編集が可能であり、中国語、タイ語等多くの言語をサポートするなど、先進的かつ実用的な多言語処理系であった。Mule は現在では本家の Emacs に統合され(完全ではないという人もいる)、Emacs の一機能という位置づけになっている。
GNU Emacs (Nemacs) は電総研の平野氏と大阪大学の東田氏によって、フリーな DOS Extender、go32/djgpp により DOS 上に移植され(後に emx にも対応)、demacs と呼ばれた。
Windows 上では、宮下 (himi) 氏により Win32 アプリケーションとして Mule 2.3 をベースにした Mule for Win32、そして Emacs 20.X をベースにした Meadow (めどぅ)が移植・開発され、広く使われている。現在は GNU Emacs 21.x をベースにした Meadow2 が開発中である。GNU Emacs 自体も Windows 上でコンパイル・実行が可能になってきてもおり、一時はそのバージョンを NTEmacs とよぶことがあった(Visual C++ でコンパイルする方法と cygwin でコンパイルする方法がある)。日本ではフォントの扱いや IME の扱いが優れていることもあり、また日本語の情報が豊富なこともあり Meadow が良く使われている。
Emacs はもとは文字端末での利用を前提に設計されていたものであるが、少なくとも GNU Emacsバージョン18 では X Window System アプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の xterm のような端末エミュレータを立ち上げ、その中で動くというものであった。
Epoch はこの GNU Emacsバージョン18 を基にして X Window System のマウスや複数ウィンドウ(フレーム)機能にもうすこまともに対応させたものである。Lucid Emacs は、Emacsバージョン19 をベースにしてさらに高度に GUI に対応させたものであり、Lucid 社によって開発された。GNU Emacs も徐々に GUI には対応していくのだが、その開発スピードはあまりにも遅く、それに不満をもったチームによって Lucid Emacs をベースにXEmacs のプロジェクトが開始された(加えて、由来がはっきりせずライセンス上 GNU Emacs に取り込めないコードの存在があったことも両者が分かれた理由の一つのようである)。XEmacs に対して、元の GNU Emacs を FSF Emacs と呼ぶこともある(XEmacs も GPL に従い、ある意味で GNU Emacs であるため)。
Emacsバージョン21 および XEmacs ではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。
Emacs Lisp はカスタマイズ言語にとどまらず、フル機能のプログラミング言語である。
Emacs の機能の多くは Emacs Lisp で書かれている。つまり、Emacs の構造は、Emacs Lisp の実行機能(と基本的な編集機能)を持った Emacs Lisp インタプリタを中心に、Lisp で書かれた多くのコードによって実現されている。たとえば、Emacs は多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべて Emacs Lisp で書かれている。
このような編集機能にとどまらず、Emacs Lisp はTCP/IP通信や外部プロセスの起動、ファイル入出力などの機能を持っているので、エディタの一部とはとてもいえないような機能も多く Emacs Lisp で記述されている。これらを駆使して、独立したアプリケーションともいえるようなプログラムが書かれてきた。たとえば、そのようなアプリケーションとしてはメーラの Mew、mh-e、Wanderlust, ニュース・メールリーダの一連のGnus、WWWブラウザのEmacs W3、irc チャットクライアント、端末エミュレータ (M-x terminal-emulator)、仮名漢字変換SKK、Java統合開発環境JDEなどがある。Emacs はこれらを動作させるアプリケーション実行環境といえる。
Emacs の欠点の一つは、機能があまりにも多く対応する Lisp コードを起動時にローディングする必要があるため、起動に時間がかかるということである(基本的な Lisp 関数群は実行バイナリにあらかじめ事前ロードされて組み込まれているが)。マシンパワーの向上によって起動時間が短縮される可能性もあるのだが、実際には XEmacs, Meadow2 のようなさらに高機能なバージョンが次々と出てくるので、起動時間が短くなっているとは実感としては言いがたい。ただ Emacs では内部でシェルを起動しさまざまな操作を行うことができるため、Emacs をいったん立ち上げると一切終了しないような使い方が可能である。このように使用する場合、起動時間が長いのは問題にならないと主張する人もいる。
第二に、敷居が高いということである。特に昔の Emacs はカーソルキーが使えなかったために初心者は戸惑うことが多かった。メニューやツールバーもあるが、初心者は使いこなすのが非常に難しい。たとえば、Emacs 上のメーラでの検索は、たとえば Windows 上の一般的な GUI を使ったメーラである Outlook Express での「大文字小文字を区別する」「日付の範囲指定」といった設定ダイアログを伴う検索操作に比べると圧倒的に難しいといえる。さらに、Emacs の設定項目は GUI で設定できる項目もあるが、たとえば一般的な Windows 上の GUI アプリケーションである Mozilla や IE の設定ダイアログとくらべて充実しているとは言いがたいし、直感的でもなく、設定ファイルを直接編集しなければならない場合も多い。しかしこの設定ファイルは Emacs Lisp のコードそのものなのである。設定のためだけにプログラミング言語である Emacs Lisp を習得しなければならない、という状況はエディタを使いたいだけのユーザにとっては許容できるはずがない。
第三に、エディタと Lisp 開発環境が融合していて開発しやすいためか、同機能の似たものが乱立しやすい。特にメーラについては「俺メーラ」的なバリエーションが乱立しており、Emacs マニアではない人にとってはどれを使ったらよいのか良くわからない。
このような問題もあるが(あるからこそ)、特に Lisp がわかるプログラマにとっては人気が高いエディタである。
Emacs と vi(とその子孫)はいずれも UNIX 環境で人気を二分するエディタであり、いずれも熱狂的なユーザを持つ。両者の間ではさながら宗教戦争ともいえる争いが繰り広げられてきた。
GNU Emacs のマニュアルは、Emacs 自身を以下のように説明している。
歴史
Emacs の仲間たち
操作
Emacs の日本語化と国際化、Windows への移植
GUI への対応
アプリケーション実行環境としての Emacs
Emacs の問題
宗教論争?
ドキュメントシステム
self-documenting (自己ドキュメントを行う)とあるように Emacs はそれ自身のドキュメント化に力をおいたエディタである。具体的には以下の特徴を持つ。