コンテンツにスキップ

利用者:J8takagi/emacs

{{Infobox Software |ロゴ = |開発元 = [[GNUプロジェクト] |最新版(安定版) = 21.4(2005年2月6日) |対応OS = クロスプラットフォーム |種別 = テキストエディタ |ライセンス = GPL |公式サイト = [1] }}

GUI環境でのGNU Emacs起動時画面

Emacsイーマックス)は、テキストエディタの1つである。元来はGNUで開発・公開しているGNU Emacsのことを意味していたが、現在ではXEmacsMeadowなど、GNU Emacsを元に開発された類似のソフトも総称してEmacs(またはEmacsen)という場合がある。Emacsは1970年代はじめに原型ができており、現役のコンピュータソフトの中では特に長い歴史をもつもののひとつである。

Emacsの特徴は、高度な機能と高い拡張性をもつことである。

Emacsの利用者は主に、UNIXLinuxの管理者やプログラマを中心としたコンピュータの上級ユーザーである。UNIXユーザの間では、Emacsとviのどちらが優れたテキストエディタかという議論が長年にわたり繰り広げられている。

Emacsの特徴[編集]

高度な機能[編集]

Emacsは、高度で豊富なテキスト編集などの機能をもつ。また、マクロ言語として採用されているEmacs Lispを使うことでさまざまな拡張が可能である、例えば各種プログラミング言語やLaTeXHTMLの編集補助、メーラーテキストブラウザなどといった数多くの拡張機能が公開されている。


GNU Emacs[編集]

GNU Emacsは、GNUプロジェクトが開発・公開しているソフトであり、 の一部であるGNU Emacsは活発に開発中で、もっとも人気のあるバージョンだ。 The GNU Emacs Manualは、Emacs自身を「the extensible, customizable, self-documenting, real-time display editor. (拡張可能でカスタマイズ可能で、自己説明的で、リアルタイム表示を行うエディタだ。)」と説明している。 これはまた、もっとも移植性に富み、移植のされたEmacsエディタの実装だ。 2006年時点で、GNU Emacsの最新リリースは、21.4版だ。

TECO エディタのエディタ・マクロ (Editor MACroS) 一式であるオリジナルのEMACSは、1975年に リチャード・ストールマン が、初めは ガイ・スティール とともに書いた。 ガイ・スティール、Dave Moon、Richard Greenblatt、Charles Frankstonらの書いた1組のTECOマクロ・エディタであるTECMACとTMACSのアイデアに触発されている。 何年もの間に多くの版のEmacsが現れた。 しかし、今日よく使われるのは、1984年にリチャード・ストールマンが始めいまだに管理しているGNU Emacs、1991年に始まったGNU Emacsの 分岐 でありいまだにほぼ互換の XEmacs だ。 どちらも強力な拡張言語である Emacs Lisp を使うので、コンピュータ・プログラム編集コンパイル から、ウェブの閲覧 にいたる仕事をこなせる。

大文字で始まる「Emacs」と、小文字の「emacs」を区別する人もいる。 大文字で始まる「Emacs」は、リチャード・ストールマンの作ったエディタから派生したエディタ (特に GNU Emacs、XEmacs) を指し、小文字の「emacs」は、たくさんある個別のemacs実装を指す。 英語の"oxen"からの類推で、"emacs"という英語の複数形はemacsenとつづられる。 たとえば、Debian の互換Emacsパッケージは、emacsen-commonという。 Collins English Dictionaryには、emacsenという複数形だけが掲出されている[1]

Unix 文化で、Emacsは、vi と並ぶ、伝統的 エディタ戦争 における双璧だ。

Emacs はエディタの範疇を超え、テキスト処理のための包括的ワークベンチ、あるいはアプリケーションソフトウェア実行環境であるといえる。Emacs は長い歴史を持っており、ゼロからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流の GNU Emacs の開発はもともとは UNIX 環境と VAX/VMS を主なターゲットとしていたが、各種の OS への移植もなされてきており、Mac OS XWindows など多くの環境で利用することができる。

歴史[編集]

