RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

PHP Conference 2022【参加レポート】

はじめに

ラクスでメールディーラーを開発している hirobex です。
2022/09/24(土) ~ 09/25(月)の3日間に渡ってPHP Conference 2022が開催されました。

phpcon.php.gr.jp

ラクスはブロンズスポンサーとして協賛し、
エンジニアも4名が登壇した他、多くのエンジニアが参加しました。
そこで、今回は参加者による参加レポートを紹介させていただきます。

もくじ

09/24(土)1日目

Track 1

リリースして11年経過したPHPアプリケーションにPHPStanを導入した

report by id:Jazuma

speakerdeck.com

Chatwork株式会社 山下祐さんによる発表です。
本番環境でエラーが発生することを防ぐために静的解析ツール(PHPStan)を導入した事例が紹介されました。
(導入前はnullを参照する・ライブラリのアップデートで型チェックが厳格化した等のエラーが発生していました。)

  • 導入への道のり

    • 静的解析によって解決したい問題を決める⇒その問題を解決できる解析レベルを決定する
    • baselineを作成し、既存のエラーは検知対象外にする(エラーはあるものの本番環境では動いているため)
      • baseline: 検知対象外のエラーを定義したファイル
    • CIでPHPStanを実行する
  • 導入して得られたメリット

    • 問題のあるコードにリリース前に気づけるようになった
    • 思い切ったリファクタリングが気軽にできるようになった
    • レビューコストの削減
    • ライブラリアップデートが安心してできるようになった。
  • 感想

    • 既存のエラーは本番環境の動作に影響しないため、検知対象外にするという運用がコストとリターンのバランス的に良いと思いました。

PHP メモリ管理術

report by hiro_ji
speakerdeck.com

PHPのメモリ不足が発生する仕組みと、メモリ消費量を節約する方法について解説していただきました。

  • メモリ消費量の削減ポイント
    • 変数に値を乗せすぎない
    • バッファやスワップを上手に使用する
    • memory_limitを設定する場合は2*N(Nは自然数)MB
    • GCが走るタイミングを調節する

私自身、Allowed memory size of...に遭遇した際は盲目的にメモリを増やすということが多かったため、
実務に活かせる非常にためになる内容でした。

Track 2

なるべくJavaScriptを書かないでSymfonyのUIをリッチにする、『Symfony UX』

report by mrstsgk_rks

speakerdeck.com

Symfony UXを使うことで得られるメリットをSymfony UXの種類と特徴、注意点とともに解説していただきした。
個人的には、「JavaScriptで設定するデータをPHPで記述」できることが、一番魅力的に感じました。
他のメリットとしては、

  • 必要以上にJavaScriptを書かなくてよくなる
  • 必要以上にAPIを作る必要がなくなる

などを挙げていただいています。
JSをなるべく書かずにフロントエンドをリッチにできるので、PHPの活用法が広がって非常に勉強になる発表でした。

Laravel を低速化する技術

report by mrstsgk_rks

speakerdeck.com

Laravelを高速化することは考えたことはよくありますが、低速化させることを考えるのは斬新だと感じました。
以下の2種類の視点からの低速化を紹介していただきました。

  • インフラ視点
  • アプリケーション視点

フィーチャートグルを使って素早く価値を検証する

report by rakusMorita

speakerdeck.com

流行りのフィーチャートグルを使って、試験的に試作機能を一部のユーザにデリバリーすることで、
その機能の使用データを集められ、リスクを低減した状態で本実装に移せるというものでした。
フィーチャートグルには

  • リリーストグル
  • 実験トグル
  • 運用トグル
  • 権限トグル

の4種類があり、今回はその中の「実験トグル」を使った検証例の紹介でした。
コードを変えることなく、一部のユーザにだけ機能を表示し、プロダクトの仮説検証やデータによる意思決定を行うために役立つというものです。

検証用の機能として、必要最低限の実装で、不要ならそのまま削除できるようにします。
その機能を本採用するなら実装について再検討し、本格的に実装するという流れです。 新しい開発スタイルを知ることができました。

フィーチャートグルについて詳しく知りたい方向けにはこちらのスライドが紹介されていましたので、気になる方はチェックしてみてください。

ローンチから16年目のWebサービスに、どうやってフィーチャートグルを実装しているか

report by rakusMorita

speakerdeck.com

レガシーコードで書かれたWebサービスにフィーチャートグルを導入した貴重なお話でした。
リリーストグルを使用し、開発速度向上の効果があったようです。

