- RubyGemsとComposerは「似ているようで違う進化」をした
- Rubyは最初から「アプリケーション言語」だった
- PHPはまったく違う出発点だった
- ComposerはBundlerの役割を最初から持っていた
- autoloadが示すPHPの方向転換
- なぜ「PHPは古い」と言われ続けたのか
- 注意点:Composerがあっても設計は自動では良くならない
- まとめ:ComposerはPHPの歴史の転換点
RubyGemsとComposerは「似ているようで違う進化」をした
RubyGemsとComposerはどちらも言語のエコシステムを支えるパッケージ管理の中心です。
そのため「PHPはRubyの後追い」と語られることがあります。
しかし実際には、同じ方向に進化したのではありません。
結論から言うと、RubyGemsは「言語がアプリケーション開発に向かった結果」、Composerは「Web運用文化に適応した結果」として生まれました。
この違いを知ると、PHPの歴史の特徴がかなりはっきり見えてきます。
Rubyは最初から「アプリケーション言語」だった
Rubyの前提:ローカルで開発してデプロイする
Rubyは最初から、開発者が自分の環境でアプリケーションを構築することを前提にしていました。
特にRailsの登場以降は顕著です。
- ローカル開発
- テスト実行
- サーバーへデプロイ
この流れが標準でした。
そのためRubyGemsは、開発者のマシンにライブラリを入れる形で自然に成立しました。
gem install rails
この時点でアプリケーションの土台が整います。
つまりRubyGemsは「開発環境を作るツール」として発展しました。
Bundlerの登場
ただしRubyGems単体では問題がありました。
バージョン衝突です。
そこで登場したのがBundlerです。
source "https://rubygems.org" gem "rails", "~> 7.0"
Bundlerは、アプリケーション単位で依存関係を固定しました。
ここで初めて「プロジェクトごとの依存分離」が成立します。
重要なのは、Rubyでは
> RubyGems → Bundler
という二段階進化だった点です。
PHPはまったく違う出発点だった
PHPは「サーバー上で直接動かす」文化
PHPは、最初からアプリケーションフレームワーク中心の言語ではありませんでした。
HTMLに埋め込んで動かすスクリプト言語です。
- FTPでアップロード
- サーバー上で実行
- ローカル開発が前提ではない
つまり、開発環境を構築する必要がありませんでした。
ここがRubyとの決定的な差です。
Rubyは「開発者が使う言語」、
PHPは「運用者も触る言語」でした。
その結果:ライブラリ共有が困難
RubyGemsはグローバルインストールでも成立しました。
開発者が自分の環境を管理できたからです。
しかしPHPでは問題になります。
- 共用サーバー
- 権限制限
- 複数サイト同居
1つのライブラリ更新で他サイトが壊れる可能性があります。
この時点で、RubyGems型の仕組みはPHPに適合しませんでした。
ComposerはBundlerの役割を最初から持っていた
ここが重要です。
Rubyは
- RubyGems(配布)
- Bundler(依存固定)
の2つで成立しています。
一方、Composerは1つで両方を行います。
composer install
このコマンドだけで、
- パッケージ取得
- 依存解決
- バージョン固定
- オートロード
すべてが成立します。
つまりComposerは、Rubyが10年以上かけて整えた構造を、一度に実装した存在です。
autoloadが示すPHPの方向転換
PHPには長い間、標準のコード構造がありませんでした。
典型的なコードはこうです。
require_once 'config.php'; require_once 'db.php'; require_once 'user.php';
ファイル数が増えるほど管理不能になります。
Composerはこれを変えました。
require __DIR__.'/vendor/autoload.php';
そしてPSR-4規約が導入されました。
- クラス名
- 名前空間
- ディレクトリ構造
これらが対応するようになります。
つまりComposerはパッケージ管理だけでなく、PHPの設計標準を提供しました。
RubyはRailsが設計を決め、
PHPはComposerが設計を揃えたとも言えます。
なぜ「PHPは古い」と言われ続けたのか
この歴史が評価の差を生みました。
RubyはRailsの完成度によって早期に近代的開発環境を持ちました。
一方PHPは、長い間ファイル配置中心の開発が続きました。
結果として
- 構造がバラバラ
- 依存関係管理が弱い
- 再現性が低い
という印象が残りました。
実際には、Composer登場以降は状況が大きく変わっています。
ただし評価は過去の印象を引きずります。
注意点:Composerがあっても設計は自動では良くならない
ここは重要です。
Composerを入れただけでは、プロジェクトは綺麗になりません。
起きがちなこと:
- 名前空間を使わない
- autoloadを設定しない
- vendor直編集
これでは昔のPHPと変わりません。
Composerはあくまで「構造を守れる環境」を提供するだけです。
まとめ:ComposerはPHPの歴史の転換点
RubyGemsはRubyの自然な延長でした。
ComposerはPHPの方向転換でした。
- 運用中心 → 開発中心
- ファイル配置 → 構造設計
- 手動管理 → 依存管理
この変化によって、PHPは大規模アプリケーションを扱える言語になりました。
Rubyが最初から開発者向けに進化したのに対し、
PHPは現場の実用性を保ちながら進化しました。
その分、変化は遅く見えましたが、
Composerの登場は単なるツール追加ではありませんでした。
PHPが「スクリプト言語」から「アプリケーション言語」に近づいた瞬間だったと言えます。