ラクスの配配メールの開発・運用に従事しているJazumaです。
2021/10/02 (土) 10/03 (日)にPHPカンファレンス2021がオンライン開催されました。
このイベントは日本PHPユーザ会が開催しているイベントで、2000人以上が参加しました。
ラクスはスポンサーとして協賛させて頂いています。
弊社からも3人が登壇し、多数のPHPエンジニアが参加いたしました。
今回は参加者から集めたレポートをご紹介させていただきます。
ではご覧ください。
10/2(土) 1日目
1日目は11:00からキーノートがあり、午後から4トラック並行でセッションが行われました。
PHPの今とこれから2021
report by id:radiocat
PHPユーザー会の廣川氏によって「PHPの今とこれから」が語られる、PHPカンファレンスではおなじみのキーノートです。
www.slideshare.net
まず冒頭ではサーバーサイドのプログラミング言語でシェア8割弱で、Wordpressを中心に広く使われていることが紹介されました。そしてPHPのバージョンアップの歴史をおさらいしたあと、今年の11/25にリリース予定の最新バージョンPHP8.1の機能が紹介されました。まずは、簡易的な並列処理が実現できるFiberが紹介されました。 一般の開発者向けではありませんが、エキスパートな参加者からは注目されているようでした。次に列挙型(enum)、交差型、never型、readonly、finalクラス定数といった、コードの可視性やメンテナンス性の向上につながる期待のある機能が紹介され、参加者からは
「安全になる」
「書きやすくなる」
「PHPDocが不要になるかも」
といった声があがっていました。
最後に、PHPの将来については、従来のC言語ではなくPHPそのもので記述できるようになるPHPエクステンション(FFI)と、機械学習・AIの実装が実現に向けて動いていることが紹介されました。これらについても多くの参加者から期待の声があがっていました。
PHPにおけるコーディング規約と自動整形
report by id:hirobex
GMOインターネットグループの橋口巧さんによるセッションです。
コーディング規約の必要性から始まり、PHP Standards Recommendations、通称PSRの紹介です。
PSRに沿った形に整形してくれるツールである PHS CS FixerとPHP_CodeSnifferの動作を実演を交えながら紹介してくださりました。
13年物プロダクトの監視を起点とした改善活動
report by id:Jazuma
Hamee株式会社 日野陽平さん 大島淳司さんによるセッションです。
Hameeで開発されているネクストエンジンはEC運営を支援するサービスです。
2007年提供開始以来長くユーザに利用され続けてきましたが、課題も蓄積されていました。
特定機能で問題が起きた時にエラーメールが送信される仕組みで監視されていたため、ユーザからの問い合わせで初めて障害が検知される・対応要否が判断しづらいという課題がありました。
課題の改善にあたってまずは「エラーやログが1か所に集計、緊急度の高いもの・低いものに分類されてSlackに通知される」という理想の状態が定義されます。
その上で2つのアプローチで課題の改善が進められました。
1. 監視ツールとしてDATADOGを採用
- DATADOGとは
- システム・アプリケーション横断で監視可能な監視プラットフォーム。AWSとの連携が可能・アラート機能が高性能
社内に経験者がいる、UIが優れているといったことが採用理由となりました。
メンバー間で認識を統一し、「ユーザの業務に支障が出ているもの」を緊急度が高いものと定義してSlackのAlertチャンネルに通知される仕組みが構築されます。
この取り組みにより、障害検知早期化・ユーザからの問い合わせ起因のバグが減るという成果が得られました。
2. パフォーマンス定点観測会
- パフォーマンス定点観測会
- パフォーマンスの問題点を確認する週次MTG。SREのみで実施していたものをアプリケーション開発チームでも導入
ユーザの業務への影響を最優先事項とする(ユーザ思考)・手作業を減らすといった心得のもと、改善が図られました。
この取り組みは、ログレベルの適性化(不要なログをAlertしないように修正)・ユーザの操作ミス発見などの成果につながりました。
独自フレームワークPHPアプリケーションの改善戦略
report by id:hirobex
株式会社ヤプリの田実誠さんによるセッションです。
include Orientedな独自フレームワークで
親ファイル→子ファイル→孫ファイルのようにincludeリレーが行われており
- 機能追加、リファクタリングがしづらい
- 冗長な重複コードがあり共通処理を入れにくい
- ログレベルが入っておらず、監視やトレースがしづらい
といった課題を抱えていたサーバーを解決した手法を紹介してくださりました。
解決方法
- 自動テスト
- 静的解析導入
- PHPStanの導入
- PHPDocによる型情報の付与
- PHPStan x PHPDocで本体より強力型付けが付与できる
- 重複コード
- ロギング
- error_log()関数でロギングしていたのをMonologによるロギング共通化
プロダクトをより良くしていくためには、オーナーシップを持って改善に取り組んでいくことが大事だと述べられていました。
10/3(日) 2日目
2日目は10:00から4トラックでセッションが開始されました。17:00からは恒例の大LT大会も開催されて2日間のイベントが締めくくられました。
配列、ジェネリクス、PHPで書けない型
report by id:radiocat
技術誌でPHPの記事を担当されているうさみさんによるPHPの型についての講義的な発表でした。
PHPに型が取り入れられてきた歴史的背景から基礎的な知識と実装方法、実践的なライブコーディング、Discordで参加者と対話しながら最後はスライドもライブで作りながら発表されるという、臨場感のある密度の濃い発表でした。もともと動的型付け言語のPHPも最新のPHP8ではしっかり型を扱うことができるようになってきています。
実行時に起きる事故を防ぐためにしっかり型宣言して品質を保つためのコードの書き方と、型注釈を入れることでPHPStanによる静的解析などの事前のチェックで回避する手法をバランスよく扱って棲み分けていく考え方を学ぶことができる内容でした。
SVG画像をPHPで生成しよう
report by id:ryo479
SVG画像編集のWebサービス開発・運営経験をお持ちのmotookaさんによるセッションです。
以下の項目について解説して下さっています。
SVGとは何か?についてから解説されているため、普段SVGに馴染みのない方でも理解しやすい内容です。
また、SVG画像のメリット・デメリットや使用例についても解説されているため、実際に使用するイメージを持ちやすく、開発にSVGを取り入れてみたくなる内容でした。
「PHPでSVGを書く方法」では、簡単なコードを使用してSVG画像の動的な生成を実演されており、実装における注意点についても解説されています。
また、ソースコードはgithubで公開して下さっているようです。
What is new in PHP 8
report by id:ryo479
Remote Dev ForceのCTO、Joshua Copelandさんによるセッションです。
PHP8で新しく備わった機能について、コードを交えてスライドで分かりやすく解説して下さっています。
特に以下の8つの大きなアップグレードについては詳しく解説されています。
- The JIT Compiler
- Attributes
- Named Arguments
- Match Expression
- Throw expression
- static Return Type
- Union Types
- mixed type
これからPHP8で開発を行うエンジニアにとっては非常に役に立つ、実践的な内容でした。
巨大なモノリスの静的解析をレベルMaxにする方法
report by id:hirobex
株式会社ホワイトプラスの古賀敦士さんによるセッションです。
低いレベルで運用されていたPHPStanの静的解析レベルを上げていく取り組みについて紹介してくださりました。
はじめに、一度にすべてのモジュールの解析レベルを上げていくのは難しいため モジュール毎に設定したレベルで静的解析を行えるようにPHPStanの実行基盤を整えたそうです。
その後、解決できそうなデッドコードは削除したり、型宣言など対応に時間がかかりすぎるものはBaselineでエラーをまとめて無視して一旦レベルを上げるという手法でレベルをMaxにしたそうです。
また、付録としてレベル上げのロードマップやレベル別のルールについての資料も載せてくださっています!
続) 改善失敗から学ぶ、レガシープロダクトに立ち向かうチーム作り
report by id:Jazuma
Garoon(20年目・PHP7.4・テーブル数850(!))というプロジェクトの改善記録を披露していただきました。
実施した施策
1. Controlloer改善
○ 改善前の問題
リクエストパラメータに配列ベースでアクセスしている
手動で型変換をしている
クラス同士が密結合で再利用しづらい
ControllerでViewを生成している → ユニットテストが書けない ・保守性が低い
○ 実施したこと
リクエストの取り扱いやレスポンスデータ取り扱いを標準化する基底クラス作成
View描画用のクラスを追加し、描画処理を隔離
DIコンテナ導入: 環境別の依存性注入や処理を制御 →冗長なコードが削除され、ユニットテストが書けるように
2. フロントエンド改善
○実行したこと
改善により得られた知見
自動テスト(ユニットテストだけでなく、E2Eテストも含む)が重要
改善にあたっての課題
- 新機能の実装と改善を両方やる工数が確保しづらい
- 改善タスクの粒度が大きく、着地点が見えない
- 他のメンバーがやっている改善が分からない(何をやっているか・何のためにやっているか)
これらの課題から「チームとして改善を継続していくための仕組みが必要」という教訓が得られました。
改善継続のために、 進捗状況を共有するためのミーティングをする・割り込みタスクの対応ルールを決める といった仕組みができました。
改善を続けるためには技術的な取り組みだけでなく、チームビルディングとしての取り組みも必要だと思いました。
いよいよ開始!徳丸実務試験、PHP8上級試験の模擬問題解説
report by id:kuwa_38
セッション概要:
- 吉政さんからのPHP8上級試験と徳丸実務試験の概要説明、特典が紹介されました。
- 徳丸さんから徳丸実務試験の模擬問題2問とその解説が行われました。
- 古圧さんからPHP8上級試験の模擬問題2問とその解説が行われました。
模擬問題の概要:
- 徳丸さんから出題
- 1問目:認証にBearerトークンを使うウェブAPI呼び出しにおいて、JavaScript側、APIサーバー側で必要なプロパティ、ヘッダを問う問題
- 2問目:PHPのAPIのコード例が表示され、クロスサイトスクリプティング(XSS)について正しい記述を選択する問題
- 古圧さんからの出題
- 1問目:クラスの継承やトレイトの正否を問う問題
- 2問目:PHP8への移行に関する問題として、名前付き引数やnullsafe演算子、match式について正否を問う問題
視聴後の所感:
大まかには知っているものの「あれ?どうだっけ」という問題や選択肢もあり、知識の再確認や学習にはよいと感じました。
APIのプロパティやヘッダ、XSSなどの脆弱性、phpの性質やphp8への移行に伴う変更や新機能など、興味がある方はアーカイブから一度見て頂ければと思います。
OpenAPI × LaravelでAPI開発を各段に便利にする方法
report by id:Jazuma
株式会社ゆめみ 皆川泰陽さんによるセッションです。
- OpenAPI仕様書を"半"自動生成する
- OpenAPI仕様書をAPIテストのAssertに使う
- OpenAPIを案件で使った感想
という内容の発表でした。
○ openAPI仕様書"半"自動生成
○APIテストのAssert
- 使わない理由が無いほど便利
- assertの量が減るのが便利
- 先にopenAPI仕様書がある場合でも使える
- 仕様書に不備があると困る
OpenAPI仕様書の半自動生成はまだまだ発展途上・OpenAPI仕様書を使うことは現時点でもメリットが大きい、というのが現状のようです。
PHPで書いて覚える非同期処理
report by id:radiocat
PHP8.1から非同期処理が書けるようになったことを踏まえて非同期処理の概念を理解し、今後の活用に向けて実装イメージと技術動向をおさえたい人のためのセッションです。JavaScriptのようなUIを扱う処理では非同期処理が主流となっています。一方でPHPのようなバックエンド処理ではデータの整合性を維持するために同期処理が一般的です。PHPでの非同期処理の主な使い方としてIO処理が考えられます。その中でも今回は以下の3つのIOモデルについてPHPの実装イメージを交えて解説されました。
PHP8.1で実現できる非同期処理はまだまだほんの一部で、一般開発者が扱える機能ではなさそうです。ただ、Xdebugが動くことによってデバッグしやすくなるというメリットはありそうなので、将来の活用にそなえて非同期処理を勉強しておきたい人には参考になる情報がスライドで多数紹介されています。
【IMO】コードレビューって難しいよね
report by id:tsudachantan
コードレビューを効果的に実施するにあたり、コードレビューに対する苦手意識をなくしていこう!というセッションです。
苦手意識の原因として、他のメンバーよりも時間がかかる、コードの改善提案の回数が少ない、違和感があっても改善案までコメントできない、そもそも自分の理解力の問題のような気がする…などなど
コードレビューに自信がないという悩みを解決するため、体験談を踏まえて克服への道のりをお話していただけました!
個人的に共感できる悩みばかりで大変ためになりました。
実際にコードレビューでの改善提案が多い方の意見を踏まえ、すぐに実践できる観点をたくさん解説していただけました。
- 自分ならこう実装すると答え合わせする
- 可能な限りコードジャンプする
- 自分の理解が合っているか確認するためのコメント
- 実装に疑問があればデバッグする
といった風に、疑問点をなくして自信がない状態を抜け出すための具体的なヒントを頂けました。
「効果的なコードレビューがチームの成熟度やプロダクトの品質に影響を及ぼすといっても過言ではない」とおっしゃられていました。
このセッションを踏まえて今後のコードレビューに取り組んで、苦手意識を克服していきたいです。
サービス運用エンジニアによるPHP8バージョンアップ奮闘記
report by id:richardwagner
弊社と同様にPHP8へのバージョンアップに取り組まれたヒエイカザトさんのセッションでした。
弊社でもかなり苦しめられたバージョンアップ、いったいどのように取り組まれたのだろう?と興味津々で聴講させてもらいました。
弊社と共通する事例もありつつ、具体的なアプローチ方法まで踏み込んだ充実したセッションでした。
予定よりも少ない工数(予想:3か月⇒実際:2.5か月)で完了された技術力はさすがと感じました。
以下、「なるほど!」と感じ入ったポイントです。
- Dockerなどを駆使してローカル検証しておくと、後から本格検証するのが楽
- PHPのバージョンアップと技術的負債の返済を同時にやりすぎると、バグったときに切り分けが大変になるので注意
- バージョンアップは怠ると後が大変
- こまめなバージョンアップそれ自体を組織の文化・体質にしてしまうのがよい
- 製品ロードマップにあらかじめ組み込んでおくと、ビジネスサイドとの合意が取りやすい
- チームで担当を回す(属人化排除大切!)
抽象のはしごの上手な登り方~使いやすい汎用ライブラリを作るために~
report by id:richardwagner
PHPによるログ実装を題材にした抽象的プログラミングについてのセッションでした。
「抽象度は高ければいいというものではない。」という提言は、ともすれば理想に走ってしまいがちな私たちエンジニアの視点に警鐘をならしてくれました。
どの程度まで抽象化したらいいのかという「正解」について迷うことは確かに多く、その際に考える際の一つのヒントになりそうです。
- 抽象度は「はしご」で表現しやすい。そのままの姿勢で、ちょっと上る/下りるの微調整が簡単
- 抽象度は高ければいいというものではない。抽象度は必要十分なレベルにする
- ブログや登壇は抽象度を上げるうえでよい訓練になる
弊社の登壇セッションのご紹介
ここからは弊社から登壇させて頂いたセッションの内容をご紹介します。
レガシーシステムにおけるPHP8バージョンアップのアプリ対応記録
弊社の楽楽販売の開発チームからPHP8へのバージョンアップの取り組みついて発表しました。
今年EOLを迎える7.3からのバージョンアップのため開発期間が限られた中で、下位互換のない変更点が多く存在しているという難易度の高い状態でした。特に影響の大きい変更点は次の2つです。
- 緩やかな比較演算子の挙動変更
- 警告レベルの変更
前者は ==
の比較結果が変更になるパターンに絞って影響箇所を洗い出してコードを修正し、後者はまず影響箇所を動作させてログを出力してエラー担った箇所に絞って修正しました。いずれも膨大な影響範囲から重大な問題箇所に絞って対策を行っています。それでも前回のバージョンアップの2倍以上のコストがかかったとのことで、今後に向けては普段からの静的な型を意識した実装とこまめなリファクタリングが重要であると締めくくりました。
20年モノの巨大Webサービスの開発継続戦略 - ミドルウェアのバージョンアップとの向き合い方
弊社の最長寿サービスであるメールディーラー開発チームからレガシーなサービスにおけるミドルウェアのバージョンアップへの向き合い方について発表しました。
我々はなぜ長い年月をかけて開発を続けているのかというと、ユーザーにとって価値があるビジネスの一部だからです。ところがリファクタリングなどの改善はすぐにコストが回収できず新しい価値を生み出しにくいため取り組みづらさがあります。一方でミドルウェアのバージョンアップは実施しなければ明確に価値が下がるため実施せざるを得ません。
とりあえずサービスを継続し生き続けるために最小限のコストでバージョンアップをやりきろうというのが今回の発表で紹介された戦略でした。
技術コミュニティ運営戦線〜継続して勉強会を運営するために〜
弊社で毎月1回開催しているPHP TechCafeの運営メンバーが技術コミュニティの運営について発表しました。
社内のもくもく勉強会を社外にも発展させていく中で、エンジニア同士の交流を広げるために弊社の技術領域であるPHPをテーマに据えて関西で一番盛り上がるPHPコミュニティを目指して試行錯誤してきました。毎月開催のコミュニティを継続させるためには省力化が大事です。主催者だけが頑張りすぎては続かないので、参加者や社内のメンバーを巻き込んでコンテンツを作っています。そうやってコミュニティを運営していくモチベーションはどこにあるのかというと、結局は「やりたいから、やる」ということです。
コミュニティを運営していく熱意を持ちつつ、一人で抱え込まずにテーマや目的に沿って周りを巻き込みながら運営するのが継続のポイントであるという話でした。
まとめ
レガシーシステムの改善から最新技術の導入事例に至るまでバリエーション豊かな発表内容でした。
参加のハードルが低いのがオンラインイベントの大きなメリットだと思うので、オフラインイベントが開催できるようになってもオンライン参加もできるような体制が続いてほしいと思います。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
forms.gleイベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com