かつて登壇者の懇親会で、「いまどきテスト書こうなんて当然の話をトークしてもねぇ」みたいな話が出たことがあって、確かに!と思ったものです。
しかし、今でもテストを書いていない現場の話は聞きますし、テスト書くの大変という話も聞きます。
そこで、テストを書く意義をあえてしっかり言語化しておくことで、あらゆるエンジニアがテストを空気のように書くのが当たり前にしたいと思います。
まず、テストがあることで、本当の意味で実装が完了するということを、持続的な開発と実装のゴールの証明という観点で意義付けします。
また、その中で「カバレッジにこだわる必要はない」というある種の勘違いについても言及しておきます。
さらには、テストを書くことが、本質的にはどれも同じであり、習得コストが低いながらも効果の高いものであることを話していき、みんなでテストを書いて、エンジニアの価値を上げていきたいと思います。
みなさんは開発の際に用語集をつかっていますか?
人によって指す言葉が異なり混乱した経験はありませんか?
そんな悩みを、情報設計とユビキタス言語の定義を行うことで解決してみましょう!
最近、私が所属するチームで新規機能開発をすることがありました。
その際に、情報設計を行いユビキタス言語の定義を、エンジニア、デザイナー、ディレクターのみんなでやってみました。
その結果とても良い効果が得られたので、是非多くの人にそのノウハウをシェアしたいと思います!
本トークでは、実際の新規機能の開発においておこなった、情報設計やユビキタス言語の定義のやり方や進め方、それがその後のアプリケーション開発にどのように寄与したかについて話します。
IDはある要素を一意に特定するものです。まさに識別子です。
みなさんはID(の生成方法)をどのように決めていますか?
WebアプリケーションにおいてはMySQLのAUTO_INCREMENT属性やPostgreSQLのSERIAL型といったデータベースの機能を使った採番結果をIDとする方法がよく知られています。しかし、時にはデータベースによる採番では機能要件を満たせないことがあります。
IDひとつをとっても要件があり設計があります。
最近、私は2つのIDを決める場にいました。
1つはプロダクト内で使うID、もう1つはOSSのツールの中で使うIDです。
どちらも数値の採番では要件を満たせないと判断し、改めてIDの生成方法の検討をしました。
本発表ではそれぞれの事例でどのような課題があり、解決したのかを紹介します。
IDというみなさんに馴染みのある要素で、設計の楽しさを感じてください。
2020年からモブワークという開発スタイルを継続して取り入れており、そこで感じたメリットについてお話をさせて頂きたいと思います。
またチームの熟練度の向上に伴い、モブワークの形態も進化させていった内容にも触れていきたいと思います。
実際にチームで実践していることや、それを支えているツールについても紹介したいと思います。
つい手続き型の複雑なコードになってしまい、読みづらい、メンテナンス性が低いという問題が起こったことはありませんか?
一方で、デザインパターンは知っていても、いくつかのデザインパターンはPHPでは使えないと思っていませんか?
例えば、オブザーバーパターンはJavaなどの常駐することができるプログラミング言語で使うものであって、PHPでは使えないという声を聞きます。
しかし、実際の世界と向き合って、複雑な問題を解決するプログラミングにデザインパターンは有効です。それがPHPであってもです。
弊社では運送・配送業向けのシステムを作っています。コードが複雑になるという問題を実際にデザインパターンで解決してきました。
このトークではオブザーバーパターンを例にとって、それがPHPでどのように実装できるかを実際のプロダクトにも使った実装方法を紹介しながら伝えていきたいと思います
PHP 8.1 で readonly property が登場したのも束の間、PHP 8.2 では遂に readonly class がサポートされるようになりました。
近年主立った言語でサポートされることが増えた「不変」であることが保証された変数やクラス。
PHP でもこれらの機能がサポートされたことで、中〜大規模なアプリケーションにおいてより堅牢なアプリケーション、つまりバグを生みにくく、保守しやすいコードを書くことができるようになりつつあります。
本トークでは readonly class を使う理由、そして実際に使って日々開発をする中で得たリアルな知見をお伝えしたいと思います。
「コンピュータは0と1しか処理できない」とよく言われています。
ビット演算があったり、浮動小数点演算があったり、文字コードが16進数だったりと、PHPerのみなさんもなんとなく実感としてはあると思いますが、なぜ「0と1しか処理できない」のでしょうか。
このトークではアナログの世界・電気回路でデジタルの世界・コンピュータ処理がどの様に表現されるのか、私たちがC言語やPHPで書いたプログラムの実行結果がディスプレイやスピーカーで認識できるところまでがどの様にできているかをお話します。
ふだんの活動ではあまり気にすることのないコンピュータの基本的な仕組みの話になりますが、このトークを聞いたみなさんが今までより少し解像度の上がった目でコンピュータを楽しめることを願っています。
現代のコンピュータはハードウェアから私たちプログラマが書くプログラムの動作までの間が多くのレイヤーに分けられて動作しています。
レイヤーは自分より下を抽象化し、下のレイヤーを詳しく理解しなくても多くの場合プログラマはプログラムを書けます。
一方、プログラムが期待した様に動作しない時には下のレイヤーの動作の理解が問題の解決の助けになることもあります。
このトークでは私たちが愛するPHPをスタート地点にして、「CPUによる"プログラム実行"」「 PHPやJavaとC言語の根本的な違い」など、コンピュータプログラムがどの様に動作するのかを解説します。
コンピュータのレイヤー構造を理解すると、いままでは見えていなかった角度からプログラミングを楽しめるようになります。
このトークを通じて、低レイヤーが好きになったり、いろいろなレイヤーで面白いことをしたりする方が増えることを期待しています!
私はこれまでビジネスロジックとドメインロジックをほぼ同じものとして捉え、ドメインモデルが業務知識を表現できるような実装を意識していましたが、開発を進めていく中でもっと良い構造があるのではないかと思うようになりました。
そして最近では、この2つのロジックを区別しドメインモデルからビジネスロジックを追い出すことでさらに良い構造を作ることができるのでは考えています。
このトークでは、以下のトピックに関する私の考えを共有することを目標とします
ChatGPTの登場以降、関心の高まっている大規模言語モデル。
機械学習に関するツールやライブラリがPythonに多いですが、PHPからそれらのモデルを駆動させる事もできます。
Pythonで注目の集まっているPHP LangChainのPHP実装、PHP LangChainを紹介します。
LangChainは個別のWeb APIやローカルで動作するモデルなどを抽象化した実装で扱う事ができます。
これにより復数のモデルを組み合わせたり、利用するモデルを切り替えられます。
可能な範囲でデモを交えて紹介し、利用したプログラムコードなどは公開する予定です。
予定する内容
・大規模言語モデル入門
・PHP LangChainとは
・PHPからOpenAIのモデルを利用する
・PHPからLLaMAのモデルを利用する
6月にGoogleが運営するドメイン登録サービス「Google Domains」の売却が発表されて話題になりましたが、一般的にドメインとはインターネット上のURLのことであるくらいの認識で、普段ドメインに関わる機会は少ないと思います。 しかしドメインとは2023年においてもインターネット上においてとても重要な要素です。 そこで普段ドメイン登録サービスの開発に携わる自分がドメインについての入門的な基礎知識から普段あまり知ることがないドメインの管理構造や公表されている管理ポリシーなどについて紹介し、みなさんにドメインについてより興味をもっていただきたい思います。
本トークでは以下についての発表を行います
私はこの1年ほど、趣味プロジェクトとして1980年代に栄華を誇った名作CPUである"Z80"のハードウェアエミュレータを開発しています。
これはZ80で動作しているコンピュータからZ80を取り外して、代わりに自作のハードウェアを取り付けて動作させるというもので、Raspberry Piをベースに開発しています。
PHP Conference Japan 2022では、実際にZ80として動くハードウェアエミュレータをご紹介しました。
このトークでは昨年の大きな課題だった動作速度を改善させるべく意を決して踏み込んだベアメタルプログラミングの世界について利点と欠点、それがもたらすパフォーマンスについてお話します。
CPUを作ってみたい方はもちろん、コンピュータの仕組みを理解したい方や、プログラムが実行された時にコンピュータの中で何が起きているのかを知りたい方などにもお楽しみ頂けると思います。
あなたは"良い"テストが書けていますか?
普段テストを書いている人でも、良いテストを意識して書くことは意外と難しいです。
高品質なアプリケーションを開発するためにテストは必要不可欠ですが、
品質の悪いテストが増加すると、かえって開発の足かせになりかねません。
本トークでは、15年以上の歴史を持ち、数万のテストを有するPHPアプリケーションの開発に参加して得た経験や反面教師をもとに、
持続可能で保守性の高いテストを書く方法について解説します。
PHP には古くから PHP Extension という機構が備わっており、ネイティブで高速な言語拡張を提供することが可能です。
普段からよく利用されているであろう APCu や PhpRedis なども PHP Extension という形で提供されています。
実は、 PHP Extension 取り巻く環境が以前と比べて変わりつつあるのはご存知でしょうか?
今回はそんな PHP Extension の今について発表させていただきます。
PHP を使っていて予期せぬクラッシュなどに遭遇したことはありませんか?
バグ報告するにもバックトレースやコアダンプをどうやって取れば良いか悩むことも多いかと思います。
今回は PHP 本体のデバッグ手法について説明し、最低限のバグ報告ができるようになるまでを説明させていただきます。
PHPStan や Psalm 等の静的解析が急速に普及する中、既存の大規模プロジェクトに対し持続可能な形で導入するためには考慮しなければならないことが数多く存在します。
PHPStan を導入した実例を元に、大規模なコードベースに対しどのようなアプローチで静的解析を導入していったかについて説明させていただきます。
みなさんDTO(Data Transfer Object)使ってますか?
実際使用すると、Getter/Setterや型変換など、コード量が肥大化してしまうケースもあるのではないでしょうか。
それらの課題を解消すべく、入出力や加工をシンプルにできるデータオブジェクトライブラリ「Laravel-data」を導入してみました。
本セッションでは、Laravel-dataの機能を活用した「気が利くDTO」の作り方をご紹介します。
Laravelのアップデートを、Laravel Shiftを使いながら行ってきました。
実際にどのようなことを行ってきたかをお話しできればと思います。
アップデートをいずれ行う予定の方や、Laravel Shiftの導入を検討している方に
経験したことをシェアすることで、何かしらの参考になればと思います。
弊社では数年間運用してきた業務システムをフルリプレイスしました。
既存のシステムでは、業務ロジックが分散されていたり、業務知識の属人化などによって、開発スピードが出せなくなってきていました。
この状況では、機能拡充のボトルネックになることが明らかだったため、今回のリプレイスでは、ドメイン駆動設計(DDD)やテスト駆動開発(TDD)、依存関係や責務を明確にしたレイヤードアーキテクチャなどを取り入れた、よりモダンな開発に挑戦しました。
本セッションでは、モダン開発への挑戦にあたり、具体的に実践したことや直面した課題、工夫したことなどを話したいと思います。
最近流行り?のエンジニアリングマネージャー。
ある日突然上司(非エンジニア)から会社初の技術職でのマネージャーをやってくれないかと打診があった私。
エンジニアリングマネージャーになって何したの〜から、上手くやれた話、上手くやれなかった話、めちゃ大変だった話をします。
エンジニアの少ない会社でエンジニアリングマネージャーになるのって何が大変?
実際にどんな仕事が増えたの?
なりたい人はどういうことやってくとよさそう?
みたいなことお話します!