Vercelでプライベートリポジトリのsubmoduleを使う。

VercelでNode.jsを使ってビルドをする際、このブログのようにプライベートリポジトリのsubmoduleを内包している場合の対処法が知りたかったのでメモとして残しておきます。

真面目にやる場合

  1. GitHubでrepoの参照権限があるPersonal Access Tokenを発行し、VercelのEnvironment Variablesに登録する
  2. git submodule status --recursiveでコミットのハッシュ値を取得
  3. 以下を実行する

    mkdir ${submodule になっているディレクトリ} && cd $_
    git init
    git remote add origin https://${登録したPersonal Access Token}@${submoduleのリポジトリのURL}
    git fetch --depth 1 origin ${コミットのハッシュ値}
    git reset --hard FETCH_HEAD
  4. 上記2.3.をpackage.jsonに登録し、yarnかnpmコマンド経由で呼べるようにしておく。
  5. VercelのINSTALL COMMANDをpackage.jsonに登録したコマンドでOVERRIDEする。

同じことを考えている人がいるだろうなと思って検索したら見つかりました。次のスクリプトを使えば良さそうです。
beeinger/vercel-private-submodule: A how to guide for private vercel submodules

真面目にやらない場合

私の場合、submoduleになっているリポジトリはmasterの最新コミットしか使用しないため、以下で済ませました。

  // package.json
  "scripts": {
    "vercel-install": "git clone https://${登録したPersonal Access Token}@${submoduleのリポジトリのURL} --depth=1 ${clone先のディレクトリ} && yarn install"
  }

vercel-private-submoduleに倣ってyarn vercel-installでインストールできるようになっています。