HomebrewでnpmのCLIツールを管理する brew-npm のご紹介

HomebrewでnpmのCLIツールを管理する [brew-npm](https://github.com/shuuuuun/brew-npm) をご紹介します。

## brew-gem が便利

brew-npm の紹介に入る前に、 [brew-gem](https://github.com/sportngin/brew-gem) というツールはご存知でしょうか。

macで複数プロジェクトのRubyの開発をしていると、 [rbenv](https://github.com/rbenv/rbenv) や [rvm](https://rvm.io/) などを使って、プロジェクトごとにRubyのバージョンを切り替えて作業をしている方が多いと思います。

そんな環境で、グローバルにいろいろなディレクトリで使いたいCLIツールなどを、普通にgemでインストールすると、Rubyのバージョンが切り替わったときに使えなくなってしまいます。

```sh
# こういうのよくありますよね
$ foreman -v
rbenv: foreman: command not found

The `foreman' command exists in these Ruby versions:
  2.7.5
```

そんなときに brew-gem を使っていると、Homebrewのformulaとしてgemがインストールされ、コマンド実行時のRubyバージョンに関わらず利用することができるようになります。とても便利ですよね。

```sh
# こんなコマンドでインストールできます
$ brew gem install foreman
```

また、パッケージマネージャなどの管理ツールはあまり増やしたくないものです。
すでに利用してるHomebrewで管理することができるようになるのもメリットですね。

https://github.com/sportngin/brew-gem

## brew-gemのnpm版： brew-npm

そんな brew-gem のnpm版が brew-npm です。

[nodenv](https://github.com/nodenv/nodenv) / [nvm](https://github.com/nvm-sh/nvm) / [nodebrew](https://github.com/hokaccha/nodebrew) などを使ってプロジェクトごとに Node.js のバージョンを切り替えて作業をしていても、コマンド実行時のNodeバージョンに関わらずCLIツールを利用することができるようになります。

https://github.com/shuuuuun/brew-npm

ここから brew-npm の使い方を紹介していきます。

### インストール

Homebrewでインストールできます。

```sh
brew install shuuuuun/tap/brew-npm
```

Rubygemsで入れることもできます。

```sh
gem install brew-npm
```

### 使い方

npmのインストールは以下のようなコマンドになります。brewのサブコマンドとして利用します。

```sh
brew npm install ${NPM_PACKAGE_NAME}

# ex.
brew npm install serverless
```

特定のバージョンを指定することもできます。

```sh
brew npm install ${NPM_PACKAGE_NAME} ${VERSION}

# ex.
brew npm install serverless 3.4.0
```

インストール後は、そのまま通常どおり利用することができます。

CLIツールはHomebrewのbinパス(`$(brew --prefix)/bin`)にインストールされるため、ここにPATHが通ってる必要があります。

```sh
# ex.
$ which serverless
/opt/homebrew/bin/serverless
```
※Intel Macの場合は`brew --prefix`は`/usr/local`の場合が多いかもしれません


### コマンド一覧

サブコマンドの一覧は`brew npm help`で確認できます。

```sh
$ brew npm help
Please specify a npm package name (e.g. brew npm command <name>)
  install - Install a brew npm, accepts an optional version argument
            (e.g. brew npm install <name> [version])
  upgrade - Upgrade to the latest version of a brew npm
  uninstall - Uninstall a brew npm
  reinstall - Reinstall a brew npm
  info - Show information for an installed npm
  formula - Print out the generated formula for a npm
  version - Show version of brew-npm
  help - This message
```

* `install` - npmパッケージをインストール
* `upgrade` - インストール済みのnpmパッケージをアップグレード
* `uninstall` - インストール済みのnpmパッケージをアンインストール
* `reinstall` - インストール済みのnpmパッケージを再インストール
* `info` - npmパッケージの情報を表示

### Scoped packagesにも対応

また、npmの[Scoped packages](https://docs.npmjs.com/cli/v8/using-npm/scope)でも同じようにインストールできます。
（brew-npm v0.3.0以上を利用してください）

```sh
# ex.
brew npm install @google/clasp
```

### brew list すると

ちなみに、インストールしたパッケージは`brew list`したときに`npm-`というプレフィックスがついて表示されます。

```sh
$ brew list | grep npm-
npm-google-clasp
npm-koko
npm-rgb-hex-cli
npm-serverless
```

### Philosophy

brew-gem と同様ですが、 brew-npm は端末内でグローバルに利用するスタンドアロンツールをインストールするためのもので、開発用のライブラリのインストールは想定していません。

## おわりに

* HomebrewでnpmのCLIツールを管理する brew-npm のご紹介でした。ぜひみなさん使ってみてください！
* 不具合など見つけた方は[issue](https://github.com/shuuuuun/brew-npm/issues)などで優しく教えてください
* プルリクエストも歓迎です