create-react-appインストールのエラーの文章を全文ググってみた

やっほう。シノブです。

前回の記事ではnpmでcreate-react-appをインストールしようとしたんだけど、エラーがズラッと並んでたんですよ。こちらの記事ね。

エラーを全文翻訳してみらた、フォルダに権限を付与するのかもっていう仮設が出たんです。でもまだよくわからん。どーしよって思ってたんですけど、その時にふと自分が日本国民の義務を果たしていないことに気づいたんです。

そう。

ググってない。

こんな便利な時代に生きていてなんでそんなこともしていないのかと。メンターついてくれてるからって怠けてんじゃねぇぞと。そんな自分にサービス開発者としての基本的人権なんぞあるものかと。

答えを先に知って咀嚼する方が早いのかもだけど、今の時期はこうやって検索することもゼロイチには絶対必要なはず。そして、こういうことを知りたいプログラミング初心者も絶対にいるはず!フロンティアになってこう。どんだけ周回遅れのフロンティアかしらんけども

というわけで、エラー全文ぐぐってみよ。全部で19行。

まずはこちら

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules

これのまんまググってみると、いくつか該当しそうな記事が出てきました。

たとえばこちらの記事

これによると「npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules」っていうのは、「 /usr/local/lib/node_modulesへ書き込みをする権限が無いよ」っていうことらしい。

そ、そうなんだ。権限ね。誰がなぜ君にその権限を付与していないのかも、どうすれば権限を付与できるかもわからないけど、理由だけはわかったよ。ありがとうGoogle先生。

おっしゃ、次いこ

code EACCES

調べてみるとEACCESというエラーの意味が書かれていたよ。これもどうやらアクセス権限が無いことを示しているらしい。

そしてcodeっていうのは、エラーコードを示しているらしくて「エラーコードはEACCESだよ」っていうことっぽい。こちらの情報が詳しそうだよ。

このエラーコードが意味するものは、まずパス名かuser authorityに原因があるらしい。

そしてそれにアクセス権限が無いか、ログインしたIDで、該当操作に対する資源配付の使用権限がない、とのこと。意味はわからん。

そしてそれを解消するには、ファイルをパーミッションモードで確認するか、ログインしたIDの権限の確認を行い、必要であれば、使用権限をACLマネージャに登録する必要があるらしい。こちらも同様に意味はわからん。

ただここでもやはりアクセス権限の話が出てきた。そういうことっぽいね。

これが今回のエラーの画面なんですけどね、よく見るとiterm2上でもcodeの部分色違うし、1つの文章じゃないっぽいよね。てことは次のsyscall accessもそういう感じ??

syscall access

これも調べてみたら、「syscall」と「access」は別のものを意味しているらしい。バラバラに調べてみたらsyscallはシステムコールの意味だとわかったよ。

システムコールっていうのは、OSがカーネルにアクセスしてタスクを実行する方法を指しているらしい。いっこも意味はわからん。

んで今回の場合だと「syscallはaccessだよ」っていう意味っぽい。でこのaccessっていうシステムコールはユーザーのファイルに対するアクセス権をチェックするっていう意味らしい。ここでも出てきたアクセス権。もはや疑いの余地のないくらいアクセス権限がないらしいね。

おっしゃ次だ

path /usr/local/lib/node_modules

これはもう1行目からの流れでわかった。というかさすがにこれはググっても回答のってなかったわ!

アクセス権限が無いのはこのPATHですよ」っていう意味っぽいね。これはこれとして次いこ

errno -13

これはなんだろね。この流れで行くと「errno」の値として「13」なのかなとは思うんですけども。なんだろね。

調べてみたらこのQiitaの記事があったよ。

おーなるほど!システムコールや標準ライブラリで、エラー原因を教えてくれるのがこのerrnoの値らしいですよ。そして見てみると、数字のパターンは133まであるらしい。波動球より多い。ためしに34までの値の意味を載せておくよ。

