non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

それでもNode.jsをMacアプリ化するをやる

おはようございます。次男は長男に比べると、よく食べます。そして、食べてないほうが良い物まで食べようとします。そんな訳で、先週は次男のスーパーボール食べちゃった事件が起きました。しかし、結局はかじって、ボールを分割しただけのようでした。kjunichiです。
 

はじめに

Atom Shellやnode-webkit使えば、アプリ化を自分で1からする必要はないと思うが、 無理やり上げるなら、node-webclで作ったOpenGL表示をするスクリプトなどが、 多少アプリ化するとかっこよさそうだし、現状node-ffiが0.11系に非対応なので、 Atom Shellや最新のnode-webkitで動かすことは出来ないので意味がありそう。

アプリ化するのに必要な事

  • アプリケーションバンドルに関しての知識
  • アプリケーションバンドル内に配置したファイルへのパスの取得方法
  • nodeコマンドのフルパスの取得

アプリケーションバンドル

Hoge.appという名のディレクトリ配下に特定のフォルダ、ファイルを配置することで、OSXにアプリケーションを認識され、Finderに表示されたアイコンをダブルクリックすることで、起動が可能となる。

アプリケーションバンドルの雛形を作る

以下のコマンドでアプリケーションバンドルに必要なフォルダやファイルを作成できる。

echo ""|osacompile -o foo.app

アプリケーションバンドル内のリソースへのアクセス方法

AppleScriptの場合や、おそらくネイティブのCocoaアプリならそのためのAPIが用意されている模様。しかし、今回のNode.jsの場合、これらのAPIを使えない。困った。

シェルスクリプト自身のパス取得が可能

今回の作業で初めて知ったが、シェルスクリプトで自分自身のパスを取得することが可能だった。

そこで、この自分自身のパスを元に、jsファイルにアクセスする。

# ${0} の dirname を取得
cwd=`dirname "${0}"`

# ${0} が 相対パスの場合は cd して pwd を取得
expr "${0}" : "/.*" > /dev/null || cwd=`(cd "${cwd}" && pwd)`

jsPath="$cwd/../Resources/Scripts/test.js"

node_modulesの配置

nodeコマンドに指定する.jsファイルの格納されたフォルダ配下にnode_modulesフォルダを置けば、アクセス可能となる。

nodeコマンドのパスの取得

bash -lで.bash_profileが読み込まれるので、.bash_profileにnodebrewやnvmの設定を記述していれば、これらのバージョン管理システムに設定したnodeが使用される

bash -l -c "node hoge.js"

Link

まとめ

タイトルは、それでもNode.jsをやる by Yosuke Furukawaからインスパイヤーされリスペクトしてみました。 実は、彼と私は共通点があり、富士ゼロックスDeNAを受けた事、違いは、私は両方落ちたことw。

関連記事

4年前の記事

2年前の記事