Categories
2026
【実験】甘いシェリー樽ウイスキーに「スモークリキッド」を垂らしたら、アイラモルトになるのか?

Issueに仕込まれた一文で、AIが社員の勤務表を公開した。非公開と外への書き込みを揃えない【プロンプトインジェクション対策】

AIに別ブランチで作業させたのに、コミット前の変更が消えた。フォルダごと分ける【git worktree】

AIのレビューを2回通ったのに、ログインボーナスが二重に配られた。書いた理由を渡さずに頼む【敵対的レビュー】

公式ドキュメントを渡したのに、AIが存在しない関数を書いた。インストール済みの依存から資料を作る【最新ドキュメントを渡す】

AIがテストの答えを書き換え、全部通ったまま請求が倍に。差分で見つける【テスト先行と改変の検知】

AIに続けて7件直させたら、5件目の修正が戻った。会話を区切って引き継ぐ【1タスク1セッション】

確認を全部許可にしたら、AIが検証環境のデータを消した。読む確認だけ残す【許可リスト】

指示書に規則を足すほどAIが守らなくなった。消していい規則を確かめる【指示書の刈り込み】

指示書の規則をAIが10回目に破り、本番が落ちた。書き込む直前に止める【hooks】

キャンセルされた注文が工場への指示に残り、要らない部品を300個作った。AIに先に質問させて仕様書を書く【仕様インタビュー】

表示の修正を頼んだらAIが決済コードまで書き換えた。計画にないファイルで止める【探索→計画→実装】

AIの『完了しました』を信じたら中身は空だった。証拠で検収する【完了の証拠】

コードファルコナー シリーズ目次【困りごとから探す案内板】

単体テストは全部緑なのに締め処理が壊れる。1か所のテストで全体を守る【Pinch Point】

差し替えた部品が月末だけ落ちる。Perl でインタフェースを書き、can で確かめる【Extract Interface】

数百行の関数の「途中だけ」をテストしたい。関数をクラスへ移して段ごとに割る【Break Out Method Object】

関数名を揃えたらモックが効かなくなった。テストは緑のまま本物が動く罠【Introduce Instance Delegator】

コンストラクタが本番の帳簿ファイルを開いてしまうクラスを、テストできる形にする【Parameterize Constructor】

テストのたびに外部 API を叩いてしまうコードを、サブクラスで差し替える【Extract and Override Call】

呼び出し元を1行も変えずに、全箇所へログを仕込む【Wrap Method】

テストで組み立てられないクラスへの機能追加は、新しいクラスを別に起こす【Sprout Class】

巨大な既存関数に書き足さない。新メソッドを生やして呼び出し1行だけ足す【Sprout Method】

コードを書き換えずにテスト用の差し替え口を見つける。Perl の local で関数を一時置換【Seam】

この変更はどこまで響く?全部テストする前に影響範囲を図で絞る【Effect Sketch】

テストの無い古いコード、直す前に「今の挙動」をテストに書き写す【Characterization Test】

コードカーペンター シリーズ目次【困りごとから探す案内板】

モデルの提供終了が来たのに、毎日の問い合わせは止められない。新旧を並走させて移る【Parallel Run】

引き継ぎ書を作ろうとして、現行のプロンプトがどれか分からない。版と持ち主を決める【Prompt Registry】

3か月前のAIの判定根拠を監査で訊かれ、同じ答えを再現できない。道筋を残す【Audit Trail】

エラーは出ないのに、AIの見逃しが1件見つかった。判定の割合を測り続けて劣化に気づく【Drift Watch】

住所欄だけ直したら、商品コードと数量まで崩れた。新旧を同じ入力に通して比べる【Differential Testing】

プロンプトの新旧どちらが良いか、二週間決まらない。同じ代表例を同じ基準で測る【Eval Harness】

処理量が3倍なら費用も3倍。全件を最上位モデルに通すのをやめ、確信度で振り分ける【Model Cascade】

セール初日だけ費用が跳ねた。同時に届いた同じ質問を、AIへの1回の問い合わせに束ねる【Request Coalescing】

AIの従量課金が予告なく尽き、要約が4日止まった。消費を計って警告と上限で止める【Budget Guard】

形式チェックは通るのに、社内限定の符丁が顧客へのメールに混ざった。送る前に検める【Output Guardrail】

要約が空欄のまま「処理済み」で流れていた。成功に見える失敗を例外に変える【Exception Translation】

LLMの返答が毎回違い、「これは障害か」に答えられない。揺れてよい範囲を先に決める【Output Contract】

コードディスパッチャー シリーズ目次【困りごとから探す案内板】

Vec と HashMap、持ち方が違うたびにループを書き直す。巡回を切り離す【Iterator】

3つの処理の正しい呼び出し順を、書いた人しか知らない。順番ごと窓口に閉じ込める【Facade】

コピペした手順の順番が入れ替わり、古い値で判定していた。骨格を1か所に固定する【Template Method】

通知先を1つ増やすたび、検知コードに呼び出しを書き足している。通知を登録制にする【Observer】

「元に戻す」を推定値の逆操作で書いたら、元の値に戻らない。変更前の状態を保存する【Memento】

bool 3つで「休眠中なのに開花中」が記録される。状態を enum 1つにする【State】

単体と集まりで関数が別々で、中間の単位を足せない。同じトレイトで再帰的に扱う【Composite】

新しい品種を1つ登録したら、別の品種の表示が壊れた。生成を品種ごとに分ける【Factory Method】

「実行」と「記録」が別の関数で、片方の呼び忘れが防げない。Drop で必ず記録させる【RAII】

品種を足すたび match が伸び続ける。判定を品種ごとの実装に任せる【Strategy】

機能を1つ足すたび構造体が倍に増える。組み合わせを外から包んで作る【Decorator】

同じ型の引数を並べ替えてもコンパイルが通り、値が入れ違う。名前を付けて渡す【Builder】

コードガーデナー シリーズ目次【困りごとから探す案内板】

箱の中に箱がある船倉の重さを、型判定の再帰で数え落とす。単品も集合も同じ口で答えさせる【Composite】

座標も燃料も生の Float で持ち回り、単位や座標系の取り違えが静かに通る。値を不変の小さなクラスでくるむ【Value Object】

欠測センサーの nil チェックが6か所に並び、1か所忘れると NoMethodError になる。「何もしない」実装で分岐を消す【Null Object】

手順書は「点検を1回呼ぶ」の1行なのに、コードは11手続きが7か所に散らばる。段取りを1つの窓口に集める【Facade】

操作を打ち間違えても、実行済みの操作を戻す手段がコードにない。動作をオブジェクトにして、戻し方も持たせる【Command】

状態を文字列と巨大な case 文で回し、許されない遷移を通してしまう。状態をクラスにして、書けない場所を作る【State】

保冷・防振・保険の組み合わせごとにクラスを作り、掛け算で増えていく。オプションを1枚ずつ重ねる【Decorator】

港ごとに通信規格が違い、増えるたびに交信コード本体の case 分岐を開く。違いを通訳に押し込む【Adapter】

プローブの型を足すたび、散らばった case 文を全部直す羽目になる。生成の窓口を1つにまとめる【Factory Method】

通知先をセンサーが直接呼んでいて、新設の区画にだけ警報が届かない。購読の名簿に一斉通知する【Observer】

港ごとにコピペした手順に、規約改定の修正が行き渡らない。共通の骨格を親クラスに一本化する【Template Method】

新しい方針を足すたび、if/elsif が膨らんで既存の航路計算まで壊れる。方針ごとに部品へ分けて差し替える【Strategy】

コードナビゲーター シリーズ目次

覚えた備えを全部足したら、かえって動かなくなった。必要な3つだけを選んで短く収める【KISS Principle】

自己評価の終了判定をキーワード一致にしたら、描き直しが終わらない。型で判定し、回数でも止める【Reflection Loop】

人の確認待ちで input() がイベントループごと止める。一時停止と再開を分けて持つ【Human-in-the-Loop】

2つのエージェントが内部状態を直接読み書きして、譲り合ったまま止まる。共有の進行表で協調させる【Blackboard Pattern】

失敗のたびに同じ指示で再試行して、レート制限を食い潰す。エラーの種類で仕分けて1回だけ言い直す【Self-Correction Loop】

会話履歴を足し続けたら、最初の命令を忘れて止まった。直近・要約・ピン留めの3層で覚える【Sliding Window Memory】

過去ログを全部詰め込むと、肝心の今が埋もれる。関連する記憶だけを検索して渡す【RAG】

ツールが百近くになり、説明を全部渡して動きが鈍る。問い合わせごとに必要な道具だけを選ぶ【Dynamic Tool Selection】

終了条件を LLM 任せにしたら、同じ所を回り続けて止まらない。回数の上限と状態で止める【ReAct Loop】

1つのエージェントに予約・観光案内・クレームを任せたら、役割が混ざって黙り込む。最初の一手で振り分ける【Router】

必要のない場面でまでツールを呼んでしまう。スキーマで道具を渡して、呼ぶ判断を制御する【Function Calling】

LLM の余計なお喋りで、正規表現のパースが崩れる。出力の型を先に決めて受け取る【Structured Outputs】

コードパペッティア シリーズ目次

覚えた設計を全部使いたくなる。必要な部品だけを選んで短く収める【KISS】

神クラスを手順で分けたら、かえって絡まった。責務で分けて窓口1つで隠す【Facade】

まだ誰も頼んでいない拡張の仕組みを盛りたくなる。重複だけを Template Method で畳む【YAGNI】

操作が直接データを書き換えるだけで、元に戻せず試せない。操作をオブジェクトにして undo/redo する【Command】

