レギュラートーク(20分)

一人のPHPerからプロジェクトマネージャーになる道筋

yamotuki yamotuki

プロジェクトマネージャー、なりたいですか?

いわゆる「PM」は「プロダクトマネージャー」と「プロジェクトマネージャー」の二つを内包することが多いですが、ここでは後者の「プロジェクト」をマネージする(なんとかする)人についてです。
前者の「プロダクトマネージャー」はPdMなどとも呼ばれ非エンジニアがなることも多いですが、プロジェクトマネージャー(以下PM)はエンジニアが担当することも多いのではないでしょうか。

プロジェクトには数日で終わるものも、数ヶ月かかるものもあるかと思います。最初は単に小さなタスクをこなしていたエンジニアがどうやったらPM(=プロジェクトを"なんとかできる"人)になれる能力がつくのでしょうか?

本セッションではPMの仕事内容と、それに対応するスキルセットの身につけ方についてお話しします。

【注】会社によりPMの職務範囲は変わるので、私の観測範囲内でのお話です

8
レギュラートーク(20分)

【しくじり先生】Laravelでアーキテクチャを決めずに開発を進めちまいました・・・。

suguru_ohki スーさん

Laravelでアーキテクチャをしっかりと決めずに開発を進めてしまった結果について話します。

  • どの程度ルールを決めていたのか
  • どの程度アーキテクチャをゆるふわしていたのか

と開発の変遷をお話しすることでだんだん 「疎結合で変更に強いアプリケーション開発」から離れる開発になっていくフローがどのようになるのかがわかるように話そうと思います。また、その結果支払うことになったコストがどれくらいなのかをまとめて話します。

2
レギュラートーク(20分)

Fibers vs Swoole

m3m0r7 めもり〜

PHP 8.1 から Fibers が導入されました。それ以前の非同期処理といえば、Swoole などが筆頭になっていました。
非同期処理ライブラリが PHP にビルトインされるのは PHP に革命をもたらしたと言っても過言ではありません。
しかし、Fibers ではできないこと、Swoole でできることなど、実際には分かれています。
そこで、Fibers と Swoole の違いはなにか、それぞれの使い方を広く浅く本トークで解説します。

16
レギュラートーク(20分)

PHP FFI 入門

m3m0r7 めもり〜

PHP に FFI が導入されてから、どういう用途で使えばよいか悩んでいる PHPer も多いかと思います。
PHP FFI を介したモジュールの呼び出し方から、自作 の C/C++ のモジュールの作成から呼び出し方、
そして libusb と呼ばれるモジュールで USB で接続された機器の一覧を取得する方法など、どのように FFI を活用していけばよいのかを本トークで解説します。

3
採択
2022/04/10 11:35〜
Track B
レギュラートーク(20分)

MongoDB に溜まった約1.6億レコード、データ量1TBのあらゆるサイトの記事データを BigQuery で高速検索できるようにした話

developer_kazu 植江田和成

メディア露出の調査・分析などがおこえるWebアプリケーションのWebClipping。WebClippingではあらゆるサイトから1日に10万件超の記事をクロールし、MongoDBに保存します。
二度と手に入らないかもしれない記事データを、ただ削除するのはもったいないです。
そこで今後活用できるように記事データをBigQueryへ移動させることになりました。
しかしPHPを使用して大量のデータをmongoDBから引き、そのデータをファイルに書き込んでいく作業は予想以上に難しかったです。
今回は、上記対応で行ったPHP上の工夫を紹介します!

主な内容
・約1.6億レコードのデータをどのようにcsvファイルに書き込むのか?
・PHPのファイル処理に便利なStream Wrapperで圧縮して書き込む
・ファイル処理の速度を向上させるために入出力ストリームへアクセスする

レギュラートーク(20分)

PHPでB+木を作成してデータベースの気持ちを理解する

hanhan1978 富所 亮

B+木というデータ構造をご存知でしょうか?RDBMSでよく採用されているデータ構造で、ディスクの効率的な利用や、検索を行いやすいなどの特徴があります。しかし、耳学問で聞いてみてもイマイチ特徴がピンと来ないのです。

本トークでは、PHPでB+木のデータ構造を実装して、RDBMSでB+木が採用される理由、インデックスの構造的な仕組み、何故検索が速くなるのか?などなど、データベースの仕組みの根幹を覗いてみましょう。

このトークでお話すること

  • B+木の特徴
  • B+木は何故ディスクの利用効率が高いのか
  • インデックスとは何か
  • なぜ、データベースはB+木を採用しているのか
16
採択
2022/04/10 11:35〜
Track A
レギュラートーク(20分)

PHPでEventLoopを書いて非同期処理を完全に理解する

hanhan1978 富所 亮

