概要
- 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のような統合環境 として、独自の価値を提供