AIは低レイヤーコードを書ける?VRChat個人開発集会レポート!

詳細情報

日時 2025年05月22日 22:30 - 23:00
テーマ AIコーディングでレイヤーの低いコードの実装はできるか
発表者 hiro0920_六合
集会名 個人開発集会
発表資料 ファイル

VRChat個人開発集会で、hiro0920_六合さんが「AIコーディングでレイヤーの低いコードの実装はできるか」という興味深いテーマで発表されました。

普段はミドルウェアを書かれているというhiro0920_六合さんが、ChatGPT-4oやGemini 2.5 ProといったAIを使って、普段私たちが目にしないような低レイヤーのコードに挑んだ軌跡を追ってみましょう。

AIは低レイヤーコードのバグを見つけられるか?

hiro0920_六合さんがまずAIに挑ませたのは、非常に低いレイヤーのコードに潜む潜在的な問題点の指摘でした。

具体的には、ログ収集・転送ツールであるFluentBitの、SIMD演算を使って文字列処理を高速化するヘッダーファイルflb_simd.hです。

SIMDとは?

SIMD(Single Instruction, Multiple Data)とは、一度のCPUの計算サイクルで複数のデータをまとめて処理する命令のことです。

例えば、音声や画像処理のように、たくさんのデータを個別に処理するよりも、まとめて計算した方が効率的な場合に威力を発揮します。

X86_64のSSEやAVX、AArch64のNEON、そしてRISC-VのRVVなど、様々なアーキテクチャに特化したSIMD命令があります。

RISC-V Vector (RVV)への挑戦

特にRISC-VのRVVは、その命令長(VLEN)が固定ではなく、将来異なるVLENを持つプロセッサーが登場する可能性も考慮されています。

hiro0920_六合さんは、このRVVを使ったコードにAIが潜む問題を指摘できるか検証しました。

ChatGPT-4oにコードの一部を渡し、その潜在的な危険性を指摘させたところ、なんとRVVの命令長VLENを暗黙的に仮定している箇所があることを指摘されたそうです。

これは、コードを書いた当初はhiro0920_六合さん自身も気づいていなかった点であり、AIがコードの深い部分を理解し、人間が見落としがちな問題点を発見する可能性を示しています。

Windows APIの使用ミス探し

次にhiro0920_六合さんがAIに試したのは、Windows APIの使用ミスの発見です。

特に、UNIX系のwritev関数(複数のメモリ領域のデータを一度に書き出す機能)をWindows上で模倣したコード片を与え、Winsock2内のAPIの使い方に誤りがないかを確認しました。

AIは、APIの第二引数がchar *const char *を要求しているにも関わらず、渡されているのがvoid *ポインターであることを見抜きました。

C言語ではvoid *から他のポインター型への暗黙的な変換が許容されることが多いですが、最近のコンパイラではより厳格になっており、明示的なキャストが必要になる場合があります。

この実験は、既に人間が修正したコードをAIにも検証させたものですが、AIが人間と同じ箇所を問題点として指摘したことは、その認識能力の高さを物語っています。

Rubyの言語バインディング生成にAIは使えるか?

hiro0920_六合さんはさらに、RubyからC言語の関数を呼び出すための仕組みであるFFI(Foreign Function Interface)を使った言語バインディングの生成にAIがどこまで活用できるかを探求しました。

RubyのFFIは開発者にとって書きやすく読みやすいとされていますが、公式ドキュメントが少ないため、実際のコードを読んで理解する必要がありました。

従来の課題とAIへの期待

これまでのRubyの言語バインディング作成では、SWIGのようなツールを使うと自動生成はできますが、Rubyらしい命名規則から外れてしまうという課題がありました。

hiro0920_六合さんは、特定のC言語関数(_setmaxstdio_getmaxstdio)のRuby言語バインディングをAIに生成させることを試みました。

AIによる生成と課題

AIにおおよそ期待通りのコードを生成させることができましたが、その際に重要なのは、明確な機能要件とRubyらしい命名規則をAIに指示することでした。

Rubyの言語バインディングにおける命名規則は、開発者コミュニティの一部で共有されている暗黙的な了解のような側面もあるため、AIに正確に伝える必要があったのです。

Fiddleを使ったより簡単な方法

ちなみに、RubyにはFiddleというC言語のソースをビルドすることなく言語バインディングを作成できる標準ライブラリもあります。

hiro0920_六合さんはこのFiddleを使った方法もAIに試させ、より簡単にバインディングを作成できることを確認しました。

WebAssemblyの問題探し(失敗談)

AIコーディングの万能ではない側面も紹介されました。

WebAssemblyのReference Typesの有効・無効でロードが失敗する問題のように、込み入ったコンテキストでの機能追加や修正は、ChatGPT-4oではうまくいかなかったそうです。

AIからの提案が的外れな場合もあり、問題解決には人間が正確な情報(例えばRustcのバージョンによる挙動の変化など)を与える必要がありました。

しかし、Gemini 2.5 Proでは問題のログからWebAssemblyのコンパイラの問題ではないか、という惜しいところまであたりをつけることができたそうです。

まとめ:AIは低レイヤーコーディングの強力な味方になるか?

hiro0920_六合さんの実験を通して、AI、特にChatGPT-4oやGemini 2.5 Proが、適切なコンテキストと指示を与えることで、ある程度低いレイヤーのコードの解釈や潜在的な問題点の指摘に有効であることが示されました。

AIモデルが学習していない未知のコードベースでは異なる結果になる可能性もありますが、コーディングの補助や発想のヒントとしてAIを活用できる可能性が見えてきました。

ただし、AIの出力をそのまま鵜呑みにせず、人間が内容を十分に理解・検証し、自身の責任でコードを作成することが非常に重要であると改めて強調されていました。

生成AIは用法と良識を守って使うこと、そして適切にコンテキストを切って課題設定したものをAIに投げかけることが、低レイヤーコーディングにおけるAI活用の鍵となりそうです。

スライド資料(PDF)

個人開発集会の他の発表もチェック!

「この衣装、着せたかった…」――その“諦め”を“感動”に変える、新しいアバター改変体験。

VRC関連の開発を振り返る(仮)

VRChat個人開発の羅針盤!「Kipcha」に学ぶ成功の秘訣

VRChatから世界へ!個人コンテンツ多言語展開の秘訣を大公開

VRChat個人開発成功の鍵!Kipcha開発者が語る実践Tips

【Resonite開発のリアル】裏世界でのアイテム&世界開発、modimobeiketeさんの挑戦

個人開発集会の開催情報・参加方法

個人開発集会のポスター

個人開発集会

開催日: 2025年05月22日

開催時間: 21:00 - 22:00

開催曜日: 木曜日

開催周期: 隔週(グループA)

個人開発にまつわる話でワイワイする集会です。 個人開発をやっている方も初めてみたい方も大歓迎! 企画・技術・マーケティング・保守・運用など 技術的なことに限らない幅広い分野を想定しています。 個人開発に興味がある方はぜひ遊びに来てください!

個人開発にまつわる話でワイワイする集会です。 個人開発をやっている方も初めてみたい方も大歓迎! 企画・技術・マーケティング・保守・運用など 技術的なことに限らない幅広い分野を想定しています。 個人開発に興味がある方はぜひ遊びに来てください!