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
400
怖くない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は我々のソースコードを理解してくれないのか / Why AI Misunderstands Our Code
kaonavi
0
30
ステップアップする技術発信 : キャリアに活かせる発信戦略とは / Strategic Tech Communication
kaonavi
0
140
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
18
14k
「ラベルにとらわれない」エンジニアでいること/Be an engineer beyond labels
kaonavi
0
490
Popoverを早速実践投入してついでにブラウザにバグ報告もした話/Popover use, bug reported
kaonavi
0
300
デザインシステムのレガシーコンポーネントを刷新した話/Design System Legacy Renewal
kaonavi
1
430
バックエンド留学した話/Backend study abroad story
kaonavi
0
390
新卒1年目のフロントエンド開発での取り組み/New grad front-end efforts
kaonavi
0
440
リモートワーク中心の組織を活性化させるリアル接点の力/The Power of Real Contacts
kaonavi
0
410
Other Decks in Technology
See All in Technology
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
43k
それでも私が品質保証プロセスを作り続ける理由 #テストラジオ / Why I still continue to create QA process
pineapplecandy
0
150
AI AgentをLangflowでサクッと作って、1日働かせてみた!
yano13
1
120
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3k
クラウドとリアルの融合により、製造業はどう変わるのか?〜クラスメソッドの製造業への取組と共に〜
hamadakoji
0
330
React19.2のuseEffectEventを追う
maguroalternative
2
590
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
710
コンパウンド組織のCRE #cre_meetup
layerx
PRO
0
210
Linux カーネルが支えるコンテナの仕組み / LF Japan Community Days 2025 Osaka
tenforward
1
110
AIフル活用で挑む!空間アプリ開発のリアル
taat
0
130
Building a cloud native business on open source
lizrice
0
160
映像エッジAIにおけるNode-RED活用事例
emirmatsui
0
130
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Why Our Code Smells
bkeepers
PRO
340
57k
Designing for humans not robots
tammielis
254
26k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Side Projects
sachag
455
43k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Code Review Best Practice
trishagee
72
19k
The Cult of Friendly URLs
andyhume
79
6.6k
The World Runs on Bad Software
bkeepers
PRO
72
11k
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 パッケージの取捨選択はとてもとても重要
ご清聴ありがとうございました!