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

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

<b>ところで、ngrok ちゃんとインストールできました？</b>
<img width="375" alt="IMG_3297 2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/6c4a418c-7333-4540-39a8-8313bfe515ca.png">
・
・
・
記事について
---
この記事では、<b>メッセージを飛ばすと、~~犬の画像を送ってくれる~~ オウム返ししてくれる LINE Bot 作り</b>において発生した、 `ngrok が何をやってもインストールできないという症状`について、それに至った経緯と、解決策の提示をしようと思います。同じ症状で困っている方の救いになればと多います。

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

<b>1.オウム返しBotの作り方</b>
---
こちらの記事を参考にしました↓
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

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

<img width="401" alt="スクリーンショット 2020-03-28 14.21.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/eb4846a7-3a9f-d052-3a89-3e6d2c1d63d7.png">

2. ngrok のエラー＆解決方法
---


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

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

```
Apple-no-MBP:LINE-DOG apple$ npm i -g ngrok
npm WARN deprecated request@2.88.2: 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
```

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

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

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

が、

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

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

> ngrok@3.2.7 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! ngrok@3.2.7 postinstall: `node ./postinstall.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the ngrok@3.2.7 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 request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
/usr/local/bin/ngrok -> /usr/local/lib/node_modules/ngrok/bin/ngrok

> ngrok@3.2.7 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
+ ngrok@3.2.7
added 73 packages from 109 contributors in 14.408s
Apple-no-MBP:~ root# logout
```

そして...見つける
---

はいこちら↓
https://github.com/inconshreveable/ngrok/issues/429
<img width="780" alt="スクリーンショット 2020-04-01 16.02.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/a82dcaf1-024e-58a4-8211-e3a0eca99b0c.png">

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

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

<b>「よくわからない」</b>

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

うーむ。

3.おわりに
---

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

![ezgif-6-92e8ed8173ef.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/f3806629-943d-9766-66e7-8da948fc3694.gif)

<b>あっれーーーーーー。</b>



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

<img width="599" alt="スクリーンショット 2020-04-01 22.23.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/85149657-3d95-8004-4347-c69409cbc322.png">

<img width="734" alt="スクリーンショット 2020-04-01 22.25.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/d06360fe-cc80-545c-c11e-2af9db5df9c6.png">



<b>これでイケるはずやーーーー！！</b>

![ezgif-6-5fb4c6319810.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603301/31a99642-4a5d-e986-4fc4-818d18de2cac.gif)

<b>できたーーーーーー！


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