作り変えられない外部の形式を、共通の形で扱いたい。間に変換役を挟む【Adapter】

却下したはずの許可証が、承認済みと表示される。ありえない状態を型で作れなくする【State】

通知先を足すたびに、在庫処理の本体を開いて書き換えている。知らせる側と受ける側を切り離す【Observer】

トッピングの組み合わせごとにクラスが倍々に増える。包んで重ねる部品にする【Decorator】

通知の種類を足すたびに、全部の窓口へ同じ振り分けを書き足す。生成を1か所に集める【Factory Method】

コピーした座標を動かすと元まで動いて、触っていない所に誤配する。書き換えられない値にして防ぐ【不変オブジェクト】

棚にない本を検索すると処理が止まる。「空かもしれない」を型で表して受け止める【Null安全】

割引を1つ足すたびに、別の客の割引まで狂う。算法を差し替え可能な部品に切り出す【Strategy】

コードウィザード シリーズ目次

終了シグナルを受けて即座に落とすと、処理中のリクエストと接続を取り残す。新規を止めて、処理中を待ってから閉じる【Graceful Shutdown】

重い処理が接続を使い切り、大事な処理が動けなくなる。機能ごとに使える枠を分けておく【Bulkhead】

落ちた外部サービスを待ち続けて、無関係な機能まで巻き込んで止まる。失敗が続いたら呼ぶのをやめる【Circuit Breaker】

通知を取りこぼした画面だけ、古い状態のまま戻らない。push と定期取得を併用して必ず追いつかせる【Eventual Consistency】

同時に更新した片方が、気づかないうちに消えている。バージョンを持たせて衝突した方にやり直させる【Optimistic Locking】

boolean フラグを足すたびに、ありえない状態が増えていく。状態を1つの型にまとめて書けなくする【State Machine】

上限は守っているのに、切り替わりの一瞬だけ2倍通ってしまう。窓で区切らず溜まる速さで制限する【Token Bucket】

2つの処理が互いのロックを待ち合って、永久に止まる。ロックを取る順番を全体で1つに揃える【Deadlock】

並列数を上げたら、かえって全体が落ちた。同時に動く数を上限で絞って待たせる【Semaphore】

障害のたびにリトライを連発し、かえって復旧を遅らせる。待ち時間を倍々に伸ばして散らす【Exponential Backoff】

消したはずの検索が裏で動き続け、リソースを握ったまま離さない。キャンセルを最後まで伝える【AbortController】

ボタンを連打すると、同じ処理が二重に走って二重送信になる。await をまたぐ前に実行中フラグを立てて締め出す【Race Condition】

コードテイマー シリーズ目次

キャンセル機能を足したら、確認メールが2通届いた。部品同士の直結をやめ仲介役に集める【Mediator】

リクエストID の形式を変えるのに、30ファイルを直す羽目になった。横断処理を1か所に集める【Middleware】

共通関数にしても、HTTPの外から呼べない。ハンドラーに作り付けた処理を切り出す【Command】

同じ直しが、3本目のバッチにだけ当たらなかった。丸写しの骨格を1本にまとめる【Template Method】

1年前に保管した証跡が、監査の朝に開かなかった。暗号化や圧縮を1枚ずつ重ねる【Decorator】

通知を1本足しただけで、ポイント付与が止まった。反応を直書きせず「起きた」と知らせる【Observer】

支援者IDが、そのまま寄付額として処理された。意味の違う値を別の型にする【Value Object】

キャンセルしたはずの注文が発送された。状態の判断を状態自身に持たせる【State】

テストが1行も書けない。部品を内部で作るのをやめ、外から受け取る【Dependency Injection】

コンパイルもCIも緑なのに、本番だけ停止した。位置渡しをやめ名前で設定を渡す【Functional Options】

決済方法を足したら、料金計算が本番で止まった。分岐を差し替え可能にする【Strategy】

通知の改善を入れたら、課金まで壊れた。巨大な1クラスを責務ごとに切り出す【God Object】

コードメカニック シリーズ目次【困りごとから探す案内板】

正規表現で場当たりに解析していたスクリプトに、条件を足すたび限界が来る。文法を構文木にする【Interpreter】

新しい操作を足すたびに、型判定の分岐が呼び出し側に増える。操作を訪問者にして追加する【Visitor】

配列がむき出しで、構造が変わるたびに呼び出し側の走査を書き直すことになる。走査を専用の部品に任せる【Iterator】

カプセル化を壊さずに、状態を退避して後で戻したい。中身を覗かせない保管箱を作る【Memento】

モジュール同士が直接呼び合って、依存が網の目になる。やり取りを仲介役に集める【Mediator】

権限チェックを全部抱え込んだゲートが、条件を足すたびに膨らむ。審査を順に回す仕組みにする【Chain of Responsibility】

崩落の検知に、ブザーと扉と照明を直接呼んでいる。変化を知らせるだけにして連動させる【Observer】

状態を確かめる if-else が、メソッドごとに泥沼になる。状態ごとの部品に振る舞いを持たせる【State】

レバーが機器を直接呼ぶ作りで、操作の履歴も取り消しもできない。操作をオブジェクトにする【Command】

罠が増えるたびに defend メソッドを開いて書き換える。防御の方法を部品にして差し替える【Strategy】

解除コードを10個コピペして、手順の修正が全部に及ぶ。共通の流れを親にまとめる【Template Method】

数千体のゴーレムが同じデータを抱えてメモリが尽きる。共通部分を1つにまとめて共有する【Flyweight】

遠くて危険なデータ源へ、アクセス制限と取得の手間を呼び出し側に背負わせたくない。代理役を立てる【Proxy】

バルブ、ダクト、点火を決まった順に呼ばないと爆発する。起動手順を窓口1つにまとめる【Facade】

暗視も熱感知も付けたいのに、継承では組み合わせごとにクラスが要る。重ね着で機能を足す【Decorator】

部品か集合体かを型で見分けて、再帰で電源を入れる。同じ扱いにそろえる【Composite】

継承とロールを合わせたら同名メソッドが衝突し、初期化順序が崩れて暴走した。操作と対象を分けて組む【Bridge】

メソッド名もデータの形も違う古い端末を、今のスキャナーから読みたい。変換役を挟む【Adapter】

undef チェックを1か所書き忘れて落ちる。「何もしない」オブジェクトで分岐ごと消す【Null Object】

複製したはずのオブジェクトが、片方を変えるともう片方も壊れる。浅いコピーを避けて複製する【Prototype】

引数が散らばって未完成のオブジェクトが出回る。組み立てを専用の部品に任せる【Builder】

砂漠用の防護服に氷雪用の動力炉が組み合わさる。一式をまとめて作って防ぐ【Abstract Factory】

環境が増えるたびに膨らむ if/elsif。道具の選択と生成を分けて直す【Factory Method】

認証済みのはずなのにゲートが開かない。クラスが同じでも別のインスタンスを見ていた【Singleton】

遺跡のコードを直しながら、GoFデザインパターンをたどる冒険【目次】

レシピ指示を足すたびに文字列解析の if/elsif が伸びる。文法をオブジェクトの式ツリーにする【Interpreter】

Singleton のせいでテストが書けず、並列実行で状態が汚れる。グローバルな依存を DI に置き換える【Singleton】

大量の注文データでメモリが膨らみ OOM になる。共通のメニュー情報を共有して減らす【Flyweight】

同じ設定のオブジェクトを毎回 new で作って、初期化コストが重い。出来上がったものを clone して増やす【Prototype】

新しい操作を足すたびに全部の食材クラスを改修している。操作を別クラスに出して巡回させる【Visitor】

メニューを足すたびにクラスファイルが倍々に増える。調理法と食材の2軸に分けて組み合わせる【Bridge】

staging を足したら Mailer の分岐を書き漏らし、アラートが届かなかった。環境ごとの部品を一式で差し替える【Abstract Factory】

変更前の状態を呼び出し側が手でコピーしていて、項目追加でコピー漏れ。スナップショットは本人に切り出させる【Memento】

ステーション3つが互いを直接持ち合い、1つ足すたびに全クラスを直す。仲介役だけを知る形にする【Mediator】

undef チェックが3つの関数に散らばり、書き忘れで実行時エラー。「何もしない」オブジェクトで置き換える【Null Object】

権限チェックとキャッシュが3つの呼び出し元に散らばり、書き忘れでセキュリティバグ。同じ窓口を持つ代理に任せる【Proxy】

店舗ごとに承認フローの関数をコピーして、閾値の変更が反映されない。限度額を持つ担当をつなぐ【Chain of Responsibility】

注文履歴の中身を配列からファイルに変えたら、使うコードが全部壊れた。1件ずつ渡す窓口を作る【Iterator】

弁当注文のルーティングが2か所に重複し、検証の書き忘れでバグが出た。振り分けを詰め役にまとめる【Builder】

注文ハンドラが厨房の段取りを全部知っていて、厨房の変更が波及する。窓口を1つ挟む【Facade】

注文と取り消しが手続きで散らばり、やり直しも履歴も持てない。操作を部品にして undo を持たせる【Command】

コースの中にコースが入ると料金計算が崩れる。単品もセットも同じ顔で扱って合計する【Composite】

外部モジュールの内部仕様に頼るコードが3サービスに散って、仕様変更で修正漏れ。変換役を1か所に置く【Adapter】

トッピングを足すたびに cost と describe の2か所を直す。包んで機能を重ねる【Decorator】

通知の生成コードが複数サービスに散らばって修正漏れ。new する判断を窓口に集める【Factory Method】

日報生成クラス3種が同じ手順をコピペ、直すと修正漏れが出る。共通の流れを親クラスにまとめる【Template Method】

