AI

sqlite-utils 4.0rc2、Claude Fableが重大バグを発見

Simon Willison氏がsqlite-utils 4.0rc2のリリース前にClaude Fableにコードレビューを依頼。データ消失を招くdelete_where()のバグなど複数の重大問題をAIが発見し、約149ドルのコストで修正された事例。

8分で読める SINGULISM 編集チームが確認・編集

sqlite-utils 4.0rc2、Claude Fableが重大バグを発見
Photo from Unsplash

PythonのSQLiteラッパーライブラリ「sqlite-utils」の開発者Simon Willison氏は7月5日、同ライブラリのメジャーバージョン4.0第2リリース候補(4.0rc2)を発表した。注目すべきは、このリリース候補のコードレビューとバグ修正の大部分を、Anthropicが提供するAIモデル「Claude Fable」が担当した点にある。総プロンプト数37回、34コミット、1,321行の追加と190行の削除に及ぶ変更を、わずか約149.25ドルのコストで完了したという。

Willison氏は先日リリースした4.0rc1について、安定版リリース前に最終チェックを行うことを決意。同氏が利用するMaxサブスクリプションのClaude Fableが残りわずかで利用できなくなることを受け、iPhone上のClaude Code(Web版)から以下のプロンプトでコードレビューを依頼した。

「安定版4.0の出荷前の最終レビュー。もし後で修正しようとしたら破壊的変更になるような問題を最後の瞬間に見つけることは非常に重要」。

AIは直ちにを含む的なレポートを生成。その中にはWillison氏自身も気づいていなかった重大なバグが5件含まれており、リリース阻止(release blocker)と分類された。

データ消失を招くdelete_where()のバグ

最も深刻だったのはTable.delete_where()メソッドのトランザクション処理に関する問題だ。

delete_where()は内部でself.db.execute()を生で呼び出しており、delete()メソッドのようにatomic()ラッパーで囲まれていない。その結果、このメソッド実行後もコネクションがin_transaction=Trueのままとなり、以降のatomic()呼び出しすべてがセーブポイント分岐に入り、コミットされなくなる。

Willison氏が公開した再現コードは以下の通り。

db = sqlite_utils.Database("dw.db")
db["t"].insert_all([{"id": i} for i in range(3)], pk="id")
db["t"].delete_where("id = ?", [0])
# conn.in_transaction が True になる
db["t"].insert({"id": 50})
db["u"].insert({"a": 1})
db.close()
# 再度開くと、行は [0, 1, 2] — deleteとrow50、テーブルuがすべて消失

このバグにより、削除操作だけでなく後続の挿入操作や別テーブルの作成までもが失われる。データ消失のリスクがある深刻な不具合だった。

Willison氏は「これは本当に厄介なバグだ。出荷前に気づけて良かった」と述べている。ただし、たとえ4.0.0で出荷していたとしても、設計上の欠陥ではなく修正可能なバグであり、5.0を必要とする破壊的変更ではなかった点には言及している。

AIエージェントとの協業プロセス

バグ発見後、Willison氏はAIとの対話を繰り返しながら修正を進めた。全37プロンプト、34コミットにわたる修正は30ファイルに及んだ。

特筆すべきは、Willison氏がこの作業の大半を外出先から行った点だ。AIエージェントが新しいタスクを処理するのに10〜15分かかる間、同氏はハーフムーンベイの独立記念日パレードを楽しみながら、iPhoneから適宜次のプロンプトを送信していたという。

「コードエージェントの奇妙な点は、こうした難しいタスクほど同時に他のことをする余裕が生まれることだ。エージェントが黙々と作業している間に別の活動ができる」。

最終レビューはラップトップに切り替え、GitHubのプルリクエストインターフェースを通じて実施された。

トランザクション処理が最大の変更点

今回の4.0rc2で最も重要な変更はトランザクション処理に関するものだ。トランザクション処理は4.0rc1で導入された目玉機能だったが、AIの指摘により全面的な見直しが行われた。

新しいリリース候補には、トランザクションモデルに関するを含む的なドキュメントが追加されており、ライブラリの全メソッドにおけるトランザクションの挙動が明確に定義されている。Willison氏は「セマンティックバージョニングを重視しており、互換性のないメジャーバージョンは可能な限り少なくしたい」と述べており、厳格なバージョン管理の方針が今回のAIレビュー採用の背景にある。

AIコードレビューの実用コスト

今回の事例で注目すべきはコスト面だ。約149.25ドル(日本円で約2万円)という価格で、データ消失の重大バグを含む複数の問題を発見・修正できたことになる。人間の開発者が同品質のレビューを行う場合、数時間から半日程度の工数を要したと推測される。時間あたりの人件費と比較すれば、極めて低コストと言える。

ただし、Willison氏は「AIが行った作業はあくまでコードレビューと修正であり、設計判断やアーキテクチャ決定は自分が行った」と明示している。AIはあくまで強力なレビューア兼実装パートナーとして機能し、人間の判断を代替するものではない。

編集部の見解

AIエージェントによるコードレビューと自動修正は、ソフトウェア開発の品質保証工程を根本的に変える潜在力を持つ。今回の事例では、開発者自身が見落としていたデータ消失のバグをAIが発見した点は有意義だ。今後数ヶ月のうちに、CI/CDパイプラインにAIコードレビューを組み込むプロジェクトが急増する可能性がある。特にオープンソースプロジェクトのようにリソースが限られた環境では、このような低コストの品質保証手段は大きな助けとなるだろう。先日報じたJenkins失敗ログをn8nとClaudeで自動調査、Slack通知への事例とも共通する、AIによる開発プロセス自動化の流れの延長線上にある。 中長期的には、AIエージェントが自律的にコードレビューから修正までを行う体制が定着する可能性がある。Willison氏がパレード中にiPhoneからAIに指示を出していたように、開発者はAIに反復作業を任せ、より創造的な判断に集中できるようになる。

参考

よくある質問

sqlite-utilsとは何か
PythonでSQLiteデータベースを操作するためのユーティリティライブラリ。テーブル作成、データ挿入・更新・削除、JSONエクスポートなどの機能を提供する。Simon Willison氏が開発・メンテナンスを行っているオープンソースプロジェクト。
Claude FableとはどのようなAIモデルか
Anthropicが提供する大規模言語モデル「Claude」の一種。特にコード生成・レビュー・デバッグに特化した能力を持つとされる。Maxサブスクリプションで利用可能で、長いコンテキストウィンドウと高い推論性能が特徴。
AIによるコードレビューのコストはどれくらいか
今回の事例では約149.25ドル(約2万円)。37回のプロンプトとそれに伴う応答生成が含まれる。同程度の品質を人間のシニアエンジニアに依頼する場合、数時間〜半日程度の工数が必要となるため、コスト面では大幅に有利と評価できる。
出典: Simon Willison's Weblog

コメント

← トップへ戻る