Emacsは、1970年代の MIT AI研 で産声をあげた。 AI研の PDP-6PDP-10オペレーティング・システムだった Incompatible Timesharing System (ITS) への導入前の既定エディタは、TECO という 行エディタ だった。 今のテキストエディタと違い、TECOには (後のviのように) 入力・編集・表示用の別々のモードがあった。 TECOで文字を入力しても、文書に即座に出てくるわけではなかった。 編集されたテキストが画面に表示されてないとき、必要とされた文字が挿入されるようTECOのコマンド言語で一連の命令を書かなければならなかった。 この振舞は、今も使われている ed プログラムと同じだ。

リチャード・ストールマンは、1974年か1972年に スタンフォード人工知能研究所 を訪れ、ラボの「E」エディタを見た。 このエディタの振舞は、今のエディタのほとんどで使われている直感的な WYSIWYG であり、彼はその機能に触発されてMITに戻った。 AI研 ハッカー の一人、Carl Mikkelsenは、利用者がキー操作するたびに画面表示を更新する「Control-R」というリアルタイム表示・編集モードをTECOに追加していた。 ストールマンは、この更新が効率的にうごくよう書き直し、任意のキー操作でTECOプログラムがうごくように利用者が再定義できる マクロ 機能をTECOの表示・編集モードに追加した。

新版のTECOは、またたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」で終わる名前のカスタム・マクロの巨大なコレクションが、じきにたまった。 2年後、どんどんばらけるキーボード・コマンド・セットを1つに統合するプロジェクトを ガイ・スティール がひきうけた。 スティールとハックしたある夜の後、ストールマンは、新しいマクロ・セットの文書化や拡張の機能を含んだ実装を完成させた。 できあがったシステムは、"Editing MACroS" を意味するEMACSと呼ばれることになる。 ストールマンによると、Emacsとしたのは、「当時ITSで<E>が略称に使われてなかったから」。 また、ボストン の人気アイスクリーム屋「Emack & Bolio's」の店がMITから徒歩圏内にあった、とも言われている。 その店によく通っていた Dave Moon はその後、ITSで使われたテキスト整形プログラムをBOLIOと名づけた。 だが、ストールマンはアイスクリームを好きではなく、「Emacs」という名を選んだとき、それを知ってさえいなかった。 この無知は、ハッカー公案 (Hacker koan) のEmacs and Bolio の素となっている。

過度のカスタム化や事実上の分裂の危険に気づいたストールマンは、とある使用上の条件をつけた。 以下のように彼が後に書いたとおり。

「EMACSは、共同参加を基として頒布される。つまり、改良点はすべて、組み入れて頒布するために、私のところへ戻ってこなければならない」

オリジナルのEmacsは、TECO同様、PDPだけでうごいた。 そのうごきは、まぎれもないテキストエディタと考えられるくらい、TECOと異なっていた。 そして、急激にITS上の標準編集プログラムとなった。 当初、Michael McMahonによりITSから、Unixにではなく、TenexTOPS-20 オペレーティング・システムに 移植 された。 初期のEmacsへの貢献者には、このほか Kent PitmanEarl KillianEugene Ciccarelli らがいる。

他のemacsたち[編集]

その後、他のコンピュータ・システム用に、多くのEmacs風エディタが書かれた。 Michael McMahonとDaniel Weinrebらが、 SINE ("Sine Is Not Emacs")、 EINE ("Eine Is Not Emacs")、 ZWEI ("Zwei Was Eine Initally"、Lispマシン 用) を書いた (後者2つはドイツ語で、それぞれ1と2の意味。 正しいつづりはEINS。 ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)。 1978年、Bernard Greenberg は、ハネウェル のケンブリッジ情報システム研で、Multics Emacs を書いた。

Unix でうごいた最初のEmacs風エディタは、後に Javaプログラミング言語 の開発で知られることになる ジェームス・ゴスリング が1981年に書いたGosling Emacs だった。 これは C で書いてあり、Mocklisp なるLisp風構文の拡張言語を使っていた。 Mocklispにはシンボルさえなく[要出典]、構文がLisp風なだけで、本当のLispではない。 1984年、これは独占ソフトウェアだった

GNU Emacs[編集]

