LoginSignup
31
28

More than 5 years have passed since last update.

Emacsで他の言語とRPC

Last updated at Posted at 2015-12-20

Emacs 25.x から、とうとう Dynamic Module 拡張が入るようになりました。(参考: Emacsに mrubyを組み込んでみた)
これで、もともとEmacs本体に持っていなかった機能をネイティブに拡張することが可能になる世界が開けました。果たしてこの流れが良かったのかどうか、判断するにはもう少し時間が必要ですね。(参考:Emacsは死んだソフトウェアの思想が設計にもたらす影響

自分は、数年前からIPC(プロセス間通信)によるEmacsの拡張を試みていて、EPCというEmacsのためのRPCフレームワークを作ってきました。
- EPC : The Emacs RPC
- Perl側モジュール (本体に付属)
- python-epc by tkfさん
- ruby-elrpc
- nodejs-elrpc

このしくみを用いることによって、別の言語で書かれたプログラムの機能をEmacsから使うことが出来るようになります。

例えば、EPCを使った代表的なアプリとして、以下のものがあります。
- Emacs Jedi : 高速で強力なPython補完拡張
- EDBI : EmacsでDB操作
また、EmacsでWebkitを強引に使うものに使われたり、NimのEmacs拡張のためにNim本体にEPCのRPCが入ったりと、期待通りの使われ方をされていているようで、ありがたく思います。
なるべくUIの動作を妨げず、高速に動くように作りましたので、それなりに実用的なものが作れるはずです。そのかわり多少非同期の扱いは大変かもしれません。

個人的には、まだまだこれでやりたいことはたくさんあります。

昨年はelispでスレッドプールみたいなものを作ってみました。まだ途中なのですが、Emacs同士で負荷を分散することが出来ました。もう少し、やれば使えるところまで来そうなのですが、気合が足りませんでした。

今年はEmacsとWebの接続を目標に少し開発を進めてきました。すでに今年もいくつかの先行研究があります(Emacs Lispでブログエンジン書いたMicroservices 風 Emacs HTTP Server(s) on Heroku)。

自分の場合は、直接Emacsでリクエストを受けるのではなくて、リクエストはRubyなどのサーバーで受けておいて、Emacsは別に起動させてEPCで通信するという構成を考えています。こうすることで、Webは慣れたRubyやNodeJSで書いておいて、落ちやすいEmacsのインスタンスは使い捨てにして全体の安定性を高めるようなことが出来るのではないかと考えています。

実際に作ったものをここでばばーんと紹介できたらよかったのですが、ちょっと今年も気合が足らずに完成までたどり着けませんでした。。。途中のスクリーンショットだけはっておきます。
calfwをWebで動かしているところ

calfwのバッファをWebブラウザで開いているところです。比較のためにEmacsの画面ものせてます。

目標の機能は、以下のようです。
- 少しの設定情報で、任意のバッファをほぼそのままWebブラウザで表示させる
- Webブラウザでのクリックを適当にエミュレートしてEmacsのバッファと相互作用する

最終的には、howmやorgmodeをスマートフォンで表示させて、あと簡単な操作ぐらいしたいというものです。PCのEmacsの情報をモバイルでも見たいというソリューションには、一つ前のgrugrutさんのorgmodeアプリや、myuheさんのGoogleとの同期などの方法がありますが、どうせならスマートフォンにEmacs載せるような方法のほうが、それぞで個人でカスタマイズしやすいしEmacsらしいのでは?との考えで進めています。

まだまだ試行錯誤の段階ですが、自分がかなり必要に迫られて作っていますので、おそらく来年には完成できるのではないかと考えています。

以上です。

31
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
28