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
2
怖くない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 株式会社カオナビ
「ラベルにとらわれない」エンジニアでいること/Be an engineer beyond labels
kaonavi
0
370
Popoverを早速実践投入してついでにブラウザにバグ報告もした話/Popover use, bug reported
kaonavi
0
200
デザインシステムのレガシーコンポーネントを刷新した話/Design System Legacy Renewal
kaonavi
0
290
バックエンド留学した話/Backend study abroad story
kaonavi
0
270
新卒1年目のフロントエンド開発での取り組み/New grad front-end efforts
kaonavi
0
300
リモートワーク中心の組織を活性化させるリアル接点の力/The Power of Real Contacts
kaonavi
0
78
バランスを整えろ!そしてあえて崩せ!情けは無用で悩みを乗り越えよう!/Stay strong move forward
kaonavi
0
59
駆け出しリーダーとしての第一歩〜開発チームとの新しい関わり方〜 / Beginning Journey as Team Leader
kaonavi
0
280
プロダクトの寿命を延ばすためにエンジニアが考えるべきこと 〜バージョンアップってなんのためにやるのか〜 / Strategies for product longevity
kaonavi
0
410
Other Decks in Technology
See All in Technology
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
300
WordPressから ヘッドレスCMSへ! Storyblokへの移行プロセス
nyata
0
160
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
360
2025-06-26 GitHub CopilotとAI駆動開発:実践と導入のリアル
fl_kawachi
1
100
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
170
JEDAI Databricks Free Editionもくもく会
taka_aki
1
110
標準技術と独自システムで作る「つらくない」SaaS アカウント管理 / Effortless SaaS Account Management with Standard Technologies & Custom Systems
yuyatakeyama
3
1.3k
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
140
A2Aのクライアントを自作する
rynsuke
1
220
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1.9k
なぜ私はいま、ここにいるのか? #もがく中堅デザイナー #プロダクトデザイナー
bengo4com
0
1.1k
SpringBoot x TestContainerで実現するポータブル自動結合テスト
demaecan
0
100
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
The Pragmatic Product Professional
lauravandoore
35
6.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
For a Future-Friendly Web
brad_frost
179
9.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Why Our Code Smells
bkeepers
PRO
337
57k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
What's in a price? How to price your products and services
michaelherold
246
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
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 パッケージの取捨選択はとてもとても重要
ご清聴ありがとうございました!