1984年、Gosling Emacsの フリーソフトウェア 版をつくるべく、ストールマンはGNU Emacsに取り組み始めた。 当初は、Gosling Emacsを基にしていたのだが、ストールマンはMocklispインタープリタを本物のLispインタープリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。 これは、揺籃期の GNUプロジェクト がリリースした初のプログラムとなった。 GNU Emacsは、Cで書いてあり、(Cで実装した) Emacs Lisp を拡張言語としている。 最初にひろく頒布されたGNU Emacsの版は、1985年に登場した15.34だった (2版から12版まではない。 初期のGNU Emacsは、「1.x.x」のように採番されていたが、1.12版の出た後、メジャー番号が変わりそうにないため、先頭の1をなくすことにした。 最初の公開リリース13版は、1985年3月にできた)。

Gosling Emacs同様、GNU EmacsもUnixでうごく。 だが、GNU Emacsには、拡張言語としてフル装備のLispなどの機能があった。 そのため、すぐGosling Emacsと入れ替わり、Unixでうごく事実上のEmacsエディタとなった。

伽藍とバザール で「伽藍」式開発の例にあげられていたように、GNU Emacsの開発は、1999年まで比較的閉鎖的だった。 それ以降、公開の開発メーリング・リストと匿名 CVS アクセスを採用している。 開発は、単一のCVSトランクである22.0.90版で進んでいる。 現在の管理者は、リチャード・ストールマン

XEmacs[編集]

1991年初頭、GNU Emacs 19の初期α版を基に、Lucid Emacsが、Jamie Zawinski とLucid Inc.の人たちにより開発された。 コードベースは、すぐに分割し、開発チームは、単一プログラムとして併合しようとするのをあきらめた[2]。 これは、分岐 した フリーソフトウェア・プログラムのうち初期の最も有名な例だ。 Lucid Emacsは、XEmacs と名前を変えた。 これとGNU Emacsが、人気では双璧となっている。 XEmacs の「X」は、グラフィカルユーザインターフェース としての X Window System に当てた初期の中心点からか、XEmacs開発者たちの妥協の産物として「大賛成というほどではない」(less than favorable) 名前からきている [2]。 GNU EmacsとXEmacsの両方とも、テキスト端末同様、グラフィカル・インターフェースをサポートしている。

その他の実装[編集]