注文ステータスが変わるたびに全ステーションへ手で通知している。登録した相手へ自動で伝える【Observer】

空席のはずの席が「会計待ち」になる。bool フラグの組み合わせをやめて状態を部品にする【State】

割引の if/elsif が膨らんで、触るのが怖い。割引ごとの部品に分けて差し替える【Strategy】

コードシェフの仕込み帳 シリーズ目次【困りごとから探す案内板】

あらゆる処理を1つのクラスが抱え込み、直すたびに全体が揺れる。責務ごとに分けて委譲する【God Class】

消費税率を直すだけで15ファイルを開く羽目になった。税率を1つのクラスに集める【Shotgun Surgery】

実装が1つしかない抽象クラスと、一度も使わないオプションが残っている。将来のための設計を消す【Speculative Generality】

テストのたびにモックを登録してリセットする。ServiceLocator をやめ、依存をコンストラクタで受け取る【Service Locator】

注文から顧客、住所、都市名まで -> でたどる。Customer を直したら周りも全部壊れる【Law of Demeter】

init() を先に呼ぶ手順を飛ばされて、本番が落ちた。呼ぶ順番をコードの型で縛る【Temporal Coupling】

メールアドレス欄に電話番号が入り、金額は文字列のまま足されて桁がずれる。値を専用の型にする【Primitive Obsession】

OrderManager を通す決まりで、メソッドが全部ただの転送になった。間の一段を外して直接呼ぶ【Middle Man】

継承した save と delete を die で潰し、update は空にした。継承をやめて必要な性質だけ受け取る【Refused Bequest】

前任者の3年前のコードが怖くて消せない。呼び出し元を確かめて、段階的に削除する【Dead Code】

レポート生成メソッドが $order-> だらけで、Order の変更のたびに壊れる。処理をデータのある側へ移す【Feature Envy】

if 文に 36 と 72 と 3600 が並び、書いた先輩はもういない。裸の数値に名前を付ける【Magic Numbers】

コードバーテンダー シリーズ目次【困りごとから探す案内板】

Web向けAPIをモバイルでも使い、重いうえに足りない。窓口を端末ごとに分ける【Backends for Frontends】

バックエンドのURLが3か月で6回変わり、フロントを毎回直す。窓口を1つにする【API Gateway】

一斉切り替えの演習で、未実装のキャンセルまで新系へ送られた。機能ごとに移す【Strangler Fig】

外部APIの値が1つ増えるだけで、社内のPRが7本立つ。外の言葉を境界で訳す【Anti-Corruption Layer】

キューの処理を4台に増やしたら、同じ出荷が二重に予約された。重複を1回に抑える【Competing Consumers】

処理できないメッセージが戻り続け、メールの送信キューが7時間止まった。隔離する【Dead Letter Queue】

/healthは緑なのに画面が500を返した。生存と準備完了を分けて答える【Health Check】

起動時に全件を先読みし、起動に42秒、メモリは1.3GB超。必要になってから読む【Lazy Loading】

リクエストごとにDB接続を作って捨て、p99が350msに。接続を使い回す【Object Pool】

月末のバッチがDB接続を使い切り、サイト全体が30分止まった。区画を分けて守る【Bulkhead】

通常の10倍のリクエストが来て、注文APIが止まった。受け付ける量に上限を付ける【Rate Limiting】

フォールバックが同じDBを叩き、30秒のはずの停止が30分に。別の経路を用意する【Fallback Pattern】

CBもリトライも正常なのに、在庫APIの遅延で注文が30分止まった。上限を決める【Timeout】

10秒の障害が、全台の一斉リトライで60秒の停止に。待ち時間をずらして防ぐ【Retry Pattern】

決済APIの障害でリトライを増やすほど、停止が長引いた。呼び出しを遮断する【Circuit Breaker】

請求サービスが落ちるたびに注文確定が止まる。直接呼ばずに掲示板に貼る【Publish-Subscribe】

DBに書けたのに通知が消え、在庫だけ確保された注文が残る。送る内容もDBに書く【Outbox】

決済のタイムアウトで在庫と配送も止まり、300件を手で戻した。手順ごとに取り消す【Saga】

帳票の種類と出力形式の組み合わせで、CSVだけ分岐を書き忘れた。漏れを型で防ぐ【Double Dispatch】

500行のメソッドは1行直すと無関係な所が壊れ、テストも書けない。段に分ける【Pipeline】

請求金額が1円ずれ、ドル建てに円の手数料が足された。金額と通貨を一緒に持つ【Money Pattern】

渡した料金設定を別チームが書き換え、誤請求が出た。書き換えられない形にする【Immutable Object】

同じ住所なのに等しくない、同じ物件なのに更新後は別物。比べ方を2つに分ける【Entity vs Value Object】

顧客マスタを1つにしたら、営業のメール変更で配送通知の宛先まで変わった。境界を引く【Bounded Context】

ポイント加算を足したら、在庫引き当てが二重に走った。起きたことを通知で伝える【Domain Event】

月末のたびに注文の合計金額と明細が合わず、SQLで手直しする。注文を門番にする【Aggregate】

ルール文字列をevalで実行、括弧の閉じ忘れで3時間の本番停止。文法を組み立てる【Interpreter】

Webhookを足したらSlack通知が壊れた。チャネルを差し込み式に分ける【Plugin】

商品カテゴリが増えるたびにサブクラスを足し、次は20個追加。種類をデータで表す【Type Object】

閾値を変えたら12か所のifのうち3か所を直し漏れた。条件を1つの部品にまとめる【Specification】

プラグインを1つ足すたびにコンストラクタとテストを全部直す。棚に登録する形にする【Registry】

ローカルでは通るテストが、CIでは全部赤。クラスの中のnewを外から渡す【Dependency Injection】

テストコードは触っていないのに、夜間テストが毎日数件ずつ赤くなる。依存を明示する【Service Locator】

initとconfigureの後でないとstartが動かない。半端な状態を作らせない【Builder】

'actve'、1文字のタイポで深夜に2時間。文字列と数値に名前と型を付ける【Magic Numbers / Strings】

「消すと壊れるかも」で残したコードが積もり、誰も触れない。根拠を持って消す【Dead Code / Lava Flow】

継承したのに使えないメソッドをdieで潰している。継承をやめて必要な能力だけ持つ【Refused Bequest】

メソッドチェーンを委譲で潰したら、転送するだけのクラスができた。仲介役を外す【Middle Man】

住所のカラム名を変えたら、触っていない配送料と税の計算が落ちた。鎖を断つ【Law of Demeter】

機能を足すたび無関係なテストが壊れる。他クラスのデータを触るメソッドを持ち主へ【Feature Envy】

注文はあるのに在庫が減っていない。毎週手で直す不整合を、変更を一括で確定して防ぐ【Unit of Work】

受注チェックを直すと集計テストが落ち、集計を直すと受注が落ちる。読み書きを分ける【CQRS】

監査で30日前の在庫を聞かれても、上書きした在庫数からは出せない。出来事を残す【Event Sourcing】

definedを1か所書き忘れ、深夜3時に通知が落ちた。何もしない実装を置く【Null Object】

DBが要るテストに30分、CIが毎回タイムアウトする。データアクセスを分ける【Repository】

種別を足して分岐を1か所書き忘れ、未受講の200名に修了証が出た。漏れを防ぐ【Visitor】

ツリーの構造を変えたら、15部署のスクリプトが全滅した。たどり方だけを公開する【Iterator】

条項の削除を戻せず、免責条項の抜けた契約書が締結された。操作前の状態を残す【Memento】

10万件の商品をメモリに載せたら2.4GBで落ちた。共通データを共有して減らす【Flyweight】

コピペで作った提案書に、請求書の消費税欄が出た。文書の種類と出力形式を分ける【Bridge】

砂漠にクラーケン、海底にサボテン。地形と生物の組み合わせが混ざる。セットで作る【Abstract Factory】

5つのモジュールが互いを直接呼び、どこを触っても他が壊れる。仲介役に集める【Mediator】

サブタスクを入れたら、階層が深いと進捗率の計算がバグる。個と集まりを同じに扱う【Composite】

通知のサブクラスが30個超、SMSを足せばまた増える。機能を重ね着で組み合わせる【Decorator】

帳票に項目を1つ足したら、17種類の出力が次々に壊れた。原型を複製して作る【Prototype】

引数12個のコンストラクタで1個ずれ、10万円の本番事故。名前を付けて組み立てる【Builder】

新旧システムでメソッド名もデータの形も違い、if分岐が溜まる。変換役を挟む【Adapter】

ステータスを1つ足したら、無関係な出荷処理でバグが続発。状態ごとにクラスを分ける【State】

通知手段を足すたびに、決済ロジックの中のnewを書き換える。生成を工場に移す【Factory Method】

他チームのクラスの内部を直接読み、キー名の変更でAPIが全滅。代理人越しに触る【Proxy】

トークンの期限を変えただけで、全APIが認証エラーで落ちた。チェックを鎖に分ける【Chain of Responsibility】

IQテストをやってみたら最後に課金された話
失敗してDBは戻せても、決済APIの課金は取り消せない。操作に取り消しを持たせる【Command】

1クラスが全サブシステムを直接呼び、仕様変更1つでエラーが連鎖。窓口を立てる【Facade】

引数10個の関数が5階層、IDの順番を取り違えた。引数を1つにまとめる【Parameter Object】

夜間バッチを並列にしたら、テストの処理が本番DBを書き換えた。接続を外から渡す【Singleton/DI】

割引ルールを足すたび数千行のServiceを直す。計算をデータの側へ戻す【Tell, Don't Ask】

