Turborepo / pnpm workspaces
公式サイトTurborepo / pnpm workspacesとは
pnpm workspacesは、Node.jsのパッケージ管理ツールpnpmが持つ機能で、複数のプログラムを一つのリポジトリの中に置き、それぞれの依存関係をまとめて管理する仕組みです。Turborepoは、その上で「どのプログラムから順にビルドやテストを実行するか」を依存関係から自動で判断し、変更のない部分の結果を再利用して処理時間を短縮するツールです。両者を組み合わせた構成は「モノレポ」と呼ばれ、利用者向けの画面、管理画面、API、それらが共有する型定義や部品を、一つの場所で一貫して管理できます。
弊社が採用する理由
弊社では、画面とAPIを分けて開発するWebシステムや、利用者向けと管理者向けの複数の画面を持つシステムで、Turborepoとpnpm workspacesによるモノレポ構成を採用しています。最大の理由は、APIがやり取りするデータの型や入力チェックのルール、共通のUI部品を一か所に置き、画面とサーバーの両方から参照できることです。仕様を変更した際に、影響する箇所が同じリポジトリの中で型チェックによって一度に見つかるため、片方だけ更新し忘れる事故を防げます。Turborepoは変更のあった部分だけをビルド・テストするため、GitHub Actionsでの自動検証の時間も抑えられます。複数の開発者が並行して作業する案件でも、環境構築の手順が一つで済み、参加や引き継ぎの負担を減らせる点も採用理由です。
向いている案件
- 画面とAPIを分けて開発し、型や検証ルールを共有したいWebシステム
- 利用者向け・管理者向けなど複数の画面を持つシステム
- 共通部品を複数のプログラムで使い回したいプロジェクト
保守・移行の観点
モノレポ構成では、一つのリポジトリに多数の依存関係が集まるため、更新の際は影響範囲を把握しやすい反面、一度に扱う量が増えます。pnpmの依存関係を記録したファイルを管理し、定期的に棚卸しの時期を決めて更新するのが基本です。Turborepoの結果の再利用が効くよう、各プログラムのビルド設定で入力と出力を正しく宣言しておくと、検証時間の増加を防げます。引き継ぎの際は、リポジトリ全体の構成図とプログラム間の依存関係を資料として残しておくと、把握が早くなります。
組み合わせて使う技術
よくあるご質問
小規模なシステムでもモノレポ構成にしますか?
画面とサーバーが一体のシステムや、単一のWebサイトであれば通常のリポジトリ構成で十分です。型や部品を複数のプログラムで共有する必要が出てきた段階で、モノレポ構成をご提案します。
モノレポにすると他社が引き継ぎにくくなりませんか?
TurborepoとpnpmはNode.jsの世界で広く使われている標準的なツールのため、対応できる開発会社は多くあります。弊社では構成の説明資料と環境構築手順を納品物に含めています。
関連するサービス
関連する開発ガイド
監修: Unlogical Systems合同会社(杉並区・西荻窪)公開