採択
Sponsor's LT (5mins)

Catlog 猫日誌の進化と複雑性

suzuki 鈴木則夫 | 株式会社RABO

"猫様ご本人よりも早く愛猫の健康変化に気付けるスマートデバイス「Catlog」シリーズのアプリケーション・バックエンドは主に PHP をベースに構築されています。

サービスのローンチから3年が経ち、蓄積している猫様の活動データ量も増えています。またアプリケーションには多彩な機能追加をおこなってきており、バックエンド側の開発にも複雑性が増えてきました。

このトークでは、Catlog アプリケーションの進化のようすと、そこで発生した課題をどのようにクリアしてきたかについてご紹介したいと思います。"

採択
2022/09/24 11:55〜
Track1
Regular Session (25mins)
Service Operation Quality

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

task2021 山下祐 | Chatwork株式会社

※ こちらのトークはオンライン登壇になります

本年、Chatworkはリリースから11周年を迎えました。Chatworkで使われているプログラミング言語といえば、Scalaのイメージが強いかもしれません。
しかし、サーバーサイドのコードをPHPで実装されて以来、PHPコードは今でも現役でChatworkを支え続けています。

Chatworkではcommit毎に約6000ファイルのテストケースを実行しています。しかし、型エラーなどが発生していたとしてもテストでカバーしきれないところは、最悪の場合そのまま本番環境へリリースされてしまうという問題がありました。
それによって過去実際にユーザー影響のある障害が発生してしまったこともあり、Chatworkを安定稼働させ続ける上でも大きな問題点でした。

上記のような課題感から、PHPアプリケーションのCIに静的解析ツール(PHPStan)を導入し、コード品質の向上に役立てています。

本セッションでは、歴史の長いPHPで実装されたプロダクトコードにPHPStanを導入するにあたり、「導入に当たっての障害」「開発チームにスムーズに受け入れられるために取り組んだ事」「導入して得られたメリット」などに焦点を当てて紹介したいと思います。

採択
2022/09/24 13:55〜
Track1
Regular Session (25mins)
Database

スケールアウト可能なマネージドデータベースサービスTiDB Cloudのご紹介

pingcap_japan 本多康夫 | PingCAP株式会社

TiDBはスケールアウト可能なMySQLプロトコル互換データベースです。負荷やデータ量に応じて、柔軟なスケールアウトが可能となっています。
さらに、マネージドサービスなTiDB Cloudをご利用いただくことで、サーバーインフラの管理を行わず、データベースをご利用いただくことができます。

本トークではTiDBの優れたアーキテクチャと、TiDB CloudとPHPでのWebアプリケーションの組み合わせについてご紹介します。

採択
2022/09/24 16:35〜
Track3
Regular Session (25mins)

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

blue_goheimochi 大橋佑太

年に1度(数年に一度?)巡ってくるPHPのバージョンアップという大仕事。

今回PHPのバージョンを8系にバージョンアップするための作業を実施したのですが、そのためにはまず依存ライブラリのバージョンアップと向き合う必要がありました。

小さくコツコツ手をつけておけばよかった・・・そんな気持ちと戦いながらもバージョンアップをなんとか完了させました。

1つ1つ丁寧に目の前の課題・問題点を洗い出し、対処していけば必ずバージョンアップを完遂できると思いますが、本トークではPHPバージョンアップのための依存ライブラリ更新とどのように付き合いながらPHPのバージョンアップしたか、PHPのバージョンアップ後の依存ライブラリ管理についてお伝えさせていただければと思っております。

Regular Session (25mins)

PHPの翻訳処理を簡単に解説する

yuckie_it satooo

初学者に向けてPHPの翻訳が何をしているのかを解説します。
以下の内容を予定しています。
・自然言語処理で自動翻訳が進んできたけどいまだに辞書に基づいた翻訳処理のニーズはある
・PHPの翻訳処理の書き方基本(bindtextdomain, gettextとか)
・Cの処理をPHPがラップして処理している話
・結局上記の処理はmoファイルという翻訳ファイルを読み込んでいる話
・moファイルがどのようにできるのか(pot ->po->mo)
新規:xgettext, msginit, msgfmt
追加:xgettext -j, msgmerge, msgfmt
・EmacsのPOモードとかもあるけど実際に導入する際にどうやってガバナンスをとるべきかの話
(翻訳者は非エンジニアなので、翻訳のやりとりを同管理するか)
・翻訳処理を使用している身近な例(WordPress, PostgreSQL, 他あったら)

