モノトーンの伝説日記

OBS Studio と Blackmagic Design が大好き。

node.js 始めました。☆だいいっかい

 node.js というナウいやつを始めてみました。

概要

  1. node.js とは
  2. 導入しようと思ったキッカケ
  3. node.js にあるいろいろなツール
  4. まとめ

1. node.js とは

 単純に言えば Blink 系ブラウザーに使われている V8 エンジンが搭載された JavaScript ランタイム実行環境というところでしょうか。CLRJVM などと思ってもらえばいいかと思います。

 個人的に、node.js はそろそろ構文解析からやるのではなく、中間言語、さらには機械語形式で持つバイナリーを保持できるようになったら速度上昇できそうなのですが、って思ったりしなくもないですが。

 いわゆるサーバーサイド JavaScript 実行環境です。ただ、クライアント サイドともいえます。難しいですね。.NET の実行環境も 64-bit に関していえば、元はサーバーサイド実装だし、と考えると、こういう言葉を選ぶべきではないかもしれません。マシーンサイドとネットワークサイドみたいな感じに分けるほうがいいのかも(サーバー、クライアント関係は見方を変えると変わってしまうので)

2. 導入しようと思ったキッカケ

 単純な理由として、「新サイト作りたいな~」「WinJS でも検討するかー」「ん、WinJS って node.js の grunt 使って自動化してる?」「んー WinJS イマイチ」「node.js でなんかいろいろできるっポイ?」「お? お? こんなこともできるのか」「Visual Studio はインテリセンスのためだけでほかは npm, grunt とか tsd でいいじゃん。」

 という感じ。もともとは WinJS とか見てたのですが、最終的にいろいろな node.js エコシステムを見てこちらの方面で自動化できそうといった感じで俺氏すごくハッピー。

 初心者なので、まだわからないことがありますが、わからないなりに書いていきます。

3. node.js にあるいろいろなツール

 まず node.js を入れるとそれに付随して、npm (Node Packaged Modules) というのが入ってきます。こいつは Visual Studio ユーザーだと簡単に言えば NuGet って思ってもらっていいです。それの JavaScript エコシステムです。ただ、私は次の bower というのが出てきて困惑してしまいました。

 あれ、npmbower って同じことじゃない? ってね。なので俺はこう理解しました。

  • npm: サーバーサイドライブラリー管理群
  • bower: クライアントサイドライブラリー管理群

 ただ、昔の 1 限管理の名残上、npm に jQuery が残ってたりするみたいです。

 それじゃあ、Visual Studio ユーザーは疑問に思うと思うのですが、「npm」とか「bower」って、NuGet みたいに復元できるの? という疑問が出ると思います。大丈夫です、そのためのパッケージ管理ツールです。

 簡単にコマンドラインを見ます。

npm init

 これは初期化です。いろいろ質問されます。ただ、この質問を一様にやるのは私は疑問です。NuGet では packages/repositories.config ができると思いますが、そんな感じで、package.json が生成されます。ここには依存関係などが記述されます。

npm install -g typescript

 これで TypeScript コンパイラーが導入できます。-g--global (こちらも可) のことで、グローバル アセンブリー キャッシュにインストールされるイメージでいいです。逆にプロジェクト固有のものをインストールする場合は、何もつけないでインストールしましょう。

 ところで、これだと依存関係がうまく解決できません (開発ツールが依存関連に入りません)。したがってある命令を打ち込みます。

npm install -save-dev typescript

 --save は開発時出ないときも必要なもの、--save-dev は開発時にのみ必要、という感じですみ分けているみたいですが、実質クライアントサイド実行時のものは bower で管理しますし、そもそもそのあたりめんどくさいのでディレクトリー体系等は自動で整理するほうがいいと思います。

 といった感じで、npm を一通り解説。bower もほとんど同じみたいです。

4. まとめ

 まだ、gruntfile.js の書き方とかもあるのですが、このあたりは私がまだ完全に使いこなせてないので次回。基本的に自動化することは嫌いじゃないので、完全自動化を目指して次回も書こうかな、って思ってたり。

 以上です。