GNU Emacsは当初、当時のハイ・エンドであった、32ビットのフラットアドレス空間、1 MiB のRAMをもつコンピュータを想定していた。 このため、小さな再実装への道がひらかれた。 そのうちきわだつものは、以下のとおり。

  • MicroEMACS: Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装。リーナス・トーバルズの使うエディタ[要出典]
  • MG: 当初MicroGNUEmacsといわれていて、よりGNU Emacsに似ているMicroEMACSの分岐。OpenBSD では既定でインストールされる
  • JOVE (Jonathan's Own Version of Emacs): Jonathan Payneによる UNIX風 システム用の非プログラマブルなEmacs実装
  • Freemacs: テキスト・マクロ拡張を基本にした拡張言語をもちつつ、オリジナルの64 KiB のべたんメモリー制限に収まる DOS

Emacsの日本語化と国際化、Windowsへの移植[編集]

Emacs の日本語版として Nemacs (Nihongo Emacs) が、多国語対応版として Mule (MUltilingual enhancement to GNU Emacs) が開発された。Nemacs および Mule は電子技術総合研究所(電総研:現在の産業技術総合研究所)の半田剣一らによるものである。Mule はアラビア語などの右から左へ記述する言語をふくめた複数言語の1ファイル中での混在と編集が可能であり、中国語、タイ語等多くの言語をサポートするなど、先進的かつ実用的な多言語処理系であった。Mule は現在では本家の Emacs に統合され(完全ではないという人もいる)、Emacs の一機能という位置づけになっている。

GNU Emacs (Nemacs) は東京大学の平野聡と大阪大学の東田学によって、フリーな DOS Extender、go32/djgpp により MS-DOS 上に移植され(後に emx にも対応)、demacs と呼ばれた。

Windows 上では、宮下尚 (himi) により Win32 アプリケーションとして Mule 2.3 をベースにした Mule for Win32、そして Emacs 20.X をベースにした Meadow(メドゥ)が移植・開発され、広く使われている。2004年7月7日には GNU Emacs 21.x をベースにした Meadow2 がリリースされた。GNU Emacs 自体も Windows 上でコンパイル(Visual C++ でコンパイルする方法と cygwin でコンパイルする方法がある)・実行が可能になってきてもおり、一時はそのバージョンを NTEmacs とよぶことがあった。日本ではフォントの扱いや IME の扱いが優れていること、日本語の情報が豊富なことから Meadow が良く使われている。

GUIへの対応[編集]

Emacs はもとは文字端末での利用を前提に設計されていたものであるが、少なくとも GNU Emacsバージョン18 では X Window System アプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の端末エミュレータを立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。

Epoch はこの GNU Emacsバージョン18 を基にして X Window Systemマウスや複数ウィンドウ(フレーム)機能に拡張を施したものである。Lucid 社によって開発されたLucid Emacs は、Emacsバージョン19 をベースにしてさらに高度に GUI への対応が行われた。GNU Emacs も徐々に GUI には対応していったが、その開発スピードの遅さに不満をもったチームによって Lucid Emacs をベースにXEmacs のプロジェクトが開始された(加えて、由来がはっきりせずライセンス上 GNU Emacs に取り込めないコードの存在があったことも両者が分かれた理由の一つのようである)。XEmacs に対して、元の GNU Emacs を FSF Emacs と呼ぶこともある(XEmacs も GPL に従い、ある意味で GNU Emacs であるため)。

Emacsバージョン21 および XEmacs ではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。

Emacs の仲間たち[編集]

Emacs の親戚を複数形で Emacsen とよぶことがある。Emacsen の公式の定義があるわけではないが、GNU Emacs を中心とした主なバリエーションには以下のようなものがある : Nemacs、Epoch、Nepoch、Mule、FSF Emacs (GNU Emacs)、XEmacs、Lucid Emacs、Meadow、NTEmacs

また、Emacsに似た機能を有するエディタとして Micro Emacs, Mg (Micro GNU Emacs), Ng (Nihongo Micro GNU Emacs) などがあるがこれらは一般に Emacsen には含めない。Emacs ライク (Emacs風) なエディタとなるとさらに多いが、マクロ言語として Common Lisp を採用した xyzzy などがある。

受諾方針[編集]

GNU Emacs (や他のGNUパッケージ一般) では、著しい量のコード寄贈は、著作権 者が自身の著作権を適切に放棄または委譲したときだけ受理する方針になっている。 この方針の唯一の例外は MULE (MULtilingual Extension, Unicode や、他の言語の用字系を処理する高度なメソッドがある) のコードで、著作権者が日本国政府で著作権の委譲が不可能であった [3] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされる。 コピーレフト の強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、そういう方針にしてあるのだ。 GNU Emacsの管理者によるこの要件は、寄贈分にも影響が出ることを想定している。 一部の人たちは、効率にまで影響が出ると言っている。 まじめな開発者を寄せ付けないこの要件により、GNU Emacsに大きなファイルを処理する力がない、という点で非難しているのだ。 だがストールマンによれば、機能面でどんなに良好であることよりも、プログラムが「自由」であることの方が、もっと重要であるのだ。 GNU Emacsの フリーソフトウェア・ライセンス 、つまり GNU General Public License と、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえているのが、この強制というわけだ。

操作[編集]

Emacs のキー操作は、機能の名称をベースにした割り当てを行っており、キーボード上の文字の配置とは関係ない。たとえば、カーソルを上下左右に移動させる操作はそれぞれ C-p, C-n, C-b, C-f に割り当てられている(ここで C-? は Emacs で使われるキー操作の表記で、コントロールキーを押しながら別のキーを押すことをあらわす)が、それぞれ Previous, Next, Back, Forward という英単語の頭文字からきている(キー操作の説明は、C-h t(英語)あるいは C-h T(日本語)で表示させることができそのまま操作方法を学習することができる)。また、vi にある編集モード、カーソル移動モードなどのモードを持たないモードレスな操作モデルを持つ。

これらのすべてのキー操作は前述の Emacs Lisp を使ってカスタマイズ可能である。Emacs 上で vi の操作をエミュレートするエミュレータもいくつかある (vi-mode, viper-mode)。

アプリケーション実行環境としてのEmacs[編集]

Emacs Lisp はカスタマイズ言語にとどまらず、フル機能のプログラミング言語である。Emacs の機能の多くは Emacs Lisp で書かれている。つまり、Emacs の構造は、Emacs Lisp の実行機能(と基本的な編集機能)を持った Emacs Lisp インタプリタを中心に、Lisp で書かれた多くのコードによって実現されている。たとえば、Emacs は多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべて Emacs Lisp で書かれている。

このような編集機能にとどまらず、Emacs Lisp はTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多く Emacs Lisp で記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。メーラの Mewmh-eWanderlust, ニュース・メールリーダのGnusWWWブラウザEmacs W3IRCチャットクライアント、端末エミュレータ (M-x terminal-emulator)、かな漢字変換SKK、Java統合開発環境JDEなどがそれにあたる。Emacs はこれらのアプリケーションソフトウェアを動作させる実行環境となっている。

Emacs の問題[編集]

Emacs の欠点の一つとして、機能があまりにも多く、対応する Lisp コードを起動時にローディングする必要があるため、起動に時間がかかるという指摘がなされる(基本的な Lisp 関数群は実行バイナリにあらかじめ事前ロードされて組み込まれている)。マシンパワーの向上によって起動時間が短縮される傾向もあるのだが、新たなより高機能なバージョンが利用されるため、起動時間が短くなっているとの実感がないとされる。これらに対する反論の一つとして、Emacs の持つ機能は文書の編集にとどまらずコンピュータで一般的に行われる多くの操作を行うことができるため、Emacs をいったん立ち上げると一切終了しないような使い方が可能であり、長い起動時間は問題にならないと主張する人もいる。

第二に、ハードルが高いという指摘がある。特にかつての Emacs はカーソルキーが使えなかったために初心者は戸惑うことが多かった。メニューツールバーもあるが、初心者は使いこなすのが非常に難しい。たとえば、Emacs 上のメーラでの検索操作は、Windows 上の一般的な GUI を使ったメーラである Outlook Express での「大文字小文字を区別する」「日付の範囲指定」といった設定ダイアログを伴う検索操作に比べると圧倒的に難しいといえる。それどころか、いきなり「M-x byte-compile-fileして、」などといったヘルプやREADMEが多く、一体なにをすればいいのか、MキーとXキーを同時押ししても起きない、わからん、などといった事態が発生しあきらめてしまう人も多い。さらに、Emacs の設定項目は GUI で設定できる項目もあるが、一般的な Windows 上の GUI アプリケーションである MozillaInternet Explorer の設定ダイアログとくらべて充実しているとは言いがたく、直感的でもなく、設定ファイルを直接編集しなければならない場合も多い。しかしこの設定ファイルは Emacs Lisp のコードそのものなのである。設定のためだけにプログラミング言語である Emacs Lisp を習得しなければならない、という状況はエディタを使いたいだけのユーザにとっては許容しがたい。

第三に、エディタと Lisp 開発環境が融合していて開発しやすいためか、類似した機能を実現した多数の実装が乱立しやすい。特にメーラについては「自分向けのメーラ」的なバリエーションが乱立しており、混乱を招きやすい。

このような問題もあるが(あるからこそ)、特に Lisp がわかるプログラマにとっては人気が高いエディタである。

ドキュメントシステム[編集]

GNU Emacs のマニュアルは、Emacs 自身を以下のように説明している。

Emacs is the extensible, customizable, self-documenting real-time display editor.(Emacs は拡張可能でカスタマイズ可能で、自己ドキュメントを行うリアルタイム表示を行うエディタである)

self-documenting(自己ドキュメントを行う)とあるように Emacs はそれ自身のドキュメント化に力をおいたエディタである。具体的には以下の特徴を持つ。

  • ドキュメントシステム texinfo をもつ。texinfo は GNU Emacs の標準ドキュメントシステムであり、Emacs のマニュアルは texinfo でドキュメント化されている。texinfo は TeX をベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメント info として使用することも、TeX を経由して組版されたペーパドキュメントとしても利用することができる。
  • Emacs のキーに割り当てられているすべての操作は Lisp 関数であるが、その Lisp コードのドキュメントコメントからキー操作の説明ドキュメントが生成される。これらのコメント=マニュアルは細粒度のコマンドごとのドキュメントであり、機能とドキュメントの乖離が起きにくくなっている。


外部リンク[編集]

  1. ^ Thomas Widmann (13 June 2005). ""Emacs" defined in Collins English Dictionary". Newsgroupcomp.emacs. [email protected]. 2006年9月27日閲覧
  2. ^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs”. 2006年9月27日閲覧。