同期処理がメインのPHPウェブアプリケーション開発者が非同期処理を理解するのは難しいです。PHP自体も非同期プログラミングを積極的に支援する仕組みがありません。しかし、逆に考えればチャンスです。PHPで非同期処理に必要な仕組みから自分で作って見ると、非同期処理を腹の底から理解することが出来ます。

本トークでは、仕事で同期処理ばかり書いているエンジニアが、非同期APIの作成から、非同期処理を行うEventLoopをFiberで作り上げる所までを解説します。非同期処理を仕組みから理解することで、他の言語学習もスムーズになることでしょう。

このトークでお話すること

  • 非同期処理とはなんなのか
  • Generator や Fiber は非同期処理に必要なのか
  • どうすれば、PHPで非同期処理を書けるのか
  • そうまでして非同期処理を覚えることに意味はあるのか
レギュラートーク(20分)

Laravelのデータベースクエリを最適化するためのヒント

AkitoTsukahara AkitoTsukahara

みなさんはデータベースクエリのパフォーマンスを意識して実装されていますでしょうか?
実装した当初は軽快に動いていたアプリケーションもサービスの成長とともに少しずつ遅くなっているかもしれません。あるタイミングで最適化プロジェクトを発足させたり、日々のコードレビューで指摘し合う際に役立つヒントをお届けできればと考えています。

このトークではデータベースクエリ最適化のヒントをサンプルコードを交えて解説いたします!

こんな方におすすめ

  • 業務でLaravelを利用されている方
  • サービスが成長してきたので、クエリの最適化をしたい人
  • 日頃からパフォーマンスを意識した実装をしたい人
6
レギュラートーク(20分)

LaravelのEloquentモデルイベントってどんな時に使うの?

kanbo0605 カンボ@沖縄

LaravelのEloquentモデルイベントって何?という人も多いかもしれません。私も知ったのは去年くらいで、それまでは知りませんでした。

このモデルイベントは、モデルでcreate、save、delete,、updateなどの操作をした際のイベントを指しています。そして、これらのイベントを実行する際、合わせてなんらかの処理を行わせたい場合に使用します。
例えば、モデルのデータを新規作成する際にはdateカラムに現在の日付を初期値として入れたい時などに使用します。

他にも実際にどのようなケースでモデルイベントを使用するケースがあるのか、モデルイベントの注意点などを話していきます。

1
レギュラートーク(20分)

Laravelリファクタリング大全

kanbo0605 カンボ@沖縄

途中から入ったLaravelでの開発プロジェクトで様々なコードのリファクタリングを提案していった話をします。
例えば、外部サービスを使っているロジックはServiceクラスに切り離し、ビジネスロジックはModelに切り離しました。
その他には、データベースtransaction処理の可読性向上。返却するステータスコードの整理。定数などになり得る箇所はEnumに移動。
ルートモデルバインディングの活用など。
このように様々なケースでのリファクタリングの例をお話します。

3
採択
2022/04/11 11:35〜
Track A
レギュラートーク(20分)

2022年版php-srcのバグ報告の仕方

youkidearitai てきめん

php-srcのバグ報告ですが、実は2021年末にbugs.php.netからGitHubへと移行しました。
(厳密に言うと、セキュリティが絡む場合には引き続きbugs.php.netを使用します)

そのため、バグ報告の仕方がすこし違ってきています。
GitHubだからいざ報告となるとしやすくなったのでしょうか?
GitHubで報告されたバグはどのように扱われるのでしょうか?
php-srcほどだとバグは見つからないかもしれませんが、見つけてしまったときにどうしたらよいか考えてみませんか。

レギュラートーク(20分)

Laravel初級者から中級者になろう!

KentarouTakeda 武田 憲太郎

「完全に理解した」から「なにもわからない」へのステップアップ目指します。
https://bit.ly/3JldwsX

Laravelは初学者の敷居がとてつもなく低いフレームワークです。豊富なスターターキットや書き方の自由度の高さ故、小規模のアプリケーションなら未経験からものの数時間で作れてしまうことでしょう。

一方、いざ案件で本格的に使おうとした途端に戸惑う方も多いように感じます。PHP熟練者の方でもフレームワークのベストプラクティスが解らないまま「愚直なphp」でつい苦労してしまうことが多いのではないでしょうか。

これら解決方法はLaravelの公式ドキュメントには紹介されていません。
(最初のとっつきやすさに大きく比重を置いて書かれているためです!)

「完全に理解した」後、Laravelの持つ豊富な機能を深く知るにはどのような手順を経ていくのか、それをご紹介していきます。

9
レギュラートーク(20分)

はじめてのテスト,はじめての依存性注入

jdkfx はる茶

