- WINE上のDirect2D問題を解決するため、Paint.NETが独自実装を開発
- 約18万行のコードはClaudeが生成。クリーンルームで逆解析
- 作者は「vibe coded」と表現、コード未レビューの問題も報告
Direct2Dが立ちはだかった理由
Rick Brewster氏は、Windows向け画像編集ソフトPaint.NETがWINE上で動かなかった理由として、Direct2DというAPIの存在を挙げる。WINEとは、Windows向けのソフトウェアをLinuxなど他のOSで動作させるための互換レイヤーだ。しかし、WINEに実装されたDirect2Dは不完全で、Paint.NETが必要とする機能を満たす見込みがないという。
そこで同氏は、Direct2Dの利用を無効にするのではなく、Paint.NET内部にDirect2Dを再実装することにした。この内部実装は、WINEで起動する際に /wine フラグを付けた場合に使われる。ファイル名はPaintDotNet.Windows.Direct2D1.Managed.dllで、ゼロからクリーンルームでリバースエンジニアリングした書き換えだと説明している。
Claudeが生成した18万行
この再実装は、Anthropic社のAIアシスタント「Claude」が生成した。コード量は約18万行。Brewster氏は、「Claudeなしでは実現しなかった」と述べており、ClaudeがDirect2Dに内蔵されたエフェクト群の数式をリバースエンジニアリングにより特定したことも評価している。
その一方で、Brewster氏はこの作業を「vibe coded」と表現した。これは、AIが出力したコードを十分にレビューしないまま取り込む開発スタイルを指す言葉だ。同氏は「18万行をレビューするのは不可能だ」とも話しており、このコードは十分に検証されていない。参考までに、Paint.NETの残りのコードは約70万行で、20年以上かけて書かれてきた。
見え隠れするAIの癖
Brewster氏は、Claudeが向き不向きのはっきりする働きを見せたと振り返る。特定のタスクでは「10人のアインシュタイン級の10倍高生産性コーダー」のように働いた一方、そうでない場面では、COMというWindowsの部品規約における参照カウント処理(AddRef)を忘れるといったミスもあった。設計面で問題になる判断を下すこともあり、人間の監視が必要だったという。
このエピソードは、AIコード生成を活用する際の注意点を浮き彫りにする。AIの出力をそのまま受け入れるのではなく、リソース管理や設計方針を人間が監修することで、初めて実用的な品質になることを示している。
残された論点
Paint.NETはこれまで、Direct2Dの壁によってWINEでまともに動作しなかったが、今回の取り組みで状況が変わるかもしれない。ただし、この独自実装が外部に公開されるのか、また正式なリリースに含まれるのかはまだ不明だ。AIが生成したコードの品質保証や、「クリーンルーム」という表現が意味するところも、今後議論を呼ぶ可能性がある。
現時点では、このコードがWINE上で実際に安定して動作するかどうかは十分に確認されていない。レビューされていない18万行という規模は、潜在的なリスクもはらむ。AIコード生成を安全に利用するには、自動テストや段階的な統合といった仕組みを整えることが不可欠だろう。
So, instead, Paint.NET now has an internal, from-scratch, clean-room reverse-engineered rewrite of Direct2D that it uses on WINE (triggered by using /wine).
そこで代わりに、Paint.NETはWINE上で使う、Direct2Dをゼロからクリーンルームでリバースエンジニアリングした内部実装を用意した(/wine フラグで起動される)。
今後の見通し
今回のPaint.NETの事例は、AIコード生成が現実の複雑なプロジェクトに適用された具体例として、開発者コミュニティで参照され続けるだろう。今後は、この18万行のコードがWINE上でどれほど動作するのか、そしてPaint.NETの本流に取り込まれて一般公開されるのかが注目される。加えて、クリーンルームという主張が技術的・法的にどのように検証されるかも論点になる。AI生成コードの品質保証の方法や、レビュー工程をどう効率化するかが明らかになれば、同様の試みが他のプロジェクトにも広がる可能性がある。
日本の開発者・IT企業にとっての意味
日本のIT企業にとって、これはAIコード生成を実際のプロダクト開発に適用する際のケーススタディとなる。特に、Windowsに依存した既存システムを他OSへ移行する場面や、互換レイヤーを内製する必要があるとき、AIが支援できる範囲を示している。一方、コードの品質を確保するには、従来のレビュー工程では手に負えない規模になる可能性もある。AI生成コードをどうテストし、誰が責任を持つのかというガバナンスの仕組みを、日本企業も早めに設計しておくべきだろう。また、AIの学習データに含まれる既存OSSのコードが、クリーンルームのような開発手法と衝突しないかという点も、今後考慮に入れる必要がある。
気になる点
- なぜWINEのDirect2D実装ではPaint.NETが動かないのか?
- Brewster氏は、WINEのDirect2D実装はPaint.NETの用途には「決して十分に完成しない」と述べている。具体的にどの機能が欠けているかは明かされていないが、Direct2Dの使用を無効化する代替策もないため、独自実装を開発する判断に至った。
- このDirect2D再実装はオープンソースとして公開されるのか?
- 現時点では未定だ。Paint.NETの配布形態は、今回の再実装を含めて公式にはアナウンスされていない。今後のリリース情報を待つ必要がある。
- 実際に使う場合、このAI生成コードの品質は大丈夫なのか?
- Brewster氏自身が「徹底的なレビューはしていない」と認めており、参照カウントの漏れなども起きたという。したがって、そのままの信頼性は未知数で、人間のレビューとテストが不可欠だ。
用語解説
- Direct2D
- Microsoftが提供する2次元グラフィックス描画のためのAPI。ハードウェアアクセラレーションを利用し、Windows向けアプリで広く使われる。
- WINE
- Windows APIをLinuxなど他のOS上で再現する互換レイヤー。Windowsアプリをそのまま実行することを目指す。
- クリーンルーム設計
- 既存ソフトウェアの内部実装を参照せず、公開仕様と外部動作のみを基に独自に再実装する手法。著作権上のリスクを避けるために使われる。
- COM
- Windowsのソフトウェアコンポーネント規約。オブジェクトのメモリ管理に参照カウント方式を用いる。
- 参照カウント
- オブジェクトへの参照数を数え、0になった時点でメモリを解放する手法。COMなどで使われる。
- vibe coding
- AIが生成したコードを十分にレビューせず受け入れる開発スタイル。信頼ベースの「なんとなく動く」コードを指すことがある。
出典
Quoting Rick Brewster
AI導入も顧問も、お任せください
何から手をつけるか、どこまでAIに任せるか。自社の業務に合わせて整理し、導入から運用まで伴走します。相談だけでも構いません。
AI導入について相談する