この投稿では、YarnでGitHubプライベートリポジトリへの依存を追加する方法を説明します。
使用するYarn
本稿で説明する手順はYarn v1.22.17を前提とします。Yarn v2、v3ではやり方が異なるかもしれません。未検証です。
YarnでGitHubプライベートリポジトリをyarn addする方法
プライベートリポジトリのURLを取得する
依存に追加したいGitHubプライベートリポジトリを開き、「Code」→「SSH」タブからGitのURLをコピーします。
次の形式のURLが得られるはずなので控えておきます。
git@github.com:ORG/REPO.git
どのGitブランチやコミットに依存したいか決める
YarnではGitリポジトリへの依存を追加する際、ブランチやコミットハッシュを指定できます。
その場合、上で得られたURLに#でブランチ名を指定します。
git@github.com:ORG/REPO.git#BRANCH_NAME_OR_HASH
たとえば、mainブランチへの依存であれば次のようになります。
git@github.com:ORG/REPO.git#main
パッケージ名を決める
yarn addでGitHubリポジトリへの依存を追加した場合、パッケージ名はリポジトリ名になります。たとえば、GitHubリポジトリがmy-company/my-projectの場合、package.jsonには"my-project"として追加されます。
{
"dependecies": {
"my-project": "git+ssh://github.com/...",
たとえば、極端な例ですが、自社のリポジトリ名がmy-company/typescriptだったりすると、Microsoftのtypescriptとバッティングするので、そういった場合はパッケージ名をかぶらないものにする必要があります。
パッケージ名はなんでも構いませんが、おすすめは会社名などをスコープにしたものです:
@SCOPE/MODULE
たとえば、会社名がcraftsman-softwareでリポジトリ名がcommonなら次のような形式にします。
@craftsman-software/common
Yarnが解決可能な形式を組み立てる
上で作った文字列$URLと$PKGを使って、yarn addが解釈できる文字列を組み立てます。
"$PKG@git+ssh://$URL"
たとえば、$PKGが@craftsman-software/commonで、$URLがgit@github.com:craftsman-software/common.git#mainの場合、次の文字列になります。
"@craftsman-software/common@git+ssh://git@github.com:craftsman-software/common.git#main"
yarn addする
あとは、上で得られた文字列を引数にyarn addするだけです:
yarn add "$PKG@git+ssh://$URL"
これを実行すると、通常のNPMモジュールと同じようにnode_modulesにコードがインストールされます。
おまけ
パッケージをアップグレードする方法
mainブランチを指定するなどしてyarn addした場合に、ブランチをアップデートしたい場合は、yarn upgradeを実行するだけです。
yarn upgrade $PKG
たとえば、@craftsman-software/commonという名前でyarn addしたのであれば、
yarn upgrade @craftsman-software/common
とすると、最新のコミットを取得してインストールしなおしてくれます。