JSONで年齢が文字列になり、電話番号の先頭の0が消える。値を専用のクラスで包む【Value Object】

0〜3の数字で持つ注文状態、発送済みにキャンセルが通った。状態をクラスにする【State】

ポイント付与の機能を継承で組み合わせたら、機能3つで8クラス。外から重ねて足す【Decorator】

在庫更新を1か所直すと、メール通知やダッシュボードが止まる。通知で受け手を分ける【Observer】

CSV出力のバグを直すと、コピペした隣にも同じ修正が要る。手順を親にまとめる【Template Method】

形式を足すたび5000行のif-elsifに書き足す。形式ごとのクラスに分ける【Strategy】

コード探偵ロックの事件簿 連載目次【困りごとから探す案内板】

困ったコードを直しながら、GoFデザインパターン23種を全部たどる【目次】

evalでルールを動かしたら監査でコードインジェクション判定。文法をオブジェクトで組む【Interpreter】

種類を1つ足すと、ref()の分岐を全関数に書き足す羽目に。操作を外に出す【Visitor】

設定を上書きして、うまくいった時の値に戻せない。時点ごとに保存して戻す【Memento】

LLMを「待機」させる:自律型エージェントSTELLA誕生の裏側と、僕がAIのモックになった日

機能を1つ足すだけで全モジュールを修正する。やり取りを仲介役に集める【Mediator】

フラグの組み合わせで、ありえない状態に入り込む。状態ごとにクラスを分ける【State】

アラートを1つ足すたびに別のアラートが誤爆する。判定を担当ごとの鎖に分ける【Chain of Responsibility】

デプロイが途中で失敗すると手で戻すしかない。操作ごとに取り消しを持たせる【Command】

APIの全件取得でメモリが尽きてOOM Killerに落とされる。1件ずつ取り出す【Iterator】

更新を見張るポーリングが相手のサーバーを落としかける。変化を通知で受け取る【Observer】

フッター1つ直すのに10ファイル、コピーした所で事故。共通の流れを親にまとめる【Template Method】

予想ロジックを1つ足したら、別のロジックの的中率が70%→23%に。独立させる【Strategy】

クエリ1本は速いのにDBのCPUが張り付く。重複した取得を代理役でまとめる【Proxy】

注文のたびに同じメニュー情報を丸ごと複製、金曜の夜に固まる。共有して減らす【Flyweight】

サブレシピを入れたら材料の集計が壊れた。入れ子のツリーを同じ操作で扱う【Composite】

機能追加のたびに200行の承認フローを書き換える。機能を外から重ねて足す【Decorator】

部署×出力形式でif分岐が掛け算で増える。2つの軸を分けて組み合わせる【Bridge】

スマートホームの機器を順番どおり呼ばないと誤作動する。手順を窓口1つにまとめる【Facade】

20年物のレガシーをJSONで呼びたい、でも中身は1行も触れない。変換役を挟む【Adapter】

項目を1つ足すだけで17か所の手直し、漏れた所が壊れる。原型を複製して作る【Prototype】

テストデータのコピペで修正漏れ、テストは通るのに本番で落ちる。差分だけ指定して防ぐ【Builder】

出力形式を1つ足したら既存のPDFとHTMLまで崩れた。部品をセットで生成する【Abstract Factory】

連携先を1つ足すと別の連携が壊れる。生成を1か所に集めて切り離す【Factory Method】

設定読み込みが毎回走ってバッチと値がずれる。インスタンスを1つにまとめる【Singleton】

Perlで作る正規表現リファインリー(Interpreter × Visitor × Composite)

Perlで作るウイスキーテイスティングカード生成器(Abstract Factory × Flyweight × Prototype)

PerlとMooでウイスキーのテイスティングノート自動生成システムを作ってみよう

Perlで作るタイムトラベル冒険ゲーム - 3つのデザインパターンで学ぶ実践的設計

Perlで作るウイスキーテイスティング・ノート〜3つの「間に入る」パターンで設計を手で覚える

PerlとMooで秘密のメッセンジャーを作ろう 〜Observer・Decorator・Commandパターンで暗号通信ツールを構築

Perlで作るASCIIアート・フォントレンダラー(Singleton × Flyweight × Proxy)

PerlとMooでWebページ変更ハンターを作ろう

Perlで作るダンジョンマスター〜3つのデザインパターンで生成・実行・調整を手で覚える

Perlで執事Bot〜4つのデザインパターンで作るコマンド帝国

一歩先のオブジェクト指向:PerlでOOPとFPを融合した「ハイブリッド設計」のすすめ

PerlとMooでPixelアートエディタを作ろう - Memento+Commandパターンで無限Undo/Redo
【目次】PerlでSlackボット指令センターを作る(全9回)

指令センターが形になった。3つのパターンの役割分担を振り返り、ChatOps で次に伸ばす先を考える

コマンドが die したり、権限のないユーザーが叩いたりしたら。エラー処理と権限を Mediator に集める

Mediator・Command・Observer をつなぐと、どう動くのか。指令センターを組み上げて動かす

実行結果を Slack 返信・監査ログ・メトリクスに流したい。通知を Observer に任せる【Observer】

コマンドの振り分けや権限チェックが本体に散らばる。仲介役を Mediator に一元化する【Mediator】

コマンドごとの if を片付けたい。コマンドを Command オブジェクトにして追加しやすくする【Command】

コマンドを足すたびに if が伸びていく。ログ・SQL・ユーザー管理を足して破綻を確かめる

Slack から /deploy や /restart を実行したい。まず正規表現で振り分けて動かす

Slack のメッセージを Perl で受け取って返信したい。Webhook サーバーと署名検証から始める

【目次】PerlとMooでテキストRPG戦闘エンジンを作ろう(全10回)

なぜこの4つのパターンで足りたのか。RPG の戦闘を題材に、組み合わせ方の理由を振り返る

勇者を自分の手で動かしたい。コマンド入力で敵と戦う対話型バトルに仕上げる

Command・State・Strategy・Observer を同時に使うと、どう噛み合うのか。協調の流れを追う

HP が減ったら画面に出したい、勝ったら報酬を渡したい。通知を Observer で任せる【Observer】

敵がいつも攻撃するだけで単調。攻撃的・防御的・ランダムなAIを Strategy で切り替える【Strategy】

戦闘の開始・プレイヤーの番・敵の番・終了の流れが散らかる。フェーズを State で管理する【State】

行動の if/elsif を片付けたい。行動を Command オブジェクトにして選ぶ処理から切り離す【Command】

行動の選択を if/elsif で書いたら、魔法とアイテムを足すたびに増えて手に負えない

攻撃のほかに防御やアイテムも使いたい。行動を1つずつクラスに分ける

Perl と Moo でターン制 RPG の戦闘を作りたい。まず勇者とスライムが殴り合う最小版を動かす

【目次】Perl API統合パターン(全8回)

天気 API 連携の完成版を読み返す。使っていたのは Adapter と Facade、それと SOLID の関係

全部の API が失敗したら呼び出し側は undef だらけになる。Try::Tiny と【Null Object】で止まらない設計にする

同じ都市の天気を何度も API に問い合わせている。Cache::LRU と TTL で呼び出しを減らす

API が落ちても天気を返したい。複数の Adapter をまとめて窓口を1つにする【Facade】

Adapter で揃えたのに、呼び出し側のコードがまだ長い。何が残っているのかを整理する

API ごとに返す形が違って呼び出し側が分岐する。共通の窓口に揃える【Adapter】

2つ目の天気 API を足したら if 文だらけになった。何が破綻するのかを確かめる

Perl で外部の天気 API を呼びたい。HTTP::Tiny と JSON::PP で最初の1本を動かす

【目次】Perlで作るファイルバックアップツール(全8回)

このバックアップツールのどこが変わりやすく、どこが変わらないのか。設計を振り返る

夜間バッチで失敗に気づけるようにしたい。ログと例外処理を足す

tar.gz にまとめたい。Engine を触らず圧縮の戦略を足す

Template Method と Strategy は、どちらがループを持つべきか。2つを組み合わせる

バックアップ方式を切り替えたい。フルと差分と増分を Strategy で差し替える

バックアップの if 文が増えてきた。Template Method で処理の骨格を切り出す

毎回全ファイルをコピーして遅い。更新時刻の比較で差分だけ処理する

Perl でバックアップツールを自作したい。再帰コピーで動く最小版を作る

【目次】Perl/Mooでテキスト処理パイプライン(全6回)

フィルターを足すたびに本体を直したくない。プラグインで外から読み込む【OCP】

アクセスログから Top 10 の URL を出したい。作ったフィルターを組み合わせる【Perl】

パイプラインの最後に行数と統計を出したい。集約処理のフィルターを足す【Moo】

フィルターを逆順に作る手間をなくしたい。メソッドチェーンで組み立てるビルダー【Moo】

ソートと重複排除を足したいが、既存のフィルターは触りたくない。基底クラスで重ねる【Decorator】

cat | grep を Perl で再現したい。正規表現フィルターを連鎖できる形で作る【Moo】

【目次】PerlとMooで航空管制シミュレーターを作ろう(全8回)

ここまで作ってきた設計の名前は Mediator パターンだった。管制塔の役割を整理する

燃料切れの機体まで順番待ちさせてしまう。緊急機をキューの先頭に回す

滑走路が空くのを待つ機体が取り残される。着陸待ちキューで先着順に処理する

滑走路を使えるのは同時に1機だけ。使用中かの管理を Runway クラスに分ける

機体の種類が増えても管制塔のコードは変えない。Moo::Role で共通の約束を決める

航空機が互いを知らなくても安全に着陸できる。管制塔クラスに調整を任せる

