序
動画をポータブルな形式に変換したり、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
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サーバーに繋ぐけど、サーバー名をベタで書かないといけないのが残念。