導入方針は下記の通りです。

  • 必要最低限の機能で実装する
  • 導入することに比重をおく  →レガシーコードは一旦そのままにし、導入後にリファクタリングを行う

とにかく導入して、開発速度が上がったときにリファクタリングを行うという考えは、多くの現場でも役に立つ気がしました。

Track 3

PHPで学ぶシステム設計 依存関係のコントロール

repory by: id:Jazuma

speakerdeck.com

成瀬 允宣さんによる発表です。

  • プログラムにおける依存

例えばユーザの入力値を受け取ってインスタンスを生成しDBに保存する...
という処理をするクラスは、インスタンスのもとになるクラス、DBアクセスを行うライブラリに依存する
⇒ DBアクセス用ライブラリに有料化・サービス終了等の変更があるとプロダクトコードが大きな影響を受ける

  • 依存関係逆転の原則
    • 上位モジュール(ビジネスロジックに近いクラス)が下位モジュール(具体的な技術要素を扱うクラス)に依存してはいけない
    • 実装クラスが抽象クラスに依存させるべきである

というルールから成り立つ原則です。

  • プログラム以外における依存
  • サービスの仕様を特定の人物のみが把握している(人への依存)
  • あるチームのサービスが複数のサービスから利用されている(チームへの依存)
    • 複数のサービスから依存されている場合、障害発生時の影響が大きく、機能改修のリードタイムが落ちる

成瀬さんはチームへの依存をメインコンテンツとして取り上げていました。

  • チームへの依存の制御

上で挙げた あるチームのサービスが複数のサービスから利用されている というケースの場合、
APIを提供することでサービスへの依存を制御することができるとのことでした。

PHPバージョンアップのための依存ライブラリ更新との付き合い方

report by hiro_ji

speakerdeck.com

PHPバージョンアップ時の注意点や依存ライブラリの管理施策について、過去事例を交えて紹介していただきました。
特にRenovateを用いた定期的なライブラリ更新については、PHPバージョンアップ時の負担を削減できる有用な運用方法だと感じました。

  • Renovate とは?
    • 更新できるライブラリがあれば、そのライブラリを更新するためのプルリクエストを自動的に作成してくれるツール

正規化理論ことはじめ -数学的背景から理解する正規化の初手-

report by id:akikuchi_rks

DB設計をする際に重要な概念である正規化について、数学的背景に着目して解説していただきました。
関数従属性や情報無損失分解など難しそうな単語が出てくる分野ではありますが、適宜例を用いて解説してくださっているので数学が苦手な方にも分かりやすい発表になっていました。

私自身、正規化の概念については既になんとなく理解していましたが、第二、第三正規化で行う関数従属性に沿った分解が「関数従属性に沿った分解は必ず情報無損失分解となる」という数学的背景があることまでは知らなかったため、勉強になりました。
今回の発表では第1〜第2正規化のみの解説であったので、今後こちらの発表者の方の違う正規化の解説があれば是非聞きたいです。

09/25(日)2日目

Track 1

PHPの今とこれから2022

report by shimizu_s

PHPという言語は知っているけども、ほかの言語と比べて何がどう違うのかよくわからない... というPHP初心者の方にお勧めできる講演でした。 話の主な概要としましては、PHPにはどのような長所があるのかから始まり、これまでのPHPの歴史を踏まえてこれからの課題や改善点、そしてPHP8.2の変更点となっております。
自分は今年からPHPを使った開発をしており、公演内容は非常に分かりやすく為になりました。

私見ですがその中でも為になった点は、

  • 歴史:2021年11月にPHP財団の設立と、それまでに至った経緯
  • 改善点:PHP8ではJITによる高速化
  • PHP8.2の変更点:動的プロパティの廃止

です。
特に動的プロパティの廃止については、今後に向けて、現在の開発でも留意すべきと感じました。

Track 2

少人数チーム開発でのレガシープロダクトとの向き合い方

report by id:Jazuma

speakerdeck.com

Growfit株式会社 くろきりさんの発表です。
くろきりさんの参画時、プロダクトへの技術的負債が蓄積していました。
(Fatコントローラー・エラー処理の未実装等)

はじめは順調に負債の返済が進んだものの、問い合わせ対応や定型運用作業等
日々のタスクに時間がとられる状況になりました。

そこで、「より開発に集中できる環境」「リファクタリングを継続的に行う仕組み」の作成が始まりました。
より開発に集中できる環境を作るために、カスタマーサポートチームの定型作業を管理画面から実行できるようにする・ タスク管理を導入し、納期や優先度を設定するといった仕組みが導入されました。

