いっちょReactやってみよう!としたらnpm start出来なかった

こちら、懺悔ブログです。エラーメッセージは最後まできちんと細かく読もうね!!!
2020.10.28

今週からCX事業部の研修が始まった、新卒エンジニアのたいがーです🐯

今までReactを触ったことがなかったので触ってみたら、第一歩でつまずきかけたので何があったか、解決策を含めて書いていこうと思います。

はじめに

何が起こったのかはぜひ読み進めていただければと思います。が、このブログは概要にも書かせていただいた通り、懺悔ブログです。

そして、"全文貼ったら長くなっちゃうし、実際に試したしな…"という私の完全な思い込みにより、エラーメッセージ省いてシェアしたのにも関わらず、解決してくださったつよっつよな先輩エンジニアの方のお話です。

もし同じようなところで詰まってしまった方がいらっしゃったら、解決の手助けになれば幸いです。

何が起こったのか

こちらの中安さんのブログを見ながら、Reactプロジェクトを作成していました。

とりあえず、私の環境を整理してみましょう。

実行環境

  • macOS Catalina v10.15.7
  • npm v6.14.5

各種インストール

nodebrewが入っていなかったため、インストールします。今思い返せばこの時点でnpmが入っていたあたり、既に雲行きが怪しいですが、どんどん進めていきます。

nodebrewのインストール

$ curl -L git.io/nodebrew | perl - setup

インストールしたのがこちらです。

  • nodebrew v8.9.4

次に、nodebrewのパスを通していきます。.zshrcに記載していきましょう。

パスを通す

$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc

"パスも通したし、Node.jsのインストールだな"と入れていくわけです。インストールが終わったら、入ったかどうかも確認します。

安定版のインストール

$ nodebrew install-binary stable
$ nodebrew ls

実行結果

v14.4.0

current: v14.4.0

ええやん、ここまでは順調やん。っしゃ、次は・・・ついにReactのプロジェクト作成だ!!

Reactのプロジェクトを作るところまでたどり着いたが…?

それでは、先程の中安さんのブログを読みながら進めてみます。アプリを作成し、ディレクトリを移動して起動してみます。

Reactアプリの作成

$ npx create-react-app testapp
$ cd testapp
$ npm start

すると溢れかえるWARN。えっ大丈夫なのか…?と嫌な予感を感じているとやっぱりstartできませんでした。

表示されたエラーメッセージ

There might be a problem with the project dependency tree.
It is likely not a bug in Create React App, but something you need to fix locally.
 
The react-scripts package provided by Create React App requires a dependency:
 
  "eslint": "^6.6.0"
 
Don't try to install it manually: your package manager does it automatically.
However, a different version of eslint was detected higher up in the tree:
 
  /Users/testuser/node_modules/eslint (version: 7.11.0)
 
Manually installing incompatible versions is known to cause hard-to-debug issues.
 
If you would prefer to ignore this check, add SKIP_PREFLIGHT_CHECK=true to an .env file in your project.
That will permanently disable this message but you might encounter other issues.
 
To fix the dependency tree, try following the steps below in the exact order:
 
  1. Delete package-lock.json (not package.json!) and/or yarn.lock in your project folder.
  2. Delete node_modules in your project folder.
  3. Remove "eslint" from dependencies and/or devDependencies in the package.json file in your project folder.
  4. Run npm install or yarn, depending on the package manager you use.
 
In most cases, this should be enough to fix the problem.
If this has not helped, there are a few other things you can try:
 
  5. If you used npm, install yarn (http://yarnpkg.com/) and repeat the above steps with it instead.
     This may help because npm has known issues with package hoisting which may get resolved in future versions.
 
  6. Check if /home/testuser/node_modules/eslint is outside your project directory.
     For example, you might have accidentally installed something in your home folder.
 
  7. Try running npm ls eslint in your project folder.
     This will tell you which other package (apart from the expected react-scripts) installed eslint.
 
If nothing else helps, add SKIP_PREFLIGHT_CHECK=true to an .env file in your project.
That would permanently disable this preflight check in case you want to proceed anyway.
 
P.S. We know this message is long but please read the steps above :-) We hope you find them helpful!
 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! react-app@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the react-app@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
 
npm ERR! A complete log of this run can be found in:

どうやら、eslintが悪さをしているみたい…?求められているバージョンがないぞと言われていそうです。

解決を試みていく

書かれている手順通りに進めてみた(つもりでした)

とりあえず、書かれている手順通りに上から試してみました。

  1. /testapp/package-lock.jsonの削除
  2. /testapp/node_modulesの削除
  3. package.jsonの中に記載されているeslintの表記の削除
  4. npm installを行う

大抵のケースはこちらで解決するようでしたが、私は先程のエラーが再び出てきました。

試しにeslintをglobalからuninstallしてみましたが、同じエラーが発生。その次の手順を見てみるとyarnをインストールしてみなさいと書いてあるのですが、npmでできないのか?と思い、とりあえず先まで読み進めていきます。

ちなみに

ここまでで上のエラーメッセージをきちんと読んだ方は、あらかた解決策が見当がついていると思うのですが、私自身めっちゃパニックになっており、エラーメッセージを読み飛ばしていることに気付いていませんでした。

とりあえず、何があったかを最後まで書いていきましょう。

書いてあるし・・・一回やってみるか・・・と~/testapp/.envを作成し、SKIP_PREFLIGHT_CHECK=trueを書き込んでみました。実際にスタートもされました。

が、本当にこれってやっていいのかな…強制的にSKIPって大丈夫なのかな…と不安になった私は、社内Slackにある強者揃いのReact雑談部屋に質問に行きました。

秒で解決した

ちなみに質問部屋に書き込むのと並行して、雑談meetに中安さんがいらっしゃったので、なんか進まないんです…と助けを求めていました。

するとその雑談meetに、React部屋にもいらっしゃる先輩が颯爽と現れました。

とりあえず、画面見せてもらっていいですか?

homeディレクトリにあるnode_modules、使わなければ消してみましょう。

もう一回npm startしてもらって…

秒で解決しました。

原因はなんだったのか

homeディレクトリ配下のnode_moduleseslintが入っており、そちらのバージョンが異なったためエラーが発生していました。

ですので、消してしまえば解決です。無事、startできるようになりました。

最後に

どうしてもエラーメッセージがたくさん出てくると、心がざわざわしますよね。その中に解決方法があったのだとしても、見逃しそうになるかもしれません。

大切なのはそう、落ち着くことです。

私自身、ついエラーメッセージで慌ててしまうのですが、大切なのはそう、落ち着くことです。(大切なので二回書きました。)

ちなみに、エラーメッセージの6,7番の記載はこのブログを書いているときに見つけました。

改めまして、助けてくださった先輩方ありがとうございました!!!そして私!!!きちんとエラーメッセージ最後まで読もうな!!!!!

以上、たいがーでした!!!!!