All Articles

Cloud9でherokuコマンド実行時にNodejsで怒られる

Published 21 Apr 2018

結論

瑣末な問題なので、結論から書きます。

Rails Tutorialやってたら、Cloud9でNodeのバージョンが古いとエラーを吐いた。
nvmでNode.jsのバージョンをあげたら動いた。

前提

訳あって、Rails Turorial(第4版)を人に教えています。(RubyもRailsも書いたことないのに…)Rails Tutorial(第4版)では、アプリのデプロイ先としてHerokuの無料枠を利用しています。なお、HerokuはPaaSの一つで、Herokuを使うと簡単にWebサービスが公開できます。とっても便利です。でも、Tutorial第4版からデフォルトの環境となったCloud9上でherokuコマンドを実行しようとすると、Nodejsのバージョンを怒られてしまい動かなかったため、備忘録として解決手順を書いておきます。

ちなみにCloud9についてですが、Cloud9とはクラウド上で利用可能な統合開発環境(IDE)で、最近AWSに買収されたため、数あるAWSサービスの一つに加わりました。そのため、利用にはAWSのアカウントが必要です。Rails Tutorial(第4版)では環境構築の際に読者間の環境差異を吸収するために、Cloud9を使っています。

事象

さて、Rails Tutorialの第1章で指示に従いながら環境構築を進めていくと最後にHerokuの設定を行います。Tutorial通りにheroku-CLIをインストールし(ここにも何かあったような気がする)、その後herokuコマンドでバージョンの確認を行うと、下記のようなエラーを吐きます。

WARNING Node version must be >=8.3.0 to use the Heroku CLI

このエラーはNode.jsのバージョンが古すぎるということなのですが、このNodeが何を意味するのか初学者にはなかなかの初見殺しです。ましてやどう対処していいのかわかるわけもなく…

解決策

結論から言うとNodejsのバージョンアップをすれば良いです。 ただバージョンアップするにも若干のコツがあります…

nvmでNodejsのバージョンアップ

Cloud9ではnvmでNode.jsのバージョンを管理しています。nvmとは、Node.jsのバージョン管理ツールで、任意のバージョンをインストールしたり切り替えたりと柔軟に活用できます。

まず、アップグレードに先立って下記のコマンドで現在適用されているバージョンを確認します。

$ nvm ls

8.3.0以上が要求されているので、それに合わせたバージョンをインストールします。
今回は、LTSのv8.11.1を使うことにします。

$ nvm install v8.11.1

すると、先のリストにv8.11.1が追加されます。

$ nvm ls

下記のコマンドで、利用するNode.jsのバージョンを切り替えます。

$ nvm use v8.11.1

以上で、バージョンのアップグレードは完了です。
念のため、nodeコマンドで指定したバージョンになっていることを確認します。

$ node -v

ここまで完了したらherokuコマンドを実行できることを確認します。

$ heroku -v

これで解決です。

永続化

ここまででHerokuへのでプリは完了なのですが、ここでnvmを利用して上げたNode.jsのバージョンはセッションごとに初期化されてしまうため、毎回useで指定してあげ流必要があります。
今後も利用したい場合には、.bash_profileか.bashrcに下記を追加する必要があります。

nvm use v8.11.1

これで、都度バージョンを確認しないでもHeorkuへのデプロイが可能になるはずです。

おわり

一番のハマりどころである環境構築にクラウド環境のIDEサービスを利用するというのは、初学者のハードルを下げるという意味で有益で斬新な取り組みだと思います。ただ、一方でクラウドサービスは(特にAWSは…)は日々機能追加が行われる点が少々心配です。今回も知っているなら解決は簡単ですが、実際TutorialにはNodeの文言はまるでなく、本当に未経験の初学者からしたら十分ハマりどころになるのではと思います。

参考

Published 21 Apr 2018

主にWeb技術に関するブログ
Michihiko on Twitter