GitHub Actionsでのデプロイを試みていた際に発生したエラーがなかなか解消できずに詰まってしまったので状況を共有します。
発生したエラーと状況
name: Build
on:
push:
branches:
- main
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
- name: setup-node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- name: install
run: npm install
上記のyamlファイルの記述でGit push
を行いインストールまで進めるか調査していました。
すると次のようなエラーが発生してActionがFailureになりました。
npm error code EUNSUPPORTEDPROTOCOL
npm error Unsupported URL Type "link:": link:dataconnect-generated/js/default-connector
npm error A complete log of this run can be found in: /home/runner/.npm/_logs/(デバッグログのログファイル).log
Error: Process completed with exit code 1.
今回発生したエラーの原因を見てみます。
前提:GitHub Actionsの「code 1」エラーについて
上記の記事が概念の理解として非常に参考になりました。
結論としては 「構文エラーではなく処理の結果としてエラーになっている場合」に出るエラー文のようです。
なので今回の場合はyamlの記述自体には問題がないので処理の過程で出たエラーを見てみると良いこととなります。
今回のエラーで起きた問題点
改めてエラーの文章を見てみましょう。
npm error Unsupported URL Type "link:": link:dataconnect-generated/js/default-connector
この部分が原因のようです。
上記のエラー文を日本語訳してみるとdataconnect-generated/js/default-connector
という読み込みファイルの「link:」という形式がサポートされていないことが原因と推測されます。
そこで該当の部分(firebaseをインストールした時に生成された部分)を見てみると次のような記載がありました。
"dependencies": {
"@firebasegen/default-connector": "link:dataconnect-generated/js/default-connector",
},
問題となっているlink:
の記述を発見できました。この部分はfirebaseを使うために生成していたフォルダを指し示すものです。
さらに具体的な原因については下記の記事が参考になりました。
link:プロトコルはYarnの機能であり、npmではサポートされていません。
そのため、npmはこの依存関係を解釈できず、EUNSUPPORTEDPROTOCOLエラーが発生します。
つまり、今回のエラーの直接的な要因は
- jsonに
link:
の記載が含まれていること - 上記の状態でインストール方法として
npm
を使用したこと
の2つでした。
エラーの対処方法
つまり、対処法としては「link:
でない指定をすること」か「npm以外でインストールすること」が考えられそうです。
実際の処理方法は先ほどの記事に記載がありました。
可能であれば、npmの代わりにYarnを使用してプロジェクトを管理します。
Yarnはlink:プロトコルをサポートしています。
もしくは
package.jsonからlink:を削除して、適切なバージョン番号やパスに置き換えます。
例えば、ローカルパッケージを使用したい場合は、npmのfile:プロトコルを使用できます。
この2種のどちらかで解消できるとのことでした。
今回のケースではjsonファイルの記載を変更する方法を選択しました。
具体的には以下のように修正しました。
"dependencies": {
"@firebasegen/default-connector": "file:dataconnect-generated/js/default-connector",
},
このようにjsonファイルを修正することでnpm install
の処理がGitHub Action上で通るようになりました。
結論/まとめ
- GitHub Actionsのyamlファイルに
npm
系の指示を記載する時にはjsonファイルを一度確認してみましょう -
link:
の記載があったらfile:
形式に直してみましょう - もしくは
npm
の処理をyarn
に修正してみまsy