Alexis Mabanza @ alexvolkihar.ovh

The Canonは正しい:現実の制約の中で過ごした1年

Aug 5 · 7min

English Version | Version Française

数日すうじつ前まえ、Federico Bartoliの The Canon を読よんだ。AIコーディングエージェントと働はたらくための12の原則げんそくをまとめた、短みじかいマニフェストだ。文章ぶんしょうは引ひき締しまっていて主張しゅちょうもはっきりしていて、冒頭ぼうとうと同おなじ一文いちぶんで締しめくくられる。「どれも新あたらしい話はなしではない。だが今いまや、すべて必須ひっすだ」。続つづけて2回かい読よみ返かえした。私わたしにとって、エンジニアリングの規律きりつについて書かかれた文章ぶんしょうが本物ほんものかどうかを測はかる、いちばんの目安めやすだ。

Bartoliの12の原則げんそくは、おおまかに言いうと4つの動うごきにまとめられる。プロンプトを開ひらく前まえに解決策かいけつさくの形かたちを決きめておくこと。一気いっきに大おおきく生成せいせいさせるのではなく、レビューできる小ちいさな単位たんいで進すすめること。エージェントの要約ようやくを信しんじるのではなく、すべてを検証けんしょうすること。そして、自分じぶんの基準きじゅんを毎回まいかいプロンプトで打うち直なおすのではなく、エージェントが実際じっさいに読よみ込こむ場所ばしょに書かき残のこしておくこと。普段ふだん私わたしは医療いりょうソフトウェア向むけにSymfonyを書かいている。このリストりすとを読よんでも、あまり目新めあたらしさは感かんじなかった。すでに省はぶけなくなっている習慣しゅうかんそのものだったからだ。IEC 62304と、ルールを破やぶればビルドを失敗しっぱいさせる静的解析せいてきかいせきツールは、近道ちかみちをほとんど許ゆるしてくれない。だから、Bartoliの12の原則げんそくのひとつひとつは、善意ぜんいではなく何なにか他ほかのものによって、すでに私わたしに課かされていた。

プロンプトの前まえに決きめる

Bartoliの2番目の原則げんそくは「尋たずねる前まえに決きめる」だ。これは医療機器いりょうききソフトウェアの世界せかいが何十年なんじゅうねんも前まえから求もとめてきたことと、そのまま重かさなる。事前条件じぜんじょうけん、故障こしょうモード、受入基準うけいれきじゅんがはっきりするまで、コードには触さわらない。AIエージェントは、まだ形かたちになっていないアイデアに対たいしても、それらしい実装じっそうを喜よろこんで生成せいせいしてしまう。だからこそ、このルールは正ただしい。ある関数かんすうが成功せいこうする前まえに何なにを拒否きょひすべきかを一文いちぶんで言いい切きれないなら、まだプロンプトを書かく段階だんかいではない。それより先さきに、本当ほんとうの要件ようけんを探さがしに行いくべきだ。

エージェントはこの規律きりつが安全あんぜんのための実践じっせんだと知しらない。ただプロンプトに合あわせてパターンマッチングしているだけだ。あいまいなプロンプトからは、自信じしんたっぷりな構文こうぶんで着飾きかざられたあいまいな実装じっそうしか出でてこない。そして、そのあいまいさに気付きづくのは、たいてい誰だれかのインシデントになってからだ。

小ちいさなバッチと、唯一ゆいいつの証人しょうにんであるdiff

「小ちいさなバッチで」と「diffを読よむ」は、むしろ控ひかえめな言いい方かただと思おもう。すべての書かき込こみ処理しょりがトランザクションマネージャーを通とおり、すべてのオブジェクトが専用せんようのファクトリー経由けいゆでしか構築こうちくできないプロジェクトでは、一度いちどに12ファイルにまたがる変更へんこうはそもそもレビュー不可能ふかのうだ。私わたしはエージェントに、層そう単位たんいで(ドメインオブジェクト、それからローダー、ライター、ハンドラーと)一ひとつずつ依頼いらいするようにしている。各かくステップのdiffを頭あたまの中なかに収おさまる大おおきさに保たもち、記憶きおくにあるルールのおぼろげなイメージではなく、実際じっさいのルールと照てらし合あわせるためだ。

