この記事は、Node.js Advent Calendar 2014 - Qiitaの19日目です。
はじめに
最近はWebAudio APIによってJavaScriptで簡単にオーディオアプリが作れるようになりましたが、最終的なアプリ配布を考えるといろいろと面倒です。
- 複数ブラウザやブラウザバージョンの差異吸収が面倒(開発者サイド)
- 一時期のdeprecatedなAPI大量発生前後のような現象
- prefix付きの
AudioContext()
に対応しないといけない場合がある - 同じ
AudioContext
でもブラウザによって挙動が異なる
- アプリの実行が面倒(利用者サイド)
このような場合に、node.jsとChromiumベースのデスクトップアプリ用フレームワークAtom-Shellを使うと、以下なようなメリットがあって楽でした。
- 環境が固定できて複数ブラウザに対応しなくていいので楽
-
AudioContext()
だけを考えればよい - atom-shellのweb-kitだけを考えればよい
- 実行環境に関する面倒な説明が不要
-
- node-webkitよりオーディオファイル(.mp3等)の扱いが楽
- atom-shell:Support for proprietary codecs #633
- node-webkit:Using MP3 & MP4 (H.264) using the video & audio tags.
- パッケージングも比較的楽
- 簡単な起動用ファイルを書く程度
- 起動が楽
- 実行ファイル(Atom.appなど)を叩くだけ
ということで、以下で簡単に方法を説明します。
Atom-shellダウンロード
-
npmでatom-shellをダウンロードします。
mkdir myproj && cd myproj npm install atom-shell
※ 公式バイナリをダウンロードしてきても構いません。
アプリ開発
-
package.json
を作成します。cd node_modules/atom-shell/dist/Atom.app/Contents/Resources mkdir app && cd app npm init
適当にリターンを押し続けます。
※OSXのケースです。WindowsとLinuxはApplication distributionを参照してください。
-
アプリ起動用ファイルを作成します。
Atom-shellを起動した時に最初に呼ばれるJavaScriptファイルを作成します。ファイル名は
package.json
の中のmain
に書かれています。npm init
の際に適当にリターンを押していると初期値にindex.js
が入るので、index.js
とします。vim index.js
[1]を参考に、
index.js
を以下のように編集します。var app = require('app'); var BrowserWindow = require('browser-window'); var mainWindow = null; app.on('window-all-closed', function() { if (process.platform != 'darwin') { app.quit(); } }); app.on('ready', function() { // メインウィンドウを作成 mainWindow = new BrowserWindow({width: 1000, height: 600}); // index.html を読み込む mainWindow.loadUrl('file://' + __dirname + '/index.html'); mainWindow.on('closed', function() { mainWindow = null; }); });
-
アプリ格納
package.json
と同じディレクトリにindex.html
を配置します。.js
や.css
など関連するファイルも配下のディレクトリに格納します。例:
├── css │ └── xxx.css ├── img │ └── xxx.png ├── js │ └── xxx.js ├── index.html ├── index.js └── package.json
-
以上で終わりです。
アプリ配布
-
node_modules/atom-shell/dist
配下のAtom.app
を配布します。OSXとLinuxなら実行ファイルをリネームすることができます。
アプリ実行
-
Atom.app
を起動します。
その他
-
ソースコードをプロテクトしたい場合
-
node-webkitとの違い
-
Node.jsのプログラムを実行する。
サンプル
オフラインで動作するJS製のDJミキサーです。atom-shellのおかげで、AudioContext()
だけに対応すればよくなりました。
バイナリ
クリスマスも近いということでどうぞ。
- browserdj-atom-shell : Mac OSX版(64bit)
- browserdj-atom-shell : Windows版(32bit)
- browserdj-atom-shell : Linux版(64bit))
追記(12/21): バグ修正 & WinとLinux版も配布しました。
リポジトリ
- browserdj-atom-shell : Atom-shell版
- browserdj : Node.js版と静的ファイル版
追記: gulpによる自動化
gulpを使うことでAtom-shellのダウンロードやOSX, Linux, Windows用のバイナリ生成を簡単に自動化できます。新たに記事を投稿したのでgulpを使う場合は以下を見てください。