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
株式会社カオナビ
July 02, 2025
Technology
0
230
怖くない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 株式会社カオナビ
ステップアップする技術発信 : キャリアに活かせる発信戦略とは / Strategic Tech Communication
kaonavi
0
35
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
15
10k
「ラベルにとらわれない」エンジニアでいること/Be an engineer beyond labels
kaonavi
0
410
Popoverを早速実践投入してついでにブラウザにバグ報告もした話/Popover use, bug reported
kaonavi
0
230
デザインシステムのレガシーコンポーネントを刷新した話/Design System Legacy Renewal
kaonavi
1
330
バックエンド留学した話/Backend study abroad story
kaonavi
0
310
新卒1年目のフロントエンド開発での取り組み/New grad front-end efforts
kaonavi
0
340
リモートワーク中心の組織を活性化させるリアル接点の力/The Power of Real Contacts
kaonavi
0
330
バランスを整えろ!そしてあえて崩せ!情けは無用で悩みを乗り越えよう!/Stay strong move forward
kaonavi
0
70
Other Decks in Technology
See All in Technology
本当にわかりやすいAIエージェント入門
segavvy
10
6k
MCPと認可まわりの話 / mcp_and_authorization
convto
2
170
PHPでResult型やってみよう
higaki_program
0
190
そもそも AWS FIS について。なぜ今 FIS のハンズオンなのか?などなど
kazzpapa3
2
120
DATA+AI SummitとSnowflake Summit: ユーザから見た共通点と相違点 / DATA+AI Summit and Snowflake Summit
nttcom
0
220
Ktor + Google Cloud Tasks/PubSub におけるOTel Messaging計装の実践
sansantech
PRO
1
300
FAST導入1年間のふりかえり〜現実を直視し、さらなる進化を求めて〜 / Review of the first year of FAST implementation
wooootack
1
130
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
21
5.8k
地図と生成AI
nakasho
0
720
AIコードアシスタントとiOS開発
jollyjoester
1
230
スプリントレビューを効果的にするために
miholovesq
9
1.6k
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
180
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
184
22k
A better future with KSS
kneath
238
17k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
Fireside Chat
paigeccino
37
3.5k
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 パッケージの取捨選択はとてもとても重要
ご清聴ありがとうございました!