2機が同時に着陸したら衝突する。機体同士で直接調整させると参照が増え続ける

航空管制シミュレーターの最初の一歩。便名を持って離着陸する Aircraft クラスを作る【Moo】

【目次】PerlとMooでダイス言語を作ってみよう(全8回)

ここまで作ってきた設計の名前は Interpreter パターンだった【Moo】

文字列 2d6+3 から式ツリーを自動で組み立てる。パーサーを作って完成させる【Perl】

引き算と掛け算を足したい。既存クラスは1行も直さない【Moo】

式クラスに eval を書き忘れても気づけない。Moo::Role で約束を強制する【Moo】

足し算を AddExpr クラスにする。左辺と右辺を再帰で評価する【Moo】

数値とダイスをオブジェクトにして、eval メソッドで評価させる【Moo】

2d6+3 に対応したら if/else の嵐になる。複雑さの正体を整理する【Perl】

2d6 を解釈して振りたい。まず最小の Dice クラスを作る【Moo】

【目次】PerlとMooでドキュメント変換ツールを作ってみよう(全8回)

ここまで作ってきた設計の名前は【Visitor パターン】だった

単語数カウントとリンク抽出も同じ仕組みで足す。変換以外の操作を増やす【Visitor】

出力形式を足すのに、既存コードは1行も直さない【OCP】

Converter に残った if/else をなくす。要素が自分で変換先を選ぶ【Double Dispatch】

if/else だらけの変換処理を Converter クラスに切り出す【Moo】

HTML変換を足したら if/else が要素の数だけ伸びる。限界を体験する【Perl】

見出しもコードブロックも区別できない。継承で要素の種類を分ける【Moo】

Markdownを読み込んで変換したい。まず段落をオブジェクトにする【Moo】

ダンジョン生成に迷路やテーマを足すとクラスが掛け算で増える。PerlとMooのBridgeで直す全7回【目次】

Bridge はどんなときに使うか。Adapter・Strategy との違いと、連載の振り返り

新しい生成アルゴリズム(BSP)も1クラスで足せる。テーマ4種×3通りの12組み合わせを動かす

新しいテーマの水中神殿は1クラスを足すだけ。既存コードを書き換えずに増やす【Bridge】

アルゴリズムとテーマを別々に持たせ、掛け算で増えるクラスを足し算にする【Bridge】

テーマを1つ足すたびに、アルゴリズムの数だけクラスが要る。継承で作ると6クラスから12クラスに増える

迷路型の生成を足したら、クラスの中身が前回の丸写しになった。再帰的バックトラック法で作る

ダンジョンを二次元配列で持ち、ASCII art で描く。ランダムに床を掘る最初の一歩(Perl・Moo)

国別の注文フローで決済・配送・通知の組み合わせが狂う。PerlとMooのAbstract Factoryで組み直す全8回【目次】

返品処理を足すと全 Factory の改修が必要になる。Abstract Factory の使いどころ

EU 市場を足すのに、既存コードを1行も変えずに済ませる【Abstract Factory】

注文処理クラスが具体的な Factory を知らずに済むようにする【DI】

国内用と海外用の Factory を並べて、市場ごとに丸ごと切り替える【Abstract Factory】

決済・配送・通知の組み合わせミスを、セットで生成して防ぐ【Abstract Factory】

国内の注文に海外の決済が混ざり、手数料が狂う。組み合わせミスを再現する

海外対応を足すと if/else が増えて、注文処理が読めなくなる

国内向けの注文フローを、決済・配送・通知の3クラスで作る(Perl・Moo)

【目次】PerlとMooで弾幕シューティングを作ってみよう(全6回)

作ってきた弾幕エンジンはFlyweightパターンだった。共有するPrototypeとの違いも整理する【Flyweight】

弾の生成・移動・描画をBattleFieldにまとめて、放射状と螺旋の弾幕を出す【統合】

共有した弾の種類は自分の位置を知らない。描画のたびに座標を渡して弾を動かす【外部状態】

同じ種類の弾を2回 new してしまう。なければ作って返すキャッシュで使い回す【オブジェクトプール】

同じ見た目の弾が100発とも形や色を持っている。種類と位置に分けて共有する【内部状態と外部状態】

弾を1000発撃ちたい。素朴に全属性を持たせると1発約600バイト、1万発で約6MBになる【メモリ計測】

見出しの階層をif/elseで組むと分岐が爆発する。PerlとMooのCompositeで目次ツリーを組み直す全8回【目次】

リンク付きの目次を、既存のクラスに触れずに足す。見出しからアンカーIDを作る【開放閉鎖原則】

同じツリーからMarkdown・HTML・JSONの目次を出す。入れ子のHTMLも再帰で正しく閉じる【複数フォーマット出力】

見出しの配列から親子のツリーを自動で組む。H2を飛ばしたH3も複数のH1もスタック1本で扱う【スタック】

子を持つ見出しも持たない見出しも、同じrenderで描く。分岐を書かずに階層を出す【Composite】

見出しがH1からH3に飛ぶと、ulが2重に開いて目次のHTMLが壊れる。分岐で塞ぐと増え続ける【条件分岐の爆発】

インデントを足せば目次らしく見える。でも配列には親子関係がなく、入れ子のHTMLは組みにくい【フラット配列】

「## 第1章」からレベル2と「第1章」を取り出す。正規表現1本で見出しを抜く【キャプチャ】

目次ジェネレーターの土台に、Markdownを全行読み込むクラスをPerlとMooで作る【lazy】

SQLを文字列結合で組むと、引数が増えてインジェクションも通る。PerlとMooのBuilderで組み直す全8回【目次】

from を呼び忘れても、並び順に変な値を渡しても、SQLができてしまう。croak で止めてテストで固める【バリデーション】

ページ送り付き検索や集計を、毎回メソッドチェーンで書き直している。定型の組み立て手順に名前を付ける【Director】

JOIN・GROUP BY・HAVING・OFFSETを足しても、from や where は書き換えない。句ごとにメソッドを増やす【拡張】

Builderで書き方を整えても、値を埋め込むかぎり攻撃は通る。? と bind 値に分けて防ぐ【プレースホルダー】

どれが必須かも分からない7個の引数を、1句ずつメソッドで足す形に変える【Builder】

入力欄に細工した文字列を1つ渡すだけで、全員のパスワードが出る。文字列結合のSQLを攻撃してみる【SQLインジェクション】

WHERE、ORDER BY、LIMITと足すたびにコンストラクタの引数が増え、7個で使えなくなる【Telescoping Constructor】

SQLは文字列をつなげば作れる。PerlとMooで SELECT 1本を返すだけのクラスから始める【文字列結合】

継承でフィルターを足すとクラスが掛け算に増える。Perlのログ解析ツールをDecoratorで組み替える全8回【目次】

フィルターの順番や閾値を変えるたびにコードを直している。JSONの設定でパイプラインを組み立てる【完成】

404が続いても、ログを読み返すまで気づけない。流しながら警告を出すDecoratorを重ねる【アラート通知】

集計を足すために、動いているフィルターを書き換えたくない。通過させながら数えるDecoratorを重ねる【統計集計】

組み合わせごとのクラスをやめ、フィルターを包んで重ねる。Role と around で作る【Decorator】

「404だけ、IPとも組み合わせて」でクラスが掛け算に増える。継承で機能を足す限界【クラス爆発】

IPで絞るだけなら、継承でクラスを1つ足せば済む。この素直な手が次回の行き詰まりを生む【継承】

ログが文字列のままでは、200以外の行を探すのも面倒。名前付きキャプチャでハッシュにする【LogParser】

Perl入学式の open と while を、Moo のクラスに包む。ログ解析パイプラインの土台を作る【LogReader】

コピペで増えたスクレイパーを、継承で1つの設計にまとめる全10回【目次】

流れは親が握り、違いだけを子が書く。この設計の名前とStrategyとの違い【Template Method】

3サイト分のスクレイパーを一括で動かす。次の変更が1か所で済むかを確かめる【継承による設計】

サイトを1つ足すたびに既存クラスを直したくない。新しいクラスを足すだけで済ませる【開放閉鎖原則】

サイトの構造が変わると、空のデータを黙って保存してしまう。検証を差し込む口を作る【フックメソッド】

保存処理を子クラスごとに毎回書かされる。既定の動きを親に置き、必要な所だけ変える【フックメソッド】

サイトごとに違う抽出処理だけを書き分けたい。子クラスで上書きする【継承とオーバーライド】

処理の順番をスクリプトごとに書いている。流れを基底クラスに1つだけ持たせる【抽象メソッド】

関数に切り出しても、保存方法を変えるたびに手が入る。共通の手順を洗い出す【関数化】

スクレイパーをコピペで2本に増やしたら、直す場所が2倍になり直し漏れが残る【コピペの限界】

Webページの見出しをPerlで抜き出したい。取得してCSSセレクタで拾う【Mojo::UserAgent】

ハニーポットの侵入ログ処理が if/else で膨らむ問題を、PerlとMooのObserverで解く全10回【目次】

作ってきた侵入レーダーは、GoF の Observer パターンだった。クラス対応表と Pub/Sub との違い【種明かし】

ログ・スコア・リスク・アラートが連動する侵入レーダー司令室を、Perl と Moo で完成させる【完成コード】

既存コードを1行も変えずに通知係を足せるか。RiskLevelObserver で開放閉鎖の原則を確かめる【OCP】

update を持たない偽物が通知係として登録できてしまう。does 制約で弾く【型制約】

深夜だけアラートを鳴らしたい。通知係を実行中に attach/detach で出し入れする【動的な登録・解除】

