Hiratake Web ロゴ

ウェブサイトのリポジトリでモノレポをやめる

投稿した日
更新した日
書いたひと
icon
ひらたけ

私が運営しているこのウェブサイト 「Hiratake Web」のリポジトリモノレポをやめる対応を行いました 。モノレポについては色々な方が素晴らしく分かりやすい記事を書かれていますので、詳細はそちらをご確認いただければと思うのですが、 ざっくり言うと「ひとつのリポジトリで複数のプロジェクトを管理する手法」 です。

このウェブサイトを制作するにあたり、ESLint を始めとするコード解析系のツールの設定や、他のプロジェクトでも流用できるようにと切り出しておいた Vue.js のコンポーネントなど、 Nuxt でつくっているウェブサイト本体のコードとは別にコードを書いています

それらのコードを、ひとつのリポジトリ内で管理していました。

ウェブサイトのリポジトリでモノレポをやっている画像

大手企業から個人の開発者にいたるまで、様々な方が「複数のリポジトリに分かれていたプロジェクトをモノレポ化した」という内容の記事を執筆されています。それらを否定するつもりは一切ありませんが、実際にモノレポで運用してみて 「私のウェブサイトのリポジトリでモノレポをやるのは適切ではない」 という判断をしました。

理由としては、大きく以下の 2 つです。

  • ウェブサイトをデプロイする際に 同じリポジトリ内の各パッケージのビルド処理も実行される ので、通常よりも デプロイに時間がかかってしまう
  • リポジトリ単位で依存関係を一括更新する運用をしているので、公開しているパッケージの依存関係更新時に 新しいバージョンをリリースするのをサボってしまう

元々趣味でゆるくやってるウェブサイトではあるので、「モノレポってなんか流行ってるし、かっこよさそう!やってみたい!」みたいな軽い気持ちでやっていました。 やってみて勉強にもなりました し、コードを変更したパッケージの内容を、npm にリリースする前に自分のウェブサイトという 実際に利用する環境で即動作確認することができる というのも良かったです。

が、ただでさえブログの記事が増えてきてデプロイにかかる時間が長くなってきているところに他のものも詰め込んでいくと その分だけ余計に時間がかかります

また、renovate などを使って簡単に依存関係の更新を行えるようにしているのですが、まとめてサッと上げて、ちょっと手間のかかるパッケージのリリースは大きな変更が加わっているのにしない、という 大変おサボりをしてしまうことが多発 しました。実際に使っているウェブサイトのほうでは最新に更新された状態になっていたので 「まあどうせ自分以外に使ってる人なんていないでしょ」などというお気持ちになってしまった のが良くなかったのでしょう。

というわけで、公開しているパッケージについては別のリポジトリに移し、それ以外については適宜調整を行って、ウェブサイトのリポジトリでモノレポをやめました。デプロイにかかる時間は、わずかではありますが 30 秒ほど短縮されています。

別のリポジトリに移したパッケージについては、semantic-release などを入れて大きな変更があればほぼ自動でリリースがなされるように設定をしています。面倒くさがりでも安心です。

なにかを導入するときは、プロジェクトの特性にあっているかをちゃんと考えるべきだなあ、というお気持ち。大きな変更を行ったことになりますので、もしかするとウェブサイトの方に何らかの不具合等が発生するかもしれません。その際はご連絡いただけますと助かります🙏