Briswell Tech Blog

ブリスウェルのテックブログです

GitLab から GitHub への移行、npmjs から GitHub package へ移行した時の備忘録

どうも、としです。
在宅勤務により、酒量が増え、30歳なりたてのくせに痛風発作を起こしました。

いきつけの飲み屋でのあだ名が 痛風のとし になりました。

さて、体は気を付けるとして、先週いくつかのプロジェクトで
GitLab → GitHub

npmjs → GitHub package

へ移行する作業を行ったので、備忘録も含め、記載しようと思います。

元々の構成

元々の構成にたどり着くまでも紆余曲折あったのですが、そこは割愛させていただきます。

GitLab → GitHub → Circle CI で npm publish
GitLab → GitHub → Circle CI で AWS Elastic Beanstalk へdeploy
という構成でした。


移行しようと思った理由

いくつかありますが、大きくは2つ、

  1. GitLab → GitHubミラーリングリポジトリ設定を行い、耐えていたのですが、5分に一度しかミラーリングされないことが何かと不便でした。
    緊急の対応を行う時も、ここがネックで時間が取られる(腕組んで待つ時間)、ということがあったため、移行を行いました。

  2. npm js にpackageを公開する際、無料プランだと

npm publish --access public


という、publicでの公開しかできませんでした。
※もちろん、有料にすればできますが、npm jsを使っているのが私のチームだけなので無料でどうにかしてました。

GitHub であれば無料でも privateにできるとのことだったので、こちらも移行を行いました。


パッケージ側

変更点のみを記載しております。

package.json 変更点
1. 今回は name が変わったので

"name": "@briswell-ltd/briswell-package-name"



2. publishConfigを記載してあげます。

  "publishConfig": {
    "registry": "https://npm.pkg.github.com"
  }


を追記 or 変更

3. リポジトリが変更になるので

  "repository": {
    "type": "git",
    "url": "https://github.com/Briswell-Ltd/briswell-package-name"
  }


続いて .circleci/config.yml です。
circleci側で npm i もしくは npm ci を実行しているので、その前に

npm config set //npm.pkg.github.com/:_authToken=$GITHUB_PRIVATE_TOKEN


コマンドを実行するように追加、$GITHUB_PRIVATE_TOKEN は circle ci の project setting から環境変数を追加しています。
続いては publish時のコマンド、先ほども記載しましたが、 public の記載を外します。

npm publish --tag next


以上でGitHub packageに private 版としてリリースされるはずです。
※元々のCI内容を記載していないのはお許しください!

アプリ側

パッケージ側より少しだけ修正が多いです。
まずは package.json ですが、先ほどのパッケージを入れているので、

"@briswell-ltd/briswell-package-name"


置き換えを行い、一度 npm i を実行します。
ソース各所で呼び出している部分があると思うので、一括置換を行います。
※prettier などを入れている場合はエラーが出る場合もあります。

続いて、プロジェクト直下に .npmrc を追加します
※元々存在する場合は下記内容を追加となります。

registry=https://registry.npmjs.org/
@briswell-ltd:registry=https://npm.pkg.github.com


という内容になります。
※最後に改行を入れていない場合、エラーになることがありました。後続のecho コマンドで調整しても良いと思います。

再度に .circleci/config.yml ですが、パッケージ側と同様に、 npm iなどを行う前には npm configセットを行います。
ただ、Elastic Beanstalk deploy 前の場合は.npmrc に TOKENを入れるようにしました。

echo //npm.pkg.github.com/:_authToken=${GITHUB_PRIVATE_TOKEN} >> ./.npmrc
git add .npmrc


という2行を追加すれば問題なくdeploy 完了するはずです。


最後に

これでGitLab → GitHub へのミラーリング待機時間がなくなり、パッケージもprivateになりました。
※元々publicでも問題ないソースコードになっているので、どちらでも良いですが...

様々な部分を割愛して記載しておりますので、ご不明点・ご指摘等ございましたらご気軽にお問い合わせ、コメントをいただければ幸いです。




「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com