レガシーをクリーンアーキ化するとき「バグを直さない」勇気が要る — characterizationテストと原典忠実移植新着!!
肥大化したコントローラを抱えた業務システムを、クリーンアーキテクチャ寄りの構成(Controller → UseCase → Repository)へ段階移植した経験を一般化してまとめます。核心は3つです。
マルチステージビルドでイメージサイズを半分にする
Docker イメージのサイズは、ビルド時間・デプロイ時間・レジストリ転送量・コンテナ起動、そして攻撃対象領域(アタックサーフェス)に直結します。ビルドに必要なツール(コンパイラ・devパッケージ・ソース一式)を最終イメージに残すと、実行に…
OpenAI API のプロンプトエンジニアリング基礎
LLM を使ったアプリケーションを作るとき、モデルの性能そのものより「どう指示するか」で結果が大きく変わります。同じ GPT モデルでも、プロンプトの設計次第で精度・安定性・コストがまるで違ってきます。
外部キーだらけの旧DBを新DBへ移行する — Seederの依存解決とDB定義書からのDDL自動生成
ある業務システムのリニューアル案件で、旧DBから新DBへデータを移し替える「シーディング(初期データ投入)基盤」をPHPで整備しました。設計の核は2つです。
外部キーと参照整合性の設計:入門から実務判断まで
リレーショナルデータベースでは、複数のテーブルが「参照」で結びついています。注文テーブルの userid はユーザーテーブルの誰かを指し、注文明細の orderid はどこかの注文を指します。この「指す・指される」の関係が壊れると、どのユー…
ESLint + Prettier の設定ベストプラクティス(React / TypeScript)
React プロジェクトで ESLint と Prettier を併用すると、「保存のたびに整形が競合して怒られる」「どちらが何を担当しているのか曖昧なまま設定ファイルが肥大化する」という問題が起きがちです。
「ガチャの確率」を実装したら、それは確率ではなく重み付けだった
あるアミューズメント系システムの案件で、いわゆる「ガチャ(抽選)」機能を実装する機会がありました。仕様書には当たり前のように 「確率」 という言葉が並んでいたのですが、要件を詰めていくうちに、運用側が本当に求めていたのは確率そのものではなく…
Claude Code の hooks で自動チェックを仕込む
Claude Code には、エージェントの動作の節目でユーザー定義のコマンドを実行する hooks という仕組みがあります。「ファイルを編集したら自動で整形する」「危険なコマンドを実行前にブロックする」といった処理を、プロンプトでのお願い…
DB設計の失敗パターンと改善事例 ― 現場でよく踏む地雷とその外し方
アプリケーションの寿命は、DB設計の質にかなり左右されます。コードはリファクタリングで直せますが、テーブル設計の失敗は本番データを抱えたまま直すことになるため、修正コストが桁違いに高くなります。
`` では 26:00 が入力できない — 深夜シフトの時間入力を select 化した話
飲食・バーなどの深夜業態向けにシフト管理システムを開発していたとき、「22:00〜翌02:00」のような日跨ぎの夜間シフトをパターン登録できないというバグに遭遇しました。


