PHPerKaigi 2019 に行ってきました − 1日目 −
2019-03-303/29 (金) 〜 3/31 (日) まで 練馬区立区民・産業プラザ Coconeriホール で開催されていた PHPerKaigi 2019 に行ってきたので、そのレポートです。
PHPerKaigi とは
公式サイトから引用させてもらいます。
PHPerKaigi(ペチパーカイギ)は、PHPer、つまり、現在PHPを使用している方、過去にPHPを使用していた方、これからPHPを使いたいと思っている方、そしてPHPが大好きな方たちが、技術的なノウハウとPHP愛を共有するためのイベントです。
歴戦の勇者みたいな方はもちろん、初心者の方にも、全てのPHPerが 楽しめるイベントです。
私は新卒で入った会社で開発に携わっていたサービスで PHP が使われていたことで ペチパー となり、その後は個人でもアプリケーション作ったりして PHP を使ってます。その後の業務では Java とか C# とか Python とか JavaScript とかを使いつつ… という感じなので、 PHP で開発している期間は 3 年くらいです。最近は Python と JavaScript (TypeScript) ばっかり触っているので、久々に PHP に触れようと思って参加しました。
【3/30 (土)】 1日目 セッションレポート
1日目に実施されたセッションのレポートを、セッションの概要と、一言感想くらいで書いていきます。
10:40 #b フレームワークを作りながらLaravelのアーキテクチャを学ぶ
- 
Laravel のアーキテクチャを理解するために、オレオレフレームワークを作る話
 - 
パーフェクトPHP (PERFECT SERIES 3)
に自作フレームワークの作り方が書いてある
 - 
フレームワークを1から作る楽しさ
 - 
PHPStorm があると便利
 - 
Laravel のアーキテクチャを学ぶ
- Laravel のサービスコンテナ = Laravel が提供している DI コンテナ
 - ファサード
- facade !== facade pattern
 - サービスコンテナを経由してインスタンスメソッドを実行してる
 - ファサードはどこでも利用できる分、複雑になりやすい
 
 - 200X年のフレームワークとの違い
- すべてがファサードができている
 - テストがやりやすい
 
 
 - 
手段ではなく本質を追い求める
- 一回 MVC フレームワークを作ってみる
 - そのあと Laravel のソースを見てみる
 
 
これまで オレオレフレームワーク = 悪 だと思っていましたが、既存のフレームワークのアーキテクチャを学ぶという意味で、自分で一度フレームワークを作ってみるというのは大事だなと思いました。このセッションに限らず、他のセッションでもフレームワークを自作するという話は結構出ていたので、 Production として運用するかは別として、オレオレフレームワークを作るのは良いことかなと感じました。
11:25 #b PHPerKaigi 2019 ゆるふわCI入門 よくばりセット
発表スライドは下記で公開されています。
- 
CI とはなにか
- GitHub
 - composer
 - PHPUnit
 - git の tag, branch
 
 - 
CI で何ができるか
- コードが正常に動いていることを確認し続けたい
- 自動テスト : PHPUnit, phpspec
 - 自動テスト (受け入れテスト) : Codeception (古いテストがないコードには使いやすい)
 - QA ツール : PHPStan, Psalm, Phan (最近のものは型までチェックしてくれる)
 
 - 属人化を防ぐ
 
 - コードが正常に動いていることを確認し続けたい
 - 
実行環境
- GitHub での PR 作成をトリガーにして実行される
 - CI サービスが提供している OS 環境、または docker イメージを利用して実行する
 - 特定用途の CI
- StyleCI : コードスタイル
 
 
 - 
ゆるふわ CI
- ゴール : Syntax Error になるコードを本番公開しない
 - ピクシブの場合
- ファイル数 6000 以上
 - 差分だけをチェックして高速化
 - PHPUnit, PHPStan と 独自の linter
 - node.js で並列実行している
 
 
 
CI でできること・目的については他の言語でも同じですが、 PHP で使用するツールなどの具体例がたくさん出てきたので、「あ、そういうの使うんだー」っていう感じでした。今後また PHP で開発する機会があれば使ってみようと思います。
13:30 #b PHPの現場 公開収録
PHPの現場 という Podcast の公開収録でした。正直、この Podcast は聞いたことがなかったんですが、言語に特化した内容でとても濃い話が繰り広げられていたので、今後聴くようにします。
なお、このときのエピソードはすでに公開されています。
14:45 #a モバイルアプリ向けAPI開発を通じて学んだこと
- モバイルアプリ向け API を Laravel で作った話
 - 新規サービスは技術選定の連続
