現代のコンピュータはハードウェアから私たちプログラマが書くプログラムの動作までの間が多くのレイヤーに分けられて動作しています。
レイヤーは自分より下を抽象化し、下のレイヤーを詳しく理解しなくても多くの場合プログラマはプログラムを書けます。
一方、プログラムが期待した様に動作しない時には下のレイヤーの動作の理解が問題の解決の助けになることもあります。
このトークでは私たちが愛するPHPをスタート地点にして、「VMって何?」「 PHPやJavaとC言語の根本的な違い」など、コンピュータプログラムがどの様に動作するのかを解説します。
コンピュータのレイヤー構造を理解すると、いままでは見えていなかった角度からプログラミングを楽しめるようになります。
このトークを通じて、低レイヤーが好きになったり、いろいろなレイヤーで面白いことをしたりする方が増えることを期待しています!
私が初めて参加した技術カンファレンス、それが2015年、第1回PHPカンファレンス福岡でした。
初めて体験した技術カンファレンスはとても刺激的で楽しく、すっかり虜になってしまいました。
当時iOS関連開発にも関わっていた私はiOS関連開発にもこうしたイベントが欲しくなり、無いなら作るとiOSDC Japan を立ち上げました。
あれから10年、私の人生は大きく変わりました。ここ数年はカンファレンスを2つ主催し、各地のPHPカンファレンスへの遠征参加を楽しんでいます。
そのきっかけをくれたPHPカンファレンス福岡への感謝の気持ちを伝えるとともに、PHPカンファレンス福岡が今回いったんの最終回を迎えることでカンファレンスロスになりそうなみなさんに、各地で開催されているPHPカンファレンスの楽しみ方をお伝えします!
社会人1年目の自分は弱小エンジニアだったので、色々な勉強会に参加して、そこで会った人に誘われてカンファレンスに行ったのが全ての始まりでした。登壇者や他社の取り組みに触れることで、「自分もこうなりたい」と思う反面、一般的な潮流とのギャップを痛感する機会になりました。その後、カンファレンススタッフにも挑戦して、視野が大きく広がりました。結果的に、転職や技術的成長にもつながり、社内イベント登壇などの機会を得るようになりました。本セッションでは、私がどのように技術コミュニティと関わり、そこから得た経験が自分自身にどのような変化をもたらしたかを共有します。まだ経験の浅い方や、エンジニアとしての視野を広げたい方の参考になれば幸いです。
OJTプロジェクトでOpenAI APIをcurlで呼び出していたのですが、プロンプトやAPIクライアントの管理が煩雑になりました。
そんな時社内にてAWS Strands Agentsの話を聞き、LaravelにもAIを効率的に実装する方法があるはずだと調査したところ、LarAgentというフレームワークを見つけました。
LarAgentを使うことで、AIエージェントの定義と呼び出し部分を簡単に分離でき、実装ロジックが単純になりました。
また、artisanコマンドでエージェント生成ができ、#[Tool]属性を活用することで、エージェントのFunction Tools定義が簡単になり、従来のJSONによるAPI呼び出しから解放され、認知負荷を大幅削減できました。
LarAgentを使うことで、新卒の私でも簡単にAIエージェントをつくことができました!その体験を皆さんに共有します!
生成AIの登場で、エンジニアの学び方と働き方は大きく変わりました。
私は普段バックエンドを担当していますが、とあるプロジェクトでフロントエンド領域への挑戦が必要になりました
最初は「何がわからないのかすらわからない」状態でしたが、PRレビュー補助やコード理解のガイドとして生成AIを活用することで、実装と学習のサイクルを加速させられました。
その結果、当初目標の倍以上のフロントエンドに関わる改善を出せるまでに成長ができました。
この発表では実際に、バックエンドエンジニアが生成AIを活用して、フロントエンド領域へ挑戦した実体験を発表します。
「愚者は経験に学び、賢者は歴史に学ぶ」はドイツ帝国宰相ビスマルクの言葉として有名です。しかし、ソフトウェア界隈では、「とりあえずやってみよう」を標語に経験から学ぶことが奨励されています。 またスクラムもその理念の一つとして、経験主義を掲げています。 経験から学ぶことは本当に悪いことなのでしょうか。
本セッションではネットの記事や書籍、スライドや発表から学ぶことと、自分で経験することから学んだことを区別する考え方を紹介します。 そして経験主義の語源や哲学史上の意義を紹介し、誤解されがちな経験主義の本当の位置づけを見直します。
ChatGPTやClaude Codeなどの生成AIツールの登場によりコードの自動生成や設計補助を一瞬でこなせるようになり、開発のスピードはかつてないほど上がりました。
しかし、システムの価値を決める設計の心臓部である中核の業務領域のモデリングや設計判断は、いまだ人間の理解と経験が不可欠と考えています。
本セッションでは、『はじめてのドメイン駆動設計』で紹介されている「中核の業務領域」に焦点をあてドメインモデリングを行う方法、それ以外の領域で生成AIを活用する事例を発表します。
このセッションを通じて、AI時代でも揺るがない設計の軸と、生成AIを使った開発を上手く共存する方法を持ち帰っていただければ幸いです。
我々はソフトウェアエンジニアです。 ソフトウェアは時にシステムと呼ばれます。 しかし、そもそもシステムとは何でしょうか。
このセッションではシステムというものの定義をした上で、問題解決をする際に世界をその構造と振る舞いに着目してモデル化するシステム思考の考え方を紹介します。
システム思考は組織改善にも役立ちます。溜まってしまったエラーをどう解消していくのか、なぜフィードバックが重要なのか、部分ではなく全体に着目するためにはどうすればいいか。 システム思考を身に付けると自然と解決策が見えてきます。
キーワード
・システムの構成要素: ストックとインフロー・アウトフロー
・フィードバックの種類: 自己強化型フィードバック、バランス型フィードバック
アラン・ケイ博士が考案した最初のオブジェクト指向言語Smalltalkは、トリグヴェ・リーンスカウク氏が論文でMVCを提唱するきっかけとなり、あのKent BeckもTDDやXPの考案者として有名になる前はSmalltalkの開発者、SUnitの作者として名を馳せました。
Smalltalkを学んでみたいと思っても、学習環境はあまり整っていないように思います。 しかし我々の手元にはAIがあります。 私はAIの力を借りて、Smalltalk を(少し)学んだ結果、オブジェクト指向とWebのなかった時代のMVCの真髄に触れた気がしました。
このセッションでは、Smalltalkを通してメッセージ指向のオブジェクト言語、またMVCフレームワークではない真のMVCとは何かを紹介することで、現代に生きる我々が過去を学び、日々の開発に対して新しく視野が開かれていくという温故知新を目指します。
決済システムを長年運用してきた経験から得たTipsを語ります。
最大で1日約300億円の決済があるシステムを運用していました。
その決済負荷に対してどのような対応をしてきたかをお話しします。
ECのトレンドとして、以前はアリババのように1日単位でGMVを最大化していましたが、最近はユーザーの購買行動を分散させるために数日続けるキャンペーンが増えてきています。
システムを安定化させるためにはこのようにビジネス側の設計も必要になると思います。
現場で実際に効果があった施策を中心に以下についてお伝えします。
・データベース設計
・負荷テスト
・バッチ設計
教科書では学べない現場のTipsを決済・金融系のエンジニア向けにお届けします。
何かを志そうと思った時
「どうせ無理」
「そんなのできる訳がない」
と言われたり
「私にはどうせ無理か…」
と諦めてしまったりすることがあるかと思います。
システムエンジニアとして働く中でそんな”どうせ無理”に抗い、今では好きなことを仕事にすることができています。
どう抗い、どう好きなことを仕事にしてきたのかをご紹介します。
誰かが少しでも自分らしく生きるためのヒントになれば幸いです。
WebAssembly(Wasm)はブラウザ上で動かすだけでなく、複数の言語環境で動くユニバーサルバイナリとしても流行しつつあります。
もちろんPHPの中でもWasmを動かしたいところですが、PHPでWasmを動かすことはまだ敷居が高いようです。Wasmを動かす場合、基本的にはC製のWasmランタイムをPHP拡張としてネイティブコンパイルする必要があり、動かそうとして失敗した報告も多いです。
果たして、一体どうすればもっと簡単にPHPでWasmを動かせるのか…。
今回、筆者は考えました。自分にはWasmのVM自作経験がある。では、PHPでWasmのVMを自作し、その上で動かしてみるのはどうか?そうすれば、C言語不要でWasmの力を享受できるはず!
ということでこの発表は、PHPでWasmのVM(のPoC)を作り、動かしてみる…その無謀な挑戦の記録です。
皆さん、バイナリやバイトコードはお好きですか?
さて、Java、Python、Lua、Ruby他、モダンな言語は言語VMという機構を備えています。さらに、WebAssemblyのような、特定の言語に依存しないVMもあります。
そしてご多分に洩れずPHPにもVMがあります。とはいえ、PHPプログラマが直接VMのバイトコードを書くわけもなく、「OPcacheが使うなんか高速にするやつ」というふんわりした理解の方も多いのではないかと思います。
このトークではPHPのZend VMを通して、VMとはそもそも何か、なぜ必要か、VM実装の基本についてお話しします。以下のトピックの予定です。
・VMに関する基礎知識
・レジスタマシンとスタックマシン
・バイトコードの基本
・言語におけるVMの意義とメリット
・PHPのZend VMに触れてみよう
・Zend VM互換のVMを自作してみた(?)
皆さんのコードは捨てやすい設計になっていますでしょうか?
現在私がリードを勤めているチームでは派生元となったチームの思想を引き継ぎ、「捨てやすい設計」を意識して開発を行なっています
でも捨てやすいって一体どういうことなんでしょうか?
このトークでは実際の開発現場で我々が日々取り組んでいることをお話しするとともに、
失敗したことによって再認識した「捨てやすさ」について実例やコード例を元に紹介します
このトークを聞いて「10分以内に機能を消せる状態」を一緒に目指していきましょう!
みなさんはnikic/PHP-Parserをご存知でしょうか?
様々なライブラリの裏側で使われているPHP-Parserですが、実は皆さんにとっても身近な存在かもしれません
このトークではPHP-ParserやASTの概要について軽くお話しするとともに、
PHP-Parserを利用してASTの差分を取り、同じプログラムであることを保証することで軽微なリファクタリングを気軽に行う方法を紹介します
「レガシーな環境だし、テストもないからLinterをかけたいけどかけられない」
そんなお悩みを持っている方の一助になれば幸いです
ソフトウェア工学の70年の歴史において、我々は三つの主要なパラダイムを経験してきました。命令型(How)は実行の手順を、オブジェクト指向(Who)は実行の主体を、関数型(What)は計算の内容を問いました。本講演では、第四のパラダイムとして「存在論的プログラミング(Whether)」を提唱します。それは「存在するか否か」を問う、プログラミングの本質的な変革です。
時間と存在は分割できない – 存在論的プログラミングは「時間と存在の不可分性」を基礎とします。OOPが永遠の現在に囚われ真の自律性が保てなかった一方、このパラダイムにおいてはオブジェクトは時間の中で変態(メタモルフォーシス)し、その各瞬間において完全な自立存在として現れます。
70年間、我々は「より良い命令」を追求してきました。しかし、複雑性の増大、AIとの共生という時代の要請が、新しいパラダイムを必要としています。
自社プロダクトの保守運用では、ユーザーからのお問い合わせに対して技術調査を行う場面があります。プロダクトが大きくなるにつれて自分の知らない知識(コードベース)も増えて、技術調査が難航する場面もあります。
本トークでは、自分の知らない知識に対し、AIを活用した技術調査の方法についてお話します。特にドキュメントに対してはNotionAI、コードベースに対してはGitHub Copilotを使用した知見についてお話します。
話すこと
PHPの次期メジャーバージョンであるPHP 9.0に向けて、ライセンス変更の議論が進んでいることをご存知でしょうか?現在のPHP Licenseは、GNU General Public License(GPL)と互換性がなく、ソフトウェアの再配布時に制約が生じる状況になっています。将来、現在の独自ライセンスから、三条項BSDライセンスに移行されるかもしれません。
本トークは、OSSに関心のあるPHP開発者や、ライブラリ公開を検討しているエンジニアを主な対象としています。PHP Licenseの歴史や現在進行中の議論を紹介するとともに、OSSライセンスの基礎を初心者にも分かりやすく解説します。OSSライセンスの互換性にも触れながら、OSSにコントリビュートする場合や、自作ライブラリを公開する際に役立つ実践的な知識を紹介します。
GitHub Copilot Code ReviewでPHPのコードレビューをしてもらってます。
レビュアーにアサインするだけでコメントを付けてくれるので非常に便利です。
でも概要はあっさりしてますし、もっと多くの観点からレビューしてもらいたいです。
なので自分は、VSCodeのCopilot AgentにCustom Instructionsでレビュー観点を与えた上で、GitHubのMCPを通してブランチ差分のコードレビューをしてもらっています。
PRのレビュー依頼があればとりあえずCopilotに投げてます。
GitHub Copilot Code Reviewよりもう一歩進んだレビューが得られます。
このトークでは実際の業務で使用しているCustom Instructionsの具体的な設定内容と、
設定前後のレビュー品質の違いを実例でお見せします。
個人開発でWebアプリを作成するのにClaude Codeを使ってます。
AIにコーディングしてもらうと開発時間を圧倒的に短縮できるのが非常に良いです。
ただ保守のことも考えてコーディングをするとなると、個人のレビュー能力を超えた速度でコーディングしてもらうことは難しいです。
ちゃんと理解して、正しいコードかどうか判断した上で進める必要があるからです。
AIと壁打ちをしながら仕様を一つ一つ自分で決めていきます。
完璧を目指さない。まずはやってみるというマインドで試行錯誤を繰り返してきました。
本トークでは実際のWebアプリ開発を例にClaude Codeとの協働開発プロセスを解説します。
特に以下の点を具体的に説明します。
・PRDの作成
・コーディング
・画面・コードレビュー
明日からの個人開発で実践できる具体的なワークフローとコツをお持ち帰りいただけます。