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
PSRで世界が変わる
Search
tsyama
September 28, 2019
Programming
0
230
PSRで世界が変わる
2019/9/28に行った社内勉強会で発表したスライドです。
tsyama
September 28, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
AI時代の認知負荷との向き合い方
optfit
0
160
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
170
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
CSC307 Lecture 01
javiergs
PRO
0
690
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
120
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
260
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
Leo the Paperboy
mayatellez
4
1.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
From π to Pie charts
rasagy
0
130
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
How STYLIGHT went responsive
nonsquared
100
6k
How to make the Groovebox
asonas
2
1.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Transcript
PSRで世界が変わる 2019.9.28 技術い勉強会 @tsyama
@tsyama_desu 自己紹介 @tsyama
PSRとは?
PHP Standards Recommendations (PHP標準勧告)
None
- PHP-FIGという団体が作成 - 「PHP書くときのルール決めてみたんだけど」 - 現在PSR-0からPSR-19まである - 既存のものは三種に大別できる
- PHP-FIGという団体が作成 - 「PHP書くときのルール決めてみたんだけど」 - 現在PSR-0からPSR-19まである - 既存のものは三種に大別できる
1. コーディングスタイル 2. オートローディング規約 3. インターフェース よくわかるPSRのすべて
1. コーディングスタイル 2. オートローディング規約 3. インターフェース よくわかるPSRのすべて
- PSR-1 - PSR-2 (ABANDONED) - PSR-12 1. コーディングスタイル
PSR-1 基本コーディング規約 - ファイルは `<?php`もしくは`<?=`で始める - 文字コードはUTF-8(BOM無し)を使用する - クラス名はStudlyCapsで定義する …
※StudlyCaps: 先頭大文字、単語区切り大文字
- インデントには、Tabではなく4 Spaceを使用する - 関数やクラス定義の `{` や `}` を独立した行にする -
コンマの前にSpaceを入れず、後に1 Spaceを入れる … PSR-2 コーディングスタイルガイド
public function hoge () { $hoge = “hoge”; echo $hoge;
return $hoge; } PSR-2 コーディングスタイルガイド
public function hoge () { $hoge = “hoge”; echo $hoge;
return $hoge; } PSR-2 コーディングスタイルガイド
ABANDONED (放棄)
- プロパティ/メソッドのアクセス修飾子は必ず明記する - スカラータイプヒンティングは小文字で書く - 無名クラスの書き方とか … PSR-12 拡張コーディングスタイルガイド 新たにPHP7向けに対応したコーディングスタイルガイド
これを受けて我々はどうするべきか
PSR-12 拡張コーディングスタイルガイド PSR-2と同様に、この仕様の目的は、さまざまな著者のコードを 認知摩耗を減らすことです。… したがって、このガイドの利点はルール自体ではなく、それらの ルールの共有にあります。 PSR-12 Overviewより引用(翻訳)
PSR-12 拡張コーディングスタイルガイド PSR-2と同様に、この仕様の目的は、さまざまな著者のコードを 認知摩耗を減らすことです。… したがって、このガイドの利点はルール自体ではなく、それらの ルールの共有にあります。 PSR-12 Overviewより引用(翻訳)
PSR-12 拡張コーディングスタイルガイド 「このコーディングスタイルガイドを厳守しろ」 と言っているわけではない
PSR-12 拡張コーディングスタイルガイド プロジェクト内でコーディングスタイルを 統一するということが何よりも重要 (PHPだけじゃない!)
PSR-12 拡張コーディングスタイルガイド コーディングスタイルを統一しないと起こること - Gitに余計な差分ができる - 見た目に統一感がなく、汚い - 争いが生まれる
PSR-12 拡張コーディングスタイルガイド コーディングスタイル、統一しましょう
1. コーディングスタイル 2. オートローディング規約 3. インターフェース よくわかるPSRのすべて
- PSR-0 (DEPRECATED) - PSR-4 2. オートローディング規約
2. オートローディング規約 オートローディングとは?
2. オートローディング規約 ライブラリを使いやすくする仕組み
2. オートローディング規約
2. オートローディング規約 オートローディングの仕組みを活用して PHPライブラリの管理を担う (npmとかと同じようなもの)
2. オートローディング規約 どうやって?
PSR-4 オートローダ - ライブラリファイルの置き場とそれに対応する クラス名を定義している
2. オートローディング規約 vendor
2. オートローディング規約 use \Hoge\Huga
2. オートローディング規約 require_once(‘../../../hoge/huga.php’)
2. オートローディング規約 require_once(‘../../../hoge/huga.php’)
2. オートローディング規約 composerで世界はどう変わったか
2. オートローディング規約 ライブラリ同士が 依存し、依存されやすい世界に
2. オートローディング規約 例えばLaravel
2. オートローディング規約 - doctrine/inflector - dragonmantank/cron-expression - egulias/email-validator - erusev/parsedown
- league/flysystem - monolog/monolog - nesbot/carbon - opis/closure - psr/container - psr/simple-cache - ramsey/uuid - swiftmailer/swiftmailer - symfony/console - symfony/debug - symfony/finder - symfony/http-foundation - symfony/http-kernel - symfony/process - symfony/routing - symfony/var-dumper - tijsverkoyen/css-to-inline-styles - vlucas/phpdotenv
2. オートローディング規約 ライブラリ同士が互いに助け合う 生態系がPHPの中に生まれた
2. オートローディング規約 エコシステム
2. オートローディング規約 ちなみに
2. オートローディング規約 エコシステムを体感するの めっちゃ大事
2. オートローディング規約
2. オートローディング規約 世界のプログラマの生態系の中に 組み込まれている…!
2. オートローディング規約 うれしい
2. オートローディング規約 楽しい
2. オートローディング規約 大好き
2. オートローディング規約 PSRが作り、composerが育てた エコシステムに乗っかってみよう
1. コーディングスタイル 2. オートローディング規約 3. インターフェース よくわかるPSRのすべて
3. インターフェース ここからちょっと難しい話
3. インターフェース インターフェースってなに?
3. インターフェース インターフェース (英: interface) はインタフェース、インタ フェイス、インターフェイスとも書き、英語で界面や接触面、 中間面などといった意味を持ち、転じてコンピュータと周辺機 器の接続部分を表すようになった。さらに、ユーザーインター フェースなどのように、人間と自動機械との間の複雑な操作
をする手順・規則との意味にも使われる。
3. インターフェース
3. インターフェース 「インターフェース」は「実装」するもの
3. インターフェース 例えばUSB「インターフェース」
3. インターフェース
3. インターフェース これらはすべてUSBの「実装」
3. インターフェース なぜインターフェースが必要なのか?
3. インターフェース 同一のインターフェースを実装すると 制御(ホスト)側が助かる
3. インターフェース USBホスト
3. インターフェース PHPでインターフェースはこう書く
3. インターフェース interface USB { public function plug(); public function
unplug(); }
3. インターフェース 実装はこう
3. インターフェース class Mouse implements USB { public function plug()
{ ... } public function unplug() { ... } }
3. インターフェース 本題
3. インターフェース 一部のPSRでは インターフェースを定義している
- PSR-3 - PSR-6 - PSR-7 - PSR-11 - PSR-14
- PSR-15 - PSR-16 - PSR-17 - PSR-18 3. インターフェース
- PSR-3 - PSR-6 - PSR-7 - PSR-11 - PSR-14
- PSR-15 - PSR-16 - PSR-17 - PSR-18 3. インターフェース
- MessageInterfaceとそれに付随するインターフェースを定 義している - 超重要 PSR-7 HTTP message interfaces
PSR-7 HTTP message interfaces interface MessageInterface { public function getProtocolVersion();
public function getHeaders(); public function getBody(); ... }
PSR-7 HTTP message interfaces interface MessageInterface →HTTPメッセージを下記のように定義する { public function
getProtocolVersion(); →プロトコルバージョンを取れる(HTTP/1.1とかHTTP/2とか) public function getHeaders(); →ヘッダーを取れる public function getBody(); →本文を取れる ... }
PSR-7 HTTP message interfaces で?
- そもそもPHPはHTTPリクエストを入力として、HTTPレスポン スを出力とする言語 - HTTPリクエストもHTTPレスポンスも「HTTPメッセージ」であ る PSR-7 HTTP message interfaces
すべてのPHPスクリプトは HTTPメッセージを扱う ※cliとかは別 PSR-7 HTTP message interfaces
すべてのPHPスクリプトはPSR-7に準拠できる (しようと思えば) ※cliとかは別 PSR-7 HTTP message interfaces
すべてのPHPスクリプトでHTTPメッセージを 同じように扱うことができる PSR-7 HTTP message interfaces
PSR-7 HTTP message interfaces すごい
PSR-7 HTTP message interfaces これをUSBで例えるなら すべての電化製品から USBケーブルが出てる みたいな
PSR-7 HTTP message interfaces 便利そう
PSR-7 HTTP message interfaces すばらしい
PSR-7 HTTP message interfaces 世界平和につながる
PSR-7 HTTP message interfaces しかし現実はそううまくいかない…
PSR-7 HTTP message interfaces 世界 < PSR-7ってちょっと使いづらいから 独自で定義するわ
PSR-7 HTTP message interfaces 世界 < もっとはやく言ってくれれば… わざわざ既存のコードをPSR-7準拠に 書き直すメリットは小さいし…
PSR-7 HTTP message interfaces 世界 < PSR-7ってなに?
PSR-7 HTTP message interfaces 世界平和は遠い
PSR-7 HTTP message interfaces PSR側の意見
PSR-7 HTTP message interfaces この提案は、すべてのHTTPクライアントライブラリまたはサー バー側フレームワークが、準拠するようにインターフェースを変更 することを期待していません。厳密には相互運用性を目的として います。 PSR-7 Meta
Documentより引用(翻訳)
PSR-7 HTTP message interfaces PSR < 無理にPSRに準拠しなくていいよ! 目指すのは相互運用性だから!
PSR-7 HTTP message interfaces 懐が深い
これを受けて我々はどうするべきか PSR-7 HTTP message interfaces
PSR-7 HTTP message interfaces 特にやるべきことはない
PSR-7 HTTP message interfaces が
PSR-7 HTTP message interfaces 平和な世界のため、 みんなが少しずつPSRに寄り添っていく 未来はありかもしれない
3. インターフェース PSRは他にもPHPでよく使われるものの インターフェース化を進めている
- PSR-3 ログ出力 - PSR-6 キャッシュ - PSR-7 HTTPメッセージ -
PSR-11 コンテナ - PSR-14 イベントディスパッチャ - PSR-15 HTTPハンドラ - PSR-16 キャッシュ - PSR-17 HTTPファクトリ - PSR-18 HTTPクライアント 3. インターフェース
3. インターフェース みんなが使うものは できるだけ同じインターフェースを使いたいよね
3. インターフェース すべてのPHPスクリプトから 同じケーブルが出ているような世界にしよう
まとめ
1. コーディングスタイル 2. オートローディング規約 3. インターフェース まとめ
1. →コーディングスタイル統一しようね 2. オートローディング規約 3. インターフェース まとめ
1. →コーディングスタイル統一しようね 2. →ライブラリを使いやすくするためのルール 3. インターフェース まとめ
1. →コーディングスタイル統一しようね 2. →ライブラリを使いやすくするためのルール 3. →インターフェースが共通化された世界 まとめ
まとめ 世界に開けたPHPスクリプトを
まとめ 開発は自分一人でするものではない
まとめ 世界の誰かが作ったライブラリに お世話になる
まとめ 世界の誰かが自分のライブラリを 使うかもしれない
まとめ みんなのためのPHPを書こう
ありがとうございました