Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
怖くないComposer / Composer Made Easy
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
株式会社カオナビ
July 02, 2025
Technology
0
560
怖くないComposer / Composer Made Easy
2025年6月18日開催「PHPカンファレンス2025」で登壇した際の発表資料です。
https://phpcon.php.gr.jp/2025/
株式会社カオナビ
July 02, 2025
Tweet
Share
More Decks by 株式会社カオナビ
See All by 株式会社カオナビ
カオナビにおけるAI活用の歴史と現在 / AI at kaonavi: Past and Present
kaonavi
0
180
BDD_ AI駆動開発の第一歩 / BDD: First Steps in AI-Driven Development
kaonavi
0
150
インフラエンジニア、Claude Codeを連れてプロダクトチームへ留学中 / Infrastructure Engineer on Loan to Product Team with Claude Code
kaonavi
0
110
スクラムを一度諦めたチームにアジャイルコーチが入ってどう変化したか / A Team's Second Try at Scrum with an Agile Coach
kaonavi
0
310
データモデリングにもUnit Testみたいのないの? / Bringing Unit Test-like Confidence to Data Modeling with AI
kaonavi
0
160
データ組織ゼロから投資を得るまでの軌跡と未来図 〜AIの前にやるべきこと〜 / Building a Data Organization from Scratch: The Journey to Securing Investment and a Vision for the Future
kaonavi
0
460
OSSコントリビュートのすすめ
kaonavi
1
910
小さなアウトプットが自信をくれた話 / Small Outputs Build Confidence
kaonavi
0
180
AI2027をもとに FY2025上期のAIを人事評価してみた / AI Performance Review FY2025
kaonavi
0
180
Other Decks in Technology
See All in Technology
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
Agile Leadership Summit Keynote 2026
m_seki
1
570
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
310
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
620
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
350
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
240
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.1k
AWS Network Firewall Proxyを触ってみた
nagisa53
1
210
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
150
Featured
See All Featured
Crafting Experiences
bethany
1
48
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
320
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Being A Developer After 40
akosma
91
590k
For a Future-Friendly Web
brad_frost
182
10k
Bash Introduction
62gerente
615
210k
HDC tutorial
michielstock
1
370
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
89
Transcript
怖くないComposer 2025 PHP Conference 2025.06.28 | CTO室 雫石 © kaonavi,
inc.
INDEX 1 . 自己紹介 3 .Composer 4 .ちょっとしたデモ 5 .お伝えしたいこと
2 © kaonavi, inc. 2 2 .お伝えしたいこと
自己紹介 © kaonavi, inc. 3
雫石 株式会社カオナビ CTO室所属 現在13社目... 組み込み系 /家庭用ゲーム開発 /ソシャゲ開発 PHP暦約9年、最近は Goばかり書いてます ・X、やってません。
・Facebook、やってません。 ・Note、やってません。 「発信」という行動は今回が初です...。優しい目で見ていただけると嬉しいです...! 自己紹介 © kaonavi, inc. 4
お伝えしたいこと © kaonavi, inc. 5
ドメイン固有処理以外は、 大抵Packagistにある (PHPのとても良い点) ・多言語と比較しても、PHPのエコシステムはとても充実 ・世界中から使われているライブラリは信頼に足る ・多くの場合、実装がエレガント ・自分で作ると単純に時間がかかる 車輪の再発明は辛いということ © kaonavi,
inc. 6 自前での実装をなるべく減らし、楽をしましょう
Composer © kaonavi, inc. 7
composerの概要 © kaonavi, inc. 8 PHPの依存関係管理ツールです。プロジェクトに必要なライ ブラリやパッケージを自動的にダウンロード・管理してくれま す。 他にも... -
よく使うコマンドをタスクとして登録できたり - 動作環境の制限指定ができたり - パッケージの脆弱性を診断したり
おそらく使っていないプロジェクトの方が少ないはず © 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などでインストールが必要
経験則ですが ... © kaonavi, inc. 10 リアルガチに、 composer使っていないプロジェクトっ て結構経験しました。
大抵、オレオレ PHPフレームワークを採用している場 合でした。 「どうして composer使ってないんですか?」 という質問に、明確に理由が返ってきた経験はありま せん。
composer無くてもよくない? © kaonavi, inc. 11 別に無くても製品は作れますが、 ツラい できるだけ、プロジェクトに composerを導入できるよう
にこのセッションで怖くなってほしいです - 手動でライブラリをダウンロード・配置する必要がある - バージョン管理が困難で、ライブラリ同士の依存関係で頭を抱える - アップデートの度に手作業で差し替え作業
[技術的]composer.jsonについて © kaonavi, inc. 12 - composerにおける動作の起点となるファイル - composer.jsonを理解する =
composerを理解する { "name": "your-company/awesome-project", "require": { "monolog/monolog": "^3.0" }, "autoload": { "psr-4": { "App\\": "src/" } } }
[技術的]パッケージを install © kaonavi, inc. 13 composer install - これだけで、依存パッケージ含め、必要なソースがVendor下に配置される
- 依存関係を自動的に解決し、配置してくれるのは非常に強力 { "require": {}, // 本番環境の依存関係 "require-dev": {}, // 開発環境のみの依存関係 "autoload": {}, // オートローディング設定 "scripts": {} // カスタムコマンド } composer.jsonの基本構造
Packagistとは? © kaonavi, inc. 14 - composerのデフォルトリポジトリ - 数十万のPHPパッケージが登録済み -
欲しいものは大体ある印象 { "repositories": [ { "type": "composer", "url": "https://packages.example.com" } ] } Packagist以外のリポジトリの指定ももちろん可能 (社内gitlabなど...)
途中から導入って難しくない? © kaonavi, inc. 15 <?php require 'vendor/autoload.php'; - オレオレフレームワークでもindex.phpなどのエントリポイントがあるはず
- そこで上記requireさえすれば、特に副作用無く導入可能 ですので、障壁となるのは技術的問題よりも、プロジェクト主導者 の精神的な障壁の方が高い場合が多いです
composerって遅くないの? © kaonavi, inc. 16 composerは様々なファイルを生成しますが、私たちが使うのは vendor/autoload.php だけです。 ザックリいうと、ComposerはClassが記述してあるファイルがどのファイルパス にあるかのマップみたいなものを持っています。
未定義なClassが参照されたとき、そのマップから、ファイルパスを取り出し、 requireする関数を、 spl_autoload_registerで登録しているだけです。 ですので、動作が遅くなったりはしません
composerが無い世界 © kaonavi, inc. 17
composerがある世界 © kaonavi, inc. 18
composer.lockとは? © kaonavi, inc. 19 - 実際にinstallされたパッケージの正確な記録 - composer install時に自動生成されます
- 手動書き換え厳禁!! 原則、composer installは、composer.lockを参照し、パッケージ をインストールしていきます。.lockが無い場合のみ、新規で生成 します。 このおかげで、本番/開発/ローカル環境でパッケージのバージョ ン等を統一できます
composer install --no-dev --optimize-autoloader 本番運用時のオススメ © kaonavi, inc. 20 -
以下のコマンドを使うのが一般的です - 開発環境用パッケージはインストールしない - オートロードの最適化付き(だいたい3倍ほど速くなります) composer install --no-dev --optimize-autoloader \ --apcu-autoloader ← ただし、apcuのキャッシュに詳しく無い場合使わない方が良いです Apcu拡張が入っているなら、更に最適化可能(更に3倍ほど加速)
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の場合)
もう一つお伝えしたいこと © kaonavi, inc. 22
「本当に必要としている機能を 満たしたパッケージか?」 「ドキュメントはあるか?」 「これはパッケージ化するべき か?」 バランス感覚を意識してほしいということ © kaonavi, inc. 23
パッケージの取捨選択はとてもとても重要
何をパッケージ化するべきか? © kaonavi, inc. 24 ドメイン固有処理のパッケージは使う側もツライので作らない方が無難で す... をパッケージ化することをオススメします 社内で共通のパッケージを使うことで、プロジェクト間の差分が減り、プロ ジェクト異動時に嬉しいです...(デメリットもありますが)
- 再利用可能な機能 - 汎用的なユーティリティ - 独立性の高いコンポーネント - 他プロジェクトでも使えるもの
どうやって適切なパッケージを探すか? © kaonavi, inc. 25 Googleで検索したり、Packagistで検索したり... 今はAIがあります!!!! 「他社製のRestful APIをCallしたいんだけど良いPackage はある?」
「もうcronでのバッチ登録は嫌なんだ、何か良いPackageは ある?」
最近Go言語を主務にしていま すが、PHPは本当に便利な packageが豊富にあり、満ち満 ちた世界だったんだと感じます 自分で書くコード量を減らして、 ガンガン楽しましょう PHPは本当に恵まれています! © kaonavi, inc.
26 パッケージの取捨選択はとてもとても重要
ご清聴ありがとうございました!