世界を動かす技術を、日本語で。

Emacsでは、すべてがサービスのように見える

2026年7月10日原文(yummymelon.com)

概要

  • Emacs はOSではないが、OSのようにアプリやユーティリティを統合可能
  • Emacs は多様なクライアント機能を持ち、ほぼ全ての作業をEmacs内で完結可能
  • クライアント・サーバーモデル の観点からEmacsの役割を解説
  • Elisp によりサービス連携や即興的な拡張が容易
  • 例として wttr.inクライアント の実装方法を紹介

EmacsとOSの比較

  • Emacs はOSではないが、アプリ・ユーティリティを OSカーネル上で統合 する力を持つ
  • ファイルシステムやネットワークなど OSサービスへのアクセス が組み込みで可能
  • 他のプログラム実行も可能なため、 即席でクライアント動作 を実現できる柔軟性
  • 多様なクライアントモードにより、 Emacs内で多くの作業を完結 できる
  • Emacsだけで生活」という発想に説得力を与える多機能性

クライアント・サーバーモデルの基礎

  • クライアント・サーバーモデル は、リソース提供者(サーバ)と要求者(クライアント)の分業構造
  • クライアントは リクエストを送り、サーバがレスポンスを返す という流れ
  • 通信は ネットワーク越し または ローカル で実現可能
  • REST型アーキテクチャが主流例として挙げられる

Emacsクライアントの構成要素

  • クライアントの主な責任範囲
    • UI(ユーザーインターフェース) :例:ミニバッファ、バッファ、補完機能
    • クライアントエッジ :サービスとの通信部分(例:ネットワーク、ソケット)
    • ローカルデータベース :サーバとやり取りするデータの管理(例:ハッシュテーブル、SQLite)
  • Emacsには 組み込み・サードパーティ製ライブラリ が豊富に存在
    • UI:Minibuffers, Buffers, Completion, Tabulated List Mode, vtable, Transient
    • 通信:URL, Socket (TCP/UDP), SMTP
    • シリアライズ:JSON, XML
    • データ管理:Collections, Association Lists, Property Lists, Hash Tables, SQLite

Elispによる拡張性

  • すべてのライブラリは Emacs Lisp(Elisp) で操作可能
  • 動的言語 であり、実行時の即興的な拡張や統合が容易
  • Emacs内の関数やシェルコマンドを 柔軟にオーケストレーション できる

wttr.inクライアント実装例

  • wttr.in はコンソール向け天気予報Webサービス(JSON出力対応)
  • Emacsコマンドwttr
    • 場所を入力
    • HTTPリクエスト実行
    • JSONレスポンスを解析
    • 結果をミニバッファに表示
  • 主な関数
    • wttr:ユーザー入力から天気情報を表示
    • wttr--request-url:リクエスト用URL生成
    • fetch-json-as-hash-table:URL取得&JSONをハッシュテーブルに変換
    • wttr--report-message:JSONから必要情報を抽出し、表示用メッセージを生成

サービスとしての外部コマンド利用

  • ネットワーク処理やJSON処理を 外部スクリプト(例:Python) に委譲可能
  • Elispからは シェルコマンド呼び出し で結果を取得し、表示や保存が可能
  • Elispの柔軟性により、 コマンドラインユーティリティとの即席連携 が容易

Emacsの魅力とまとめ

  • Emacsから見ると全てがサービス として扱える設計
  • EmacsのAPIは 高い抽象度 を持ち、少ないコード量で多機能を実現可能
  • Elisp+外部コマンドの即興的な連携が、 パワーユーザーにとって魅力的
  • Emacsは OSのような統合環境 として、独自の価値を提供

Hackerたちの意見

ここ数年、Emacsを使ってるんだ。Org modeを試してみたくて始めたけど、その柔軟性に惹かれて続けてる。

spacemacs.orgにはしばらくいるけど、Keychron G6 Proを手に入れたから、caps lockを再プログラムして、ちょっとハードコアなinit.elのスタイルに挑戦してみるつもり。アイデアあったら教えて!

