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
170
PSRで世界が変わる
2019/9/28に行った社内勉強会で発表したスライドです。
tsyama
September 28, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
970
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.2k
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
120
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
220
Tailwind CSSを本気でカスタマイズする方法
fsubal
14
5.5k
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
160
Elm Form Validation
bkuhlmann
0
510
Going beyond Apache Parquet's default settings
xhochy
0
120
AppRouter Panel Talk
yosuke_furukawa
PRO
1
450
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
500
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
900
Featured
See All Featured
Designing for humans not robots
tammielis
248
25k
Code Review Best Practice
trishagee
56
15k
Infographics Made Easy
chrislema
238
18k
Visualization
eitanlees
137
14k
GraphQLとの向き合い方2022年版
quramy
33
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
The Mythical Team-Month
searls
216
42k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
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を書こう
ありがとうございました