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

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

同じ問い合わせに毎回違う文章が返り、上長に「これは障害ですか」と訊かれても答えられない。揺れを止める代わりに、揺れてよい範囲と許さない範囲を出力の契約として先に決め、異常だと判定できるようにする(Output Contract)。Python の標準ライブラリだけで確かめます。

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

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

土壌診断・灌漑・施肥の3つのモジュールは、正しい順で呼ばないと過湿の土に肥料を入れてしまう。その順序を知る窓口を1つ用意し、呼ぶ側が順番を覚えなくて済む Facade を Rust で実装します。

連載 コード庭師 (第11話 / 全12話)
Featured image of post コピペした手順の順番が入れ替わり、古い値で判定していた。骨格を1か所に固定する【Template Method】

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

品種ごとにコピーした手順関数は、いつの間にか呼び出し順が入れ替わり、前回の日照の値で収穫を判定してしまう。トレイトのデフォルトメソッドで手順の骨格を固定し、品種ごとの差分だけを実装させる Template Method を Rust で実装します。

連載 コード庭師 (第10話 / 全12話)
Featured image of post 通知先を1つ増やすたび、検知コードに呼び出しを書き足している。通知を登録制にする【Observer】

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

検知処理の最後に通知関数を直接並べていると、知らせる相手が増えるたびに検知側を書き換えることになる。通知先を登録制にして、検知する側が相手を知らなくて済む Observer を Rust で実装します。

連載 コード庭師 (第9話 / 全12話)
Featured image of post 「元に戻す」を推定値の逆操作で書いたら、元の値に戻らない。変更前の状態を保存する【Memento】

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

削除した要素を記憶の推定値で挿し戻す逆操作では、元の長さや角度に戻らず、戻すたびに全体のバランスが悪くなる。変更前の状態そのものを、中身を外へ漏らさずに預けておく Memento を Rust で実装します。

連載 コード庭師 (第8話 / 全12話)
Featured image of post bool 3つで「休眠中なのに開花中」が記録される。状態を enum 1つにする【State】

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

生育段階を bool フラグ3つで持つと、ありえない組み合わせが生まれ、直しても呼び忘れた経路からまた出てくる。enum と match で状態を1つに決め、不正な組み合わせを型で作れなくする State を Rust で実装します。

連載 コード庭師 (第7話 / 全12話)
Featured image of post 単体と集まりで関数が別々で、中間の単位を足せない。同じトレイトで再帰的に扱う【Composite】

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

株1つ用と花壇まるごと用で関数を分けていると、寄せ植え鉢のような「まとまりの中のまとまり」を入れる余地が無い。単体も集まりも同じトレイトで再帰的に扱う Composite を Rust で実装します。

連載 コード庭師 (第6話 / 全12話)
Featured image of post 「実行」と「記録」が別の関数で、片方の呼び忘れが防げない。Drop で必ず記録させる【RAII】

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

水やり関数と記録関数を別々に呼ぶ作りでは、記録の呼び忘れや二重実行をコードが止められない。当番を表す値がスコープを抜ける瞬間に記録まで済ませる Drop トレイト(RAII)を Rust で実装します。

連載 コード庭師 (第4話 / 全12話)