Regular Session (25mins)
Composer

Composerを(PHP以外で)再発明する

o0h_ きんじょうひでき

現代のPHPには、既にComposerは欠かせないものになりましたね!
これ1つで、様々な機能やソリューションをもたらしてくれるツールです。

そんな便利なComposer、もっと仲良くなりたいことでしょう。
読んで、把握して、自ら作ってみるのはいかがでしょうか。
PHP自体の機能を利用しないと行けない機能(例えばPHP自体の実行を伴うCommandのフックなど)は難しくても、
「composer.lockを読み込んで(なぜなら純粋なJSONだから!)」「vendorディレクトリにソースを展開する(それってファイルのDLと展開ですよね!)」といった処理くらいならできそうに思いませんか。

やってみましょう!

やること

  • composer install の実行する単機能ツールをGoで作成し、その解説
    • composer.lock が事前に生成されている事を前提

本セッションで得られるかも知れないこと

  • 一歩引いて考えた「Composerの仕事は何で、どういう仕組みか」という理解
  • 「非PHP実行環境で、ワンバイナリでcomposer installが実行可能になったら何か便利なことある?」という考察
6
Regular Session (25mins)
Test & Debug Quality

PHP_CodeSnifferって何?どう動くの?読んでみました!

o0h_ きんじょうひでき

PHP_CodeSniffer(phpcs)は、「コードの書き方に規則を持たせようよ!!」を支援してくれるツールです。
予め定義したルールセットに従って、開発時のローカル環境やCI環境上で「ルールに沿っていないコード」を検出し、指摘してくれます。
また、同梱のphpcbfコマンドを利用することで、簡単な整形を機械的に行うことも可能です。

そんなphpcs、利用中の方も多いと思います。
では、中身はどうなっているのでしょう。どうやってPHPで実現しているのか・・気になりませんか?
「なぜphpcs/phpcbfは動くのか」を実際のコードから紐解いて見ます。

話すこと

  • phpcsの基本的なライフサイクルや概念
  • phpcsの中身(コード、実装)
    • 例えば「Sniff」とは何であり、どのように読み込まれて利用されるのか
  • phpcbfの基本的なライフサイクルや概念、処理の流れ

得られるかも知れないこと

  • phpcsを”理解”することによって、独自のsniffやrulesetを扱いやすくなるかも知れません
2
Lightning Talk (4mins)
Security

Dependabotで常に最新の依存関係を維持しよう!

kubotak_public Kenjiro Kubota

Githubが提供しているDependabotをみなさんは活用していますか?
Dependabotは大きく分けて3つのサービスを提供しています。

  • Dependabotアラート
  • Dependabotセキュリティアップデート
  • Dependabotバージョンアップデート

私が所属しているM&Aクラウドではもともとアラートとセキュリティアップデートのサービスを利用し、最低限の保守としてPHPやJavaScriptの依存ライブラリをメンテナンスしていました。
最近になりバージョンアップデートを利用して常に最新のライブラリに依存するように運用を始めたところです。
このLTではこのサービスの概要と弊社の運用を紹介し、ライブラリの依存関係を常に最新に保つための方法を紹介します。

3
Long Session (60mins)
Team & Communication

真にアジャイルな開発チームになるために 〜プラクティスを実践する〜

Panda_Program プログラミングをするパンダ

■ 発表内容
チーム開発に効果的なアジャイルのプラクティスとその実践例を紹介します。

■ ストーリー
「ゴールデンウィーク明けまでにこの機能を作ってほしい」と社内向けの新規機能の開発を任されたとあるチーム。このチームは4月頭に組成されたばかりであり、開発する機能はビジネスの成長ドライバーになることを期待されている。期間は1ヶ月しかない。ただし、その1ヶ月に根拠はない。

チームの構成はプロダクトオーナー1名、エンジニアマネージャー1名、エンジニア6名。不確実性に対処しつつ円滑にリリースを行うべく、アジャイルのプラクティスを実践して開発に立ち向かっている(6月上旬にリリース予定日が立てられて、6月下旬にその日通りにリリースできた)。確かに当初の予定よりは遅れている。

しかし、チームのエンジニアの誰一人として疲弊しきっていない。むしろ、組織の中で偉いAさんは「遅れていても、着実に進んでいることがわかる上に、遅れの理由が納得できるので安心感がある」と言い、スクラムマスターBさんは「このチームではスクラムがうまく回っている。もしそうでなければ、リリースはさらに1ヶ月以上遅れていただろう」と述べている。

