Python と JS の基本コマンドの対応
エンジニアの宿命は、常に新しい技術を学び続けることです。
私たちは普段は Python をよく使っていますが、JavaScript を学び始めたときに、npm
、npx
、nvm
といった似たようなコマンドがあることに気付きました。
そこで、これらのコマンドを対応付けて整理すれば、新しいスキルを習得する際に役立つかもしれないと考えました。
npm と pip
両者とも:パッケージマネージャ
npm(Node Package Manager)と pip は、本質的に同じ目的を果たします。それぞれ Node.js と Python のパッケージ管理ツールです。
- パッケージのインストール:npm では
npm install <package-name>
コマンドを使ってライブラリをプロジェクトに追加します。同様に、pip はpip install <package-name>
で同じことを実現します。 - バージョン管理:npm は
package.json
ファイルを介してパッケージのバージョンを管理し、開発チーム全体で同じライブラリのバージョンを使用できるようにします。一方、pip はrequirements.txt
や pipenv、poetry などの新しいツールを使用して同様の管理を行います。 - パッケージの公開:npm は開発者が自分のパッケージを npm レジストリに公開し、世界中の Node.js コミュニティが利用できるようにします。pip では PyPI(Python Package Index)を通じて同様の機能を提供し、Python パッケージの共有を可能にします。
npx と -m オプション
両者とも:直接コマンドを実行するツール
npx(npm package runner)と Python の -m
オプションは、グローバルインストールなしでターミナルから直接パッケージコマンドを実行するためのツールです。
- 直接実行:npx はプロジェクトのローカル
node_modules
フォルダにインストールされたパッケージ(またはインストールされていない場合は npm レジストリから取得)を直接実行できます。Python では-m
オプションでこれに似た動作が可能で、python -m http.server
コマンドで簡易 HTTP サーバーを起動するなどができます。
npm run と npx
- npm run:JavaScript プロジェクトでは、
npm run
を使ってpackage.json
に定義されたスクリプトを実行します。テスト、ビルド、デプロイなどのプロジェクト特有のタスクを実行するのに一般的です。 - npx:npx は単一のコマンドやパッケージを実行するために使用され、未インストールのパッケージを直接実行できる点が特徴です。npx に run キーワードはなく、通常は直接パッケージ名またはコマンドを指定します。
nvm、pyenv、conda
両者とも:バージョン管理ツール
異なるバージョンの Node.js や Python を切り替えるのは面倒な作業です。
nvm(Node Version Manager)、pyenv、conda はこの問題を解決し、1 台のマシンで複数のバージョンをインストールおよび切り替えることを可能にします。
- バージョン切り替え:nvm は
nvm use <version>
コマンドを使用して Node.js バージョンを切り替えます。Pyenv と conda は Python に対して同様の機能を提供し、pyenv はpyenv global <version>
またはpyenv local <version>
、conda はconda activate <environment-name>
を使用して異なる環境に切り替えます。それぞれの環境は異なる Python バージョンとパッケージを持つことができます。 - 複数バージョン管理:これらのツールにより、1 台のマシンで複数のバージョンを管理し、バージョンの違いによる衝突の問題を解決できます。
余談:Yarn について
npm は 2009 年に登場し、Node.js エコシステムにおける初の主要なパッケージマネージャでした。npm は JavaScript 開発者に依存関係管理の手段を提供し、業界標準となりました。しかし、利用者が増えるにつれて、インストール速度の遅さや依存関係のバージョンの不安定さなど、いくつかの性能問題が明らかになりました。
Yarn は 2016 年に Facebook によって開発され、npm の性能問題を解決することを目的としています。Yarn は並列ダウンロードやオフラインキャッシュ技術を導入し、依存関係のインストール速度と安定性を大幅に向上させました。また、Yarn は yarn.lock
ファイルを追加し、依存関係のバージョンの一貫性を確保しました。これらの改良により、Yarn はすぐに開発者の支持を得ました。
Yarn の成功に触発され、npm も改善を加速させました。npm v5 以降では、package-lock.json
を導入し、インストール速度の向上と依存関係管理の安定性を強化しました。現在、npm と Yarn は JavaScript 開発者にとって主要な選択肢であり、互いに進化を続けています。
結論
これらのコマンドは完全に対応するわけではありませんが、ある程度の類似性があるため、新しい技術を習得する際に多少の助けになるでしょう。