はじめてPHPUnitを使ってみたいという方,依存性注入という言葉を初めて聞いた・どこかで聞いたことがあるという方に対して,初心者が初心者なりに頑張ってテストを書いてみたり,依存性注入について理解してみようと試行錯誤してみた過程とその中で思ったこと,学んだことについて語りたいと思います.
私はまだ学生という身分ではございますので,職場で使える小技などといった内容にはなり得ませんが,初めてPHPを使ってみた方がテストを書くためのPHPUnitというツール,そして依存性注入というものについて知ってほしいという気持ちで発表を行いたいと思います.

13
レギュラートーク(20分)

Laravelで挑戦する、Package By Feature!業務関心を切り分けて安全にメンテナンスできるアプリケーション開発の道!

tyamahori tyamahori

皆さんはどのようなスタイルでLaravelアプリケーションを開発されておりますでしょうか?今回はディレクトリを業務関心に応じて区切り、その中にクラスを配置して開発していくスタイルをお伝えしていきます。これを行うことで、疎結合で変更に強いアプリケーション開発がしやすくなります。フレームワークに対しても疎結合な実装を目指していくことで、Laravelのバージョンアップにも追従しやすくなるかと思います。

10
レギュラートーク(20分)

解明!password_hash関数で生成される文字列の正体

hiro_y 山岡広幸

PHPではPassword Hashing関数を用いて簡単・安全にパスワードのハッシュ化と検証を行うことができます。password_hash関数でパスワードハッシュを生成、データベースに保存して、入力されたパスワードをpassword_verify関数で検証すればよいわけです。普段何気なく利用しているこのパスワードハッシュの仕組みですが、その文字列は定められたフォーマットに沿って作られていることはご存知でしょうか。どのようなフォーマットなのか、bcryptとModular Crypt Formatについて触れながら解説します。

11
レギュラートーク(20分)

[Github Dependabot] 「自動作成されたPRだけで脆弱性対策バッチリ」なんて思っていないですよね?

yamotuki yamotuki

みなさん、脆弱性対策してますか?

コードに潜む脆弱性対応は以下の二つに分類できるかと思います。

  1. 自分たちで書いたコードの脆弱性
  2. 依存ライブラリ・フレームワークの脆弱性

このうち後者では、Github を使っているならば Dependabot 機能による脆弱性検知が使えます。
Dependabot security updates 機能を有効にしておくと、勝手にPRを出してくれますよね。
便利です。これの内容チェックしてマージするだけ。
めでたしめでたし。

・・・とならないので注意です。
実は、検知していても自動PRになっていない脆弱性があります。
「PRになるのはcriticalレベルのもの。多分そうだろう。」などと勘違いしておりました。
危ない危ない。

本セッションでは Dependabot の説明、注意点、運用方法のケーススタディをお届けします。

9
採択
2022/04/10 12:10〜
Track A
レギュラートーク(20分)

大規模サービスのCakePHP2をCakePHP4にジャンプアップさせた話

katsukii 香月 雄介

ペライチというサービスのCakePHP2をCakePHP4にジャンプアップさせた話です。ソースコードの量が多すぎたため一括移行は難しく、2つのバージョンを並行稼動させながら段階的に移行していきました。大規模サービスにおいてサービスを停止させずにバージョンアップするためにどんな工夫をしたかについてお話します。

採択
2022/04/11 14:20〜
Track A
レギュラートーク(20分)

PHPコードを消すライブラリを作った

kubotak_public Kenjiro Kubota

kubotak-is/php-delというPHPコードをComposer Bin Commandを利用して消すライブラリを作成しました。
特定の形式でコメントを書いておくと、そのコメントを基準にPHPコードを削除します。
なぜそんなライブラリを作ったのか、その実装はどのようになっているのかを紹介します。
このセッションではComposer Bin Commandの作り方や自作のComposerライブラリをpackagistで公開する手順などを学ぶことができます。

採択
2022/04/10 12:10〜
Track B
レギュラートーク(20分)

PHPとGraphQL

glassmonekey 永野 峻輔

昨今宣言的UIの台頭とともに、GraphQLが注目を浴びています。
特にReactではApollo Clientの存在もあり大変便利です。

ではPHPではGraphQLのエコシステムはどうなっているのでしょうか?

今回のトークではGraphQLを活用するメリット・デメリットから、PHPでGraphQLを扱う是非、PHPでGraphQLを扱う場合のライブラリやエコシステムについて解説をします。

レギュラートーク(20分)

PHPerとテストと三大美徳

wakabadou 若葉 章

「ユニットテストなんてメンディーよなー」「疎通動確の方が速いよなー」
そんな方へお届けする「気張らないでやれる」「"プログラマにとって"有用・有益なユニットテスト」についてのお話です。

また、次の症状にお悩みの方にも有効です。
・ユニットテストはやってみたいけどPHPUnitの導入で挫折した
・PHPUnitほど高度ではなくて良いので、もうちょっと気軽にユニットテストしたい
・バージョンアップのたびに動かなくなるテストスィートってどうなの

8