なぜそれが可能なのか。何がうまくいっているのか。チームで実践したアジャイルのプラクティスとその実践例を紹介します。

■ 発表内で登場するキーワード(予定)

  • DevOps → セキュリティのシフトレフト、トランクベース開発、同期レビュー、継続的なデリバリ
  • XP → 全員同席、ペア・モブプログラミング、TDD、インクリメンタルな設計、コードの共有、本物の顧客参加
  • スクラム → プロダクトバックログ、プロダクトレビュー
  • 実装 → クリーンアーキテクチャ、戦術的DDD
  • その他 → 荒ぶる四天王(時間・スコープ・予算・品質)、リファクタリング、イテレーション、フィードバックサイクル
12
Regular Session (25mins)
Architecture

結局、ドメイン駆動設計とは何なのか?何でないのか? 〜DDD Demystified〜

77web 菱田 裕美

エリック・エヴァンスの『ドメイン駆動設計』日本語版から11年。後発の書籍も多数出版され、各カンファレンスでDDDについて話す人も増えてました。PHPerの中にも実際にDDDで開発する(?)・DDDを実践する(?)人や組織も増えてきたと思います。
約10年前、まだPHPerでDDDを学ぶ人が少なかった頃から、私はPHPメンターズの指導を受けてDDD本を読み、楽しみながら・苦しみながらDDDを意識して開発してきました。コードサンプルを交えながら、実際にやってきた中で学んだこと、世間のDDDに対する言説に対して思うことについてお話しします。

19
Regular Session (25mins)
Team & Communication

「アジャイルになっていく」を果たすためのリーダーシップとは

o0h_ きんじょうひでき

イントロ

リーダー未経験の私は、現職で働き始めてからの2年間で、初めてProject Leader→Tech Lead→Engineering Managerと任命されることになりました。
「影響力を発揮してね!」とか「リーダーシップを持ってね!」などと言われます。
・・が、一体どうしたら「それらをよく発揮してくれたね!!」と認められるようになるのでしょうか。
自分で道を切り拓いてこそリーダーだ!!という考え方も分かりますが…

マネジメント系のキャリアを目指す人、あるいは運命的にそれに任命された人、今の環境に何らかの物足りなさを感じる人、etc.。
私以外にも、色々なところに「じゃあリーダーシップって何?」に関心を持ったりモヤモヤしている人はいるかと思います。

概要

このセッションでは、
アジャイル(主にScrumやXP)ついて勉強したり、メンバーとの1on1で聞いた声や反響、認定アジャイルリーダーシップ研修Ⅰ(CAL-1)で学んだことを踏まえながら
「(プロダクトの開発組織における)リーダーシップってなんだろう、何を求められているんだろう?」についての自分なりの考えを共有していきます。
「リーダーシップについて駆け出した/駆け出そうとしている人」に向けてのヒントになればと思います。
それらのテーマに向き合うことで、日常の仕事の中においての「自分が何を目指すか」「チームの進化にどう繋ぎ込むか」を探っていきましょう。

想定する聞き手

  • Engineering ManagerやLead/Leaderとして駆け出した人
  • そうしたポジションをこれから目指したいと考えている人
  • 職場で「リーダーシップ」を求められるけど、それが言語化されていなくてモヤモヤする人

参考にする書籍の例(一部)

3
Regular Session (25mins)
Architecture

Naming of classes 〜クラスに名前をつけるのは難しい〜

77web 菱田 裕美

クラスに名前をつけるとき、どんな名前をつけていますか?どんな根拠で名前をつけていますか?
Webアプリケーションの寿命が長くなったとき、年月が経っても、メンバーが入れ替わっても、「このクラスはどんな働きをしているか」「この処理はどのクラスにあるか」を見つけやすい状態を保つためには、クラスの名付けはとても重要です。
より良いクラスの名付けをするために役立つ、原則と考え方をお話しします。

9
Lightning Talk (4mins)
Team & Communication

部内勉強会してますか?したくないですか?してみませんか?(わいわい)

asumikam asumikam

ここ5年ほど、自分の部署の勉強会を企画・運営してきました。
5年間同じスタイルで続けるのではなく、いろいろ変革してきました。
最初はスピーカー集めで大変だった勉強会、、ですが、
直近で開いた勉強会はめちゃくちゃスピーカーも集まって大成功を飾れました!