3
Regular Session (25mins)

依存ライブラリの定期的な更新のためにRenovateを導入・運用する

blue_goheimochi 大橋佑太

依存ライブラリの更新、定期的に実施できていますか?

恥ずかしながら担当プロダクトで更新ができていないケースがありました。
そしていざ更新を試みると対象ライブラリがいくつもあり、大幅なバージョンアップが必要なものも・・・

このような状況はまずいと感じ調べたところRenovateという依存ライブラリの自動更新を行うツールを知り、導入を試みましたが、更新を怠っていたプロジェクトでの素直な導入は難しいと判断。
そこで導入までにステップを置き、ライブラリのバージョン更新・Renovateの導入、そこから定期的に更新するという運用の流れを構築し、現在はライブラリの更新が健全にできていると感じています。

本トークでは依存ライブラリの更新を怠っていたプロジェクトにRenovateというツールを導入した流れと導入後の運用状況をお話させていただき、皆様の依存ライブラリ管理の一助となればと思っております。

3
採択
2022/09/25 13:55〜
Track3
Regular Session (25mins)
PHP

さっぱりPHP 〜 標準関数と文法を極める

tadsan うさみけんた

いかに簡潔で当意即妙なコードを書くかはプログラマーにとって永遠の課題であり、実装パターンや標準ライブラリなどの知識と経験がモノをいうところです。逆に古いPHPの経験が長く最新のPHPをキャッチアップできていないと、現在では単純な関数呼び出しで済むものを冗長でパフォーマンスの悪い方法で書き続けてしまうということもありえます。

PHPには数多くの標準関数とシンタックスがありますが、その中には使いどころのわかりにくいものもあり、関数リストを全て読むといった学習法はあまり効率がよくありません。
今回のトークでは筆者がコードレビューやオンライン上の技術記事へのコメントを通じて指摘した内容を軸に、押さえておきたい関連知識を紹介します。

  • PHPマニュアルの見方と標準関数について
  • 古いイディオムとパフォーマンスについての考えかた
  • 標準関数を使ったイディオム
  • 静的解析 vs 標準関数
  • オンラインサンドボックス環境の使いかた
  • さっぱりを捨てるとき 〜 避ける余地のある標準関数
Lightning Talk (4mins)
Composer

ayesh/composer-preloadは何をしているのか

o0h_ きんじょうひでき

便利なものが大好きなので、「Composerを使いこなしたい」「ここ数年で現れた機能も試してみたい」という願望が私にはあります。皆さんもきっとそうです。
その中でも「書き味が良くなるやつ、便利なやつ」と「パフォーマンスが上がりそうなやつ、便利なやつ」がありますよね。
前者について、例えばPHP7.4のプリロードがあります。

プリロードと初めて聞いた時に、「ではフレームワークやライブラリのコードを予めメモリに乗っけちゃおう!」と興奮した人も多いかと思います。
・・・本当に乗せていますか?

さて、そんな時に助けてくれそうなayesh/composer-preloadというパッケージがあります。
see: Packagist
これはComposer Pluginです。
READMEを見ると Composer Preload is a composer plugin aiming to provide and complement PHP opcache warming. と記述されています。

どんなアイディアでそれを実現し、どんな仕組みになっているのでしょうか?
簡単に内部に触れてみましょう。

5
Long Session (60mins)
Hardware

プログラムが動作するというのはどういうことか

tomzoh 長谷川智希

みなさんは普段からPHPやGo, JavaScript, Java などいろいろな言語でプログラムを書いて実行させていると思います。言語によってコンパイルの様な事前作業が必要だったり、書いたプログラムの実行方法が違ったり、実行速度が違ったりしますが、その違いはどこから来ているでしょうか。そしてそもそもプログラムを実行した時にコンピュータの中では何が起きているでしょうか。

