macOSでES2016を触るべくJavaScriptエンジンをインストールしようとmozjs-45.0.2のtarballをダウンロードしてビルドしたがデフォルトインストーラではライブラリが1つインストールされなかったので手動で作業して事なきを得た

ReactやNode.js華やかなりしであるが、それはともかく基礎的なES2016の学習をしようと思い、ReactでもNodeでもなくmacOS SierraにJavaScriptエンジンであるmozjsをインストールしようと血迷った。

MacPortsではバージョンがなぜか古いままだったのでMozillaからmozjs-45.0.2.tar.bz2をダウンロード。

https://people.mozilla.org/~sfink/mozjs-45.0.2.tar.bz2

手順としては簡単で、適当なディレクトリでtarballをtarで展開して(私はブラウザからダウンロードしたので直接Downloadsフォルダで展開してしまった)、展開されたディレクトリにあるINSTALLファイルに書いてある手順にしたがって作業をすればいいだけである。

と、思ったのだが……。

や、厳密には、ほぼ手順通りであった。
たぶん他のUNIX系OSであっても、私がmacOS上で作業したように、おそらく、スムーズにコトは運ぶはずだ。

まあ、こんなふうに、INSTALLファイルに書かれているとおりに、実行したわけだ。

[shell]
cd js/src
mkdir obj
cd obj
../configure && make
[/shell]

コンパイル時間はマシンスペックや同時に走っているプロセスに依存するのでなんとも言えないが、私のMBP(Retina,13-inch,Early 2015)では30分ぐらいで終わった。

終わったらmake installである。
当然/usr/local配下にインストールされるので、rootで実行する必要がある。
「zura」は私のユーザ名なので、その辺は適当にやってくださいな。

[shell]
sudo su – root
cd ~zura/Downloads/mozjs-45.0.2/js/src/obj
make install
[/shell]

出力は、こんな感じである。

[shell]
root# make install
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C js/src install
make[1]: Circular js.pc <- js.pc dependency dropped.
../../config/nsinstall -t js.pc /usr/local/lib/pkgconfig
../../config/nsinstall -t js-config.h /usr/local/include/mozjs-45
/Users/zura/Downloads/mozjs-45.0.2/js/src/obj/_virtualenv/bin/python -m mozbuild.action.process_install_manifest –no-remove /usr/local/include/mozjs-45 ../../_build_manifests/install/dist_include
From /usr/local/include/mozjs-45: Kept 0 existing; Added/updated 141; Removed 0 files and 0 directories.
../../config/nsinstall -t js-config /usr/local/bin
../../config/nsinstall -t libjs_static.a /usr/local/lib
mv -f /usr/local/lib/libjs_static.a /usr/local/lib/libjs_static.ajs
../../config/nsinstall -t libmozjs-45.dylib /usr/local/lib
../../config/nsinstall -t libmozjs-45.dylib /usr/local/lib
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C shell install
../../../config/nsinstall -t js /usr/local/bin
[/shell]

うん、よいよい。しかし、rootから一般ユーザに戻ってjsコマンドを叩くと…しょんぼりな結果に。

[shell]
zura> js
dyld: Library not loaded: @executable_path/libmozglue.dylib
Referenced from: /usr/local/bin/js
Reason: image not found
Abort
[/shell]

ライブラリがないといわれてしまう。
おいー。インストールしてくれへんのかいな。
findで/usr/local配下をあさる。

[shell]
> find /usr/local -name libmozglue.dylib
[/shell]

なんも表示されん…。
じゃあ、インストール元(mozjs-45.0.2/js/src/obj)配下は、というと…。

[shell]
> find . -name libmozglue.dylib
./dist/bin/libmozglue.dylib
./dist/sdk/lib/libmozglue.dylib
./mozglue/build/libmozglue.dylib
[/shell]

ありまんがな。
そいじゃnsinstallコマンドはあるんかいな?

[shell]
> find . -name nsinstall
./config/nsinstall
./dist/bin/nsinstall
[/shell]

dist/bin/nsinstallがある。
これやな。
ということで試しにdist/bin/libmozglue.dylibを入れることにした。
あ、例によってrootにsuしてからの作業(さっき書いたのでsu部分は省略)。

[shell]
cd dist/bin
./nsinstall -t libmozglue.dylib
[/shell]

特にメッセージ出力なく終わった。本当にインストールされたのかを確認。

[shell]
# find /usr/local -name libmozglue.dylib
/usr/local/lib/libmozglue.dylib
[/shell]

インストールされた。
では、さっそくjsコマンドを実行。

[shell]
> js
js> let a = 10
js> a == 10
true
js> class Test {
constructor () {
let x = 10;
}
}
js> let y = new Test();
[/shell]

ES2016わかってないので(だって勉強するために入れたんだもん)、上のコード例は適当なんだけど、letもclassも使えるからES2016のコードが書けるjsがインストールされたことは確認できた。

ということで、やっとこさスタートラインにきたのであった。

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで初めてのJavaScript 第3版確かな力が身につくJavaScript「超」入門 (確かな力が身につく「超」入門シリーズ)関数型プログラミングの基礎 JavaScriptを使って学ぶ

コメントを残す

メールアドレスが公開されることはありません。