Upgrade to Pro — share decks privately, control downloads, hide ads and more …

怖くないComposer / Composer Made Easy

怖くないComposer / Composer Made Easy

2025年6月18日開催「PHPカンファレンス2025」で登壇した際の発表資料です。
https://phpcon.php.gr.jp/2025/

Avatar for 株式会社カオナビ

株式会社カオナビ

July 02, 2025
Tweet

More Decks by 株式会社カオナビ

Other Decks in Technology

Transcript

  1. 雫石    株式会社カオナビ CTO室所属 現在13社目... 組み込み系 /家庭用ゲーム開発 /ソシャゲ開発 PHP暦約9年、最近は Goばかり書いてます ・X、やってません。

    ・Facebook、やってません。 ・Note、やってません。 「発信」という行動は今回が初です...。優しい目で見ていただけると嬉しいです...! 自己紹介 © kaonavi, inc. 4
  2. composerの概要 © kaonavi, inc. 8 PHPの依存関係管理ツールです。プロジェクトに必要なライ ブラリやパッケージを自動的にダウンロード・管理してくれま す。 他にも... -

    よく使うコマンドをタスクとして登録できたり - 動作環境の制限指定ができたり - パッケージの脆弱性を診断したり
  3. おそらく使っていないプロジェクトの方が少ないはず © kaonavi, inc. 9 必要要件  PHP5.3.2以上 インストール   curl

    -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer php:8.2-fpmなどのDockerイメージには最初から インストールされていないことがほとんどなので、 Dockerfileなどでインストールが必要
  4. 経験則ですが ... © kaonavi, inc. 10 リアルガチに、 composer使っていないプロジェクトっ て結構経験しました。  

    大抵、オレオレ PHPフレームワークを採用している場 合でした。   「どうして composer使ってないんですか?」 という質問に、明確に理由が返ってきた経験はありま せん。
  5. composer無くてもよくない? © kaonavi, inc. 11 別に無くても製品は作れますが、 ツラい   できるだけ、プロジェクトに composerを導入できるよう

    にこのセッションで怖くなってほしいです - 手動でライブラリをダウンロード・配置する必要がある - バージョン管理が困難で、ライブラリ同士の依存関係で頭を抱える - アップデートの度に手作業で差し替え作業
  6. [技術的]composer.jsonについて © kaonavi, inc. 12 - composerにおける動作の起点となるファイル - composer.jsonを理解する =

    composerを理解する { "name": "your-company/awesome-project", "require": { "monolog/monolog": "^3.0" }, "autoload": { "psr-4": { "App\\": "src/" } } }
  7. [技術的]パッケージを install © kaonavi, inc. 13 composer install - これだけで、依存パッケージ含め、必要なソースがVendor下に配置される

    - 依存関係を自動的に解決し、配置してくれるのは非常に強力 { "require": {}, // 本番環境の依存関係 "require-dev": {}, // 開発環境のみの依存関係 "autoload": {}, // オートローディング設定 "scripts": {} // カスタムコマンド } composer.jsonの基本構造
  8. Packagistとは? © kaonavi, inc. 14 - composerのデフォルトリポジトリ - 数十万のPHPパッケージが登録済み -

    欲しいものは大体ある印象 { "repositories": [ { "type": "composer", "url": "https://packages.example.com" } ] } Packagist以外のリポジトリの指定ももちろん可能 (社内gitlabなど...)
  9. 途中から導入って難しくない? © kaonavi, inc. 15 <?php require 'vendor/autoload.php'; - オレオレフレームワークでもindex.phpなどのエントリポイントがあるはず

    - そこで上記requireさえすれば、特に副作用無く導入可能 ですので、障壁となるのは技術的問題よりも、プロジェクト主導者 の精神的な障壁の方が高い場合が多いです
  10. composerって遅くないの? © kaonavi, inc. 16 composerは様々なファイルを生成しますが、私たちが使うのは vendor/autoload.php だけです。 ザックリいうと、ComposerはClassが記述してあるファイルがどのファイルパス にあるかのマップみたいなものを持っています。

    未定義なClassが参照されたとき、そのマップから、ファイルパスを取り出し、 requireする関数を、 spl_autoload_registerで登録しているだけです。 ですので、動作が遅くなったりはしません
  11. composer.lockとは? © kaonavi, inc. 19 - 実際にinstallされたパッケージの正確な記録 - composer install時に自動生成されます

    - 手動書き換え厳禁!! 原則、composer installは、composer.lockを参照し、パッケージ をインストールしていきます。.lockが無い場合のみ、新規で生成 します。 このおかげで、本番/開発/ローカル環境でパッケージのバージョ ン等を統一できます
  12. composer install --no-dev --optimize-autoloader 本番運用時のオススメ © kaonavi, inc. 20 -

    以下のコマンドを使うのが一般的です - 開発環境用パッケージはインストールしない - オートロードの最適化付き(だいたい3倍ほど速くなります) composer install --no-dev --optimize-autoloader \ --apcu-autoloader ← ただし、apcuのキャッシュに詳しく無い場合使わない方が良いです Apcu拡張が入っているなら、更に最適化可能(更に3倍ほど加速)
  13. composer install --no-dev --optimize-autoloader --apcu-autoloader php -r "function_exists('apcu_clear_cache') && apcu_clear_cache();"

    curl -s "https://yourdomain.com/clear-cache.php?token=your-secret-token" または composer install --no-dev --optimize-autoloader --apcu-autoloader sudo systemctl reload php-fpm 本番運用時のオススメ © kaonavi, inc. 21 - 確実なコマンド(php-fpmの場合)