#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH            3      /* No such process */
#define EINTR            4      /* Interrupted system call */
#define EIO              5      /* I/O error */
#define ENXIO            6      /* No such device or address */
#define E2BIG            7      /* Argument list too long */
#define ENOEXEC          8      /* Exec format error */
#define EBADF            9      /* Bad file number */
#define ECHILD          10      /* No child processes */
#define EAGAIN          11      /* Try again */
#define ENOMEM          12      /* Out of memory */
#define EACCES          13      /* Permission denied */
#define EFAULT          14      /* Bad address */
#define ENOTBLK         15      /* Block device required */
#define EBUSY           16      /* Device or resource busy */
#define EEXIST          17      /* File exists */
#define EXDEV           18      /* Cross-device link */
#define ENODEV          19      /* No such device */
#define ENOTDIR         20      /* Not a directory */
#define EISDIR          21      /* Is a directory */
#define EINVAL          22      /* Invalid argument */
#define ENFILE          23      /* File table overflow */
#define EMFILE          24      /* Too many open files */
#define ENOTTY          25      /* Not a typewriter */
#define ETXTBSY         26      /* Text file busy */
#define EFBIG           27      /* File too large */
#define ENOSPC          28      /* No space left on device */
#define ESPIPE          29      /* Illegal seek */
#define EROFS           30      /* Read-only file system */
#define EMLINK          31      /* Too many links */
#define EPIPE           32      /* Broken pipe */
#define EDOM            33      /* Math argument out of domain of func */
#define ERANGE          34      /* Math result not representable */

おーこれで見ると、13はdefine EACCES 13 /* Permission denied */って書いてある!やっぱりこれもアクセス権限が無いよっていうことを表しているっぽいね。

ほんで改めてエラーの画像を見てみるとさ

errno -13より下の行は、なんかおんなじこと書いてあるっぽいね?

ただ唯一違う単語が並んでるのが「permission denied」だね。なのでとりあえずこれもググる。

permission denied

これは直訳すると「アクセス拒否」らしい。

ただこれはこのキーワードでググるとしっかりと答えが書いてある記事がありました。こちらの記事

この記事から引用させてもらうとこう。

linuxコマンドはプログラムを書く人とって切っても切り離せないものですよね。

そもそもLINUXは、サーバーでよく使われるOSですが、そのため1つのマシンへ複数のユーザーが同時にログインして操作することを前提として作られています。この際に、秘密のファイルを他のユーザーに見られてしまったり、誤って他のユーザのファイルを上書きしてしまうことを防ぐため、アクセス権限が必要でした。したがって一つ一つのファイルには、「誰に、どのような操作を許可するのか」という権限を規定する情報が設定されています。この情報のことを、パーミッションと呼びます。

https://qiita.com/takuyanin/items/18590600d077df707923

なるほど。そういえばMacOSはベースとなる部分がLINUXで動いているとメンターに聞いたことがあります。これが今回の答えなのだと思う。

If you beiveから先の部分は昨日の記事でも解説したけど、やはり言ってることは同じだったね。

ほんだら最後に1番下の2行を調べてみよかな

A complete log of this run can be found in:

これはそのまま翻訳してみると「この実行の完全なログは、次の場所にあります。」って書かれてた。どんな意味なのかをさらにググってみたけど、よくわからんかったよ。とりあえず、エラーの内容に直接関係のあることではなさそうだよね。

その下の行はエラーのログが「/Users/shinobudaisuke/.npm/_logs/2020-06-17T15_12_21_920Z-debug.log」だよって言ってるんだね。

結果:ググった結果、エラーの原因はなんとなくわかった

前回の記事の時点でわかっていた気がしないでもないけど!けど!

やはり特定のディレクトリかファイルかに、アクセスする権限がないってことだね。

でもこれ全文調べたことで、システムコールとかEACCESとかerrnoとかの言葉の存在と意味はなんとなくわかったし、やっぱググるの大切ね。

ほんだら次は、ここからどうやったらこの問題を解消できるかを調べていくぞー