このトークではみなさんがプログラムを実行した時のコンピュータの動作を電気回路から画面表示までに分けて解説します。
このトークを通じてCPUやその他のハードウェア、コンパイラなど「コンピュータの低レイヤ」と言われる領域に興味を持ち語り合える仲間が増えることを期待しています!

15
Lightning Talk (4mins)
PHP Performance

初めてのISUCON12、PHPでやってみた。

asumikam asumikam

今年、ポータルに張りつきついに掴んだ予選出場切符・・・!
初めての参加で、PHPを選択しました。

参加までにやったこと・当日の様子・反省点などお話できたらと思います。

7
採択
Lightning Talk (4mins)
PHP

FQDN(ドメイン名)のバリデーションが意外と面倒だった

akase244 akase244

FQDN(ドメイン名)が正しい値か否かをチェックする処理を書いたことがありますか?
filter_varで一発でしょ、と思ってたんですが調べてみるとどうやらそうでもなさそうだということがわかりました。
このトークではFQDNの奥深くてややこしい仕様についてお話します。

採択
2022/09/24 16:00〜
Track4
Regular Session (25mins)
Hardware

続CPUとは何か - ハードウェアエミュレータから見たCPU

tomzoh 長谷川智希

私はこの数ヶ月、趣味プロジェクトとして1980年代に栄華を誇った名作CPUであるZ80のハードウェアエミュレータを開発しています。
これはZ80で動作しているハードウェアからZ80を取り外して、代わりに自作のZ80ハードウェアエミュレータを取り付けて動作させるというもので、Raspberry Pi に自作のハードウェアを接続した形になっています。

PHP Conference Japan 2019で "「CPUとは何か」を PHPで考える" というタイトルで「プログラム実行環境としてのCPU」「エミュレート対象としてのCPU」「電気回路としてのCPU」という3つの立場から「CPUとは何か」について解説しました。
このトークではその続編として、Z80のハードウェアエミュレータの設計と実装を通してハードウェアエミュレータから見るとCPUはどう見えるかをお話します。

このトークを通じて、CPUに興味を持ち、CPUについて語る仲間が増えることを期待しています!

Lightning Talk (4mins)

1年で1冊しか本を読まなかった私が1ヶ月で4冊本を読めるようになった、驚愕の理由(ワケ)とは!?

asumikam asumikam

レベルアップするには本を読まなきゃいけない・・・
それはわかっているのだがどうも読書ができなかった私・・・
そんな私が、5月から「あるもの」を手に入れて「あること」をするようになった結果めちゃくちゃ本が読めるようになりました。

「本読みたいけど読めてないんだよな」、そんな昔の私と同じ悩みをもってる方必聴です!!

3
Regular Session (25mins)
Infra

AWS EventBridge+ECSでバッチシステム組んでみた

asumikam asumikam

オンプレ稼働していたPHPアプリケーションをクラウドに移行するにあたって、
バッチのアーキテクチャを変えることになりました。
そこで私が採用したのがEventBridge+ECSの構成でした。

■ EventBridge+ECSで実現した仕組み
■ 他に考慮したAWSアーキテクチャ/ なぜこの構成にしたのか

のような軸でお話できたらと思います!

4
Regular Session (25mins)
Team & Communication

リモート勤務からフルリモート転職、共通の課題と取り組んだ事

yoko_94b 下岡葉子

コロナ禍でフルリモート転職して一年が経ちました。
一度も会社に行ったことがないまま入社を決め、入社日もリモート出勤。誰も知ってる人がいない会社にフルリモートで入るのは、より緊張感があり、戸惑うことも多々ありました。
そんな中、自分なりにコミュニケーションを工夫し、「そういえばフルリモートだったっけ」と言われる程に仕事ができるようになりました。
今回は、リモートで仕事をするメリット・デメリットを中心に、転職したてにはどのような制度が助かったか、リモートで困った事とそれにどう対応したのか、などをお伝えできればと思います。

6
Regular Session (25mins)
PHP

私と PHP の 8 年間

akai_inu やまゆ

こんにちは。やまゆです。

