結論からいえば頑張って動かした。Windows側からも確認できた。しかしまあ、Bash on Ubuntu on Windowsっていう名称、onばっかりだな。
関連エントリ
Node.jsとnpmのインストール
npmがうまくインストールできない
まずはインストール。apt-getで入れるモジュールは nodejs と npmなのだが、
apt-get install nodejs
で、Node.jsはきちんとインストールできる。しかし、
apt-get install npm
を実行してもきちんとインストールできず、結果はこうなる。
root@STRIKEEAGLE:~# apt-get install npm パッケージリストを読み込んでいます... 完了0% 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: npm : 依存: nodejs しかし、インストールされようとしていません 依存: node-abbrev (>= 1.0.4) しかし、インストールされようとしていません 依存: node-ansi しかし、インストールされようとしていません 依存: node-archy しかし、インストールされようとしていません 依存: node-block-stream しかし、インストールされようとしていません 依存: node-fstream (>= 0.1.22) しかし、インストールされようとしていません 依存: node-fstream-ignore しかし、インストールされようとしていません 依存: node-github-url-from-git しかし、インストールされようとしていません 依存: node-glob (>= 3.1.21) しかし、インストールされようとしていません 依存: node-graceful-fs (>= 2.0.0) しかし、インストールされようとしていません 依存: node-inherits しかし、インストールされようとしていません 依存: node-ini (>= 1.1.0) しかし、インストールされようとしていません 依存: node-lockfile しかし、インストールされようとしていません 依存: node-lru-cache (>= 2.3.0) しかし、インストールされようとしていません 依存: node-minimatch (>= 0.2.11) しかし、インストールされようとしていません 依存: node-mkdirp (>= 0.3.3) しかし、インストールされようとしていません 依存: node-gyp (>= 0.10.9) しかし、インストールされようとしていません 依存: node-nopt (>= 2.1.1) しかし、インストールされようとしていません 依存: node-npmlog しかし、インストールされようとしていません 依存: node-once しかし、インストールされようとしていません 依存: node-osenv しかし、インストールされようとしていません 依存: node-read しかし、インストールされようとしていません 依存: node-read-package-json (>= 1.1.0) しかし、インストールされようとしていません 依存: node-request (>= 2.25.0) しかし、インストールされようとしていません 依存: node-retry しかし、インストールされようとしていません 依存: node-rimraf (>= 2.2.2) しかし、インストールされようとしていません 依存: node-semver (>= 2.1.0) しかし、インストールされようとしていません 依存: node-sha しかし、インストールされようとしていません 依存: node-slide しかし、インストールされようとしていません 依存: node-tar (>= 0.1.18) しかし、インストールされようとしていません 依存: node-which しかし、インストールされようとしていません E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
というエラーメッセージである。apt-get update等を実行しても解消できない。npm -vで確認してみるとこの通り。
root@STRIKEEAGLE:~# npm -v /usr/lib/node_modules/npm/node_modules/npmconf/config-defs.js:320 Object.keys(os.networkInterfaces()).map(function (nic) { ^ Error: EINVAL, invalid argument at getLocalAddresses (/usr/lib/node_modules/npm/node_modules/npmconf/config-defs.js:320:18) at Object.(/usr/lib/node_modules/npm/node_modules/npmconf/config-defs.js:268:23) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at Object. (/usr/lib/node_modules/npm/node_modules/npmconf/npmconf.js:4:18) at Module._compile (module.js:456:26)
npmはapt-getではなくcurlでインストール
そこで色々調べていった結果、このコマンドに行きついた。
curl -0 -L http://npmjs.org/install.sh | sudo sh
実行結果は次の通り。少し長いので中略している。
root@STRIKEEAGLE:~# curl -0 -L http://npmjs.org/install.sh | sudo sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 193 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 100 6263 100 6263 0 0 1811 0 0:00:03 0:00:03 --:--:-- 9650 tar=/bin/tar version: tar (GNU tar) 1.27.1 Copyright (C) 2013 Free Software Foundation, Inc. 使用許諾 GPLv3+: GNU GPL version 3 またはそれ以降 <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. [参考訳] これはフリーソフトウェアです. 変更と再配布は自由です. 法律で認められる範囲で「無保証」です. 作者: John Gilmore, Jay Fenlason. install npm@latest fetching: http://registry.npmjs.org/npm/-/npm-3.10.2.tgz (中略) ├── uid-number@0.0.6 ├── umask@1.1.0 ├─┬ unique-filename@1.1.0 │ └── unique-slug@2.0.0 ├── unpipe@1.0.0 ├─┬ validate-npm-package-license@3.0.1 │ ├─┬ spdx-correct@1.0.2 │ │ └── spdx-license-ids@1.2.0 │ └─┬ spdx-expression-parse@1.0.2 │ ├── spdx-exceptions@1.0.4 │ └── spdx-license-ids@1.2.0 ├─┬ validate-npm-package-name@2.2.2 │ └── builtins@0.0.7 ├─┬ which@1.2.10 │ └── isexe@1.1.2 ├── wrappy@1.0.2 └── write-file-atomic@1.1.4 It worked
このcurlできちんとnpmは入ったっぽい。npm -vで確認すると、
root@STRIKEEAGLE:~# npm -v 3.10.2
となる。この curl -0 -L http://npmjs.org/install.sh | sudo sh は、下記のサイトを参考にした。
Node.jsの動作確認
REPLで動作確認
続いてREPL(Read eval print loop:対話的実行環境)でNode.jsの動作確認。Bash on Ubuntu on Windowsで
root@STRIKEEAGLE:~# node > var message = "こんにちは"; undefined > message 'こんにちは' > console.log(message + "shigeo-t"); こんにちはshigeo-t undefined > (^C again to quit) > root@STRIKEEAGLE:~#
ときちんと動く。
npmコマンドの動作確認
npmコマンドの動作確認としてgulpコマンドを入れてみる。
root@STRIKEEAGLE:~# npm install -g gulp npm WARN deprecated graceful-fs@3.0.8: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree. npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated lodash@1.0.2: lodash@<3.0.0 is="" no="" longer="" maintained="" upgrade="" to="" lodash="" 4="" 0="" npm="" warn="" deprecated="" graceful-fs="" 1="" 2="" 3:="" v3="" and="" before="" will="" fail="" on="" node="" releases="">= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree. /usr/bin/gulp -> /usr/lib/node_modules/gulp/bin/gulp.js /usr/lib └─┬ gulp@3.9.1 ├── archy@1.0.0 ├─┬ chalk@1.1.3 │ ├── ansi-styles@2.2.1 │ ├── escape-string-regexp@1.0.5 │ ├─┬ has-ansi@2.0.0 │ │ └── ansi-regex@2.0.0 │ ├── strip-ansi@3.0.1 │ └── supports-color@2.0.0 ├── deprecated@0.0.1 ├─┬ gulp-util@3.0.7 │ ├── array-differ@1.0.0 │ ├── array-uniq@1.0.3 │ ├── beeper@1.1.0 │ ├─┬ dateformat@1.0.12 │ │ ├── get-stdin@4.0.1 │ │ └─┬ meow@3.7.0 │ │ ├─┬ camelcase-keys@2.1.0 │ │ │ └── camelcase@2.1.1 │ │ ├── decamelize@1.2.0 │ │ ├─┬ loud-rejection@1.5.0 │ │ │ ├─┬ currently-unhandled@0.4.1 │ │ │ │ └── array-find-index@1.0.1 │ │ │ └── signal-exit@3.0.0 │ │ ├── map-obj@1.0.1 │ │ ├─┬ normalize-package-data@2.3.5 │ │ │ ├── hosted-git-info@2.1.5 │ │ │ ├─┬ is-builtin-module@1.0.0 │ │ │ │ └── builtin-modules@1.1.1 │ │ │ └─┬ validate-npm-package-license@3.0.1 │ │ │ ├─┬ spdx-correct@1.0.2 │ │ │ │ └── spdx-license-ids@1.2.1 │ │ │ └─┬ spdx-expression-parse@1.0.2 │ │ │ └── spdx-exceptions@1.0.4 │ │ ├── object-assign@4.1.0 │ │ ├─┬ read-pkg-up@1.0.1 │ │ │ ├─┬ find-up@1.1.2 │ │ │ │ ├── path-exists@2.1.0 │ │ │ │ └─┬ pinkie-promise@2.0.1 │ │ │ │ └── pinkie@2.0.4 │ │ │ └─┬ read-pkg@1.1.0 │ │ │ ├─┬ load-json-file@1.1.0 │ │ │ │ ├── graceful-fs@4.1.4 │ │ │ │ ├─┬ parse-json@2.2.0 │ │ │ │ │ └─┬ error-ex@1.3.0 │ │ │ │ │ └── is-arrayish@0.2.1 │ │ │ │ ├── pify@2.3.0 │ │ │ │ └── strip-bom@2.0.0 │ │ │ └── path-type@1.1.0 │ │ ├─┬ redent@1.0.0 │ │ │ ├─┬ indent-string@2.1.0 │ │ │ │ └─┬ repeating@2.0.1 │ │ │ │ └─┬ is-finite@1.0.1 │ │ │ │ └── number-is-nan@1.0.0 │ │ │ └── strip-indent@1.0.1 │ │ └── trim-newlines@1.0.0 │ ├─┬ fancy-log@1.2.0 │ │ └── time-stamp@1.0.1 │ ├─┬ gulplog@1.0.0 │ │ └── glogg@1.0.0 │ ├─┬ has-gulplog@0.1.0 │ │ └── sparkles@1.0.0 │ ├── lodash._reescape@3.0.0 │ ├── lodash._reevaluate@3.0.0 │ ├── lodash._reinterpolate@3.0.0 │ ├─┬ lodash.template@3.6.2 │ │ ├── lodash._basecopy@3.0.1 │ │ ├── lodash._basetostring@3.0.1 │ │ ├── lodash._basevalues@3.0.0 │ │ ├── lodash._isiterateecall@3.0.9 │ │ ├─┬ lodash.escape@3.2.0 │ │ │ └── lodash._root@3.0.1 │ │ ├─┬ lodash.keys@3.1.2 │ │ │ ├── lodash._getnative@3.9.1 │ │ │ ├── lodash.isarguments@3.0.8 │ │ │ └── lodash.isarray@3.0.4 │ │ ├── lodash.restparam@3.6.1 │ │ └── lodash.templatesettings@3.1.1 │ ├─┬ multipipe@0.1.2 │ │ └─┬ duplexer2@0.0.2 │ │ └── readable-stream@1.1.14 │ ├── object-assign@3.0.0 │ ├── replace-ext@0.0.1 │ ├─┬ through2@2.0.1 │ │ ├─┬ readable-stream@2.0.6 │ │ │ ├── core-util-is@1.0.2 │ │ │ ├── inherits@2.0.1 │ │ │ ├── isarray@1.0.0 │ │ │ ├── process-nextick-args@1.0.7 │ │ │ ├── string_decoder@0.10.31 │ │ │ └── util-deprecate@1.0.2 │ │ └── xtend@4.0.1 │ └─┬ vinyl@0.5.3 │ ├── clone@1.0.2 │ └── clone-stats@0.0.1 ├── interpret@1.0.1 ├─┬ liftoff@2.2.4 │ ├── extend@3.0.0 │ ├─┬ findup-sync@0.3.0 │ │ └─┬ glob@5.0.15 │ │ ├── inflight@1.0.5 │ │ ├── minimatch@3.0.2 │ │ └── path-is-absolute@1.0.0 │ ├── flagged-respawn@0.3.2 │ ├── rechoir@0.6.2 │ └── resolve@1.1.7 ├── minimist@1.2.0 ├─┬ orchestrator@0.3.7 │ ├─┬ end-of-stream@0.1.5 │ │ └─┬ once@1.3.3 │ │ └── wrappy@1.0.2 │ ├── sequencify@0.0.7 │ └── stream-consume@0.1.0 ├── pretty-hrtime@1.0.2 ├── semver@4.3.6 ├─┬ tildify@1.2.0 │ └── os-homedir@1.0.1 ├─┬ v8flags@2.0.11 │ └── user-home@1.1.1 └─┬ vinyl-fs@0.3.14 ├── defaults@1.0.3 ├─┬ glob-stream@3.1.18 │ ├── glob@4.5.3 │ ├─┬ glob2base@0.0.12 │ │ └── find-index@0.1.1 │ ├─┬ minimatch@2.0.10 │ │ └─┬ brace-expansion@1.1.5 │ │ ├── balanced-match@0.4.1 │ │ └── concat-map@0.0.1 │ ├── ordered-read-streams@0.1.0 │ ├─┬ through2@0.6.5 │ │ └── readable-stream@1.0.34 │ └── unique-stream@1.0.0 ├─┬ glob-watcher@0.0.6 │ └─┬ gaze@0.5.2 │ └─┬ globule@0.1.0 │ ├─┬ glob@3.1.21 │ │ ├── graceful-fs@1.2.3 │ │ └── inherits@1.0.2 │ ├── lodash@1.0.2 │ └─┬ minimatch@0.2.14 │ ├── lru-cache@2.7.3 │ └── sigmund@1.0.1 ├── graceful-fs@3.0.8 ├─┬ mkdirp@0.5.1 │ └── minimist@0.0.8 ├─┬ strip-bom@1.0.0 │ ├── first-chunk-stream@1.0.0 │ └── is-utf8@0.2.1 ├─┬ through2@0.6.5 │ └─┬ readable-stream@1.0.34 │ └── isarray@0.0.1 └─┬ vinyl@0.4.6 └── clone@0.2.0 root@STRIKEEAGLE:~# gulp -v [03:01:47] CLI version 3.9.1
と、こちらも動く。
Node.jsでWebサーバ
下記の記事からサンプルjsを参照し、Webサーバを起動してみる。
//httpモジュールをインポート var http = require('http'); //Webサーバーの設定 http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(3000); console.log('Server running at http://localhost:3000/');app.js
実行してみる。
root@STRIKEEAGLE:~# node app.js Server running at http://localhost:3000/
Windows側のブラウザからアクセス。
localhostならBash on Ubuntu on Windowsで起動したものにWindowsからアクセスできるんだな(@_@。Bash側でCtrl + Cでこのjsを停止すると、「アクセスできません」に変わるので間違いない。
結論
本番がLinuxマシンで、WindowsでNode.jsアプリの開発・テストをやるなら、LinuxのVMや、WindowsにNode.jsの環境を作るより、Bash on Ubuntu on Windowsのほうがいいかも。今のところ、Insider PreviewじゃなきゃBash on Ubuntu on Windowsは使えないけど。
シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA
- 作者: Michael S. Mikowski,Josh C. Powell,佐藤直生,木下哲也
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/05/24
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: David Mark Clements,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 2人 クリック: 4回
- この商品を含むブログ (5件) を見る
同じPC上にUbuntuのVMも作っているんだけど、コマンドの動きはVMのほうが速いような気がする。
長くなったので別エントリにするけど、Bash on Ubuntu on Windows上で、Loopbackが動いちゃったw。これは捗る。