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
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
230
Cap'n Webについて
yusukebe
0
160
CSC307 Lecture 01
javiergs
PRO
0
640
ゲームの物理 剛体編
fadis
0
390
Graviton と Nitro と私
maroon1st
0
160
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
300
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
170
Vibe codingでおすすめの言語と開発手法
uyuki234
0
150
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
JETLS.jl ─ A New Language Server for Julia
abap34
2
470
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
530
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building Adaptive Systems
keathley
44
2.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Color Theory Basics | Prateek | Gurzu
gurzu
0
160
Un-Boring Meetings
codingconduct
0
170
How to Talk to Developers About Accessibility
jct
1
93
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
57
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を書こう
ありがとうございました