月日が経つのは本当に早く、私が PHP を志してからもう 8 年近くが経過しているらしいです。
8 年もあれば、色々と変わるものですよね。 PHP もバージョン 5.3 から 8.1 まで大変遷を遂げました。

今回、様々あった 8 年間の PHP との 愛憎劇(?) を振り返ってみたいと思います。

  • 5.3 => namespace の到来と、 composer の誕生
  • 5.4 => trait
  • 7.0 => 型宣言
  • 8.0 => アトリビュートと constructor property promotion
  • 8.1 => readonly
  • (8.2) => readonly class

たくさんの進化を経た私と PHP の歴史を見て、 「 PHP いいなー」 と思っていただければ幸いです。

6
採択
Lightning Talk (4mins)
Team & Communication

会社にスポンサー提案して、実際に申込するまでのアレコレ

yoko_94b 下岡葉子

PHPコミュニティには長い間お世話になっており、そのコミュニティへ少しでも恩返しができたらと思い、会社にスポンサー協賛の話を持ちかけました。
特別な肩書きのない一エンジニアが、会社にスポンサーの話を持ちかけ、実際に申込みするまでのアレコレをご紹介します。
会社によって手続きに異なる部分があるとは思いますが、「スポンサー手続きって何をどうやるの?」「面倒くさいだろうな」と漠然と思ってる方の参考になれば幸いです。

Long Session (60mins)
Test & Debug Beginner 初心者向け Framework

LaravelでTDDを体験しよう

omoon 大村創太郎

2021年6月に出版された「PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応」の11章「テスト駆動開発の実践」を、著者自らデモを交えて解説します。TDDを始めたいけれどどうやって始めたら良いのかわからない、実際にどんな感じになるのか想像ができないのでほんとに意味があるのかわからない、なんか面倒くさそう、など、TDDへの興味はあるけれどなかなか最初の一歩が踏み出せない、という方にぜひ見ていただきたいです。(2018年のPHPカンファレンスでのセッションをブラッシュアップし、2020年代のTDD初心者の皆さまに向けて改めてお送りします)

7
Long Session (60mins)
Database Service Operation

メールアドレスとアカウント管理の基礎に立ち返る

tadsan うさみけんた

現在多くのWebサービスではメールアドレスをIDとしてユーザー情報を管理しています。
このようなユーザーを管理するDB設計はWeb開発の基礎とも呼べるもので、多くのWebフレームワークも基本機能として備えています。

このようなサービス運用のためにいくつかの考慮事項があります。

  • ユーザーのメールアドレスの入力ミスによる機会逸失を防ぐ
  • 特定の条件のユーザーからの登録を阻止する

要約するとたった二点ですが、実際の要件はサービスの運用形態や提供したいユーザー体験に併せて様々に異なってきます。
たとえば、同じユーザーからの複数回の登録を許容しない、特定のドメインからの登録を禁止するなどです。

明確な要件に見えても、現実にはそう単純に実装できない要素がいくつもあります。
メールアドレスや関連仕様、DB製品とCollation、メール配信サービスプロバイダ、ユーザー認証プロバイダなども影響します。

今回のトークではメールバリデーションライブラリの実装を通じて、アカウント管理に必要な観点についてみつめなおしましょう。

9
採択
Lightning Talk (4mins)
PHP

Reflection を使いこなして、オブジェクトを型安全にマッピングしよう!

akai_inu やまゆ

こんにちは。やまゆです。

Reflection を使ったことはありますか?「重い」「メタプログラミングって何?」「フレームワークやライブラリが使ってるらしいけどアプリケーションでは使わないのでは」という話が聞こえてきます。

私は、(まだ未リリースですが) json を話す普通の PHP アプリケーションに Reflection を使った便利クラスを実装して提供しています。

その中でも、「外部から取得してきたオブジェクトをマッピングしてインスタンスにする」便利なクラスを紹介したいと思います。

  • Reflection とは
  • PHP の Reflection は使いやすい!
  • PHP の型との相性が良い!

皆さんも Reflection の話に触れてみて、「もしかしたらこういう便利クラス作れるかも?」とひらめいていただければ幸いです。