最終的には.npmrc ファイルから prefix=/Users/midoriiriyama/.npm-global の設定を削除したことで問題が解決しました。
やったこと
npm がどこにグローバルパッケージをインストールしているかを確認。
npm root -g
.zshrcのPATHを変更(古い記述は#でコメントアウトか削除)nanoやvimエディタで。
nano ~/.zshrc
export PATH="$HOME/.npm-global/bin:$PATH"
これで動かなかった。原因は
nvmを使って Node.js を管理している。~/.npmrcに入っているprefixにより、npm install -gがnvm管理下ではなく別の場所にインストールされ、geminiコマンドがうまく動かなくなる。
そこで、prefix を削除して、nvm に任せることにして。
nano ~/.npmr
下の行を削除。保存して終了(nano なら Ctrl + O → Enter → Ctrl + X)。
prefix=/Users/midoriiriyama/.npm-global
これで無事に動くようになりました。
何が問題だったのか?
npmがグローバルパッケージをインストールする場所が意図しないディレクトリに設定されていたためです。
prefix=/Users/midoriiriyama/.npm-globalの設定があった場合(今回):
npm はグローバルパッケージを通常とは異なるパス(この場合は/Users/midoriiriyama/.npm-global)にインストールしようとします。もしこのパスがシステムやZshのPATH環境変数に含まれていなかった場合、そこにインストールされたgeminiコマンドは見つけられず、「command not found」となります。prefixを削除した場合:prefix設定を削除することで、npmはデフォルトのグローバルインストールパスを使用するようになります。macOSの場合、これは通常/usr/local/binのようなディレクトリ(またはbrewでNode.jsをインストールした場合はそれに準じたパス)になります。これらのパスは、ほとんどのシステムでデフォルトでPATH環境変数に含まれているため、geminiコマンドが認識されるようになったわけです。
.npmrc に prefix が設定されていると、グローバルパッケージのインストール場所がデフォルトから変更されるため、PATH 環境変数もそれに合わせて適切に設定しないと、今回のような問題が発生することがあります。
今後同様のケースが起こったら?
以下の点を確認すると良いです。
npm root -gでグローバルインストールパスを確認する:
これにより、現在npmがグローバルパッケージをどこにインストールしているかがわかります。echo $PATHでPATH環境変数を確認する:
コマンドが実行される際に検索されるディレクトリのリストが表示されます。npm root -gで表示されたパス、またはその親ディレクトリ(実行ファイルが格納されている場所)がこのリストに含まれているかを確認します。.npmrcファイルを確認する:
もし意図しないprefix設定がある場合は、それを削除するか、PATH環境変数に追加する必要があるかを検討します。