通知係を呼ぶ処理が main に散らばる。IntrusionHub に集めて一斉通知する【attach/detach/notify】

通知係が update を実装し忘れても気づけない。Moo::Role の requires で契約にする【Moo::Role】

ログ・スコア・アラートが混ざったループを、通知係のクラスに分ける【責務の分離】

侵入レーダーに脅威スコアとアラートを足したら、ループが if/else だらけになる【破綻を体験】

ハニーポットの侵入ログを、Perl と Moo でコンソールに流す。イベントクラスだけの最小レーダー【最小構成】

ギャラリーが固まる、誰でも見られる、毎回遅い。5つの困りごとをProxyで片付ける全5回【目次】

画像を外部サーバーに移しても、呼び出し側は変えない。通信の事情を代理に隠す【Remote Proxy】

誰がどの絵を見たかを残したい。ログ出力が散らばる前に代理へ集約する【Logging Proxy】

同じ絵を開くたびに毎回待たされる。取得済みの結果を代理に覚えさせる【Caching Proxy】

鍵付きの絵を一般ユーザーも開けてしまう。権限チェックを代理に任せる【Protection Proxy】

高解像度の画像を全件読み込んで画面が固まる。見るときまで読み込みを遅らせる【Virtual Proxy】

偽APIのif/else地獄を、PerlとMooのクラス分割で抜けてFactory Methodにたどり着く全8回【目次】

ここまで作った偽APIの設計に名前を付ける。Scenario が Creator、create_response がファクトリメソッドだった【Factory Method】

429レート制限のシナリオを足す。既存のコードは1行も書き換えず、新しいクラスを足すだけで済む【オープン・クローズドの原則】

ログ出力と処理時間の計測がシナリオごとにコピペされる。共通の送信フローを基底クラスに集める【共通処理の集約】

シナリオごとに専用のレスポンスを返したい。create_response をサブクラスでオーバーライドする【オーバーライド】

レスポンスのクラスごとに render の有無がばらばら。Moo::Role で必須メソッドを決める【Moo::Role】

if/elseだらけの偽APIを、シナリオごとのクラスに分ける。継承で成功と404を独立させる【継承で分離】

偽APIにエラーレスポンスを足したら、メソッドが if/else だらけになる。分岐が増える限界を確かめる【if/elseの肥大化】

PerlとMooで偽APIを作る。成功レスポンスだけ返すミニAPIで、ResponseクラスとMockApiクラスの土台を置く【最小構成】

Perlのnew()の限界からclone()、深いコピーを経てPrototypeパターンにたどり着くモンスター量産の全6回【目次】

clone() で量産してきた仕組みは、GoF の Prototype パターンだった。Factory Method との違い【Prototype】

浅いコピーでドラゴンの武器が共有される問題を、Storable::dclone() の深いコピーで直す【Deep Copy】

clone() したドラゴンの武器を書き換えたら、元のドラゴンの武器も変わった。浅いコピーの罠【Shallow Copy】

clone() したスライムの色だけ変えて、赤・青・金の色違いを量産する。強化版も作れる【clone】

Moo のスライムを MooX::Clone の clone() で複製すると、30行が3行になる【clone】

Moo で同じスライムを10体作ると、new() の属性指定だけで30行以上になる【コンストラクタ】

ログも実績もサウンドも足すたびに攻撃処理が膨らむPerlのローグライクを、Mooで通知の仕組みに分けてObserverパターンにたどり着く全10回【目次】

作ってきた通知の仕組みに名前が付く。Observer パターンと、Pub/Sub・Mediator との違い【Observer パターン】

ログ・実績・サウンド・統計をまとめて、ダンジョンを探索できる CLI にする。ローグライク通知システムの完成【統合】

統計の集計を足したいが、既存のコードには触りたくない。新しい通知先を1つ作って足すだけで済ませる【開放閉鎖原則】

通知先に、関係ないオブジェクトを登録してもエラーにならない。does 制約で登録の時点で弾く【型チェック】

夜中だけサウンドを切りたい。ゲームの実行中に、通知先を追加したり外したりする【動的な管理】

通知先を呼ぶ処理が、まだ攻撃のメソッドに残っている。通知先を一括で管理して知らせる GameEventEmitter を作る【attach/detach/notify】

通知を受け取るクラスが増えても、update を書き忘れて落ちないようにしたい。Moo::Role の requires で約束にする【Moo::Role】

ログと実績の処理を、攻撃のメソッドから切り離したい。通知を受け取るクラスに分ける【責務の分離】

実績システムを足したら、攻撃のメソッドが if/else だらけになった。通知先が増えるほど直しにくくなる理由を体感する

敵を倒したらダンジョン探索のログに残したい。まず say で直接出力する素朴な実装から始める【ゲームイベント】

Perlの総当たりパスワードクラッカーを、for文から再帰、Mooのクラスへ作り替えてIteratorにたどり着く全5回【目次】

8桁1億通りを配列に入れるとメモリが尽きる。このシリーズで作ったものはIteratorパターンだった【遅延評価】

総当たりに辞書攻撃も足したいが、ツール本体は書き換えたくない。next を持つクラスを差し替える【ポリモーフィズム】

総当たりの再帰が読みにくく、止めて再開もできない。次の候補を返す next メソッドのクラスにする【Iterator】

パスワードが4桁、5桁、N桁と増えて、for文のネストを書き足せない。再帰で書いても残る問題【再帰】

Perlで3桁のダイヤル錠を総当たりで開ける。3重のfor文で1000通りを試す【ブルートフォース】

ゲームオーバーで最初からやり直しになるPerlのRPGに、Mooでセーブ機能を足してMementoパターンにたどり着く全10回【目次】

Player・PlayerSnapshot・GameManagerで作ったセーブ機能は、GoFの【Memento】パターンだった

ここまでの機能を1本にまとめたい。メニューから遊べるセーブ機能付きRPGを完成させる【CLI版RPG】

セーブスロットを3つ使い分けたい。スロットを選んでセーブ・ロードできるようにする【セーブスロット】

セーブデータを外から書き換えられると、ゲームの前提が崩れる。読み取り専用の属性で守る【カプセル化】

セーブし忘れると、ボス戦に負けた時に戻る先がない。ボス戦前とエリア移動で自動セーブする【オートセーブ】

セーブデータを1つしか持てない。複数のセーブを出し入れするGameManagerを作る【履歴管理】

保存した状態に戻したい。スナップショットからPlayerを復元して、セーブ→ダメージ→ロードを動かす【復元】

保存後の変更に巻き込まれない保存がしたい。状態を不変のオブジェクトにまとめる【スナップショット】

ゲームオーバーで最初からやり直しになる。変数にコピーして保存すると、保存した状態まで書き換わる【浅いコピー】

PerlとMooでRPGのPlayerクラスを作る。HP・所持金・位置を持たせて移動と戦闘を動かす【Playerクラス】

Perl と Moo で、月次レポートの生成コードを継承とオーバーライドで組み直して Factory Method パターンにたどり着く全10回【目次】

ここまで作った継承とオーバーライドは Factory Method パターンだった。Strategy パターンとの違いも

月次・週次・日次・四半期の4種類を作れるレポートジェネレーターの完成コードを通して読む

四半期レポートを足すとき、既存のクラスを1行も直さない。開放閉鎖原則を実際に確かめる

create_report が別のオブジェクトを返したら、すぐ気づける形にする。does で ReportRole を持つか戻り値を検査する

レポートの生成→表示→保存を、基底クラスの generate_and_save にまとめる。サブクラスは create_report だけ書く

日次レポートを足すのに既存コードを触らずに済むか。create_report のオーバーライドで確かめる

if/else をやめて、月次と週次のジェネレーターを extends で分ける【継承】

MonthlyReport と WeeklyReport に共通ルールを持たせる。Moo::Role の requires で実装漏れを検出する

週次レポートを足したら create_report が if/else だらけになった。種別が増えるほど修正が増える問題【開放閉鎖原則】

月次レポートを返す ReportGenerator を Moo で書く。生成を create_report メソッドに任せる最初の土台【Perl入門】

if文で書いたPerlの決済審査を、審査ごとのMooクラスに分けてChain of Responsibilityにたどり着く全3回【目次】

審査条件を1つ足すたびに既存コードを触りたくない。審査をクラスに分けて鎖でつなぐ【Chain of Responsibility】

審査条件を5つに増やしたら、if文のネストが5段になった。早期リターンで直しても残る問題【コードの臭い】

カード決済の審査を、金額上限10万円と有効期限の2条件でif文から書く【早期リターン】

if/elseで状態を切り替えていたPerlの自動販売機を、状態ごとのMooクラスに分けてStateパターンにたどり着く全10回【目次】

作ってきた自動販売機はStateパターンだった。Strategyパターンとは、誰が切り替えるかが違う【State】

4つの状態クラスをまとめて、c・s・d・qのコマンドで動かせる自動販売機に仕上げる【完成】

在庫が尽きたら「売り切れ」へ。VendingMachineには手を入れず、状態クラスを1つ足す【OCP】

stateに文字列を入れてもエラーにならない。Mooのisaで、ロールを持つオブジェクトだけを受け付ける【isa】

状態クラスから在庫が見えない。メソッドにVendingMachineを渡して、遷移先を状態クラス自身に決めさせる【状態遷移】

状態オブジェクトを付け替える仕事を、VendingMachineクラスに引き取らせる【Context】

状態クラスがdispenseを書き忘れたら、withの時点で止めたい【Moo::Role requires】

状態をif/elseで見分けるのをやめて、「待機中」そのものをMooのクラスにする【状態クラス】

