10月1日、Sandeep Dhuriが「Specification Before Generation: A Pre-Registered, Five-Model Paired Evaluation of a Specification Frame for LLM-Generated Code in Money, Time, Idempotency, and Access Tasks」と題した論文をarXivに公開した。LLMが生成するコードのセキュリティ欠陥を、プロンプトに仕様書(スペシフィケーション)を前置するだけで大幅に削減できることを、5モデル比較実験で示した研究だ。
LLMコードのセキュリティ欠陥は4年間ほぼ改善していない
AIコーディングツールの普及が加速する中、LLMが生成するコードのセキュリティ品質は長年の課題だ。本論文が指摘する事実は厳しい:LLMが生成したコードがセキュリティチェックを通過する割合は、過去4年間でほとんど改善していない。
この「4年間」という根拠は論文内で明示されており、Pearceら(2022年)やAsarеら(2024年)といった先行研究の系譜を踏まえたものだ。複数の独立した研究グループが異なる年次・異なるモデルで同種の欠陥を繰り返し観測しており、それら横断的な知見をDhuriは「改善が見られない」と総括している。
特に問題となるのは、金融・医療・保険といった規制業界のバックエンドで頻出する以下の4つの欠陥クラスだ。
- 金額演算(Money arithmetic):浮動小数点演算による丸め誤差など
- 時刻処理(Time handling):タイムゾーン、うるう秒など
- 冪等性(Idempotency):リトライ時の二重処理など(同じ操作を複数回実行しても結果が変わらない性質)
- アクセス制御(Access control):認可ロジックの欠落や不備
チームの一般的な対策は「インストラクションファイル」(GitHub Copilotの.github/copilot-instructions.mdのような、モデルへの指示ファイル)だが、インストラクションファイルに一般的な効果は確認されていないとDhuriは述べている。この点については本論文が引用する既存の制御実験でも同様の結論が出ており、包括的な指示文が個別タスクのセキュリティ品質に与える影響は限定的とされている。
「仕様を先に書く」というシンプルな介入
本研究が試みたのは、より絞り込まれたアプローチだ。プロンプトの冒頭に267語の「仕様フレーム(specification frame)」を固定の前置文として付加する。この仕様フレームは「生成結果が満たすべき条件」を明示したものであり、タスクの説明とは別に添付される。
事前登録(pre-registration)とは何か、なぜ重要か
本実験の設計は事前登録(pre-registration)済みだ。仮説・反証条件・分析コード・生成ルールをすべて実験前に公開している。
事前登録とは、研究者が「どんな結果が出たら仮説を支持/棄却するか」を実験開始前に第三者機関や公開リポジトリに登録しておく慣行で、医学・心理学分野では標準的な手続きだ。コンピュータサイエンス領域ではまだ普及途上にある。事前登録を行わないと、研究者が(意図せずとも)都合のよい分析手法を事後的に選択する「p値ハッキング」や「結果に合わせた仮説設定(HARKing)」が起きやすい。本論文がこの手続きを採用していることは、結果の信頼性を担保する重要な要素だ。
実験の概要
- タスク数:金融・医療・保険の実務を想定した50のバックエンドタスク
- モデル数:異なる5ベンダーのフロンティアモデル5種
- 生成条件:各タスクを「裸のプロンプト(bare)」と「仕様フレーム付き(frame)」の2条件で実行
- 評価:9つの決定論的ASTベースチェッカー+独立したセキュリティスキャナー「Bandit」
結果:仕様フレームが全モデルで欠陥を削減
結果は一方向に揃った。
- 仕様フレームは全5モデルで欠陥を削減(タスクあたり平均0.16〜0.70件の削減、Holm補正済み符号検定でいずれも有意)
- 2条件で差が生じた場合、100回中95回は仕様フレーム側が勝利
- どのモデルも、どのドメインでも、仕様フレームによって悪化したケースは皆無
- Banditスキャナー(フレームの内容を知らない独立ツール)の検出:bareアームで中〜高リスク53件、frameアームで11件
特筆すべきは「効果の非対称性」だ。モデルのデフォルト出力が弱い領域ほど、仕様フレームの効果が大きい。つまり仕様フレームは、モデルが自発的には持てない規律を外部から補完する機能を果たしている。
再現性への配慮
500件の出力・プロンプト・チェッカー・スコアリングコード・事前登録ドキュメントはすべてDOI付きで公開されている(Zenodoデータセット)。著者を信頼しなくても結果を自力で検証できる設計だ。
なお、「長さをそろえたアーム」と「理由を先に述べるアーム」との比較は、フォローアップ研究として計画中とされている。
エンジニアへの示唆
本論文の実用的な含意は明確だ。LLMへのプロンプトに「何を生成してほしいか」だけでなく、「生成物が満たすべき条件」を明示的に前置することが、セキュリティ品質を向上させる。
※編集部の考察:インストラクションファイルのような包括的な指示との比較については、本論文は「インストラクションファイルに一般的な効果は確認されていない」という先行研究の知見を引用するにとどまっており、両者を同一実験内で直接比較しているわけではない。タスク固有の仕様前置がより効果的かどうかは、今後の比較研究が待たれる論点だ。