Growfitさんではデザインや文言修正依頼の頻度が高いため、Viewのリファクタリングを優先的に行う方針を定めて リファクタリングが進められました。
(対象箇所が多いため、効果がより見込める箇所に絞ってリファクタリングするという意図があったとのことです)

ラクスからの登壇セッションのご紹介

ここからは弊社から登壇させて頂いたセッションの内容をご紹介します。

Slimでサブシステムを構築してレガシーサービスにモダンな光を差し込ませた話

report by id:radiocat

www.docswell.com

サービス開始から15年のレガシーなサービスに新たなサブシステムを構築するにあたり、モダンな技術要素を取り入れた話です。
PHPでモダンなフレームワークと言えばLaravel一択な雰囲気もある中で、開発要件に必要な機能や学習コストなども考慮してLaravelとSlimを比較したうえでフレームワークを選定しました。
Slimの特徴や実装にあたって苦労した点なども紹介しています。
PSR準拠の機能拡張や書きやすさを重視したユニットテストの導入はレガシーな既存システムにも応用しやすいアプローチであり、レガシーサービスにモダンな光を差し込ませるひとつの事例となる話でした。

PostgreSQL + TimeScaleDBでログ管理検討

report by id:radiocat

speakerdeck.com

PHPのテーマではありませんが、PostgreSQLに関する事例の紹介です。
TimeScaleDBはPostgreSQL拡張機能です。
時間とともに増大する時系列データを一定期間経過後に圧縮する機能があります。
このTimeScaleDBを使って、全体の50%以上を占める膨大な操作ログデータを圧縮して管理する方法を検証した事例を紹介しました。
以下が検証の結果のまとめです。

  • 圧縮後のデータサイズは約10%になり、圧縮効果が非常に高いことがわかった
  • ただし、圧縮されたデータが検索対象になる場合は解凍処理を挟むため非常に遅くなる
  • 分割カラムを効果的に活用することで検索速度が遅くなるのを回避することができる

分割カラムは検索のキーとなるカラムを分割カラムに指定することでレコードを分けて圧縮するため、検索速度低下を防ぐことができる仕組みです。
TimeScaleDBの機能を活用することで検索速度を保ちつつ、データを圧縮してデータサイズを抑えたデータベース運用が可能になります。

自作したプログラムを Packagist に登録して世界中の PHPer にインストールしてもらおう

report by id:radiocat

speakerdeck.com

PackagistはPHPのツールやライブラリを一般に公開するためのリポジトリです。
Packagistに登録されたものを実際に利用するにはComposerを使うため、Composer用のパッケージの定義を行って、Packagistの公式サイトで登録するまでの流れがスライドで紹介されています。
自作したプログラムをローカルに眠らせている人はぜひこのスライドを参考のうえPackagistに登録してみてください。

PHPerが再利用可能な情報提供でオフショア先とコード品質向上に取り組む

report by id:radiocat

speakerdeck.com

オフショアのコード品質を上げるために取り組んでいる具体的な事例の紹介です。
弊社はベトナムのオフショアチームと開発していますが、ベトナムでは国の事情の違いもあって母国語の技術情報が日本のように潤沢にはありません。
そのため、コード品質を上げるために日本のエンジニアからのフィードバックをたくさん行い、その内容を学習教材として活用してもらう取り組みを行っています。
根気強く続けていくことが大切であり、以下のような対策を行って継続的に取り組んでいます。

  • 納期の制約があるため、対応必須のフィードバックと今後のために読んでおいてほしいフィードバックに分ける
  • 過去のフィードバックを事例集として再利用可能な形で蓄積する

まとめ

PHPバージョンアップやレガシー改善のセッションが多くあり、レガシーシステムと向き合う苦労が伝わってきました。
PHPで作られた製品が長く利用されている証拠だと思います。

PHPerのためのコミュニティ PHPTechCafe

ラクスではPHPに特化したイベントを毎月開催しております。
その名も「PHPTechCafe」!!
次回は10/24(月)に『PHPのリーダブルなコード』 をテーマに開催します!
まだまだ参加者を募集していますので、ぜひお気軽にご参加ください。

👉PHPerのための「PHPのリーダブルなコード」を語り合うPHP TechCafe

最後までお読みいただきありがとうございました!


エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
20210916153018
https://career-recruit.rakus.co.jp/career_engineer/

カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com

ラクスDevelopers登録フォーム
20220701175429
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/

イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!

◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.