「払い出し中」と「売り切れ」を足したら、自動販売機のどのメソッドにも4つの分岐が並んだ【コードの臭い】

自動販売機の「待機中」と「コイン投入済み」を、Perlのstate属性とif/elseで切り替える【if/else】

if文がネストしていくPerlのユーザー登録バリデーションを、検証ルールごとのクラスに分けてChain of Responsibilityにたどり着く全3回【目次】

ネストしたif文に埋もれた検証ルールを、1ルール1クラスに分けて鎖でつなぐ【Chain of Responsibility】

パスワード・確認一致・利用規約・年齢を足したら、validate_userのif文が3段にネストした【コードの臭い】

ユーザー登録フォームの入力チェックを、Perlのif文だけで書いてみる。名前とメールアドレスから始める【if文】

形式を足すたびにif/elseが伸びるPerlのデータエクスポーターを、Mooで育ててStrategyパターンにたどり着く全10回【目次】

形式ごとのクラスを差し替えて使う設計には、Strategyという名前がある。作ったクラスを3つの役割に当てはめる【Strategyパターン】

部品はそろったのに、まだYAMLで出せない。YamlExporterを足し、全部を1本のエクスポーターにまとめる【統合】

出力はクラスに分けたのに、どのクラスをnewするかのif/elseがメインに残っている。形式名から選ぶexporter_forを作る【Factory的な選択】

エクスポーターでない値を入れても、export_dataを呼ぶまでエラーにならない。isaでExporterRoleかを確かめ、入れた時点で止める【isa】

同じデータをCSVとJSONの両方で出したいのに、作ったあとでエクスポーターを替えられない。exporterをrwにして実行中に切り替える【実行時の切り替え】

メイン処理がエクスポーターを直接呼んでいて、同じ出力を別の場所で使うとコードを写すことになる。処理を任せるDataExporterを作る【委譲】

どのエクスポーターもexportを持っているのは、たまたまだ。Moo::Roleのrequiresで約束にする【ロール】

4形式の出力処理が1つのif/elseに詰まっている。形式ごとにexportを持つCsvExporterとJsonExporterに分ける【責務分離】

形式を足すたびにelsifが伸び、CSVを直すだけでも全形式の処理に触れる。if/elseの肥大化を確かめる【条件分岐の悩み】

CSVとJSONで書き出すPerlのデータエクスポーターを、一から作る。まずはif/elseで形式を切り替える【if/else】

Undoが1回しか効かないPerlのテキストエディタを、Mooで育ててCommandパターンにたどり着く全10回【目次】

操作をオブジェクトにして履歴に積む設計には、Commandという名前がある。作ったクラスを5つの役割に当てはめる【Commandパターン】

部品はそろったのに、まだエディタとして触れない。i・d・u・rを受け付ける対話型のCLIエディタに仕上げる【統合】

3か所の置換を戻すのに、Undoを3回押すことになる。複数のコマンドを1つにまとめるMacroCommandを作る【マクロ】

Undoで取り消した操作を、やり直せない。redo_stackから取り出してexecuteし直すredoをHistoryに足す【Redo】

pushとpopがメイン処理に散らばって、Redoを足す場所がない。履歴の出し入れをHistoryクラスにまとめる【Historyクラス】

undoを書き忘れたコマンドは、Undoするまで壊れていることに気づけない。Moo::Roleのrequiresで約束にする【ロール】

操作を記録しても、まだ元に戻せない。executeと対になるundoをInsertCommandとDeleteCommandに持たせる【undoメソッド】

何度でも戻すために、テキスト全体を毎回コピーするのは重い。「何をしたか」をInsertCommandにして記録する【操作オブジェクト】

直前のテキストを1つ取っておくUndoは、2回目で止まる。previous_textが破綻する理由を確かめる【履歴の必要性】

Undo/Redo付きのエディタを、PerlとMooで一から作る。まずはinsertとdeleteだけのEditorクラス【Editorクラス】

モジュールごとにnewした設定が食い違う。Perlの設定ファイルマネージャーでSingletonパターンにたどり着く全5回【目次】

インスタンスを1つに保つinstance()には、Singletonという名前がある。テストの間で状態が残るといった注意点も押さえる【Singletonパターン】

設定オブジェクトを引数で渡し続けるのも、グローバル変数も避けたい。state変数とinstance()でConfigを1つにする【instance()メソッド】

メインでOFFにしたデバッグモードが、Loggerには届かない。newのたびに別のConfigができる問題を確かめる【インスタンス】

設定を変えるたびにスクリプトを書き換えている。INIファイルから読み込むload_configを足す【ファイル読み込み】

スクリプトに散らばった設定値を、1か所に集める。PerlとMooでConfigクラスを作る【設定クラス】

内部の配列を見せずに、本を1冊ずつ取り出す。Perlの本棚アプリでIteratorパターンにたどり着く全5回【目次】

作ってきた本棚の巡回は、Iteratorパターンそのものだった。ループを変えずに逆順で回す【Iteratorパターン】

走査クラスを差し替えると、呼び出し側のnewまで直すことになる。本棚にiterator()を持たせて生成を任せる【iterator()メソッド】

インデックスを数えるループが、本棚を使う所ごとに増えていく。has_nextとnextだけの専用クラスに任せる【イテレータ】

本棚の配列をforで直接回すと、中身の作りを変えたとき呼び出し側をすべて直すことになる。番号で取り出しても残る依存を確かめる【カプセル化】

何冊もの本を、配列のまま持ち歩かない。MooでBookとBookShelfの2クラスに分けて作る【集合体】

Mooは書けて、設計パターンは初めて。Perlで天気ツールを作りながらAdapterパターンにたどり着く全5回【目次】

作ってきた橋渡しクラスには名前があった。GoFのAdapterパターンとして整理する【Adapter】

3つ目は都市コードで英語の天気を返す。橋渡しを足して、3サービスを1つのループで回す【多態性】

古いAPIのコードには手を入れたくない。包んで同じメソッド名で呼べるようにする【委譲とラッピング】

天気APIをもう1つ足したら、メソッド名も戻り値も違って同じループで回せない【インターフェースの不一致】

天気を返すだけのクラスでも、先に形を決めておく。Perlで都市名から天気を返すクラスを作る【Moo】

Webアプリ開発が初めてでも、Mojolicious::LiteとSQLiteでPerlのURL短縮サービスを作り切る全12回【目次】

動くけれど見た目は素っ気なく、app.plに全部が詰まっている。画面を整え、Mooのクラスに分ける【仕上げ】

javascript:alert(1)まで短縮URLとして登録できてしまう。httpとhttps以外を断る【入力バリデーション】

元のURLは引けたのに、画面に出すだけで飛ばない。ブラウザを元のページへ転送する【302リダイレクト】

/abc123は受け取れたが、どのURLの短縮か分からない。データベースから引き、無ければ404を返す【SELECT】

短縮コードは登録のたびに増え、ルートを1つずつ書けない。パスの一部を変数で受ける【動的ルーティング】

入力をそのままSQLに埋め込むと、1行の入力でテーブルが空になる。値を分けて渡して登録する【プレースホルダ】

データベースにつながったが、何を保存するか決まっていない。4つのカラムでテーブルを作る【CREATE TABLE】

サーバーを止めると、登録したURLが全部消える。保存先にSQLiteのファイルを用意する【DBI】

長いURLから、毎回同じ短いコードを作りたい。ハッシュ値の先頭6文字を使う【Digest::SHA】

「短縮!」を押すとPage not foundになる。送られたURLをサーバーで受け取る【POSTルーティング】

URLを入力する場所がまだない。テンプレートでフォームを表示する【GETルーティング】

友人に「長いURLを短くしたい」と頼まれた。まずPerlで画面に文字を出す【Mojolicious::Lite】

if-elsifで書き始めたPerlのTodo CLIを、RepositoryとCommandで直しやすく育てる全10回【目次】

JSONで保存していたTodo CLIを、SQLiteでも動かす。変えるのはリポジトリを選ぶ所だけ【演習:SQLite】

約50行のif-elsifが、約300行と8つのクラス・ロールに増えた。それでも直しやすくなった理由を振り返る【設計原則】

--verboseや--fileを足したいのに、shift @ARGVでは引数の順番に縛られる。オプション解析を任せる【Getopt::Long】

addとlistをCommandにした。completeも、動いている2つに触らず足せるかを確かめる【Command::Complete】

コマンドを足すたびに、メイン処理のif-elsifが伸びていく。操作を1つずつオブジェクトにする【Command】

テストのたびにファイルが作られ、失敗すると残る。メモリ上で動く保存先に差し替える【InMemoryRepository】

どのコマンドにもファイルの読み書きが混ざり、保存形式を変えると全部直すことになる。保存の仕事を1か所に分ける【Repository】

タスク名にタブが入ると、保存ファイルが読めなくなる。構造ごと書き出す【JSON】

タスクがただの文字列で、完了の印を付ける場所がない。データと操作を1つのクラスにまとめる【Taskクラス】

if-elsifで書いた約50行のTodo CLIは動く。でもテストが書けない理由を確かめる【素朴な実装】

if/elsifで振り分けていたPerlの掲示板を、Mooで拡張しやすいディスパッチャーに育てる全12回【目次】

自分で作ったディスパッチャーの設計を、チームに一言で伝えられない。名前と構造で整理する【Strategy】

機能を足すたびにif/elsifを書き換えていたBBSを、ルートを1行足すだけにする。部品を1つのクラスにまとめる【ディスパッチャー】

/posts/123のようなURLは、listやformのような名前では振り分けられない。正規表現でパターンを当てる【ルーティング】

