javascriptはフロントエンドで使用する言語というイメージが強いのですが、nodejsなどのプラットホームを使用することによりjavaやrubyのようにサーバサイドのプログラミングも可能になります。今トレンドになっているSPA(シングルページアプリケーション)を開発しようとしたとき、Angularjs・Reactjs・Vuejsなどのフレームワークを導入するのが一般的になっていますが、そういったパッケージのバージョン管理にもnodejsを使用します。私自身なんとなくnodejsを使っていたのですがふんわりとしか理解できていなかったので、改めてnodejsとnodejsパッケージのバージョン管理の詳細についてまとめてみました。
Nodejs
Nodejsとは一言でいうと「サーバサイドのjavascript実行環境」です。Webサーバとしても使える上、デスクトップアプリケーションも開発できるというjavascriptらしくまさにどこでも活用することができます。普段お世話になっているslackやvscodeなどのアプリケーションも一部nodejsのフレームワークを使って作られています。以下特徴についてまとめました。
- メモリ消費が少ない(シングルスレッド)。小規模開発運用時にパフォーマンスが出せる
- C10K問題の解決につながる高速性能
- 非同期処理により前処理が終わらなくても次の処理を実行できる
- V8 javascriptエンジンを使用しており高速
- フロントエンドとサーバサイドの互換性はない
小規模開発においてとにかく高速といったイメージでしょうか。近年クラウド環境下で小さなマイクロサービスを組み合わせてリリースと改善のスピードを高速化するのが主流になってきているようなので、そういった要件にマッチしているようです。
コード実行例
console.log("Hello World");
$ node hello_world.js Hello World
hello_world.jsに「Hello World」と出力する簡単なスクリプトを記載しました。
node 実行ファイル
で簡単に実行することができます。
nodeコマンドが使えなかった方は以下サイトを参考にnodejsをインストールしてみてください。
npm
npmは「Nodejsのパッケージのバージョンを管理するツール」です。アプリ開発においてパッケージのバージョンは重要で、互換性のあるパッケージをインストールしないとたちまちアプリが動かなくなってしまいます。rubyでいうところのbundler、pythonでいうところのpipにイメージは近いのではないかというのが私の感覚です。
npmパッケージは以下サイトで検索することができます。自分で作成して公開することも可能です。
コード実行例
グローバルにパッケージをインストール
npm配下にあるnode_modulesにパッケージをインストール。すべてのプロジェクトでパッケージが使用可能
$ npm i -g パッケージ名
ローカルにパッケージをインストール
プロジェクト配下(現在のディレクトリ)にあるnode_modulesにパッケージをインストール。プロジェクトのみでパッケージが使用可能
$ npm i パッケージ名
パッケージをアンインストール
$ npm un パッケージ名
インストール済みパッケージ一覧を表示
$ npm ls
インストール済みパッケージ一覧を表示(直下のみ)
$ npm ls --depth=0
package.json
アプリケーションが使用している外部パッケージとの依存関係(互換性)を示したファイルです。このパッケージのこのバージョンがないとアプリが動きませんよという説明書のようなもので、npm install を実行するとこのファイルをもとにパッケージがインストールされます。インストールされるパッケージのバージョンは^(キャレット)がついている場合、メジャーバージョンのみ固定(バージョンの一番左のゼロ以外の数値を固定)。~(チルダ)がついている場合、マイナーバージョンのみ固定など、実際にインストールされているバージョンとは差異がある場合があるので、インストールされているパッケージのバージョンを調査する際にはふさわしくありません。
コード実行例
package.jsonの作成
パッケージ名やパッケージの詳細をインタプリタ形式で入力を促されますが、パッケージを作成する時以外はデフォルトで大丈夫です。
$ npm init
package-lock.json
上記で記載したようにpackage.jsonだけではパッケージのバージョン再現が難しいため(想定のバージョンと違うバーションがインストールされる可能性がある)、それを解消するためのファイルです。文字通りバージョンをロック(固定)して指定のバージョンをインストールするようにします。
node_modules
npmによってインストールされた、モジュールファイルが保存されているファイルです。もし余裕があればただモジュールを使うだけでなく、どういったコードが書かれているか検証を行うと理解が深まると思います。
yarn
yarnもnpmと同様nodejsにおけるパッケージ管理ツールです。ただし、npmを置き換えるものではなく、パッケージのレジストリもモジュールのインストールされる場所もpakeage.jsonに関しても同様です。yarnは並列インストールが可能なのでインストールの速度が向上するという利点がありましたが、現在はnpmの性能も向上してきているようです。どちらを採用するかは開発方針によるといった感じでしょうか。
コード実行例
グローバルにパッケージをインストール
$ yarn global add パッケージ名
ローカルにパッケージをインストール
$ yarn add パッケージ名
パッケージをアンインストール
$ yarn remove パッケージ名
インストール済みパッケージ一覧を表示
$ yarn list
インストール済みパッケージ一覧を表示(直下のみ)
$ yarn list --depth=0
コメント