Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

kintone-cli のエラー解消に半日かけた話

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

アホらしいミスなんだけど、一応こういうのも誰かの役に立つかも知れない。

なんでこんなにエラーの特定に時間がかかったのかというと、ノートPCが故障修理中で、代替機でなんとかやりくりしている時だったので、考えられる要因が多すぎたのだ。

そしてまた、webにあるいろんな情報がまたそれらしく見えるものばかりだったのである。

  • バックアップデータを別PCに移した
  • 代替機が新品だったので、npmもGitも何もかも再インストールしたので、バージョンが変化した可能性がある
  • 代替機をクリーンに使おうと、exFATの外付けHDDを使っていた
  • 顧客仕様が変わって、jsファイルの構成を変えた(結果から言うと、これが真の原因だった)
C:\Users\some_user\Documents\foobar\foobar-kintone>kintone-cli deploy --app-name foobar-invoice
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! foobar-kintone@0.0.1 build-foobar-invoice: `webpack --config foobar-invoice/webpack.config.js "--mode" "production"`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the foobar-kintone@0.0.1 build-foobar-invoice 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!     C:\Users\shimbo\AppData\Roaming\npm-cache\_logs\2020-03-05T08_27_20_383Z-debug.log

考えたこと

  • node_modulesが不具合を起こしている?
  • nodemodulesフォルダの中のどれかのファイルがアクセス不能になっている?
  • ファイルシステムの破損でアクセスできないファイルがある?
  • exFATのせいで、ファイルにアクセスできない?
  • webpackのconfigが間違っていて「依存ファイルが足りない」と判定されている ←これが正解

npm ERR! errno 2が生じた際の対処について、Googleで検索するとほとんどはnode_modulesの再インストールが答えだと書かれている。

真の答えはつまり「node_modulesの中にアクセスできないものがあるようです」ということではなかろうか。

その答えとしての「node_module破損→再インストール」であり、「ファイルアクセス権の修正」であり、「webpackの依存ファイルの設定」なのだ。

 node_modulesの再インストール

まずnode_modulesディレクトリとpackage-lock.jsonを削除する。webではコマンドラインから削除している場合が多いが、私はコマンドラインから削除すると失敗しそうで怖かったので、愛用のファイラーから削除した。

余談だが、この時にファイルシステムの不正で削除できないディレクトリがあり、chkdskコマンドで修復をかけたりしたので、それもまた原因がわからなくなる一因だった。

削除した後は、キャッシュを削除。

npm cache clean --force
npm cache clear --force//エイリアスなので、clear cleanどちらでもいい模様

キャッシュを削除するコマンドを打つと「あんた、自分が何をしているか、わかってんだろうね?」と怖いことを言われるが、恐れることはない。次にnpm_modulesの再インストール。

npm install

普通はこれで治るらしい。

アクセス権の修正

たまにアクセス権が不正になってしまうパターンがあるらしい。可能性としてはフォルダ破損とどっこいどっこいというところだと思うが。

Unix系ならchmodPowerShellだとcaclsが非推奨になったのでicaclsを使ってアクセス権を修正せよとある。

ちょっとオプションが面倒だったので、エクスプローラーのGUIに頼った。

フォルダのアクセス権を初期化する

webpack.config.jsの修正

エラーメッセージをよく読み返しているうち、どうも問題はjsのファイル構成を変更したことのように思われてきた。よく調べたら、jQueryを外部依存にしているのに、依存をwebpack.config.jsに書き忘れている。

//(略)
  externals: {
    jquery: 'jQuery'
  }
//(略)

ただそれだけ、それだけのことだったのだ!

参考