はじめに
株式会社ラクス 配配メール開発課のPHPエンジニア Jazumaです。
2020年12月12日(土)にPHPカンファレンスが開催されました。
例年では「大田区産業プラザ PiO」で開催予定でしたが、今年は新型コロナウイルスの影響でオンライン開催となりました。個人的にはオンライン開催である分、地方のエンジニアでも気軽に参加することができたのは良かったのではないかと思います。
ラクスはPHPカンファレンスにスポンサーとして参加させていただいている他、社内からLT枠で2名が登壇しました。
今回はPHPカンファレンスに参加した社内のPHPエンジニアがイベントをレポートしましたので、ご紹介したいと思います。
各セッションのスライドについては以下にまとめましたので、ご活用いただければ幸いです。
SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する
report by mrym_618
現代のSPAでのAPI開発には様々な問題があり、その問題に対してどのような解決策があるかについてのセッションでした。 このセッションで話されていた、問題と解決策は以下の通りです。
ロジックの重複
問題:フロントエンドとバックエンドで同じロジックが現れる
解決策:バックエンド側で隠蔽する
トランザクションできない
問題:サーバ側の状態が変化することを止められない
解決策:バックエンド側でロジックの隠蔽を行い、トランザクションはサーバ内で行う
このAPI、他にどこで使われていたっけ?!問題
問題:APIを使い回した結果、そのAPIを削除したくても他に影響が出そうで削除できない
解決策:APIもSRP(単一責任の原則)にし、フロントエンドから見て別であれば別のAPIにする
n+1
問題:n+1回のリクエストを発行してしまう
解決策:n+1を解決できるレイヤー(SQL)に任せる
全ての解決策に共通していることから、バックエンド側に任せられることは任せてしまい、フロントエンド側はフロントエンドのことに集中する。 そして、それぞれが連携し合って開発していくことが大切であると改めて感じる発表でした。
PHPの今とこれから2020
report by richardwagner
カンファレンス冒頭を飾ったのは、PHPがリリースされてからの25年間を俯瞰しつつ、最新のPHP8の新機能にも触れた廣川類さんの基調講演でした。
www.slideshare.net
前半パートは具体的な数値にふれながら、PHPが果たしてきた性能向上と規模拡大の実例が紹介されました。
- PHP4の時代からこの20年で、実に50倍の性能向上を実現
- cファイルベースの総ステップ数は、Python3の40万行、Ruby2の80万行を、PHP8の120万行が大きく凌駕
後半パートではPHP8の変更/改善点と、新機能JITにおける性能向上がわかりやすくまとめられていました。 機械学習やAIがPHPで書かれるようになる(かも)という将来は、私たちPHPerにとっても心躍る話でした。
PHP WEBアプリケーション設計入門――10年先を見据えて作る
report by soachr
10年先でも使える設計についてどうあるべきか、という内容で濃い1時間のセッションでした。
冒頭に10年たったらフレームワーク・技術が変わるというところについて実例を交えて説明されていました。
弊社も10年超えのサービスがありがたいことにいくつもあるのですが、同じように技術が変わって”レガシー”になっておりとても共感する箇所が多かったです。
「10年先を予見するのは難しいので、10年間の変化に対応しうる設計にしておく」というスタンスでお話が展開されており、 設計時に考慮する点としておっしゃっていた以下が開発言語に関わらない考えだと思い、今後の設計フェーズで意識したいと思います。
- フレームワークなどの特定技術から一定の距離を保っていく
- 広く長く使われることを開発当時から意識する
レガシープロジェクトで、メタプログラミングを使ったPHPStan静的解析レベル上げ
report by takaram
弁護士ドットコムさんで、静的解析ツールPHPStanを導入した際のお話でした。以前こちらのnoteを読み興味を持っていたため、楽しみにしていたセッションのひとつでした。
すでに規模が大きくなっているプロジェクトに途中から静的解析を導入すると、既存コードで大量にエラーが出てその対応に時間が取られる、というような話も聞きます。 その点とても上手く対応されていて、導入時にはLevel 0という最も緩いチェックのみを行い、対象ファイルも無理に全ファイルを対象にはしなかったそうです。 スモールスタートで導入した後、徐々に対象ファイルの拡大・チェックレベル上げを行うために、メタプログラミングを使って機械的にコードの修正を実施していったということでした。
私が担当しているプロダクトもPHPStanのような静的解析ツールは未導入で、プロジェクトの規模や技術負債の状況も今回のお話によく似ていると感じました。そのため、静的解析導入の成功事例を聞けたことはとても勇気づけられるものでした。
ちなみに、このセッションとは別にCIでの静的解析についてのセッションもあり、そちらもとても面白かったです。
長期運用を目指す『Shadowverse』におけるリファクタ事例の紹介 〜テストの導入とメンバーへの普及法〜
report by YS
https://fortee.jp/phpcon-2020/proposal/ab40d17d-37e7-42af-8a88-188a61c6745b
スライドは後日、ブログにアップ予定とのこと
Cygames Engineers' Blog
tech.cygames.co.jp
ソーシャルゲーム「Shadowverse」を5年間アップデートしてきたことにより「コードの可読性低下」「コードの属人化」等の課題が発生し、 現状だと長期運用が厳しい状態になり安定したリファクタリングを進めるために テスト導入チームを立ち上げ、テストコード等を導入し改善を行ったという内容について語ってくださいました。
テストコード等の施策を取り入れた後、リファクタリングを行ったことにより、 リファクタリング後の不具合は、デバッグ時に1件のみ発生という素晴らしい成果を得たそうです。
メンバーへの普及方法は、「環境導入」「テスト作成」「自動テスト実行」各作業でのハードルを下げることが重要で、次の様な施策を上げてくださっておりました。
・「環境導入」のハードル
手順書やツールの充実
・「テスト作成」のハードル
テストコードのレビュー等による学習機会の提供
・「自動テスト実行」のハードル
CIツールによる自動テスト実行と結果の通知等
システムの改修を安定して進めるためには、こちらのセッションで上げてくださった取り組みは とても重要な物であると認識しているため、今後の開発で参考にさせていただきます。
徳丸皆伝を狙いませんか?徳丸実務試験とPHP8上級試験の解説
report by kuwa_38
(track2 2:25ほどから)
セッション概要:
吉政さんからPHP8上級試験と徳丸実務試験の概要説明、それから特典(PHPマグカップとPHP本、徳丸本)が紹介されました。 その後、徳丸さんから徳丸実務試験の例題3問とその解説が行われました。
例題の概要:
- 1問目:特定サイトから利用するウェブAPIのテスト中にCORSのエラーがでた。どう解消すべきか(4択から1つ選択)
- 2問目:提示されたPHPのスクリプトのうち発生する脆弱性を全て示せ (4択から複数回答)
- 3問目:XSS脆弱性のあるJSONPによるAPIのPHPソースコードが提示され、対策として不適切なものを1つ選択(4択から1つ選択)
視聴後の所感:
私の視聴した動機が「どんな問題が出題されるか」だったこともあり、特に例題とその解説はとても興味深かったです。また、図解や選択肢1つ1つの解説もありとても分かりやすかったと思います。 問題と解説自体は10分強なので、セキュリティに興味や関わりがある方は、ぜひアーカイブをご覧頂ければと思います。
PHP on Kubernetes
report by Jazuma
chatwork所属Kouta Ozakiさん(@k_kinzal)のセッションのレポートです。
※このレポートで使用している画像は全てOzakiさんの発表資料 の引用です。また、資料の利用にあたってはご本人の許可を得ています。
セッション内容まとめ・感想
k8sでPHPは普通に動く
PHPが他の技術と比べて特段k8sとの相性が悪いということはなく、正しく導入すれば特に問題なく稼働するようです。
k8sの学習コストは高い
VMやServerlessと比較してk8sの学習コストは高いようです。そのため何のためにk8sを導入するのか決めずに無計画に取り入れようとしても意味がなく、逆に工数をとられるだけの結果になります。他の技術と同様にk8sはあらゆる問題を立ちどころに解決する銀の弾丸ではないようですね。
PHPアプリケーションのコンテナ化
PHPアプリのコンテナ化にあたってはアプリの設定をどのようにコンテナに反映させるのかが問題になります。
開発環境としてのk8s
k8sの開発環境としてのパフォーマンスをVagrantやdocker-composeと比較すると上記のようになるようです。 個人的には開発環境として使うのであればどれも大差はないように思いました。
k8sの学習コストをどのように支払うのか
私がOzakiさんに「chatworkさんではk8sを使うにあたってスイッチングコストや学習コストをどのように賄ったのか」と質問したところ以下のようにお答えいただきました。
全社的にk8sの導入に前向きだった
SREチーム3名が尽力した
開発チームも巻き込んで何とかした
このことからk8sを導入するには次のような要素が重要だと思いました。
新技術導入に前向きな姿勢
コンテナやクラウドに精通したSREチーム
開発チームと運用チームとの連携・協力
特に開発と運用の協力についてはあらゆる企業・チームが重視すべき要素のように思います。
Webサービスをセキュアに保つために必要な視点
report by tsudachantan fortee.jp speakerdeck.com
Webサービスをセキュアに保つための観点、具体的な思考法、攻撃事例、対策のための指針についての話でした。
セキュリティを学び始めたばかりの初心者にもわかりやすい内容でした。
セキュリティ初心者にもとてもわかりやすい。視点の話。#phpcon #phpcon2020 #track3
— さりー@Webエンジニア (@Sally_42) December 12, 2020
セキュアな状態とは何か、それはユーザが安心安全だと感じる状態である。では安心安全な状態とは?逆に、安心安全でない状態とは何か?
と順を追って言語化されていてとてもわかりやすかったです。
ユーザだけでなく、開発現場のITエンジニアに置き換えても頷けるような汎用性のある内容でした。
30分で再認証させるのは安全性を高めるけど、
— Fumito Mizuno 📕 #のベルズ (@ounziw) December 12, 2020
ユーザーの利便性をかなり下げる気がする。#phpcon #phpcon2020 #track3
具体例を示しての掘り下げも行われ、セキュリティとユーザの利便性との兼ね合いについても触れられていました。 ユーザフレンドリーと一口に言っても、ユーザにとって「セキュアで優しい」とユーザにとって「使いやすくて優しい」を両立させることの難しさを感じました。
個人的に、セキュリティ負債の解消としてユーザのリテラシーの平均を議論するという話が、今まで無かった視点だったので興味深かったです。 フレームワークや攻撃事例も紹介され、濃い内容の1時間でした。当日のスライドも公開されているので、ぜひご覧ください。
Composer 2.0 って何?どう変わるの?読んでみました!
report by MasaKu
v2 の新機能についてのお話と v1 からどのような部分が変わったのかというお話。
CakePHP のプロジェクト作成を v1 と v2 で比較して実演してくださったが、結果 v2 の場合、約半分以下の時間でプロジェクト作成が完了していたのが印象的でした。 また、メモリ使用量も劇的に削減されておりました。
- メモリ削減の理由
そのため、余計な処理が走らないようになっている。
この仕組みを lazy provider
といって、先にリストをすべて読みこまなくても良くなったため高速化およびメモリの削減が実現できた模様。
その他にもissue や過去のリリース情報を見ると勉強になることがあるため、興味がある人はぜひ見たほうがよいとのことでした。
今まで当たり前に行っていたことを根本的に見直すことで、劇的に改善できることを体現した勇気づけられる発表だと思いました!
今こそ理解する、PHPの日時時計
report by nr_1228
基本的な日付関数の説明を踏まえ、DateTimeクラスとDateTimeImmutableクラスの比較など、PHPの日付計算はどうするのがベストなのかというお話でした。
日付を取り扱うにあたってのトラップなども紹介されており、 自分がハマったことのあるトラップに関しては画面の前で大きく頷いてしまいました。
日時計算のコードは頻繁に書くわけではないので、忘れたころにやってくることが多いです。 故にまとめる時間をなかなか取れずにいたので、今回のセッションを聞くことで考える時間を纏って取ることができてとても良かったです。
日付に関して調べたことがあるという人はぜひアーカイブを視聴してみてください。
PHP8時代のWebアプリケーションフレームワークの話をしよう
report by Y-Kanoh
HTTPリクエストを入力とし、HTTPレスポンスを返す仕組みである、Webフレームワークの内部の作りに、PHP8の新機能がどう利用できるかを解説したセッションでした。
Constructor Property Promotion や、Attributes など、PHP8ではフレームワークの内部で活用できそうな機能が増えて、Webアプロケーションを考えるための下地がさらに整ったと言えますので、今後はこれらの機能を用いたフレームワークが増えることでしょう。 また、最近ではデプロイ先の選択肢も増えているため、これらの新しく開発されるフレームワークには、これらの環境へのデプロイを簡易にしてくれる機能が期待されます。
近年のフロントエンドとバックエンドを切り離す動きから、フレームワークにはシステムのつなぎ目をうまく作る、APIファーストな考え方が求められており、 API仕様から仕組みを決めてしまう方法や、サーバサイドもJS/TSで書いてしまう方法、フロントエンドもバックエンドと同じ言語で書いてしまう方法など、 システム間をスムーズにつなぐための方法も紹介されていました。
PHP8の目玉機能の一つである Attributes は、フレームワークやライブラリの開発に向けた機能だと考えられるため、今後どのように活用され、我々が利用することになるのかは気になるところです。
また、Webを取り巻く環境の変化やトレンドも、今後どのようにフレームワークを変えていくのか、これから開発されるフレームワークに期待が持てる発表でした。
ウェブセキュリティのありがちな誤解を解説する
report by richardwagner
ウェブセキュリティに関してともすれば誤解されがちな10のポイントに関する、具体的な例が満載の非常に役に立つ基調講演でした。
www2.slideshare.net
Cookieについての誤解はエンジニアならぜひとも押さえておきたい内容でしたが、 それに加えてクレジットカードをサイト保存せず都度入力することのリスクや、Google検索上位サイトへの盲目的信頼への警鐘など、 エンジニアに限らず一般の方々にもぜひ参考にしていただきたい内容が目白押しでした。 個人的にも、非エンジニアの家族や友人にも紹介しようと思ったスライドでした。
そして書籍でいつもお世話になっている徳丸浩さんの、落ち着いた大学講義のような語り口はとても聞きやすく、あっという間の1時間でした。
PHPで作るオンラインカンファレンス向け録画システム
report by id:radiocat
今回のPHPカンファレンスはTrack1だけがライブ配信でそれ以外は録画配信となっていますが、この録画配信システムはPHP(CakePHP3)で構築されいるとのことです。もともとはiOSDC Japan 2020で構築した仕組みを今回も取り入れているようです。iOSDCでのエピソードはPodcastのPHPの現場でも話されていました。
「すごいシステムを作るのに必ずしもすごいことをする必要はない」と仰っていたのが印象的でした。APIの仕様をしっかり把握してそれを駆使する。それ以外は必要な環境+PHPの腕力で地道に実現する。いずれもエンジニアリングの本質だと再認識したセッションです。
PHPカンファレンス大LT大会
report by id:radiocat
大LT大会では16名の登壇者が次々とライトニングトークされました。ここでは弊社から登壇した2名のスライドをご紹介させてください。
静的解析ではじめる負債コード解消
PhpStormのInspectionを使って負債コードを特定する方法をご紹介しました。Inspectionを使いながら開発を進めることで、プログラマは自分が担当している開発の範囲で負債コードを検知して少しずつ技術的負債を減らしていくことができています。
レガシーシステムに自動テストを導入する第一歩
10年以上前にサービス開始したレガシープロダクトにPHPUnitを使ったテスト駆動開発を導入した話です。従来から存在する機能をAPI化するタイミングで、まず既存機能のテストを作成してからAPI化することで仕様変更に強いテスト駆動開発の効果を実感することができました。
おわりに
PHPカンファレンスではPHPの基礎から最新技術の導入事例まで幅広いテーマが扱われていました。 皆さんも今回紹介したイベントレポートやセッションの内容をぜひご自身のお仕事に取り入れてみてはいかがでしょうか。
弊社はオンラインで勉強会を開催しています。PHPがテーマの勉強会もありますのでぜひご参加ください。
直近で開催されたLaravel/PHP8/Dockerをテーマとした勉強会にはのべ200人近くの方にご参加いただきました。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
forms.gleイベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com