普段思ったことや、雑記。

Menu & Search

DockerでJavaScriptシェル(Node.js実行環境)をつくる

2016年12月17日

JavaScriptがコマンドラインで動く環境が欲しかったが、Mozilla Developer Network公式で紹介されてるのがイケてないと思った

とりあえず、発端は見出しの通り。問題のMDNのページはこちらである。お手軽にやろうとして、エディタであるAtomのscriptパッケージも動かなかったというのが、そもそもの発端である。なんというか、新しいツールを入れるにあたり、いちいちアップデートをするのとかも面倒だし、メンテナンスされているツールなのか調査したりするのも面倒だった。そもそも、JavaScriptが走ればいいだけだったので、極力労力はかけたくなかった。ちなみに、JavaScriptの勉強とコーディングテスト向けにJavaScriptが走れさえすればよかったので、要件としてはそれほど高くはない。

 

基本的なJavaScript環境であるなら、Node.jsで良いじゃないか

Node.jsは、最近わりと色んなところにちょいちょい出現する。Node.jsはGoogle ChromeのV8エンジンで動いているので、JavaScriptシェルで試そうとする基本的な四則演算だったり、配列の処理だったり、そのあたりは問題なく動作する。コーディングテストとかでも、例えばCodilityであるなら、JavaScript環境はNode.js v6.4だったので(2016年12月11日時点)、やはりNode.jsでJavaScriptシェルとして代用することは問題はないものと思う。

 

DockerでNode.jsのコンテナを走らせ、CLIよりnodeコマンドでプログラムを実行することでJavaScriptシェルとする

というわけで、Node.jsの任意のバージョンを手間をかけずに構築するとしたら、Dockerの出番である。Dockerについて詳しくない人は、チュートリアル形式で説明した記事が別途あるので、そちらもぜひ参照してもらえればと思う。ここからは、既に使用マシンにはDockerがインストールされていることが前提で説明をする。今回は、Node.jsの長期サポートバージョンの6系(boron)の最新版環境を構築する。以下の2コマンドでNode.jsの環境を立ち上げることができる。

$ mkdir -p ~/Development/work
$ docker run -it --rm -v ~/Development/work:/work node:boron /bin/bash
# 確認コマンド
root@65d43eb42e3e:/# node -v
v6.9.2

わずか2コマンドで任意のNode.jsの環境が手に入った。ちなみに、Node.jsの他のバージョンが欲しい人は、DockerHubのNode.js公式を参照して欲しい。2コマンド目のdockerコマンドの説明をすると、コマンドの意味は「node:boronというイメージがないかローカルを調べ、あればイメージを実行する。ローカルにない場合はDockerHubからイメージをダウンロードして実行する。その際(オプション)、コンテナ内のシェル/bin/bashを指定してコンテナにrootユーザでログインする。また、ローカルの~/Development/workをコンテナ内の/workと共有する。コンテナを終了すると、コンテナを破棄する」ということだ。

あとは、ローカルの~/Development/workにJavaScriptファイルを作り、お好きなエディタでいつもどおりコードを書いて、コンテナ内の/workで該当のJavaScriptプログラムに対して、ターミナルからnodeコマンドで実行すればOKである。使い終わったら、ターミナルでexitと打てば環境が終了する。

 

DockerはNode.jsだけじゃなく、他の試してみたいプログラミング言語にも使える

要はやったことは言語環境を、Dockerを使ってたったの2コマンドで構築してやった、というのが今回である。別にNode.jsでなくとも、これは応用可能である。例えば、環境構築が面倒なElixirならこうだ。

$ docker run -it --rm -v ~/Development/work:/work elixir:latest /bin/bash
# 確認コマンド
root@318187ce0e55:/# elixir -v
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Elixir 1.3.4

Node.jsとのコマンドの違いは、「イメージ名称:タグ(だいたいバージョン)」を変更しているだけで、あとのオプションは同様である。このようにDockerを使えば、別にJavaScriptシェルが当初欲しかったのだが、派生してGoだろうがScalaだろうが他の環境だって簡単に構築して試すことができる(※ただし、DockerHubでイメージがあることが前提。メジャーな言語は置いてあるが、もちろんない場合はイメージから自分で作るしかない)。

Article Tags
mmiyauchi

プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。

Related article

Redux(react-redux)における適切な配列要素の更新

2021年8月23日…

CloudFlareの『SSL/TLS 暗号化モード(HTTPS通信設定)』を使用したとき、『ERR SSL VERSION OR CIPHER MISMATCH』のエラーでChromeで発生し、接続できない場合の対処

英語の記事は見当たっ…

Dart(Flutter)についての所見

Dart(Flutter)についての所見

第一印象では、クロス…

Discussion about this post

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Type your search keyword, and press enter to search