January 1, 2016

2016年の抱負: Emacs Lisp を書く会社を立ち上げる

現状と課題、そして展望

私には、Emacs Lisp によるウェブアプリケーション開発シーンを盛り上げていきたいという熱い想いがあります。

最近、「次に来る大物Web言語」と称され Elixir などが注目されている様子が伺えますが、ウェブアプリケーションのサーバーサイド実装において次に来る言語というのであれば、個人的には Emacs Lisp こそを推していきたいと思います。なぜなら Emacs Lisp には、インタプリタでありそして同時にプログラミング環境でもある Emacs というソフトウェアが存在するからです。Emacs と最も親和性が高く、最もプラグインが豊富な言語こそが Emacs Lisp です。これを単なる Emacs の設定やプラグインを記述するための言語に留めておくには惜しいと言えるでしょう。

残念ながら現状 Emacs Lisp でのウェブアプリケーション開発は全くといって注目されていないので、私が先陣を切って盛り上げていかねばなりません。しかしこれまた残念ながら、Emacs Lisp には elnode などのウェブサーバー実装自体は存在は存在するものの、Python で言う所の WSGI、Ruby で言う所の Rack の様なウェブサーバとウェブアプリケーション間の連携方法を取りまとめて共通化するための抽象化レイヤが存在していないため、ウェブサーバーごとに実装がバラバラであり、ウェブアプリケーションを書く場合は選択したウェブサーバーと実装が密結合になってしまうといった状況です。これではとても、そもそもウェブアプリケーションをまともに開発できる下地が整っているとは言い難いでしょう。

本気で Emacs Lisp におけるウェブアプリケーション開発を推し進めるのであれば、まずはここから手を出していく必要があるでしょう。現在 Rack の仕様と実装を詳しく調べています(Rack は実装が仕様なので、ひたすらコードを追う形です)。それが終わった後、同じ Lisp 方言である Common Lisp の Clack (Common Lisp には既にこの抽象化レイヤが存在する!)の実装も調べる必要があるでしょう。その後、Emacs Lisp にて仮の実装を書き始めます。とりあえず HTTP/2 の事は置いておきますが、追々対応したい。

これが完成すれば、ウェブサーバーが実装できるようになります。Ruby における Thin ライクなシンプルなウェブサーバを実装した後、本格運用向けに Unicorn ライクな prefork 型のウェブサーバを開発する予定です。それが完成すれば、Nginx をフロントに置き連携させることで、ある程度の規模のウェブサイトを運用できる下地が整うでしょう。ちなみに、標準ライブラリが充実していないため、Emacs Lisp から直接呼ぶことができるシステムコールの種類は限られており、 fork(2) などについては標準では呼び出す事ができません。そこで Emacs 25 のリリースにて実装が予定されている Dynamic module 機能を使いる予定です。必要な関数を実装した Shared Library を作り、Emacs に読み込ませることで各種システムコールを使用可能にしようという算段です。

ウェブサーバー実装が完成してやっと!ウェブアプリケーションフレームワーク(以下 WAF)を作る土壌が整ったと言えるでしょう。まずは Flask や Sinatra ライクなマイクロ WAF を作成し、余力があれば Rails ライクなフルスタック WAF の開発にも着手していきたい所です。

ここまで来て、ようやく皆さんが気軽にウェブアプリケーション開発を進められると言えるでしょう。現状 elnode を利用して実装しているこのブログを WAF を使って書き直しすることができます。

1人で達成するには中々ハードで長い道のりではありますが、気持ちでやっていきます。

Emacs Lisp はビジネスとして成立するのか

成立するかしないかで言えばしない気がすごくしますが、気持ちでやっていくしかありません。

現状、私の収入の半分以上がアフィリエイト収入です。誰とも会わず自分1人の作業だけで完結でき、ある程度スケールさせることができるアフィリエイトという手段は、自宅からほとんど外出できず、毎日出社して働くといったことができない私の様なゴミクズ人間とは相性が良いのです。(プログラマはもっとアフィリエイトやったらいい)

また、他の収入も、研究開発の外部委託や、社内 Slack に出没して曖昧にくだらないことを言ったりといった、いずれも時間の自由が効き外出せずに完結できる業務委託契約です。

ゆくゆくはウェブサイトの作成に Emacs Lisp を用いたり、Emacs Lisp の業務導入支援など、Emacs Lisp を活用した仕事を行っていきたいところですが、普通に考えて、少なくとも当面の間はかなり難しいでしょう。しばらくはこれらの(Emacs Lisp とは直接の関係がない)収入に頼って会社を維持していくことになるでしょう。社員も当面は私1人です。

社内 Slack に出没して曖昧にくだらないことを言ったりする謎の人物を導入してみたい会社は随時募集していますので、興味がある人はご連絡ください。

Emacs 関連の勉強会・もくもく会について

2015年は、Pixiv さんに会場を提供して頂き、「もくもくEmacs #1」といった Emacs のもくもく会を主催するなどしていました。2016年はもっと頻繁に Emacs の勉強会やもくもく会を開催していきたいと思っていますが、会場に使えるほど大きな事務所を借りられるほどの経済的余裕はないので、今後も会場提供をしてくださる会社様にお世話になると思います。

私が過去開催していた Vim のもくもく会もそうなのですが、基本的に初心者歓迎の会にする予定なので、興味がある方はぜひお越しください。

欲を言えば上野から近いエリアで開催することができたらかなりありがたいので、もしうちの会社の会場を提供してもいいという方がいらっしゃればぜひご連絡ください。

おわり

おわり