プロジェクトが炎上してしまった…
納期に間に合わない…
あとから仕様の観点漏れに気がついた…
開発をしていればこういうことに直面することがあるかと思います。
どのような行い、マインドセットがプロジェクトに悪影響を及ぼすか、
過去に自分が経験したことを皆様に懺悔することで、
後学に活かせればよいと考えている次第です。
2024 年はどんな 1 年でしたか?
日本 PHP 界隈だと,各地で開かれた地域 PHP カンファレンスの印象が強いのではないでしょうか.
様々な背景の人たちが各地に足を運び,配信を見て,コンテンツを持ち寄り,運営をし......
それぞれの形で「貢献したい気持ち」を表現した 1 年でした.
2025 年もその勢いは変わらず,この名古屋開催につながっていると感じます.
多くの地域に PHP の名を冠した活動があれば,日常的に PHP に触らない人も PHP コミュニティに関わってきます.
かく言う私もその一人です.大前提として PHP は OSS であり PHP 自体の発展には PHP 自体の改善や利用拡大が不可欠です.
これらが主だと知りながら,その外から関わっています.
そんな私が PHP コミュニティに「貢献したい気持ち」を繋げるべく,どう考え,動いているかを話します.
あなたはPHPUnitを使っていますか?では、データプロバイダーは?
データプロバイダーは、1つのテストメソッドを引数を変えて実行する「パラメタライズドテスト」を実現する仕組みです。
PHPUnit 9までなら@dataProvider
、10以降なら#[DataProvider]
を使うことが多いですが、実はそれだけではないんです。
このトークでは、データプロバイダーを実現する複数の方法を紹介し、それらのメリット・デメリットを考えます。
お話しすること
想定する観客
#[DataProvider]
か@dataProvider
しか知らない人あなたはPHPUnitを使っていますか?では、データプロバイダーは?
データプロバイダーは、1つのテストメソッドを引数を変えて実行する「パラメタライズドテスト」を実現する仕組みです。
PHPUnit 10以降ではアトリビュートを使って実装しますが、そのときに使えるアトリビュートはなんと4種類もあります!
このLTでは、これら4つのアトリビュートを紹介するとともに、どう使い分ければいいのか考えていきます。
お話しすること
想定する観客
#[DataProvider]
か@dataProvider
しか知らない人35歳をとっくの昔に過ぎ去った私は、今も変わらずソフトウェアエンジニアとして働いています。
若いころに読み、影響を受けた「情熱プログラマー」の著者ようには、決してなれていませんが、そんな私の仕事への向き合い方を皆さんにシェアし、何か持ち帰っていただければ幸いです。
主な内容
「なんかこのページ、表示が遅く感じるなあ。速くしたいなあ。」
と感じた経験がある方は多いのではないでしょうか?
しかしながら、いわゆる「チューニング」は各分野の専門家の方が日夜研究しておられる分野です。
サービスの規模・構成等によって目標・対処方法も大きく異なり、
「これをやれば高速になるテク」
をそのまま適用して「おっしゃ解決!」というのは難しいことも多いかと思います。
インフラ・フロントエンド・バックエンドと(強引に)分野を区切ったとして
の判断も難しいかと思います。
このトークでは、昔ながらの構成のWebアプリケーションにおいて
私の実体験から、「表示速度改善取り組む前に知っておくと良さそうな話」をしたいと思います。
このトークが各分野の専門的な内容を学んでいく足がかりになればいいなと考えています。
みなさんはLaravel Sailを使っていますか?
Laravel Sailは2020年9月8日Laravel 8が登場したときに追加された、Docker環境を構築するための超便利パッケージです。
ですが、あまりにも多機能、というよりも全部モリモリセットになってしまっているため、開発用にしか使われていない方が多いのではないでしょうか?
そこで、ある程度実環境でも使えるように、Laravel Sailのデフォルト構成を、Dockerの理解を深めながら良い感じに改造するために、Laravel Sailを解剖していきたいと思います。
登壇をする内容の概要
プロダクト開発を成功させるには、重要な機能にリソースを集中させることが不可欠です。重要な機能にフォーカスすることで、最大の価値と競合差別化を生み出せます。
一方で、重要でない機能を含む全体的なリファクタリングや、コードベースの保守性向上だけでは、こうした成果は得られません。
この登壇では、重要な機能についての考え方とLaコストをかけない機能の実装方法も提示します。
話を聞いた人に持ちかえってほしいこと
聞いた人には、プロダクトの機能を再評価し、リソース配分の優先順位を考え直すきっかけにしてほしいです。また、その考え方をチームで共有し、ディスカッションを通じて話し合う機会を持っていただきたいです。
主な内容
プロダクトの価値を考える必要性
どのように優先することを決めるか
同様のタイトルの30分との違い
こちらでは実際のコード例を省きます
変更に強いユニットテストの設計と実装について、実践的なアプローチについてはなします。
多くの開発現場で課題となっているテストコードのメンテナンス性やどのようなテストを書いたほうがいいかを具体的に解説します。
同様のタイトルの15分版となります
話すトピックの数を減らしています
主なトピック:
ユニットテストの本質的な目的の再考
メンテナンス性を重視したテスト設計の考え方
具体的なテストコード作成の指針
クリーンアーキテクチャをベースにした開発においては、レイヤー構成やフレームワーク(FW)の利用方針をどのように棲み分けるか課題に感じる事があるかと思います。
FWの利便性を活かしつつも、ピュアな設計原則を守るためには、どこで柔軟に対応し、どこで堅実に守るかのバランスが求められます。
本セッションでは、私たちの実体験に基づき、具体的な構成やその判断基準をご紹介します。特にドメインモデルの保護を主眼に置き、FWの力を有効に活用しながらもクリーンアーキテクチャの原則に則った構成の実現方法と、現時点で私たちが感じている課題についてご紹介します。
私たちもまだ道半ばで伸びしろがあると思って居ますので是非、質疑応答やAsk The Speakerにて意見交換も出来ればと思います!
Laravelのoptional()関数を使ったことはあるでしょうか?
Nullである可能性のあるオブジェクトに対してoptional関数を用いることで、Nullでない時はオブジェクトの動きをさせ、Nullの時はnullを返させることができるようになります。
optional関数を使って実装していたある日、ふと「どのようにして動いているのか」が気になりました。
調べてみると、Null Objectパターンというものを使って実装されていることがわかりました。
このトークでは、簡単なNullオブジェクトを自作することで、optionalがどのように実現されているのかを見ていきます。
話すこと
みなさん、PHPのテストを書くときに「他のクラスや依存関係のせいでテストが難しいな…」と思ったことはありませんか?
そんなときに役立つのが、PHPのモックフレームワーク Mockery です!
Mockeryを使えば、依存するクラスやインターフェースの動作をモックして、テストをもっとシンプルに、効率的に進められます。このトークでは、Mockeryの基本的な使い方から実際の業務で役立つテストケースまで、具体例を交えて解説します。
取り上げる予定の内容はこちら!
例外処理って「エラーをキャッチするもの」と思いがちですよね?
でも、実はもっと重要な役割があります。例外を使うことで「自分のコードがどこまで責任を持つべきか」を明確にし、処理を他に委任することができるんです。
このセッションでは、例外を活用してエラーハンドリングを整理し、過度なキャッチによるコードの複雑化を防ぐ方法をお伝えします。
さらに、フレームワークが担うべき役割や、ビジネスロジックを表現するカスタム例外の作り方も紹介します。
ぜひチームでのディスカッションに活用してみてください!
話すこと
SOLID 原則は、ソフトウェア開発において高品質で保守性の高いコードを書くための重要なガイドラインですが、やたら難しい言葉が並んでいて理解が難しかったり、誤解に基づく解釈が広まってしまっている面があります。
本トークでは、SOLID 原則に含まれる5つの原則について PHP のサンプルコードを交えながら解説し、その活用方法についてお話しします。
ソフトウェア開発を行うエンジニアで「『技術的負債』という言葉を知らない」という方は今日においてほとんどいないと思います。その一方で「技術的負債とは何か」を正しく理解し、自信を持って説明できる人はあまり多くないように思います。その相手が非エンジニアであればなおさらです。
このトークを通じて、技術的負債についての理解を深めるお手伝いができればと思います。
フレームワークを用いないPHPでの開発をした経験はあるでしょうか?
現在では、Laravelなどの便利なフレームワークが多数あり、業務で使うPHPは専らフレームワーク上のもの、ということもあるかもしれません。
私は、非フレームワークなPHPを使って、リバーシや物理エンジンなどを作って遊んでいます。
フレームワークを使わないPHPでは、本で見た設計を柔軟に試せたり、必要なパッケージをミニマムな状態で試せたりなど、独特の学びがあります。
レールは自分で敷く、そんな開発を体験してみませんか?
私は業務でPHPに触れていますが、もともとはLispやRubyといった動的言語を好んで使っていました。
一方で私は近年はPHPStanといった静的型検査に力を入れていて、PHP界隈では型にこだわりがある人間のように振る舞っています。
プライベートではPHPStanにプルリクエストを送る一方、長年Emacs PHP Modeというソフトウェアのメイン開発者としてメンテナンスを続けています。
名古屋といえば関数型。なぜ私がまったく異なる特徴の複数のコミュニティで活動しているのか、プログラミング言語、関数型言語、型への想いを騙ります。
私は中学生のMSXというパソコンのCPUであるZ80のマシン語をプログラミング言語として体験していました。
25年後の2016年、PHPで書かれたゲームボーイエミュレータのコードを読んで衝撃を受けました。ゲームボーイのCPUはZ80をベースに開発されたものであり、エミュレータで実装されていたのはまさにそのZ80の命令だったのです。
その後、書籍「CPUの創りかた」で紹介されている4ビットCPU TD4を実装したり、Z80のハードウェアエミュレータを開発したりしています。
このトークでは私がこの数年で触れてきた4形態のCPUについて解説し、CPUの楽しさをみなさんにお伝えします。
どれも"CPU"ですが、それぞれ開発時に見える世界が全く異なっています。
このトークを通してみなさんがCPUの設計や動作に興味を持ち、いっしょにCPUについて語れることを楽しみにしています!
このセッションではPHPで作成したアプリケーションをVercelにデプロイする方法を紹介します。
Vercelは「Vercel のフロントエンド クラウドは、開発者にフレームワーク、ワークフロー、インフラストラクチャを提供し、より高速でパーソナライズされた Web を構築します。」(X:@vercelより引用)で、PHPのイメージはありませんが、PHPのアプリケーションをデプロイすることができます。
また、VercelにはVercel PostgresというPostgreSQL(データベース)を提供するサービスもあります。PHPとVercel Postgresを用いてアプリケーションを作成し、Vercelで公開することができます。
このセッションでは、VerceでPHPを用いたアプロケーションを公開する方法とVercel Postgreの紹介をします。
「コンピュータは0と1しか処理できない」とよく言われています。
ビット演算があったり、浮動小数点演算があったり、文字コードが16進数だったりと、PHPerのみなさんもなんとなく実感としてはあると思いますが、なぜ「0と1しか処理できない」のでしょうか。
このトークではアナログの世界・電気回路でデジタルの世界・コンピュータ処理がどの様に表現されるのか、私たちがC言語やPHPで書いたプログラムの実行結果がディスプレイやスピーカーで認識できるところまでがどの様にできているかをお話します。
ふだんの活動ではあまり気にすることのないコンピュータの基本的な仕組みの話になりますが、このトークを聞いたみなさんが今までより少し解像度の上がった目でコンピュータを楽しめることを願っています。