一人のエンジニアとして、設計は私の生き甲斐の一つである。だが世の中が私の設計を求めているとは限らない。設計以外でコードを書く。
クラス設計を辞めてどうなるのか考えたことすらないくらい、具象と抽象のシャトルランを繰り返していた私が、今、クラス設計をしていない。
クラス設計を禁止しているわけではなく、自制している。そんな開発ライフの中で見えた新たな力の核心を、是非とも皆様にお伝えしたい。
日々の開発でサービスクラス作っていますか?あなたはなぜその処理を切り出してサービスクラスに実装したでしょうか?
n年前のある日、Fat Controllerバリバリでフレームワークを使いこなしている気分で生きていた自分がサービスクラスの使いどころに気づいた前後の思い出をふりかえることを通じて、「サービスクラスはどういうときに便利か?どういう処理をおいたら便利か?」を解き明かしていきます。
今年の3月に実施されたPHPerkaigi2024でコードゴルフ大会に参加し、とても楽しかったため、「自分の会社でも実施したい!」と思い立ち、実際に開催しました。結果は大成功で、とても楽しい時間を過ごせたので、その時の話をします。
コードゴルフの内容は、「FizzBuzz」問題や、1時間で解ける程度のの難易度のものを採用しました。言語はPHPを使用しました。
具体的には以下のような内容を話す予定です。
コードゴルフ大会を実施するにあたって、コードゴルフができるWEBアプリをどのように作成したか
コードゴルフ大会の雰囲気や参加者からの評判
•参加者たちの感想
コードゴルフ大会を定期的に開催していることでの社内への影響
コードゴルフ大会を開催した私自身の感想
PHP 8.x には、クラス設計に関わる重要な機能が多数導入されています。PHP 7.x の頃ではベストプラクティスと考えられていた設計でも、PHP 8.x の言語機能で代替できたり、改善できたりするものがあります。新しい言語機能を振り返りつつ、最新のクラス設計について考えていきましょう。
この発表は、主にアプリケーションコードを対象とします。ライブラリコードの設計も発表内で触れることはありますが、一部に限られます。また、フレームワークが提供する基底クラスを継承する場合など、クラス設計が大きく制限されるケースは対象としません。
PHP 5.4 から導入された Trait は、多重継承ができない PHP に、コードを再利用するための一つの手段として提供され続けて来ました。
しかし、実際にコードを再利用が求められる場面では DI を使用する方が適していたりするため、Trait を積極的に使う機会が少ないように感じています。
そこで OSS のコードや、実務のコードで使われていた Trait を参考に、2025 年に改めて Trait の使い方を学ぶお話しをします。
この世の中にはPHP拡張モジュールをインストールするコマンドとして、peclやdocker-php-ext-installなどがあります。
新しいPHP拡張モジュールインストール方法として、2024/11/19にPHP Installer for Extensions (以下PIE)のプレリリース版が公開されました。
https://thephp.foundation/blog/2024/11/19/pie-pre-release/
PIEは、PHP拡張モジュール用のComposerだと言われています。いったいどんな機能や仕組みなのでしょうか?
このセッションでは、PIEの機能や仕組みやについて具体的なコードを乗せながら解説します。
新しく追加されたPIEについて、一緒に学びましょう!
「”誤った使い方をすることが困難”な設計」とは
ような実装を目指す設計です。
このトークでは、「”誤った使い方をすることが困難”な設計」を実現する方法として
など、誰でも取り組めるテクニックを解説します。
難しいと感じやすいオブジェクト指向や設計の用語を極力避け、”気張らずに聞ける”トークを目指します。
対象者
「良いコード」は手を入れやすいもので、
そのためには「改修した時の影響が必要最低限に留まれるもの」が求められます。
日頃から「影響範囲」と口にしますが、
「影響する」あるいは「影響しない」とは、どのような事を意味するのでしょう?
プログラミングを取り巻くものは、コードはもちろん、
データベースや外部システムとの連携、クライアントとつなぐI/Fと多岐にわたります。
発生する影響と変更を類型化して、それが開発者に与えるものを考察します。
そして、開発者の経験則や直感に頼ることなく、誰でも「見える」ようにする方法がないか?を模索するトークです。
「ツイートの文字数は140文字まで」これはドメインロジックだと思いますか?
もしそうではなかったとしたら、この整合性は一体誰が関心を持つべきなのでしょうか?
このセッションでは、恣意性を軸にデータの強整合性をさらに2種類に分けて考えるアイデアを提案します。
そして、そのアイデアがなぜ変更に強いモデルに繋がるのか、私の考えをお話ししたいと思います。
このトークでお話しすること
CPUやプログラムの実行といったコンピュータの"低レイヤ"を知るためにCコンパイラを作成するのはとても良いアイデアです。
Rui Ueyamaさんの「低レイヤを知りたい人のためのCコンパイラ作成入門」はまさにそんな目的で書かれていて、手順どおりに進めていくだけで演算、変数、関数やポインタなど十分にそれっぽいCコンパイラを作れます。
ですが、このドキュメント、C(言語)でCコンパイラを作っていて、それ自体はごく普通のことですがPHPerにとっては若干ハードルが高いんですよね…。
OK。それならPHPでやってみましょう。
このトークではRui Ueyamaさんのドキュメントに従いながらPHPでCコンパイラを作る方法を解説します。
このトークを聞いた方がご自身でもPHPでCコンパイラを作成し、コンピュータの低レイヤを楽しめる様になることを願っています。
「この関数、どこで定義されているの?」と悩んだことはありませんか?
コードベースが大規模になるほど、適切な定義ジャンプ機能を活用することで、開発効率やコード理解度を大幅に向上させることができます。
本セッションでは、定義ジャンプ(Definition Jump)の基本概念から、具体的な実装方法(例: ctags, LSP)の設定手順や活用事例を実践的に解説します。
さらに、PHPのコードベースを定義ジャンプしやすくするための工夫やベストプラクティスについても紹介します。
タイムゾーンは、開発において日付や時刻を扱う際に不可欠な要素ですが、その仕組みや実装について深く考える機会は少ないですよね!本セッションは、各主要OS(Linux、Windows、macOS)がどのようにタイムゾーンを管理・参照するのか、内部構造や関連ファイルなどについて紐解きます。また、PHPがタイムゾーンを扱う際に参照する仕組み(設定など)についても触れ、タイムゾーンの基本概念から実践的なトラブルシューティング方法まで幅広くカバーします。さらに、タイムゾーンデータの更新(IANAタイムゾーンデータベースの利用やPHPのアップデートとの関係)についても取り上げ、国際化対応や開発の安定性向上に寄与する知識を提供します。タイムゾーンの奥地へ踏み込み、日常の開発をより強固に支える技術を一緒に探っていきましょう!
担当しているECサービスにおいて、TVで取り上げられるタイミングや、クーポン配布時に購入が集中すると負荷が高まり一部のメールで配信遅延が発生していました。
ECサービスにおいてメールの遅延はクリティカルなビジネスインパクトを与える為、解決は急務です。
本セッションでは「推測するな、計測せよ」の精神で、実際にNew RelicのAPMを活用し遅延の根本原因を特定し、効果的に解消した実例をお話しします。
このセッションでは以下のような話を紹介します。
New Relicを使った問題可視化と原因特定
New Relic APMの活用によるアプリケーションパフォーマンスの測定
SLI/SLOの設定を通じて指標を明確化し、改善目標を策定
改善ステップと実装詳細
効果測定とその後のまとめについて
昨今のWeb サービスにおいて、認証・認可は必要不可欠な要素といっても過言ではないでしょう。
認可の技術の一つに、 OAuth というものがあります。
使ったことはなくても、 OAuth という単語を一度は耳にしたことがある方は多いのではないでしょうか?
本トークでは、 OAuth に触れたことがない方を対象に、以下の内容についてお話しします。
前半では OAuth とは何かについて説明したあと、後半で PHP での実装例を交えながら OAuth の認可処理の流れを説明します。
本トークを通じて、 OAuth の基礎を学んでみませんか?
小田原で みんなで学ぼう OAuth
年月を経たレガシーなアプリケーションの検索処理は、肥大化したロジックによりパフォーマンスが劣化しがちです。実際に直面した検索遅延を、OpenSearchを活用して改善した実例をもとに、選定理由から実装の課題、実際の効果までをお話します。
PHP7.1といったメンテナンスされていない環境での導入事例になります
PHPUnit、毎日(?)使っていますよね。
直接コマンドを叩いたり、便利なツールを介して使っていたりするかもしれませんが、
その中身に目を向けたことはありますか?
そこで、LT中に PHPUnitを「小さく作ってみる」ことで、その仕組みをひも解きます。
最低限必要な機能は何か?「最小限のPHPUnit」を作って実際に動かしながらデモを行います。
そして、「最小」では対応できない部分がどのように設計されているのかについても触れます。
「作る」ことで中身を想像する足掛かりにしていただければ嬉しいです。
テストフレームワークの奥深さを一緒に覗いてみましょう!
PHPStormなどを使っているとつい存在を忘れがちな <?php タグ。タグの役割や、なぜ省略できないのか考えたことはありますか?本セッションでは、この小さな記述がPHPインタープリタの動作をどのように開始させるのかサクっと解説します。
クラウド時代のPHPベースなサービス運用において、コストを抑えながらパフォーマンスを最大化するためのリソース選定について、以下の観点で基本的な考え方をお伝えします。
• インスタンスタイプの選択:CPUアーキテクチャの移行
• メモリキャッシュの進化:ミドルウェアの選択
• ストレージ選定:より高速なディスクの利用
• I/O最適化:処理単位を「小さくする」
• 軽量化:コンテナ最適化を意識したOS選定とマルチステージビルド
• ルーティング:シンプルなネットワーク構成
依存の注入、していますか?
皆さん大好き(?)Laravelもアプリケーション本体はDIコンテナそのものです。
そんな黒魔術の塊のように思えるDIコンテナですが、実はPHPでは100行弱のコードで実装が可能です。
みなさんも「四角い車輪の再発明」をして黒魔術への理解を深めてみませんか?