本セッションの登壇者
今日はEmacsの話をさせていただきたいと思います。
自己紹介すると、普段はピクシブ株式会社でPHPを書いていて、個人的にEmacs LispでPHP ModeというPHP開発環境を開発しています。
立ち位置としては、エディタ戦争とか言うといろいろと対立を煽るので良くないよねという考えなので、EmacsだとかVimだとかいたずらに煽り散らかすのは遠慮していただければと思います。
Emacsの本質はモダンなLISPマシン
さて、Emacsの最新情報と行きたいのですが、前回2023年の発表からのわかりやすいニュースはそんなにないんですね。内部ではいろいろな変更が着々と進んでいます。AIなど最新のものと連携できる拡張ができていますし、脆弱性対応などEmacsそのものも最近リリースされていて、Emacs 30という新しいバージョンの開発が進んでいる状況です。
さて、1年前の『Emacs最前線』のおさらいをしていきましょう。「Vimはいいぞ」という話をしました。
Emacsは優れたOSかもしれないけれど、残念ながら「優秀なテキストエディタを欠いている」ということで、Emacsの本質とは何かというと、モダンなLISPマシンなんです。
LISPマシンというのは1980年代ぐらいまで開発されていたLISPという高級プログラミング言語を扱う専用コンピューターです。特に、シンボリックスというコンピューターなどはCG分野で結構使われていて、その流れで90年代はLISPをやっているCG関係の人が多い時代でした。PlayStationのゲームなどもLISPを使って開発されたりしていたらしいです。そういう機械が40年以上前にあったというのが前提にあります。
日本でもLISPマシンが開発されていました。この写真は、NTTと沖電気が開発していたELISというコンピューターです。このようなLISPを使ったコンピューターも実際に使えるワークステーションとして1990年ぐらいに販売されていました。
皆さんが使っているのがLISPマシンやJavaマシンではないように、特定言語の専用コンピューターというのは、2024年の世の中にはなくなっています。
だが、Lispは死滅していませんでした。ここでEmacsの登場です。Emacsというのはスクリプトで拡張できるテキストエディタの元祖なんです。現在我々が目にしているEmacsとは別に、大昔のPDPというコンピューターで動いていたTECOというエディタの拡張マクロ集が源流にあるんですね。
これを作っていたのがリチャード・ストールマンたちです。
『ハッカーズ』という本に、リチャード・ストールマンという人がMITのAI研究所でいろいろやっていて、そこから去ってGNUというOSを作りましたという話があります。
このストールマンという人は自由なOSを作りたいというので、まずコンパイラとエディタを作りました。そうしてGCCとEmacsができました、めでたしめでたし、という話で、ここまでが振り返りでした。
Emacsで何でもできる:「EmacsはOS、Emacsは環境」
改めて、Emacsというテキストエディタで何ができるかは実際にEmacsを使ったり触れたりしている人とそうでない人で結構認識の大きな隔たりがあるのではないかと思います。
よく言われるのは、「Emacsはエディタではない」。
このEVILというのはEmacsで実装されたVimの互換レイヤーみたいなもので、これを使うとフル機能ではありませんが、ほぼほぼVimみたいな操作ができます。
EmacsはメールでもRSSリーダーでもあり、EPUBもPDFも読めます。何でもできるぞというのがEmacsなんですね。
ということで、Emacsをよく使っている人は「EmacsはOS、Emacsは環境」と言及することがよくあります。これはジョークではなくて、Emacsをあまり使わない人の大きな誤解があるんです。
「Emacsでターミナルのエディタでしょ?」と、黒い画面に向かってずっとカタカタやってる人が使うエディタなのではないかと思われていますが、EmacsはGUIでも動きます。
スプラッシュスクリーンと呼ばれる、起動直後の画面でいきなりEmacsのロゴが出てきます。
これだけではなくて、マークダウン文書をEmacsのマークダウンモードで開くと、このように見出しの部分を大きく表示したり、そこだけフォントを変えたりもできます。特定の場所を強調表示する時に、標準のフォントとは別にフェイスという単位で扱い、テキストの編集エリアで文字を変えたり、特定の場所だけ色をつけたりできる機能がサポートされています。スライド下半分のコードブロックの部分の背景もそうですね。
また、Emacsの標準機能でPDFが開けます。pdf-toolsという拡張パッケージを入れるとさらに高解像度で表示できるようになります。
これはEmacsの標準機能ではありませんが、EPUBもきちんと開けるようになっています。GUIの上でマウスホイールを使ってスクロールしたり、画像もEPUBの中で表示したり、Emacsから出ることなく、実行できます。
dired-previewという拡張を利用して、ディレクトリを開いて、選択したファイルの画像をそのままプレビュー表示することもできます。Emacs自体がSSHなどで接続した先へリモートアクセスができるので、サーバー上にあるディレクトリの画像ファイルを見たい時も、ターミナルからSSHでつなぐよりもEmacsを使って開くとかなり使いやすいと思います。
これはちょっと地味ですが、Emacs自体がGUIでマルチウィンドウです。Emacsの用語ではフレームというのですが、この画面の真ん中でポップアップしているところはGUI的には別のウィンドウで開いていて、任意の位置に表示できます。大昔のEmacsでは、表示しているテキストを無理やり書き換えて、こうした擬似GUIのようなものを再現されていたこともありますが、最近では「posframe (child-frame)」という機能でポップアップを画面に出すようになっています。
そもそも複数のウィンドウを扱えるので、ウィンドウを並べて表示したり、重ね合わせて表示したりみたいなこともできるようになっています。
ウィンドウ内でブラウザも開けますが、残念なことに今日試したところmacOSでは動きませんでした。このスライドでは(デモのために)OS側の機能を使っていますが、理論的にはEmacsの画面内だけで、左側でブラウザを開いて右側で編集するなどができます。
単なるエディタではなくアプリケーションの実行環境
改めてEmacsというのは、単なるエディタではなくて、アプリケーションの実行環境です。OSを問わずに実行できますが、現実的にはどうかというと、
外部のプログラムを起動したり、ファイルシステムに依存するところではうまく動かなかったりします。LinuxではOKでもWindowsではコマンド実行で失敗する場合もあって、難しいところです。
ただ、最近Windowsでは最初からWSLを有効にできるので、WSLでDebianなどをインストールしてGUI版のEmacsを起動すれば、ほとんど何も設定せずに利用できます。その場合の弱点としては、Windows側のIMEを使うことができないので、Emacs内で日本語を入力する方法を自分で設定する必要があります。
あと、自分は使っていないのですが、Emacsアプリケーションフレームワークといって、ブラウザとかPDFビューワーみたいなものをさらにGUIっぽく使いこなすためのフレームワークを実装している人もいます。
lsp-bridgeという、Emacs上で超高速、ほぼリアルタイムで表示される、VS Codeくらいの速度で動作するLSPの実装を作っている人もいます。
改めて、Emacsは環境です。
今回のタイトルは「Emacs as a VM」ですが、VM(仮想環境)とはどういうことかというと、30年前、40年前の夢のコンピューターを仮想化したものと考えられ、現代に残る最後のLispマシンだということです。
Lispという言語にはパワーがあります。前回も言いましたが、ポール・グレアムというLispでWebアプリケーションを作って、一攫千金でベンチャーキャピタルを立ち上げた人がいるのですが、この人が「Lispはいいぞ」という文章をいろいろ書いています。
また、「ゆるコンピューター科学ラジオ」という番組にもLispの話がありますので、興味がある人は見てください。寝ながらマクロを解いていたのは僕です。
そして、ハッカーになりたければEmacsを使いましょう。「風になりたいやつだけがEmacsを使えばいい」という記事もあります。
Emacsを昔使っていた人は見た目があまり変わっていないと思うかもしれませんが、中身は洗練されていたりします。進化するコンピューターサイエンスの問題に立ち向かって、自分の最強の環境を作りたい人はEmacsを使いましょう。
ということで、Emacs JPはSlackなどでコミュニケーションを取っています。
また、今月末にTechRAMENというカンファレンスで、「なぜテキストエディタを極めるのか」という話をする予定です。以上です。ありがとうございました。