jpskill.com
🛠️ 開発・MCP コミュニティ

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本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
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
🪟 Windows (PowerShell)
$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. 1. 下の青いボタンを押して php-monorepo-builder.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → php-monorepo-builder フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

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コマンドは、検出されたすべてのパッケージからrequirerequire-devautoloadautoload-dev、およびその他のセクションをルートのcomposer.jsonに集約します。12.5.0以降、カスタム/非標準キー (例: scripts-aliasesabandonedreadme) は結合中に保持されます。

リリースワーカー

リリースワーカーは、リリース中に順番に実行される個別のステップです。これらはカスタマイズまたは並べ替えることができます。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.php config
  • Merge composer.json files — aggregate dependencies from all packages into the root composer.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, readme property 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+): dataToAppend now 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 sectionsscripts-aliases, abandoned, readme, and any non-standard keys are no longer dropped (#105, #106, #71, #107)
  • dataToAppend supports 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

  1. Run vendor/bin/monorepo-builder init to scaffold your monorepo.
  2. Add packages under packages/ (each with its own composer.json).
  3. Run vendor/bin/monorepo-builder merge to sync dependencies into root.
  4. Check references/README.md for full configuration options.

Intermediate

  • Customize monorepo-builder.php to add multiple package directories and exclusions.
  • Use dataToAppend to inject shared dev tooling (PHPStan, PHPUnit) into root composer.json.
  • Use dataToRemove to strip per-package-only entries (e.g. local repositories) from the merged root.
  • Run validate in CI to catch inter-package version drift early.
  • Use propagate or bump-interdependency when root and package version constraints need to move together.

Advanced

  • Configure and reorder release workers for custom release pipelines.
  • Use Option::REMOVE_COMPLETELY to 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