php-monorepo-builder
`symplify/monorepo-builder`を用いてPHPモノレポを管理し、パッケージの`composer.json`統合、バージョン検証、依存関係の伝播、リリース作業の自動化などを効率的に行うための設定や実行を支援するSkill。
📜 元の英語説明(参考)
Use `symplify/monorepo-builder` to manage PHP monorepos with `vendor/bin/monorepo-builder` and `monorepo-builder.php`. Trigger this skill when the user mentions monorepo-builder, merging package `composer.json` files into a root `composer.json`, validating inter-package versions, configuring package directories, propagating dependencies, or automating monorepo releases and release workers.
🇯🇵 日本人クリエイター向け解説
`symplify/monorepo-builder`を用いてPHPモノレポを管理し、パッケージの`composer.json`統合、バージョン検証、依存関係の伝播、リリース作業の自動化などを効率的に行うための設定や実行を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o php-monorepo-builder.zip https://jpskill.com/download/8684.zip && unzip -o php-monorepo-builder.zip && rm php-monorepo-builder.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/8684.zip -OutFile "$d\php-monorepo-builder.zip"; Expand-Archive "$d\php-monorepo-builder.zip" -DestinationPath $d -Force; ri "$d\php-monorepo-builder.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
php-monorepo-builder.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
php-monorepo-builderフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
monorepo-builder
PHP monorepoを管理するためのツールセットです。composer.jsonファイルの結合、パッケージバージョンの検証、自動化によるリリースなどを行います。
リポジトリ: symplify/monorepo-builder
パッケージ: monorepo-php/monorepo (Packagist経由)
言語: PHP 8.2+
ライセンス: MIT License
最新リリース: 12.5.2 (2026-03-26)
このSkillを使うべき時
このSkillは、以下のような場合に利用できます。
- 新しいPHP monorepoをセットアップする — ディレクトリ構造の雛形作成、初期
monorepo-builder.php設定 composer.jsonファイルを結合する — すべてのパッケージの依存関係をルートのcomposer.jsonに集約する- バージョンの整合性を検証する — パッケージ間の依存関係がすべて一致するバージョン制約を使用していることを確認する
- リリースを自動化する — バージョンを上げ、リリースタグを付け、すべてのパッケージにわたって1つのコマンドでタグをプッシュする
- パッケージの検出を管理する — パッケージをスキャンするディレクトリと、除外するディレクトリを設定する
- 結合後にデータを追加または削除する — 共有のdev依存関係を追加し、パッケージ固有のエントリを削除する
- 結合の問題をトラブルシューティングする — composerセクションの順序、カスタムキーの削除、
readmeプロパティの消失 (12.5.0で修正) - リリースワーカーを設定する — リリース中に実行されるステップのシーケンスをカスタマイズする
クイックリファレンス
インストール
composer require monorepo-php/monorepo --dev
PHP 8.2+が必要です。PHP 8.1の場合は、symplify/monorepo-builder:^11.2を使用してください (現在はメンテナンスされていません)。
新しいMonorepoを初期化する
vendor/bin/monorepo-builder init
基本的なmonorepo構造と、プロジェクトルートにスターターmonorepo-builder.php設定を生成します。
コアコマンド
| コマンド | 説明 |
|---|---|
vendor/bin/monorepo-builder merge |
すべてのパッケージのcomposer.jsonをルートに結合する |
vendor/bin/monorepo-builder validate |
パッケージ間のバージョンが一貫しているか確認する |
vendor/bin/monorepo-builder propagate |
ルートの依存関係のバージョンをパッケージのcomposer.jsonファイルにプッシュバックする |
vendor/bin/monorepo-builder bump-interdependency <version> |
相互のパッケージ制約を1つのターゲットバージョンに更新する |
vendor/bin/monorepo-builder package-alias |
パッケージのcomposer.jsonファイル全体でbranch-aliasを更新する |
vendor/bin/monorepo-builder localize-composer-paths |
分割前のテストのために、相互のパッケージパスをローカルパスにスワップする |
vendor/bin/monorepo-builder release <version> |
すべてのパッケージにわたって新しいバージョンをタグ付けしてリリースする |
vendor/bin/monorepo-builder init |
新しいmonorepo構造を構築する |
設定: パッケージディレクトリ
すべての設定は、プロジェクトルートのmonorepo-builder.phpに記述します。
use Symplify\MonorepoBuilder\Config\MBConfig;
return static function (MBConfig $mbConfig): void {
// 複数のディレクトリをスキャンしてパッケージを探す
$mbConfig->packageDirectories([
__DIR__ . '/packages',
__DIR__ . '/projects',
]);
// 特定のパッケージを検出から除外する
$mbConfig->packageDirectoriesExcludes([
__DIR__ . '/packages/secret-package',
]);
};
設定: 結合 — データの追加と削除
use Symplify\MonorepoBuilder\ComposerJsonManipulator\ValueObject\ComposerJsonSection;
use Symplify\MonorepoBuilder\Config\MBConfig;
use Symplify\MonorepoBuilder\ValueObject\Option;
return static function (MBConfig $mbConfig): void {
// 結合後にルートのcomposer.jsonにデータを追加する
$mbConfig->dataToAppend([
ComposerJsonSection::AUTOLOAD_DEV => [
'psr-4' => [
'Symplify\Tests\\' => 'tests',
],
],
ComposerJsonSection::REQUIRE_DEV => [
'phpstan/phpstan' => '^2.1',
],
]);
// 結合後にルートのcomposer.jsonからデータを削除する
$mbConfig->dataToRemove([
ComposerJsonSection::REQUIRE => [
// バージョンは無関係 — キーによって削除される
'phpunit/phpunit' => '*',
],
ComposerJsonSection::REPOSITORIES => [
Option::REMOVE_COMPLETELY,
],
]);
};
注 (12.5.0+):
dataToAppendは、任意のcomposer.jsonキーをサポートするようになりました。24個のハードコードされたセクションに限定されなくなりました。
結合を実行する
vendor/bin/monorepo-builder merge
検出されたパッケージディレクトリ内のすべてのcomposer.jsonファイルを読み取り、その依存関係をルートのcomposer.jsonに結合します。
新しいバージョンをリリースする
vendor/bin/monorepo-builder release 1.2.0
設定されたすべてのリリースワーカーを順番に実行します (バージョンの更新、タグの作成、プッシュなど)。
パッケージを個別のリポジトリに分割する
Monorepo Builder自体は、パッケージの分割を処理しません。分割されたリポジトリの場合は、GitHub Actionsでsymplify/github-action-monorepo-splitと組み合わせて使用してください。
主要な概念
パッケージの検出
デフォルトでは、monorepo-builderは./packagesをスキャンして、composer.jsonを含むサブディレクトリを探します。packageDirectories()を使用して、追加または代替のディレクトリを設定します。ディレクトリ名にtestsが含まれているパッケージは除外される場合があります — issue #59を参照してください。
結合の動作
mergeコマンドは、検出されたすべてのパッケージからrequire、require-dev、autoload、autoload-dev、およびその他のセクションをルートのcomposer.jsonに集約します。12.5.0以降、カスタム/非標準キー (例: scripts-aliases、abandoned、readme) は結合中に保持されます。
リリースワーカー
リリースワーカーは、リリース中に順番に実行される個別のステップです。これらはカスタマイズまたは並べ替えることができます。SetNextMutualDependenciesReleaseWorkerが常にマイナーバージョンをインクリメントする既知の問題 (#77) が存在します — ワーカーの順序を注意深く確認してください。
バージョンの検証
validateコマンドは、パッケージAがパッケージB (両方ともmonorepo内) に依存している場合、Aのcomposer.jsonのバージョン制約がBの実際のバージョンと一致することを確認します。これにより、パッケージ間のバージョンのずれを防ぎます。
既知の問題
未解決の問題
| # | 概要 |
|---|---|
| #90 | [Feature] Conventional |
(原文がここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
monorepo-builder
A set of tools for managing PHP monorepos: merging composer.json files, validating package versions, releasing with automation, and more.
Repository: symplify/monorepo-builder
Package: monorepo-php/monorepo (via Packagist)
Language: PHP 8.2+
License: MIT License
Latest Release: 12.5.2 (2026-03-26)
When to Use This Skill
Use this skill when you need to:
- Set up a new PHP monorepo — scaffolding directory structure, initial
monorepo-builder.phpconfig - Merge
composer.jsonfiles — aggregate dependencies from all packages into the rootcomposer.json - Validate version consistency — ensure all inter-package dependencies use matching version constraints
- Automate releases — bump versions, tag releases, push tags across all packages in one command
- Manage package discovery — configure which directories are scanned for packages, and which to exclude
- Append or remove data after merge — add shared dev dependencies, remove per-package-only entries
- Troubleshoot merge issues — composer section ordering, dropped custom keys,
readmeproperty loss (fixed in 12.5.0) - Configure release workers — customize the sequence of steps that run during a release
Quick Reference
Installation
composer require monorepo-php/monorepo --dev
Requires PHP 8.2+. For PHP 8.1, use symplify/monorepo-builder:^11.2 (no longer maintained).
Initialize a New Monorepo
vendor/bin/monorepo-builder init
Generates a basic monorepo structure and a starter monorepo-builder.php config at your project root.
Core Commands
| Command | Description |
|---|---|
vendor/bin/monorepo-builder merge |
Merge all package composer.json into root |
vendor/bin/monorepo-builder validate |
Check that inter-package versions are consistent |
vendor/bin/monorepo-builder propagate |
Push root dependency versions back into package composer.json files |
vendor/bin/monorepo-builder bump-interdependency <version> |
Update mutual package constraints to one target version |
vendor/bin/monorepo-builder package-alias |
Update branch-alias across package composer.json files |
vendor/bin/monorepo-builder localize-composer-paths |
Swap mutual package paths to local paths for pre-split testing |
vendor/bin/monorepo-builder release <version> |
Tag and release a new version across all packages |
vendor/bin/monorepo-builder init |
Scaffold a new monorepo structure |
Configuration: Package Directories
All configuration lives in monorepo-builder.php at the project root.
use Symplify\MonorepoBuilder\Config\MBConfig;
return static function (MBConfig $mbConfig): void {
// Scan multiple directories for packages
$mbConfig->packageDirectories([
__DIR__ . '/packages',
__DIR__ . '/projects',
]);
// Exclude specific packages from discovery
$mbConfig->packageDirectoriesExcludes([
__DIR__ . '/packages/secret-package',
]);
};
Configuration: Merge — Append and Remove Data
use Symplify\MonorepoBuilder\ComposerJsonManipulator\ValueObject\ComposerJsonSection;
use Symplify\MonorepoBuilder\Config\MBConfig;
use Symplify\MonorepoBuilder\ValueObject\Option;
return static function (MBConfig $mbConfig): void {
// Add data to root composer.json after merge
$mbConfig->dataToAppend([
ComposerJsonSection::AUTOLOAD_DEV => [
'psr-4' => [
'Symplify\Tests\\' => 'tests',
],
],
ComposerJsonSection::REQUIRE_DEV => [
'phpstan/phpstan' => '^2.1',
],
]);
// Remove data from root composer.json after merge
$mbConfig->dataToRemove([
ComposerJsonSection::REQUIRE => [
// Version is irrelevant — removed by key
'phpunit/phpunit' => '*',
],
ComposerJsonSection::REPOSITORIES => [
Option::REMOVE_COMPLETELY,
],
]);
};
Note (12.5.0+):
dataToAppendnow supports arbitrary composer.json keys — no longer limited to 24 hardcoded sections.
Run a Merge
vendor/bin/monorepo-builder merge
Reads all composer.json files in discovered package directories and merges their dependencies into the root composer.json.
Release a New Version
vendor/bin/monorepo-builder release 1.2.0
Runs all configured release workers in sequence (bump versions, create tags, push, etc.).
Split Packages to Separate Repositories
Monorepo Builder does not handle package splitting itself. For split repos, pair it with symplify/github-action-monorepo-split in GitHub Actions.
Key Concepts
Package Discovery
By default, monorepo-builder scans ./packages for subdirectories containing a composer.json. You configure additional or alternative directories with packageDirectories(). Packages whose directory names contain tests may be excluded — see issue #59.
Merge Behaviour
The merge command aggregates require, require-dev, autoload, autoload-dev, and other sections from all discovered packages into the root composer.json. Since 12.5.0, custom/non-standard keys (e.g. scripts-aliases, abandoned, readme) are preserved during merge.
Release Workers
Release workers are discrete steps executed in sequence during a release. They can be customized or reordered. A known issue (#77) exists where SetNextMutualDependenciesReleaseWorker always increments the minor version — review worker ordering carefully.
Version Validation
The validate command checks that when package A depends on package B (both in the monorepo), the version constraint in A's composer.json matches the actual version of B. This prevents inter-package version drift.
Known Issues
Open Issues
| # | Summary |
|---|---|
| #90 | [Feature] Conventional Commit release support |
| #77 | SetNextMutualDependenciesReleaseWorker always updates minor version |
| #76 | No helper to import autoloader regardless of monorepo depth |
| #72 | Incompatible declaration in EventDispatcher.php |
| #69 | Composer install behaviour question |
| #59 | Packages with tests in name are always ignored |
| #25 | Interdependency version update fails for pre-release versions |
Recently Fixed (12.5.0 — 2026-02-13)
- Merge now preserves unknown/custom composer.json sections —
scripts-aliases,abandoned,readme, and any non-standard keys are no longer dropped (#105, #106, #71, #107) dataToAppendsupports arbitrary composer.json keys — no longer limited to 24 hardcoded sections (#105)
Recent Releases
| Version | Date | Highlights |
|---|---|---|
| 12.5.2 | 2026-03-26 | Allow sebastian/diff ^8 (#110) |
| 12.5.0 | 2026-02-13 | Preserve custom composer.json sections; arbitrary dataToAppend keys |
See references/releases.md for full release notes.
Reference Files
| File | Contents | Confidence |
|---|---|---|
references/README.md |
Full README: install, commands, configuration options, usage examples | Medium |
references/releases.md |
Release notes for all tagged versions (2 releases) | Medium |
references/issues.md |
All 34 GitHub issues — 7 open, 27 closed — with labels and dates | Medium |
references/file_structure.md |
Repository directory tree (813 items) | Medium |
Working with This Skill
Beginner
- Run
vendor/bin/monorepo-builder initto scaffold your monorepo. - Add packages under
packages/(each with its owncomposer.json). - Run
vendor/bin/monorepo-builder mergeto sync dependencies into root. - Check
references/README.mdfor full configuration options.
Intermediate
- Customize
monorepo-builder.phpto add multiple package directories and exclusions. - Use
dataToAppendto inject shared dev tooling (PHPStan, PHPUnit) into rootcomposer.json. - Use
dataToRemoveto strip per-package-only entries (e.g. local repositories) from the merged root. - Run
validatein CI to catch inter-package version drift early. - Use
propagateorbump-interdependencywhen root and package version constraints need to move together.
Advanced
- Configure and reorder release workers for custom release pipelines.
- Use
Option::REMOVE_COMPLETELYto drop entire sections (e.g.repositories) after merge. - Be aware of issue #77 when using
SetNextMutualDependenciesReleaseWorker— it may bump the minor version unexpectedly. - For pre-release versions (alpha/beta/RC), see issue #25 before relying on automatic interdependency updates.
- Use branch-aware tag validation if you maintain multiple active major version lines.
Source: GitHub repository symplify/monorepo-builder | Last updated: 2026-04-11