僕のキャリアの中での転機の一つは、Emacsを使って「Emacsはオペレーティングシステムだ」という意味を本当に理解できたことだね。冗談じゃなくて、信じられるものとして。

でも、君はすでにオペレーティングシステムを持っていて、コーディングもできたよね…Emacsが本当に君に新しい能力を与えたの?これはテキストエディタであって、IDEや一般的な自動化ツールじゃないんだから。mspaintにlispを追加したら、mspaintが突然すごくなるの?その論理が理解できない。

よく言われるのは、Emacsはオペレーティングシステム(OS)だということ。これは本当じゃないけど、OSカーネルレベルの上でアプリケーションやユーティリティを統括する能力があるから、OSと比較されるんだよね。リスプマシンやそのバリエーションが主流にならなかったからこそ、こういう話が出てくる。「Symbolics Lisp Machineデモ」 https://www.youtube.com/watch?v=o4-YnLpLgtk 「EmacsとLisp」 https://funcall.blogspot.com/2025/04/emacs-and-lisp.html EmacsはLucidによってXEmacsとしてフォークされ、LSPの初期のアイデアの一つが作られたけど、今ではほとんどの機能がEmacsに統合されてるよ。 https://dreamsongs.com/Cadillac.html 「Lucid Energizeデモ」 https://www.youtube.com/watch?v=pQQTScuApWk

たとえLISPマシンが普及しても、それ上で動くエディタはOSにはならないよ。こういう主張はプラットフォームを理解していない人から来るもので、どんなプラットフォームもOSと混同しちゃうんだ。ウェブブラウザをOSだって呼ぶ人もいるし。この間違った定義だと、RobloxみたいなものもOSって呼べちゃうよ。

最近これを見つけたんだけど、Emacsを使わない人にとっては良い短いイントロだと思うよ。 https://www.youtube.com/watch?v=mJZDmO5yOxE

今、Anon Emooseのinit.elがすごく気になる!

これって、"クライアント"、"サーバー"、"リクエスト"を広く定義すれば、ほぼ何でもクライアント/サーバーの二分法に押し込められるってことを証明してるよね。同じように、Emacsが「Unix哲学」に従ってるって必死に主張してた人たちのことも思い出すよ。LISP関数が一つのことをやって、それを上手くやる限りね。これらのことから何を得られるのかは分からないけど、EmacsはLISPマシンのアイデアに従ってるってことは、誰もが同意できると思う。そこから、Emacsはほぼ何でもできるし、やりたいことができるんだ。CLIツールとの連携も素晴らしいし、これをクライアント/サーバーと呼んでもいいけど、その定義から何を得られるのかは分からないな。実際、Emacsは何十年も存在してきて、たくさんの流行や過熱を経てきたけど、そのたびに何かを取り入れてきたんだ。実際、内部にはCEDETというセマンティックパーシングエンジンが埋もれてるけど、今はほとんど使われてない。LSPが登場したからね。今ではエージェントもあるし、Emacsはそのフロントエンドとしてもかなり decent だよ。

そういえば、CEDETの中にはセマンティックパーシングエンジンが埋まってるけど、今はほとんど使われてないよね。まあ、昔はほとんどのIDEにあった機能だったけど。今もそうなのかはわからないけど、最初のJava言語サーバーはEclipseのJavaセマンティックパーシングエンジンから派生したって記憶してる。

EmacsはUnixの世界にいるLISPの難民だね。Unixの哲学には従ってないけど、LISPの哲学には従ってる。でも、統合はされてる。どこでこれを見つけたかは忘れちゃった。

25年以上Emacsを使ってるけど、去年転職したら、使わせてもらえなくなったんだ。絶対にEmacsが輝く場面でもね。チーム全員が同じツールを使うべきだって言われて、確かにそれは一理あると思う。残念ながら、他の人たちをEmacsに切り替えさせることはできなかった。だから今は、各タスクごとに一つずつ目的別のツールを使ってるけど、Emacsを使うよりも効率がかなり落ちてるし、新しいUIやキーボードマッピングを覚えるのも大変だよ。

Hacker Newsで議論の続きを見る