Serverless

serverlessコマンドが使えない時の対処法


マナビト
マナビト
こんにちはマナビトです。
普段はフロントエンドエンジニアとしてJavaScript/TypeScript/Aangular/GraphQLを
メインに開発業務を行なっています。

先日serverlessを導入するために、node.jsでインストールして、serverlessコマンドを叩いたところ、コマンドがありませんと怒られてしまいました。いろいろ調べてみて、なんだかんだ30分くらい費やしてしまったので、メモの意味も込めて記事にしておきたいと思います。

そもそもserverlessとは何か?

serverlessとは、サーバーの構築や保守をすることなく、サーバー上でプログラムを実行できる仕組みのことを指します(サーバーがないという意味じゃないよ!!)。

これまでは、サーバーを動かすためにサーバーを一つ一つ構築しなければいけなく、構築後の保守や負荷対策なども含めると運用がかなり大変でした。

serverlessが導入されたことでサーバーレスの提供会社が構築、保守、負荷対策を行うため、利用者はサーバーの管理を一切行うことなくプログラムの開発に専念できるようになりました。サーバーレスの代表例としてはAWSが提供するAWS LambdaやAzureのAzure Functionがあげられます。

npm install -g serverless を実行してみる。

serverlessはnpmのパッケージとして公開されており、まずはターミナルを開いてインストールを実行します。

npm install -g serverless


その後バージョン確認のため、serverless --versionを実行するも、
serverlessコマンドが見つかりませんと怒られてしまいました。

zsh: command not found: serverless

yarnをインストールした時も同様の症状が現れ、その時は.zshrcフォルダにパスを通すことでコマンドを認識してくれるようになりました。
というわけで、.zshrcをvimで開いて、パスを記述します。

export PATH="/user/local/.anyenv/envs/nodenv/versions/12.18.3/lib/node_modules/serverless/bin:$PATH"

変更をターミナルに反映させるためにsourceコマンドを実施。

source ~/.zshrc

再度、serverless --versionを走らせてみますが、結果は変わらず....

解消法

どうしたものかと、色々調べてみたところ、下記記事が見つかりました。

npm config get prefixでnpmがどこのディレクトリを使用しているのか確認します。

npm config get prefix

問題なければ、"/usr/local"と表示されるはずですが、もしここで"/usr"としか表示されない場合は、npm config set prefixを使用してnpmが参照するディレクトリの場所を変更する必要があります。

npm config set prefix /usr/local

そして、再度serverlessのインストールを実施

npm install -g serverless

これで再度、serverless --versionを走らせると、serverlessコマンドがちゃんと認識されていることが確認できました。

serverless --version

Framework Core: 2.67.0
Plugin: 5.5.1
SDK: 4.3.0
Components: 3.18.1

本日はここまでとなります。最後までお読みいただきありがとうございました。