#あすみかんの上にあすみかん

#たのしいことしかかかないことをここに決意します

WebアプリケーションにおけるPDOの使い方入門 をみたよ / asumikam #phpcon_odawara Advent Calendar

adventar.org

これは、asumikam #phpcon_odawara Advent Calendarの9日目の記事です🎄 本日は「WebアプリケーションにおけるPDOの使い方入門」の感想を書いていきます!

💡 トーク概要・動画 fortee.jp

📖 スライド speakerdeck.com

感想

PDO(PHP Data Objects)の基本的な概念やCRUD処理の話から始まり、中盤にはWebアプリケーションのPDOの話、最後は実際に利用しているTetoSQLに関する話、と幅広い話題に触れた面白い登壇になっていました。

生のPDOをいじる経験は新卒研修の時と...ISUCONの時くらいか...(?)、という感じで、大体はフレームワークにお任せしていることが多いので改めてきくPDOの話がおもしろかったです。 特に「PDOはDBの抽象化を行なっているわけではない」という説明の部分が上手で感心しました...! Laravelで使っているときは何のDBかを気にしなくてよいけど、PDOを使っていると利用するドライバによって中に入れるクエリも違うし、かえってくるオブジェクトも変わってきますね。 PDOの立ち位置が(普段直接使うこともないので)ぼんやりしていましたが、とてもうまい説明だな〜としっくりきた感じがしました。

中盤のWebアプリケーションのPDOの話は短いながらもガツンと言っていきたいことたちが詰まっていて満足感がすごかったです。 特に...やっぱり...「配列の可能性を収束させる」の章がすきですね......"可能性を収束させる"という表現のチョイスが巧いのもあるのですが、大旅している配列をずっっっっっとみてきたので、これは本当大事だよな〜と思います。

これ!この説明!!本当秀逸すぎる!!!! めちゃくちゃ解像度高い人からしたらキーやバリューが手に取るようにわかるが、そうでない人からしたら何が入ってるかわからないクソデカデータでしかないんだよな。どっちの状態も味わったことがあるからわかります。(解像度が上がっていって手に取るようにわかるようになった、という感じだが)

おれたちのバイブル(?)であるPHPの最高機能、配列を捨てよう!! / Throw away all PHP array now!!! - Speaker Deckを思い出さずにはいられませんね。

github.com

そして最後には、「表現力を上げる」ための手段として、実際に利用しているTetoSQLの紹介もしてくれました。 repoみにいったらめちゃくちゃ知ってるアイコンの人で椅子から転げ落ちました。

<?php

// こういうの、かくよね......
$placeholder = implode(',', array_fill(0, count($userIdList), '?'));
$stmt = $this->db->prepare("SELECT * FROM user_detail WHERE user_id IN {$placeholder}");
foreach ($userIdList as $index => $value) {
    $stmt->bindValue($index + 1, $value, PDO::PARAM_INT);
}

$stmt->execute();

▲ ISUCONで書く書く〜〜〜〜〜のアレです。ISUCONではプレースホルダのためのコードをたくさ〜〜〜ん書くわけなのですが...これをプロダクトコードで書いてると大変だよね...という。

▲ こんな使用感でかけるらしい!!めちゃくちゃ良いですね〜〜。知見が広がりました。

developers.prtimes.jp

▲ 誤った使い方をされないように「引数の数が正しくて」「文字列リテラルで」「シングルクオート or NowDoc構文である」というPHPStanのカスタムルールをちゃんと作っているらしいです。めちゃくちゃ良すぎる使い方だ..........。カスタムルールを業務に馴染ませてうまく作っている事例、あればあるほどうれしいのでたすかりますね。

meiheiさん、登壇ありがとうございました

meiheiさんの登壇、使っている語句や語彙が事象を的確に表している、かつ、meiheiさん独特の巧み(旨み)もあってめちゃくちゃ味あるなと思いました。説明もめちゃくちゃ上手・・・。 2025年もはTraitのことを発表してもらうことになったので、それもとても楽しみです。よろしくおねがいします!