Node.js, Express3, Socket.ioで作る、コマンド実行Webインターフェース

動画をポータブルな形式に変換したり、DVDのバックアップとったり、BitTorrentのファイルダウンロードを登録したり、 ejectコマンドでディスクトレイを開けたり、とか、たまーにサーバー上で簡単なコマンドを実行したいこととかありますよね。

そういうのを一度、Python, Flaskで書いてみた[ https://github.com/shrkw/run-your-command-via-web-ui-py] けど、やっぱりコマンド実行したら標準出力も標準エラーもすぐに見たいよね、と思い、これこそWebSocketの出番や!となったので、Node.js + Socket.ioで書き直してみた。

構成する要素とできたもの

画面はこだわりがなかったので、普通にTwitter bootstrapで。
twbsの静的ファイルも配る必要があるので、Express3も。
要素としてはこれくらいで、できたのはこれ。

https://github.com/shrkw/run-your-command-via-web-ui

screen image

app.jsにちょろっと、Socke.io周りのコードを追加したくらい。
コマンド実行自体は、child_process.spawnで実行すると、stdoutとstderrがコールバックでとれるので、それぞれのコールバックでクライアント側のログ描画イベントをemitするのみ。シンプル。

感想

Socket.io

マジでらくちん。
onで受け口作っといて、emitでイベント送るだけというのがすごくわかりやすい。 難しいことを考えなくていい。

Bower

普通に楽チンなので捗る。でも、Node.js入れないといけないのはアプリケーションを他言語で作ってるときに少し面倒かな。主要言語にポーティングされると嬉しい。

READMEはPythonのプロジェクトだろうが、Markdownで書く。

課題

READMEにも書いたけど、クライアント側JSのio.connectの行でSocket.ioサーバーに繋ぐけど、サーバー名をベタで書かないといけないのが残念。