この記事の途中に、以下の記事の引用を含んでいます。
Emacs: A Paradigm Shift
「拡張こそ善」——Emacsが文学する“自作主義”の衝撃
プログラマーやライター、研究者など多様なユーザーに支持されてきたテキストエディタ「Emacs」。
ですが、その本質的な魅力は、単なる“高機能エディタ”であることにとどまりません。
今回紹介する記事は、Emacsの拡張思想が他のエディタとは一線を画すものであり、「ユーザーによる自作・改造を積極的に推奨する設計思想」こそがEmacsを特別な存在にしてきたことに焦点を当てています。
一見すると地味なカスタマイズの話題も、「ソフトウェアの枠組み自体を好きなように再構築できる」というEmacsの根源的な哲学を考えるうえで示唆に富んでいます。
しかも本記事では、Emacsの拡張が「単にAPIを用意する」こと以上の、際限なき“ハッキングの自由”を提供している点が特に強調されています。
“システムがあなたのハックを歓迎する”:Emacs独特の拡張思想を紐解く
まず筆者は、他のエディタと比較したときのEmacsの特異性について以下のように述べています。
“emacs doesn’t just make deep customization available, but it actively encourages you to make an absolute customization messes masterpieces. Core editor functions aren’t just documented, but often include tidbits about ‘you probably want to see this other variable’ or ‘here’s how you should use this’. Not only that, but emacs happily hands you functions shaped like nuclear warheads like advice-add (that let you override any function) that can absolutely obliterate your editor if you hold it the wrong way. Of course, this also grants you unlimited power. Remember that emacs is designed to be torn apart and rearranged.”
つまり、Emacsは「深いカスタマイズ」を“許可する”のではなく、むしろ「混沌とした自作の傑作を生み出す」ことを積極的に奨励しているのです。
しかも、エディタの中枢関数の多くは「関連する変数を参照しろ」とか「こう使うべきだ」とユーザーに詳細を伝える作りになっています。
さらに強力なのは、「advice-add
のような核兵器並みのAPI」をも提供し、「好きな関数をいつでも自由に横取りできる」という、ほぼ無制限の権限まで与えられています。
要するに、Emacsは「分解し直して再構築していいですよ」と公然と表明している、類稀なソフトウェアなのです。
他のエディタやアプリでは拡張点を限定してAPIを整備しますが、Emacsは「内部構造のすべてを好きにしてよい」というレベルの自由度を用意しています。
簡素な例題に隠された“拡張哲学”への踏み込み
具体例として筆者は、「読書リストをorg-modeで管理する際、ファイル保存ごとに自動的に年順で並び替えたい」という日常的なニーズを取り上げています。
最初のアプローチは、org-modeのコマンドorg-sort-entriesをLisp関数でラップし、
before-save-hook
に仕込んで自動実行するというもの。
この時、Emacs独自の「hook」による拡張ポイントが“ごく自然に”利用されており、「スクリプトによる自動化」が非常に手軽に実現されています。
しかし筆者は続けてこう指摘します。
“We tapped into the hook extension point but this would be possible in any scriptable system that exposes well-defined extension points such as hooks and commands.”
そう、ここまでの拡張は「どんなスクリプタブルなシステムでもできそうだ」という範囲から出ません。
Emacsの“異常なまでの自由度”を体感するには、もう一段階踏み込む必要があります。
素朴な限界を突破せよ——“本来想定されていなかった拡張”の実践
ここからが圧巻です。
筆者はorg-modeの標準APIや設定ではカバーされていない、「ファイルの中に#+SORT: year
という新たなメタ情報を記載し、それに応じて自動ソートを走らせる」拡張を構想します。
通常、こうした追加の“独自メタ情報”の処理は公式サポートされておらず、ソースコードを書き換えないと実現困難です。
筆者もorg-modeのソースをたどり、拡張ポイントがないことを確認します。
さて、ここでEmacsの真骨頂が光ります。
筆者はこう綴ります。
“If this was a ‘normal programming environment’ we would make our changes to this function body and forever maintain a fork of org-mode. As this is elisp instead we have choices.”
つまり、他のアプリケーションなら「本家のコードを書き換えてフォーク管理」する必要があるような場合でも、Emacsなら「advice-addを使って、任意の既存関数の処理を事後的に追加・変更」できるのです。
記事では、org-set-regexps-and-optionsという初期化関数にadvice(助言)として自作の関数を後付けし、ユーザー独自の#+SORT:
行を読み取ってソート対象を決めるようにしています。
hookやAPIによる拡張ですらカバーされないケースでも、「根本の制御フローに割り込む」ことさえEmacsは容易に可能です。
このようにして、「org-modeの基本仕様も、ファイル単位で簡単に“上書き”できてしまう」のがEmacs Lisp(elisp)流の拡張です。
本当にこれは“裏技”なのか?Emacsエコシステムに見る功罪と哲学
筆者は「これは酷いハックに見えるが、Emacsはまさにそういう‘魔改造’を歓迎しているデザイン」と締めくくっています。
この点、私は深く同意しつつも、ここにEmacs流派の「危うさ」と「強み」の両方が凝縮されていると感じます。
Emacsの強み
– APIがなくても、どこにでも割り込める
– 既存ロジックを好きなタイミングで上書きや拡張できる
– 複雑な自作機能も、コア改造なしで実現可能
– (極論すれば)自分だけの“別物のエディタ”を作ってしまえる
一方、課題も……
– advice(add)による関数の横取りは、巨大プロジェクトでは予期せぬバグや挙動不一致の温床にもなりうる
– “俺流改造”が蔓延すると、他人との環境共有/バグ報告/再現性確保が難しくなる
– コミュニティ的には“車輪の再発明”や“独自文化の分断”も生じやすい
とはいえ、Emacsコミュニティでは「エディタで人生をハッキングする」という文化的バックボーンが強固であり、
“自分の道具を自分で制御せよ”という哲学こそがユーザーを惹きつけてやまない原動力でもあります。
まとめ:「環境は、自分で切り拓け」への気づき
この記事を通して、Emacsが提供しているのは単なる“拡張しやすいソフトウェア”ではなく、
「ソフトウェアとの関係性そのものをユーザーの自由意志に委ねる」という一種の“思想”であることが鮮烈に示されました。
他の多くのアプリが「想定された範囲で、便利な方法を許す」ことに留まる一方、Emacsは「思いついたことは、どんな手段でもやってみろ」という壮大なボトムアップ型の拡張観を体現します。
これはプログラマーやクリエイターにとって、ツールとの関係を“受け身”から“能動的創造”へと転換する強力なインスピレーションにもなります。
もちろん、万能性の裏には整合性維持や学習コストなど課題も存在しますが、
「環境に不満があるなら、自分で切り拓ける道がある」と知ることは、全く新しい創造性の扉を開くヒントになるはずです。
Emacsユーザーか否かを問わず、“自分仕様の環境構築”に興味のある方には、ぜひこの記事が提起する「拡張というパラダイムシフト」に注目してほしいと思います。
categories:[technology]
コメント