LoginSignup
8
7

More than 1 year has passed since last update.

npmとyarnって何?結局どっちがいいの???

Posted at

はじめに

業務や趣味開発をしていくうちにごっちゃになってしまったので、一旦簡単にではありますが、まとめてみることにしました。

本記事は、以下のような方たちを対象に執筆します。

  • パッケージ管理ツールってなんぞ?な方
  • npmyarnって聞いたことあるけど違いが判らんなぁ。って方

筆者は上記の対象に当てはまりますので、本記事を書き上げて知識に定着させたい所存です👼

パッケージ管理ツールとは

まず、パッケージとは、様々なシーンで活用するために作成されたプログラムのかたまりを指しています。
そして、パッケージ管理ツール(パッケージマネージャー)とは、特定のシステム(言語)環境の中で、パッケージを管理するためのツールです。

パッケージの管理

  • パッケージの導入
  • パッケージの削除
  • パッケージのバージョン管理
  • パッケージ同士の依存関係を整理

といったことが挙げられます。
また、npmだとパッケージの管理のために、package.jsonとpackage-lock.jsonが作られますね。

パッケージ管理ツールは、システムや言語の数だけ存在すると思った方がいいでしょう。PHPなら「composer」、Pythonなら「pip」...といった感じです。それぞれ使い方が違うと思いますので、必要に応じて調べましょう。

これについては、以下の記事が参考になりそうです。

npmとyarnの違いって何?

来ました本題です。npmとyarnの違いについて。
npm及びyarnは、どちらともJavaScript(Node.js)のパッケージを管理するためのものです。
何も考えず利用する分には一緒ですが、細かな部分が違うみたいです。

npmは...

  • 2010年にnpm社がリリース(2020年にGithub社が買収)
  • 公式のパッケージマネージャー
  • WindowsなどでNode.jsをインストールすると一緒に付いてくる
  • package-lock.jsonがロックファイル(v7以降)

コマンド例

/*** 昔はこんな感じ。 ***/
npm install --save foo
npm install --save-dev foo

/*** 最近はこんな感じでもOK ***/
npm i foo
npm i -D foo

yarnは...

  • 2016年にFacebook社がリリース
  • 非公式のパッケージマネージャー
  • パッケージをインストールする速さが魅力
  • npmを介してインストールを行う
  • yarn.lockがロックファイル

コマンド例

yarn add foo
yarn add --dev foo

どちらがよく使われているのか?

見た感じ、yarnの方が人気がありそうです。
2022年時点ではnpm側が改善を重ねたことで、大きな差は無くなったようです。

過去にyarnが使われた主な理由

  • yarnのほうがコマンドが簡潔(後にnpmのほうが簡潔になった)
  • インストール速度がyarnのほうが早い
  • npmがv7になるまで、yarnにしかロックファイルが存在しなかった
  • yarnにのみ存在する独自機能

インストール速度については、2022年時点もyarnが勝っているようです。
とはいえ、単純に利用することのみを考えると、完全にお好みで選べば良いという感じがします。

筆者の中での結論

好きな方を選ぶことにします。
筆者の場合は元々npmを使っていたので、趣味開発ではnpmを使いつつ、業務で必要に応じてyarnに切り替える感じでよさそうです。
とはいえ、これらは日々変わるものですので、常に情報のキャッチアップを欠かさないよう気を付けます。

ちなみに、npmからyarnに切り替えたい!って人は、以下のコマンドを使うことで、package-lock.jsonをyarn.lockに移行できるみたいです。

yarn import

終わりに

最終的には引き分けみたいになっちゃいましたが、パッケージ管理について、npmとyarnのそれぞれの特徴について、理解を深める良い機会になりました。よくよく考えたら、React等より真っ先に理解すべき内容でした。順番間違えちゃったなぁ~~。

余談

最近業務でHomebrewを使う機会があり、こっちも「何これ??」ってなったので調べました。

Homebrewとは

  • npmと同じパッケージ管理ツール
  • macOS上で動作する
  • これさえあればgitやMySQLもコマンド一つでインストール可能!ぽい
  • パッケージは実体とエイリアスが対応した場所に保存される
  • 実体のデフォルトインストール先 (/usr/local/Cellar)
  • エイリアスのデフォルトインストール先(/usr/local/bin)

インストールコマンド

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

パッケージの追加

brew install パッケージ名

何だこれって思ってたけど、感覚はnpmと似てるのかな。まだわかんないことだらけなので、今度調べよ~~

参考サイト

今回もたくさんのサイトを参考にさせて頂きました。ありがとうございました。:bow:

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7