LINE Bot つくってみた。最も厄介なのは ngrok であった。


LINE Bot 作り、楽しいですよね。

ところで、ngrok ちゃんとインストールできました?



記事について

この記事では、メッセージを飛ばすと、犬の画像を送ってくれる オウム返ししてくれる LINE Bot 作りにおいて発生した、 ngrok が何をやってもインストールできないという症状について、それに至った経緯と、解決策の提示をしようと思います。同じ症状で困っている方の救いになればと多います。

もくじ

  1. オウム返しBotの作り方
  2. ngrok のエラー&解決方法
  3. おわりに

1.オウム返しBotの作り方

こちらの記事を参考にしました↓
https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d#3-ngrok%E3%81%A7%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AA%E3%83%B3%E3%82%B0

作り方については以上。おわり。

2. ngrok のエラー&解決方法

作っていく中で、 ngrok がインストールできないというエラーが発生してしまいました(記事の本題)。

症状としては、$ npm i -g ngrokを実行すると、威勢良くエラーの返事が帰ってくるというものです。

Apple-no-MBP:LINE-DOG apple$ npm i -g ngrok
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  [Error: EACCES: permission denied, access '/usr/local/lib/node_modules'] {
npm ERR!   stack: "Error: EACCES: permission denied, access '/usr/local/lib/node_modules'",
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/apple/.npm/_logs/2020-03-31T14_39_31_857Z-debug.log

さて、なんでしょうね。これ。

ここで、前回も利用した teratail で質問することにしました。
実際の投稿はこちら↓
https://teratail.com/questions/250591#reply-362282

どうやら権限周りに問題があるようです。
ということで、 root権限 という、『システム管理者用のアカウントに付与されるほぼすべての操作が可能な権限』を取得した状態で、 ngrok のコマンドを実行するとうまくいくようです。

が、

sudoコマンド( https://ja.wikipedia.org/wiki/Sudo )を使い、root権限を取得した後もエラーが出てしまいます。どうしよう。

Apple-no-MBP:~ root# npm i -g ngrok     
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
/usr/local/bin/ngrok -> /usr/local/lib/node_modules/ngrok/bin/ngrok

> [email protected] postinstall /usr/local/lib/node_modules/ngrok
> node ./postinstall.js

ngrok - downloading binary https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip
ngrok - error storing binary to local file [Error: EACCES: permission denied, open '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'] {
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'
}
ngrok - install failed, retrying
ngrok - downloading binary https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip
ngrok - error storing binary to local file [Error: EACCES: permission denied, open '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'] {
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'
}
ngrok - install failed, retrying
ngrok - downloading binary https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip
ngrok - error storing binary to local file [Error: EACCES: permission denied, open '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'] {
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'
}
ngrok - install failed [Error: EACCES: permission denied, open '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'] {
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/usr/local/lib/node_modules/ngrok/bin/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip'
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] postinstall: `node ./postinstall.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] postinstall 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:
npm ERR!     /var/root/.npm/_logs/2020-03-31T20_51_23_029Z-debug.log
Apple-no-MBP:~ root# sudo npm i -g ngrok --unsafe-perm=true --allow-root
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
/usr/local/bin/ngrok -> /usr/local/lib/node_modules/ngrok/bin/ngrok

> [email protected] postinstall /usr/local/lib/node_modules/ngrok
> node ./postinstall.js

ngrok - downloading binary https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip
ngrok - downloading progress: 13671591/13671591
ngrok - binary downloaded to /var/root/.ngrok/aHR0cHM6Ly9iaW4uZXF1aW5veC5pby9jLzRWbUR6QTdpYUhiL25ncm9rLXN0YWJsZS1kYXJ3aW4tYW1kNjQuemlw.zip
ngrok - unpacking binary
ngrok - binary unpacked to /usr/local/lib/node_modules/ngrok/bin/ngrok
+ [email protected]
added 73 packages from 109 contributors in 14.408s
Apple-no-MBP:~ root# logout

そして...見つける

はいこちら↓
https://github.com/inconshreveable/ngrok/issues/429

上記コマンド一発で ngrok がインストールできるようになりました。
npm経由でngrokをインストールできず困っている方は、これを試してみてください。(危ないかもしれないので自己責任でお願いします。)

ちなみに、何が原因なのかというと...

「よくわからない」

コメントをした人が言うには、「npm はブラックボックスである。更新のたびに、なにが起こるかわからない」だそうです。

うーむ。

3.おわりに

そして、無事に Bot は完成したのでありました。

あっれーーーーーー。


そういえば、一度terminal を落としてから、Messaging API設定の Webhook URL を更新していませんでした。

これでイケるはずやーーーー!!

できたーーーーーー!

最後まで読んでいただきありがとうございました。