CTOとして内製開発チームをゼロから立ち上げ、現在では社員・業務委託を含め約20名の規模にまで成長させてきました。このチーム拡大の過程では、採用難が叫ばれる時代の中、スキルやマインドを見極め、自社にフィットする人材を見つけることに真剣に向き合ってきました。
採用活動の中で理想の人材と巡り合えないことや、採用後に感じるミスマッチなどもあり、コーディング試験を導入しました。この取り組みによって、候補者の技術力や考え方をより深く理解し、チームに適した人材と出会う手ごたえを得ることができました。
同じように採用の課題に直面している方々にとって、実践的なヒントとなれば幸いです。
◆話すこと
・採用の課題感
・技術力を客観的に評価する必要性
・テスト内容
・どのようなポイントを評価したか
・採用プロセスにおける成果
「どこで何が起きているのか分からない」──複雑な処理が詰め込まれたコードを前に、そう感じたことはありませんか?
本セッションでは、そんな不透明なロジックを “出来事” を軸に整理し直す、イベント駆動アーキテクチャへの段階的な移行プロセスを紹介します。
「〇〇が起きた」というドメインイベントを導入し、処理を手続き型から宣言的なスタイルへと転換することで、コードの見通しや責務を明確にしていきます。
まずは同期イベントによる責務分離から始め、そこから非同期イベント処理へと進化させる3ステップを、PHPコードの実例とともに解説します。
さらに、非同期化に伴って生じる整合性の落とし穴についても、Transactional Outbox などの実装パターンを交えて紹介。
“出来事”を中心にコードを組み立てることで得られる、読みやすさと保守性を兼ね備えたアーキテクチャ設計のヒントをお届けします。
PHP では try-catch による例外処理が一般的ですが、「どこで例外を処理すべきか?」「本当にこの場面で例外を使うべきなのか?」と迷ったことはありませんか?
過剰なエラーハンドリングや、catch したけれど何もしていない“握りつぶし”が積み重なると、責任の所在が曖昧になり、コードの見通しや保守性にも悪影響を及ぼします。
こうした課題へのヒントとして、Rust などの言語で採用されている Result 型の考え方を、PHP に応用するアプローチがあります。
Result 型は、失敗を型として明示的に扱い、成功も失敗も返り値で表現する設計手法です。
本セッションでは、さらに一歩進んで、処理の流れを線路のように“合成”する「Railway Oriented Programming」の考え方を取り入れ、複雑な分岐処理をシンプルに記述する実践的な方法を紹介します!
Web を支える重要なプロトコルのひとつ、HTTP。言語やライブラリ、フレームワークの下に隠蔽され、通信プロトコルを直接意識する機会は少ないと思います。そこで、PHP のソケット API を使って HTTP を解する小さなサーバを実装し、HTTP の理解を目指しましょう。
実際に公開サーバ上で動く状態にしてデモを見せます
私のいるチームではスクラムを導入して2年ほど運用してきましたが、いろいろあってスクラムをやめてみることにしました。
そうしたらなぜか効率が上がり、ベロシティの数字ベースで1.5倍ほど成果を出せるようになりました。
このLTでは、なぜスクラムをはじめて、そしてやめたのか、なぜスクラムをやめると生産性が上がったのか、について分析しながら共有します。
■ 話すこと
私は京都のスタートアップで働くエンジニアです。
スタートアップでは、売上拡大のために新規顧客獲得が重要になりますが、既存の業務フローがある顧客にはそのままでは導入できないことも少なくありません。
個別のカスタマイズ要望は、プロダクト開発のヒントとなりうる反面、その後の開発に影響を与える要因にもなります。
このトークでは、以下のテーマを主に扱います。
このトークを通じて、プロダクトの今と将来を両立するための考え方の一例を提案したいと思います。
php-srcを知りたいときの教材として、てきめんさんの「var_dumpを写経する - php-srcを学ぶぞ -」は分かりやすいです。
https://techbookfest.org/product/5746408227340288?productVariantID=6343868242984960
このトークでは、実際に本に倣って進めていくところで詰まったポイントとその解消方法や、php8で写経をしてみるために必要な準備を解説します。
実際にextensionを含めてビルドして動くところまで到達することを目標にします。
2024年1月、「なぜキャッシュメモリは速いのか」が話題になりました。
この質問に答えるのはなかなか難しいのですが近年のコンピュータの高速化はすべてキャッシュによるものと言っても過言ではないぐらいキャッシュは重要な技術です。
このトークでは「なぜキャッシュメモリは速いのか」の説明から、なぜキャッシュが必須の存在なのか、そしてキャッシュが引き起こすCPUの脆弱性について初心者の方にもわかりやすくご説明します。
コンピュータアーキテクチャの勉強、というよりはキャッシュを取り巻くハートウォーミングストーリーを聴きに来るつもりでいらしてください。きっと「CPU脆弱性って言っても思ったより難しくないな」「おもしろいな」と思って頂けると思います。
2024年1月、「なぜキャッシュメモリは速いのか」が話題になりました。
この質問に答えるのはなかなか難しく、X(Twitter)ではいろいろな回答がされていました。この回答はさまざまな立場・理解からされていて、Xのタイムラインをご覧になっていた方はいまいちしっくりこなかったのではないでしょうか。
このトークでは「なぜキャッシュメモリは速いのか」に答えるのに必要な知識を、初心者の方にもわかりやすくご説明します。
キャッシュの使いこなしは現代コンピュータにおいて避けることはできず、キャッシュを制するもののみがコンピュータを高速に動作させられると言っても過言ではない状態です。キャッシュを理解し、キャッシュを楽しみましょう!
これまでダッシュボード向けのWebAPIをPHPで設計・実装してきました。その中で、どのような方式を採用するべきか、どこで迷い、何を試し、なぜその形になったのか──実際のプロダクション開発を通じて得た知見を紹介します。
RESTやGraphQL、BFFなど方式の選択はもちろん、データの整形、責務の分離、フロントエンド側との関わりなど、実装中に直面した「悩み」やその対応、やむなく方向転換をしたことにも触れながら、WebAPI設計の話しをします。
「こんなふうにもできそうだけどどうだろう?」という話しも少しします。
話すこと(変更の可能性あり)
・ ダッシュボード向けWebAPIをどう作ってきたのか
・ なぜそのように作ってきたのか
・ こんなところで迷った
・ こんな方法でも作れそうと考えている
Eloquentのdelete()で想定外の全削除が発生した実体験。
複合プライマリーキー対応の限界と、安全な設計方法について解説。
Symfony 6系以降で登場した一連のDIアトリビュートは、サービス定義ファイルへの依存を減らし、依存注入をコードの近くに集約することができます。
本セッションでは、さまざまなアトリビュートを利用したDIについて紹介し、実務に役立つTIPSをコード付きでご紹介します。これらを戦略的に使いこなすことで、責務分離、リファクタリング・テストの自由度が劇的に向上します。初めてSymfonyを触る方やまだ試したことのない方も、SymfonyのDIを“制御できる”実践的な20分をお届けします。
LaravelのFacadeは、簡潔な記述で機能を呼び出せる便利な仕組みですが、「静的でテストしづらい」「依存関係が見えづらい」といった理由から敬遠されることもあります。しかし、目的やスコープを明確にした上で戦略的に活用すれば、開発やリファクタリングの助けとなる強力なツールにもなります。本セッションでは、Facadeを使って開発やリファクタリングを効率的に進める手法を紹介します。日常の開発でのFacade活用について考えていきます。
「もっとアウトカムに向き合おう」
そんな声をよく耳にするようになりました。
ユーザーに届く価値、ビジネスインパクト、意味のある成果。どれも間違いなく大切です。
でも、ふと立ち止まって考えたとき、こんな問いが浮かびました。
「私たちは、そもそも安定してアウトプットできる状態にあるんだっけ?」と。
このセッションでは、アウトカムを意識する前に私たちがやってきた、チームの土台づくりについて紹介します。
アウトプットの可視化、専門領域を越えて協力し合えるチーム構造、Slackのハドルや朝会の工夫によるコミュニケーションの改善など、地味だけど確実に効いた取り組みを中心にお話しします。
派手な成果や成功事例ではありませんが、足元を固めることで初めてアウトカムに届くようになった、そんなリアルな試行錯誤を持ち帰ってもらえたら嬉しいです。
開発体験以外のAI活用ってどんなものがあるんだろう?
サービスや事業にも非常に強力な要素にもなるドメインイベントを活用することで、
様々なシーンでAI活用を推進することができます。
例えばAIを活用したデータ分析をはじめとしてマッチングやレコメンデーション、
AIエージェント開発やエージェンティックRAGの実践など、
これまでとは少しだけ違った形でたくさんの価値を生み出すことができます。
今回はそんなドメインイベントとAIが利用しやすい様々なコンテキスト表現方法と、それらを実現するためのシステムアーキテクチャに触れます。
これからのアプリケーションについてのヒントをお届けするとともに、
みなさんのサービスなどに実装するAI関連技術についてもお話しします。
「i18n」や「k8s」など、長い英単語を数字で省略する語をヌメロニム(数略語)と言います。
WEB 開発者であれば毎日のようにどこかで目にするこれらの言葉ですが、いつの間にか自分の知らないヌメロニムが当たり前のように使われていたり、その意味を理解したつもりが雰囲気だけで使っている……そんなことはありませんか?
この LT では我々PHP開発者の身の回りに溢れるヌメロニムをクイズ形式で出題しつつ、その意味をちょっとだけ深掘りしていきます。
あなたも今日からヌメロニムマスター!
本セッションでは、高負荷な処理を非同期処理として実装したいという実務的な動機を起点に、PHPの実体とその制御に取り組んだ経験を紹介します。
子プロセスの生成・監視・タイムアウト制御などを組み合わせたシンプルなバッチ処理管理システムを自作する中でプロセス制御について学ぶことはできましたが、しかし同時に「プロセスとはそもそも何か?」という疑問にも直面しました。
プロセス制御のコードは書けても、プロセスの実体や仕組みについては深く理解しているとは言えませんでした。
そこで、プロセスとは何か、どのようにOS上で扱われ、PHPからはどう見えているのか、そういった違う視点にも踏み込んで、プロセスについて深く掘り下げることにしました。
非同期処理やPHPでのプロセス制御に関心がある方、また普段は見えにくい「プロセスの中身」を学びたい方に向けたセッションです。
LaravelにはOctaneというLaravelアプリケーションを高速化するための拡張ライブラリが存在しており、
従来のPHP-FPMより大幅な性能向上を実現します。
本セッションではFrankenPHPのZTS(Zend Thread Safety)環境でのワーカープロセス管理、
octane:startコマンドの内部動作、Octane Tables/Cacheの実装制約などを紹介していきます。
またOctane導入前後でどれくらいのパフォーマンスの差が出てくるのかを検証します。
従来のPHP環境でリアルタイム通知を実装する場合、Node.js等を組み合わせた複雑なインフラ構成は悩みの種でした。
FrankenPHPではこの課題を解決するためにMercureが内蔵されており、PHPスタック内でシンプルかつ高速なリアルタイム通信を実現しています。
本セッションでは、実際に動作するアプリケーションの動作デモを交えながら、以下の技術的なポイントを紹介します。
フレームワークを作るためのフレームワークと言われ、実際にLaravelでもコアとして利用されているSymfony。
そのため、初心者向けの導入説明や上級者向けの抽象概念獲得のための解説などの知見を聞く機会が多くあります。
一方で、実用としてのSymfonyの知見を聞く機会があまりありません。
同様にPHP5.4で導入されたtrait(特性)の実用としての知見を聞く機会もあまりありません。
そこで、この登壇ではSymfony6.3および7.2において本番実証済みのtrait(特性)活用例をお話します。
このトークで得られる知見
このトークで扱わない内容
注意事項