ハンドラーを足すたびに、登録の行も1行ずつ伸びていく。アクション名からクラスを読み込んで作る【動的なクラス読み込み】

ハンドラーが増えるたびに、set_handlerで1つずつ差し替えている。名前で登録して呼び分ける【レジストリ】

Dispatcherに一度渡したハンドラーを、途中で切り替えられない。実行時に差し替える【roからrwへ】

どのハンドラーを使うかの判断が、呼び出し側のあちこちに散らばる。振り分けを司令塔クラスに任せる【委譲(handles)】

runのつもりでexecuteと書いたハンドラーに、呼ぶまで気づけない。必須メソッドを起動時に確かめる【requires】

無名サブルーチンに、DBアクセスも検証も描画も詰め込むことになる。機能ごとにクラスへ切り出す【ハンドラークラス】

アクション名とメソッド名と処理の本体が、別々の場所に散らばる。処理そのものをハッシュに入れる【コードリファレンス】

actionの値を1つ足すたびに、elsifも1本伸びる。ハッシュから処理を引き当てる【ディスパッチテーブル】

BBSに機能を足すたびに、if/elsifの振り分けが伸びていく。何が辛いのかをコードで確かめる【if/elseの肥大化】

変数とサブルーチンだけで書いていたPerlを、Mooのクラスで整理する全12回【目次】

GitHub Copilot プレミアムリクエスト完全消費への挑戦|300リクエストを使い切れなかった理由と発見

2025
いいね数に「たくさん」と入っても、計算するまで気づけない。属性に型を付けて入口で弾く【型制約】

掲示板クラスが配列操作のメソッドで埋まった。持っているオブジェクトに仕事を任せる【委譲】

MessageにもUserにも作成日時が要るが、親子関係にするのは不自然。継承せずに機能を足す【ロール】

クラスが増えるたびに、表示処理のif文が伸びていく。子クラスでメソッドを上書きする【オーバーライド】

管理者用のクラスに、同じ属性とメソッドを丸ごと書き写した。共通部分を親クラスにまとめる【継承】

Messageクラスに投稿者の属性まで溜まり、なんでも屋になった。投稿者を別クラスに分ける【クラスの連携】

いいね数がマイナスになっている。内部の値を隠し、メソッド経由でしか変えさせない【カプセル化】

渡し忘れた値が空のまま通り、離れた所で発覚する。必須の属性と初期値を決める【requiredとdefault】

一度投稿した内容が、どこかで書き換わっている。属性を読み取り専用にする【roとrw】

変数名に番号を振ってコピペで増やしている。同じ形のオブジェクトを何個でも作る【コンストラクタ】

グローバル変数が散らばり、どれがどの投稿のデータか分からない。データと処理を1つのクラスにまとめる【hasとsub】

Perl イベント駆動プログラミング入門|Mojo::Log の on と emit で基礎から実践まで

GitHub Copilot Ask モードの真の使い方|リポジトリ調査で開発効率を劇的に向上

GitHub Copilot 使い分けガイド|118/300 リクエスト実測から学ぶ活用法

ただの数値や文字列で渡していた値を、Perlの値オブジェクトとTDDで守る全5回【目次】

エラー応答にresultが混じっていても作れてしまう。ありえない値を生成時に止める【境界値テスト】

Perl の定番モジュールと書き方を、25日で一通りたどる【Perl Advent Calendar 2025 目次】

値を束ねたとたん、省略してよい項目の扱いが崩れる。値オブジェクトを組み合わせる【複合値オブジェクト】

25日間で何を扱ったか。週ごとの振り返りと、レベル別の次の一歩【Perl Advent Calendar 2025 最終日】

CPAN・YAPC・Kansai.pm。Perl がどこから来て、どこへ向かうのか【Perl の歴史とコミュニティ】

テストを後から書くと、実装に合わせた甘いテストになる。失敗するテストから書く【Red-Green-Refactor】

開発・本番で設定を切り替え、パスワードはコードに書かない【YAML / JSON / TOML / INI】

Web ページから必要なデータだけを CSS セレクタで抜き出す【Web::Scraper / Mojo::UserAgent】

仕様書のMUSTを、コードのどこで守ればいいか決められない。仕様から値オブジェクトを設計する【JSON-RPC 2.0】

--help もサブコマンドもあるコマンドラインツールを、標準モジュールで作る【Getopt::Long】

なぜエージェント連携がうまくいくようになったのか - 観察から見えた3つの成功パターン

print デバッグをやめて、レベル別・出力先別にログを残す【Log::Log4perl / Log::Dispatch】

金額をただの数値で渡すと、円とドルを足しても止まらない。値を型に包んで守る【値オブジェクト】

HTML メールも添付ファイルも、SMTP 経由で送る【Email::Sender / Email::MIME】

パスワードの保存、データの暗号化、改ざん検知を Perl で正しく書く【Crypt::* モジュール】

待ち時間の多い処理を、プロセスを増やさず1本のイベントループでさばく【IO::Async / Mojo::IOLoop】

1件ずつ順番に処理していたバッチを、プロセスを分けて同時に回す【Parallel::ForkManager】

合計・最大値・重複削除・グループ分けを、ループを書かずに1行で【List::Util / List::MoreUtils】

Perl WebSocket入門:Mojoliciousで作る3つの実践アプリ

eval の例外処理には落とし穴がある。$@ の上書きを避けて書く【Try::Tiny】

Perl でテスト駆動開発を一から体験する。Moo と Test2 で学ぶ全5回【MooによるTDD講座 目次】

SQL インジェクションを防ぐプレースホルダとトランザクションから、ORM まで【DBI / DBIx::Class】

テストが書けるようになった後に困ること。壊れやすいテストとアンチパターンの避け方【MooによるTDD講座 #5】

JSON-RPC 2.0エラーオブジェクトにおけるID必須仕様 - 8年越しの誤解と正しい理解

日時処理が重いなら DateTime から替える。C 実装の速い日時ライブラリ【Time::Moment】

手元では通るテストを、プッシュのたびに自動で走らせる。GitHub Actions で CI を作る【MooによるTDD講座 #4】

bless で書くクラスの決まり文句をやめる。属性・ロール・型制約を宣言で書く【Moo/Moose】

同じコードを2か所に書いてしまった。テストを頼りに Moo のロールへまとめる【MooによるTDD講座 #3】

自分の環境では動くのに、ほかの人の環境では動かない。依存モジュールをそろえる【Carton/cpanfile】

戻り値も例外も、1行で確かめたい。Test2 のアサーションを使い分ける【MooによるTDD講座 #2】

Perl の Web フレームワークがどれも同じサーバーで動く理由。共通の仕組みを知る【Plack/PSGI】

テストを書いたことがなくても、Docker で環境を作って最初の1本が書ける【MooによるTDD講座 #1】

エージェントにアサインする時の指示が要だった

同じ式なのにスカラーとリストで返る値が違う。その理由を押さえる【Perl のコンテキスト】

perl-mongerをカスタムエージェントとして定義した

Test::More の次に。サブテスト・モック・深い構造の比較まで1つで書く【Test2::V0】

GitHub Copilot の awesome-copilot で開発体験を向上させる

混乱してきたにゃ(でもちゃんと結果は出たにゃ)- AGENTS.mdの書き方実験

PerlのScalar::Util::weaken完全ガイド - メモリリークを防ぐ5つのパターン

ハッシュの中に配列を入れたら値が取れない。入れ子の仕組みを押さえる【Perl のリファレンス】

Nano Banana Proで画像生成AI体験 - ブログのfavicon問題を解決できるか?

ログから日付や URL を抜き出す正規表現を、読める形で書く【Perl の正規表現】

AIガイドラインの矛盾:DosとDon'tsが衝突したらどうなる?

1ファイルで Web アプリを動かし、そのまま JSON API と WebSocket まで足す【Mojolicious::Lite】

GitHub Copilot Premium Requests:11月の振り返りと12月の抱負

CPAN にはモジュールが多すぎて選べない。実務でまず使う20本をカテゴリ別に【CPAN モジュール20選】

ログ集計も CSV 加工も一括置換も、スクリプトを書かずに1行で済ませる【Perl ワンライナー】

記事は AI が書き、人が確かめる。25日間で Perl をたどり直す企画の予定表【Perl Advent Calendar 2025 初日】

AIエージェントへの指示ファイルをリファクタリングした話

Copilotに「こだわり屋」になってもらってショートコードを作成した話

issueにCopilotをアサインしたら自動で修正が完了した話

カスタムエージェントのオーケストレーションを夢見て ― 複数エージェント連携の実験記録

エージェントパネルから記事を生成してみた ― GitHub Copilotで体験した新しい開発フロー

最高のAGENTS.mdを生み出すプロンプト ― GitHub Copilotで設定ファイルを作成した話

エージェントガイドラインを作成するプロンプトを試してみた

エージェントパネルで過去を振り返る記事を書いてもらった話

エージェントパネルで別リポジトリを指定してしまった話

バイブ・ブロギング実践記録:Rubyのfalsy値の記事を作った時のこと

エージェントパネルでコードブロックの言語指定を修正してもらった話

AIが作ったプログラムにバグがあった話

エージェントへの指示ファイルを手作業で編集した話

同じプロンプトから全然違うものが生成された話

GitHub Copilot エージェントの二段階レビュー体制が凄かった話

GitHub Copilot エージェントパネルでAGENTS.mdを作成した話

GitHub Copilot Coding Agent(エージェントパネル)を使ってみた

GitHub Copilot の指示ファイルを AGENTS.md に変更する

ウイスキーへの再入門
エンジニアに転向した日々を振り返る

Rubyのfalsyな値は2つだけ — シンプルで明快な真偽判定