5年間やってきたことで

  • やって良かった取り組み
  • あまり良くなかった(効果がなかった)取り組み
  • やることこんな良いことがあるよ!

などなどを話していければと思います!是非に!

4
Regular Session (25mins)
PHP

PHP だけで SMTP サーバーを自作してみる

m3m0r7 めもり〜

Laravel sail を使っている方なら、一回は目にしたことがある Mailhog。他にも MailCatcher といったローカルでメール送信のテストをすることがあるのではないかと思います。
実際にこういった SMTP サーバーの役割を果たすものは使ったことがあるものの、どういう仕組みでメールのやり取りがなされているのか
興味がある方もいらっしゃるかと思います。
そこで、本トークでは SMTP サーバーとしてのプロトコルの解説から、PHP だけで SMTP サーバーを作るにはどうしたらよいのか、テクニックも含めて解説します。

12
Regular Session (25mins)
Team & Communication

エンジニア 1 人から、20 人規模の組織になるまでの PHP コードの変化と Developer Experience の変化

m3m0r7 めもり〜

ほぼエンジニアがいない状態からある程度の人数までスケールした組織で、コードの変化や Developer Experience がどのように
変化したのか、時系列で語られることはそうそう多くないです。採用から始まり、プロダクトを作っていく過程で、避けて通れないのが組織の成長です。
少ない人数では上手く機能していたのに、エンジニアが増えた途端、組織が機能しなくなったという話もよく耳にします。
そこで本トークでは、組織規模が大きくなるにつれて、実践した Developer Experience への取り組み、取り組んだ結果、どのように PHP で書かれたプロダクトに影響が及ぼされたのか、ノンフィクションでお話します。

7
Regular Session (25mins)
Hardware FFI

PHP で NFC リーダーを実装する

m3m0r7 めもり〜

Suica や PASMO をデバイスにタッチして値を取得する、そんな夢を PHP で叶えたいと思っていた PHPer も多いかと思います。
PHP7.4 から PHP FFI と呼ばれるものが導入され、その夢も今まで以上に叶えやすくなりました。Suica や PASMO は FeliCa と呼ばれる NFC の規格の 1 つです。実装方法は多岐に渡りますが、概ね libnfc と呼ばれるライブラリや libusb を使う方法などがあります。しかし、今までの PHP ではこのライブラリを呼び出すことさえ叶いませんでした。そこで、本セッションでは PHP7.4 から導入された PHP FFI を用いてどのように PHP で NFC リーダーを実装するのか、そして実際のデモを交えてトークできればと思います。

1
Regular Session (25mins)
PHP

PHP と QEMU を用いて OS を作って Hello World を出力するまで

m3m0r7 めもり〜

「PHP で OS 作れたりしないかな」と考えている方もいらっしゃるかと思います。
実は JavaScript であれば JSLinux という JavaScript で Linux を動かしているようなサービスもあります。
ただ、実態はどのように動いているのか、OS ってどのように実装すればいいかわからないと感じている方も多いかと思います。
そこで、本トークでは 「ゼロからの OS 自作入門」という書籍を元に、PHP と QEMU を用いて Hello World を出力する OS を実装する方法をトークします。

6
Regular Session (25mins)
Asynchronous

Fibers vs Swoole

m3m0r7 めもり〜

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

10
Regular Session (25mins)
PHP FFI

PHP FFI 入門

m3m0r7 めもり〜

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

7
Regular Session (25mins)
Laravel

Laravel のキュー処理を 4 倍早くするテクニック

m3m0r7 めもり〜

重たい処理をキューに任せることで、早めにレスポンスを返すことが可能です。しかし、Laravel 標準のキューサーバーの処理速度にはある一定の限界があります。
弊社では、1 回あたり数十秒かかるような処理をキューに任せているのですが、キューが積まれすぎて処理しきれず破棄されるといった事象が起こっていました。
Laravel には Laravel Horizon と呼ばれる並行並列でキューを処理ができるライブラリがあるのですが Redis のみのサポートで、弊社では Amazon SQS を使用しているため、導入には至りませんでした。そこで、Amazon SQS 向けに Laravel のキューサーバーを自前で実装し直し、処理速度を 4 倍に向上させました。
どのように処理速度を高めるのか、そのテクニックのご紹介と実際のプロダクションへの投入、得られたパフォーマンスなどを本トークでお話します。

11