30近いリポジトリを一つのリポジトリにまとめました2021-06-0730近いリポジトリを一つのリポジトリにまとめましたこんにちは!HRBrainプラットフォームチームの桜庭です。この度HRBrainでは、アプリケーションごとにリポジトリを持つ形式から複数のアプリケーションを1つのリポジトリにまとめる形式(以下モノレポ)へ移行しました。この記事ではいかにしてモノれぽに移行したのかを書いていきます。アプリケーションやチームの規模その他諸々の事情によって良し悪しは変わってるのでこの記事ではモノレポとPolyrepoの比較については書きません。して移行するのかHRBrainではマイクロサービスアーキテクチャを採用しています。)や認証基盤などのフロントエンドとバックエンドを別なリポジトリで管理していました。最初はそれでうまく回っていましたが、最近では以下のような問題が発生するようになりました。モノレポにするメリットがあるんじゃないかということで移行することにしました。検討当初のポイント整理1~3で表現していて、1が悪い3が良いです。検討当初のポイント出しなので実態に沿っていない部分が少々あったりします。モノレポの場合はサービスごとにラベルを貼るなどの工夫が必要そう。1どうやって移行したのか今日の本題です。移行することになったとは言うものの、開発の手を止めることはできません。今回はちょうどよくゴールデンウィークがあったのでそのタイミングで一気に移行することにしました。移行の要件は以下の通りです。Gitの履歴を含めて移行されること各リポジトリにあるブランチが全て移行されることtagは移行しない。Renovateが自動で作成するブランチは移行しない幸いなことに私たちのユースケースにほぼ合致したスクリプトを発見しました。Gitの全ブランチの履歴を書き換ることで全てが最初からサブディレクトリにあったかのようにするスクリプトです。dev.toこれをベースに上の要件を満たすように変更を加えてゴールデンウィーク中に実行したところ、実行開始から終了まで大体1日ちょっとかかりました。ソースは以下に置いてあります。Actionsで動いているのでこれを1つのリポジトリにまとめる作業はあまり難しくありませんでした。いくつか追加で対応しないといけないことがありました。変更していないアプリケーションはテストを実行しないようにしたいこれ自体はすごく簡単です。追加すればいい感じにやってくれます。rulesと組み合わせたときに、実行していないテストがパスしていない時はマージできないようになってしまいました。Actionsでは同名のworkflowは最後に実行された結果が表示されることを利用して、以下のようなダミーのworkflowを追加しました。このworkflowは変更ファイルに関係なく実行されるので、変更していないアプリケーションでもテストが通ったことにできます。submoduleを使っていた箇所を全て相対パスで参照するようにしました。消して1つずつ変更していくだけで済みました。Requestが集まります。ラベルを付けて管理しないととても管理できないので変更したディレクトリに対応したラベルを付与しないといけません。あったので、これをそのまま使うことで解決できました。github.comその他Goのインポートパスが変わったりしたので一括置換をしたりしました。他にもいろいろとやったような気がしますが、たくさんありすぎて覚えていません。移行に伴い、一時的に以前よりも悪くなった箇所も存在します。対応していますが、たくさんあって手が回っていないのが現状です。一部ですがその内容も紹介します。カバレッジの計測がされなくなってしまった変更箇所のみテストを行うのでリポジトリ全体のカバレッジ計測ができなくなってしまいました。Requestにコメントするなどで対応するのか、モノレポでのカバレッジ計測に対応しているCodecovのようなサービスを使うのか現在も検討しています。Buildのキューが詰まるような事態になってしまっています。現在、必要ないビルドは実行しないようにするなどの対応を行なっており、近いうちに解決される見込みです。まとめ最初の提案から1年ほどかかりましたが無事にモノレポに移行できました。モノレポへの移行自体で開発効率良くなることはありませんが、今後の土台ができたことはとても意義あることだと思っています。ニッチな内容なので誰かの役に立つことは少ないかもしれませんが、誰かが興味を持ってHRBrainに来てくれればいいなと思っています。qiita.com...2022-02-15プラットフォームチームが実現したいことHRBrainのプラットフォームチームがどんなチームで、どんなチャ...2021-12-03モノレポで大量に作成されるRenovateのPRに負けないための施策こんにちは、Platformチームのほしいです。...2021-12-01マイクロサービスのローカル開発をTiltでちょっと楽にするHRBrainではマイクロサービスをローカルで開発できるようにして...2020-12-17Nest.js製アプリのDockerイメージサイズをできる限り小さくするこんにちは。HRBrainでSREをしている桜庭です。Award受賞の裏側:GitHub通知の最適活用法エンジニア積極採用中!会社概要HRBrainとはお問い合わせ引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。