- 言語、インフラ、FW…
 - 一度決めるとあとから (ほぼ) 現行不可
 
 - 要件定義
- なぜ、誰のために、いつまでに
 
 - 要件を満たすか、学習コスト、将来性、スケーラビリティ
- Lumen も候補にあったが、Laravel Passport を使いたかった
 
 - 読書会
- API 開発者とアプリエンジニアとの認識をあわせる (あくまで基礎レベル)
 - 参考書 : Web API The Good Parts
 
 - 設計・ドキュメントの残し方
- API 設計には Swagger Spec
- API 設計が一番苦労した
 - 設計の前にデザイナー/クライアント・API 設計者で認識を合わせる
 
 
 - API 設計には Swagger Spec
 - Laravel API 認証
- Laravel Passport
- OAuth 2.0 のライブラリ
 - Laravel 公式
 - 既存システムに合わせるには、それ用のプロバイダを使ってオーバーライドする
 
 
 - Laravel Passport
 - エラー時の API レスポンス
- すべてのパターンにおいて共通のレスポンスパターン
 - Laravel の Responsable インターフェース
 - すべての例外は 
App\Exception\Handlerのrender()を通るので、ここを触る 
 
API 開発をするうえで、デザイナー・クライアントサイドエンジニアとしっかり認識をあわせるというのは、使う言語に関係なく大事だなということがわかりました。Laravel で Web API を作るというのは過去にやったことがありましたが、当時はそのあたりをしっかり調整できていなかったなと反省しました。
発表者の 
  @hypermkt
 さんの声質が凄く良くて聞きやすかった印象です。
15:30 #a 3ヶ月でphp5.5から7.2にバージョンアップした現在と今後の向き合い方
- PHP 5.5, Codeigniter, AWS EC2
 - 懸念点
- タイトなスケジュール (3ヶ月)
 - PHP バージョンアップのノウハウ不足
 - リソース不足
 
 - 手順
- 公式サイトの移行手順に従って該当箇所の調査
 - docker 環境で検証
 - PHP 以外にもバージョンアップが必要なものがある
- Apache
 - CentOS
 - Codeignitor
 - memcached
 
 
 - ハマりポイント
- memcached は wget で最新版を入れる
 - mcrypt の代わりに OpenSSL を使う (PHP7.2 では mcrypt は非推奨。OpenSSL のほうが処理が速い)
 - mod_small_light のアーキテクチャ変更
 count()- CloudFront 導入による IP 問題
HTTP_X_FORWARDEDを使う
 - エラーハンドリングの仕様変更
 - 意図せぬ不具合による修正・報告書作成にかかる工数の増加
 
 - 開発体制
- タスク管理:asana
 - エラー検知:Sentry
 - やるべきこととやらないことの選別
- やること : 動くようにする
 - やらないこと : コードのリファクタリング、不要な変更
 
 
 - バージョンアップの結果
- 速度改善
 - 新しいアーキテクチャの導入ができた
 
 
PHP 5 系の 公式サポート は 2018 年で終了していますが、 Zend Server や CentOS などの各ディストリビューション単位ではまだ 5 系のサポート期間が残っているものもあるので、今後も必要になってくる内容だと思いながら聞いていました。
個人的には PHP のバージョンアップノウハウが全く無いので、今後アップデート作業をすることになった際には、このセッションで聞いた内容を参考にして、スムーズに進められるようにしたいです。
1日目まとめ
初参加の PHPerKaigi、というか言語縛りのイベントには初めて参加しましたが、とても面白かったです。先月は JAWS DAYS に参加したんですが、そのときとはまた違った雰囲気がありました。もちろん規模的には JAWS DAYS のほうが大きくて人数も参加者数も多いわけですが、一つの言語に対するイベントということで、より具体的で詳細な内容のセッションが多かったなと感じました。
あとは、T シャツがもらえたり、突発的な LT があったり、期間を通じてチャレンジゲームが開催されていたりして、トータルで楽しい印象を受けました。あまり書くと 2日目のレポートまとめに書くことがなくなるのでこれくらいにしておきます。
PHPerKaigi 2019 Tシャツ
  メルカリウォーター