Slim v4 に学ぶ PHP with PSR の今/これから

Slim v4 に学ぶ PHP with PSR の今/これから

https://phpcon.hokkaido.jp/

PHPのFW相互運用団体であるPHP-FIGが提唱するPHP Standard Recommendations、現在は13の標準化ドキュメントが存在します。いち早くそのインターフェースを採用したZend Expressiveを始め、現在はSlim FW v4がベータフェーズとなっています。
Slim v4をベースに、PSRによって各種PHP界隈がどのように進化していくのかを、各PSRを取り上げつつ紹介していきたいと思います。

5f9d707c28b6d2b27e8b461582635134?s=128

Masaru Yamagishi

September 21, 2019
Tweet

Transcript

  1. Slim v4 に学ぶ PHP with PSR の今/これから 2019/09/21 PHPカンファレンス北海道 2019

    ㈱インフィニットループ 山岸@YamaYuski
  2. ご存知の方?

  3. ご存知の方?

  4. ご存知の方?

  5. 本日の内容!

  6. 1. PHP-FIG とは? 2. PSRs とは? a. PHP エコシステムとしての PSRs

    b. これからの PHP エコシステムのあり方 3. Slim Framework の概要と最新の動向 本講演で何を学べるか?
  7. Slim v4 に学ぶ PHP with PSR の今/これから 2019/09/21 PHPカンファレンス北海道 2019

    ㈱インフィニットループ 山岸@YamaYuski
  8. 山岸 YamaYuski (formerly ”あかいいぬ”) a.k.a. 赤魔道士

  9. None
  10. 株式会社インフィニットループ 所在地 : 札幌本社(サッポロファクトリー) + 仙台支社 社員数 : 170+ 関連会社

    : 株式会社バーチャルキャスト, 株式会社pixyda 主な業務 : ゲーム開発・運用, VR企画・開発・販売 “プログラマーはかっこいい”
  11. in fact...

  12. Laravel 6 & Laravel Vapor

  13. Laravel 6 が来るぞ!! & Serverless Laravel Vapor も来るぞ!! - Qiita

  14. by the way...

  15. None
  16. PHP-FIG? The PHP Framework Interoperability Group(The PHP-FIG) はプロジェクト と人々が協力して PHP

    エコシステムと良い標準を推進していくことを目的と しています。 PHP Standard Recommendations(PSRs) を作成するために、実際の世界での経 験とそれらの研究及び実験の元、標準を開発し公表します。 Mission and Structure - PHP-FIG
  17. PHP エコシステム? - エコシステム = 生態系 = 共存していくための仕組み - PHP

    を取り巻くエコシステム - Packagist(composer) - FWs - Libraries - PSRs(PHP-FIG)
  18. PHP-FIG?

  19. NOT(FORMER) PHP-FIG?

  20. None
  21. PHP Standard Recommendations(PSRs)? - PHP-FIG が規約に基づいて策定した PHP 標準推奨 - PSR-0

    からナンバリングされ、現在 19 まである - Accepted, Draft, Abandoned, Deprecated ステータスがある - 規約・ガイドライン・インターフェースがある
  22. PSR-0: Autoloading Standard - Deprecated(非推奨)となったオートロード規約 - 現在は PSR-4 を用いることが推奨されている -

    ネームスペースの最初に Vendor 名を入れる
  23. PSR-1: Basic Coding Standard この規約セクションでは、共有されるPHPコードにおいて高い技術レベルで の連携を確保するために必要とされる標準的なコーディング要素を考慮した うえで構成されています。 PSR-1: Basic Coding

    Standard - UTF-8 without BOM を使え - クラス名は `StudlyCaps` にしろ - メソッド名は `camelCase` にしろ - ... 日本語訳: 基本コーディング規約
  24. PSR-2: Coding Style Guide このガイドはPSR-1に準拠し、標準的なコーディング規約のためのスタイル ガイドです。 このガイドの目的は、複数メンバーがコードを読む際の認識のずれを抑える ことです。 これはPHPコードをどのような書式にするかについて、ルールや 期待値を共有することで実現します。

    PSR-2: Coding Style Guide - 今は Deprecated になっていて、 PSR-12 が代替している 日本語訳 : コーディングガイド
  25. PSR-3: Logger Interface - monolog 用インターフェースと言っても過言ではない - エラーレベルとそれに紐づくメソッドが定義されている

  26. PSR-4: Autoloader - composer 用規約といっても過言 - ディレクトリ/ファイル名とネームスペース/クラス名を一致させる

  27. PSR-5: PHPDoc PSR-19 と共に Draft 段階のガイドライン - @param int $userId

    などの PHP ドキュメントの規約 - 「関数にはこういうタグを書く」などが設定されている
  28. PSR-6: Caching Interface キャッシュ処理のインターフェース - Pool は全てのキャッシュアイテムを保持する - Items はキー/バリュー型のキャッシュアイテム

    - Pool と Items が分かれていて難しいので別途 PSR-16 が作られた
  29. PSR-7: HTTP message interfaces PSR 中でも最重要な HTTP メッセージのインターフェース - PSR-13,

    PSR-15, PSR-17, PSR-18 の基礎 - RFC 7230, RFC 7231, RFC 3986(URIs) の PHP 表現 - メッセージは Immutable に実装される
  30. Abandoned PSRs - PSR-8 Huggable Interface - PSR-9 Security Advisories

    - PSR-10 Security Reporting Process
  31. PSR-11: Container interface Dependency Injection コンテナ用インターフェース - 設定手法は多岐に渡るため定義されていない

  32. PSR-12: Extended Coding Style PSR-2 を PHP 7 時代向けに 拡張したスタイルガイド

  33. PSR-13: Link definition interfaces <link> タグや HTTP 2 の Link

    Response Header を扱えるようにする インターフェース - あんまりしっかり使うイメージが沸かない
  34. PSR-14: Event Dispatcher イベントを発行するインターフェース - 発行するイベントのクラス名でリスナーを分類 - 同期的にイベントを実行する - イベントはオブジェクトならなんでもOK

  35. PSR-15: HTTP Server Request Handlers PSR-7 ServerRequestInterface を受け取り Middleware を通し

    ResponseInterface を生成するインターフェース(後述)
  36. PSR-16: Common Interface for Caching Libraries PSR-6 が難しかったのでシンプルにしたキャッシュインターフェース

  37. PSR-17: HTTP Factories PSR-7 HTTP メッセージを生成するファクトリインターフェース

  38. PSR-18: HTTP Client PHP から HTTP リクエストを送る時のインターフェース

  39. PSR-19: PHPDoc tags PSR-5 と共に Draft 段階 @api @author @copyright

    @deprecated @internal @link @method @package @param @property @return @see @since @throws @todo @uses @var @version - が現在提案されている
  40. PSRs と PHP エコシステム

  41. PSRs は PHP の標準(周辺環境)を定義する - コーディング規約 - UTF-8 without BOM

    - コーディングガイドライン - 4 Space indent - PHPDoc - 共通インターフェース - PSR-3, 7, 11, 15, ...
  42. PHP の本質的な役割とは HTTP HTTP クライアント PHP

  43. PSRs は PHP の本質を定義する ↓PSR-7 ↓PSR-17 ↓PSR-15 ↓PSR-7

  44. “ 抽象に依存せよ(DIP)

  45. PSR-15 ベースの HTTP ミドルウェア PSR-15 対応ミドルウェアをどんな FW でも利用出来るようになる - CORS

    対応 Middleware - Content-Length aware Middleware - Content-Type aware Middleware それぞれのミドルウェアはどんな FW, PSR-7 実装が使われているか知る 必要がない(抽象に依存している)
  46. PSR-15 ベースのフレームワーク - どんな PSR-7 実装も受け入れる - どんな PSR-15 Middleware

    実装も受け入れる zend-expressive, Slim v4
  47. None
  48. Slim 根本的に、 Slim は HTTP リクエストを受け取り、 適切なコールバックルーチンを実行し、 HTTP レスポンスを返すだけの Dispatcher

    である。 それだけだ。 Josh Lockhart - Slim 4 Documentation - What’s the point?
  49. Slim v4 2019/08: PSR-11, PSR-15, PSR-17 Support Decouple PSR-7, PSR-11,

    Routing, Error Handling, Response Emitting
  50. $app->run() で何が行われているか

  51. 本質と同じだ!

  52. Slim は PHP の本質を実装している - PSR-15 ベースの HTTP ハンドリング部分を実装 -

    ほとんどの実装は抽象化されているので入れ替え可能! - PSR-7 準拠の様々なライブラリを使って容易に拡張可能! - Laravel 等のフルスタック FW と対比したマイクロ FW - 極限まで最適化していきたい人にオススメ
  53. PSR-17 HTTP クライアント PSR-7 PSR-15 PSR-17 PSR-7

  54. None
  55. PHP: The Right Way by Josh Lockhart http://ja.phptherightway.com/ • はじめに

    • コーディングスタイル • 言語仕様のポイント • 依存関係の管理 • コーディングに関する慣習 • 依存性の注入 • データベース • テンプレート • エラーと例外処理 • セキュリティ • テスト • 各種サーバーへのデプロイ • 仮想化 • キャッシュ
  56. Thanks. @akai_inu YamaYuski - PSR-7, 15 を中心としたエコシステムが出来始めている - zend-expressive, Slim

    v4 が筆頭 FW - PSR の理解は PHP エコシステム(周辺環境)の理解に繋がる - PSR フォローアップ記事書きます! - Slim v4 はいいぞ。 - Laravel もいいぞ。