Bartoliの言葉ことばで今いまも頭あたまに残のこっているのは「理解りかい負債ふさい」という言葉ことばだ。読よまずに受うけ入いれた1行ぎょう行ぎょうが、いつか来くるインシデントに対たいする小ちいさな借金しゃっきんになる。しかも金融きんゆうの借金しゃっきんと違ちがって、金利きんりは事前じぜんには教おしえてもらえない。「コンパイルが通とおった」ことが十分じゅうぶんな基準きじゅんになったことなど一度いちどもなかった、というのを、これほどうまく説明せつめいした文章ぶんしょうを他ほかに読よんだことがない。

検証けんしょうだけは圧縮あっしゅくできない

「信しんじる前まえに実行じっこうしろ」は当あたり前まえに聞きこえるが、締切しめきりのプレッシャーの下もとではエージェントの有無うむに関係かんけいなく、どれだけよく省略しょうりゃくされてきたかに気付きづくと怖こわくなる。エージェントによって変かわったのは原則げんそくそのものではなく、量りょうだ。1時間じかんあたりに目めを通とおす「完了かんりょうしました」という報告ほうこくの数かずが増ふえた分ぶんだけ、しっかり検証けんしょうする代かわりに抜ぬき打うちで済すませたくなる誘惑ゆうわくも強つよくなる。私わたしは単純たんじゅんだが効果的こうかてきなルールに落おち着ついた。テストもログもトレースも指ゆびさせないなら、エージェントがどれだけ流暢りゅうちょうに語かたろうと、「動うごいている」は仮説かせつであって事実じじつではない。

ルールをコード化かする

Bartoliの11番目の原則げんそくは「ルールをコード化かする」だ。毎回まいかいプロンプトに打うち直なおすのではなく、エージェントが読よみ込こむファイルに規約きやくを置おく、というものだ。私わたしの本業ほんぎょうは、これがなぜうまくいくのかを極端きょくたんな形かたちで示しめしてくれる。そこでは規約集きやくしゅうは努力目標どりょくもくひょうではなく、強制きょうせい力りょくを持もつ。アーキテクチャの制約せいやく――どの層そうがどの層そうに依存いぞんしてよいか、どのクラスがファクトリー経由けいゆでしかインスタンス化かできないか、どのフィールドが絶対ぜったいにログに出でてはいけないか――は、それぞれ番号ばんごうが振ふられた独自どくじの静的解析せいてきかいせきルールによって裏付うらづけられ、コミットのたびにチェックされる。文書化ぶんしょかされた規約きやくと自動じどうチェックは、同おなじアイデアの2つの半分はんぶんだ。エージェントが無視むしできるスタイルガイドは単たんなる提案ていあんにすぎない。リンターが強制きょうせいするスタイルガイドは、契約けいやくになる。Bartoliのこのルールは、一般いっぱん形けいだ。私わたしの方ほうは、リスクの大おおきさゆえにそれが選択肢せんたくしではなくなったときの姿すがたにすぎない。

たどり着ついた結論けつろん

12の原則げんそくは、どれも成立せいりつしている。規制きせい対象たいしょうで安全性あんぜんせいに関かかわるソフトウェアの世界せかいでは、それらはもはや選択肢せんたくしではなく、そのソフトウェアが存在そんざいを許ゆるされる理由りゆうそのものになる。もっと広ひろい読者どくしゃに向むけて書かかれたはずのマニフェストの中なかにそれを見みつけるのは、なんだか不思議ふしぎな感覚かんかくだった。エージェントと一緒いっしょにコードを書かいているなら、ぜひ原文げんぶんを読よんでみてほしい。短みじかい文章ぶんしょうだが、その短みじかさに見合みあうだけの中身なかみがある。

> share on linkedin
>