🎥

生成AIを活用してOBS Studio向け試合カウンタープラグインを開発した話

に公開

はじめに

対戦ゲームを配信する際、勝敗カウントを表示するプラグインが欲しいと思い、「Match Counter for OBS」というプラグインを開発しました。今回の記事では、プラグインの紹介ではなく、生成AIを活用した開発プロセスにフォーカスしてお話しします。

プログラミングの経験はあるものの、OBSプラグインの開発は初めてだったため、生成AIの力を借りながら効率的に開発を進めました。

ChatGPTを使ったリサーチ

OBSプラグイン開発は初めての経験だったため、まず何から始めるべきかわからない状態でした。そこで最初に行ったのが、ChatGPTを使った効率的な開発リサーチです。

ChatGPTに質問することで、次のような基礎情報を短時間で把握できました:

  • C/C++での開発が必要
  • 必要な開発環境(CMake, QT, C++)
  • OBS Plugin Templateの存在と使い方
  • 簡単なサンプルコード

これにより、自分で一から情報を集める必要がなくなり、大幅な時間短縮につながりました。特に、ゴールのイメージが掴めたことで「自分にもできる」と確信を持てたのが大きな収穫でした。

スコープを絞った開発アプローチ

プロジェクトを確実に完遂させるため、最初からスコープを明確に絞る方針を取りました。特に動画や音声の処理はあえて避けることにしました。理由は以下の通りです:

  • 動画・音声処理は技術的に複雑なこと
  • エラー発生時のデバッグが困難
  • 実際に自分が使うことを考えて、映像や音声処理は配信の安定性を損なう不安定要素になりうるため
  • シンプルな機能から始めることで挫折リスクを減らせる

このアプローチにより、テキストベースの表示とカウント機能に集中でき、プロジェクトを無事に完成させることができました。

開発プロセスの詳細

実際の開発では、主にClineを対話型AIとして利用し、GitHub Copilotを補助ツールとして併用しました。Clineには全体設計やエラー対応について相談し、コーディング中はCopilotの補完機能を活用するという使い分けです。

プロジェクト計画

リサーチを基に、プラグインの要件を整理しました:

- 勝利数と敗北数をカウントする
- カスタマイズ可能な表示テキストフォーマット
- ホットキーでカウント操作

OBS Plugin Templateがあったのでこれをベースに中身の部分を実装するという形で進めることにしました。

コードの生成と修正

要件をもとにClineで実装を依頼しました。
Clineはコンパイルエラーレベルのシンタックスの問題は勝手に修正してくれる場合が多かったです。しかし、OBSのAPIにはないようなコードや無駄なコードの実装が目立ちました。
こうした問題に対応方法として、OBSのドキュメントのリンクをプロンプト内に含めることが非常に効果的でした。
とはいえ、APIのドキュメントに沿って意図通りに実装することには課題を感じました。

生成AIの活用で良かった点

学習曲線の短縮

OBSプラグイン開発の学習コストを大幅に削減できました。ドキュメントを読み込む時間が短縮され、すぐに実装に取り掛かれました。

デバッグの効率化

エラーの原因と解決策を素早く提案してもらえるため、デバッグ時間が短縮されました。

特に効果的だったのは、デバッグログの挿入が容易になった点です。問題が発生したコードに対して「このコードにデバッグログを追加して」と指示するだけで、適切な場所に効果的なログ出力コードを挿入してくれました。例えば:

「このフォーマット処理関数の各ステップでデバッグログを追加してください」

というプロンプトで、変数の状態確認や処理フローの追跡に必要なログ出力が最適な位置に追加されます。これにより、複雑なバグの原因特定が格段に早くなりました。

また、一時的なデバッグコードの挿入と、デバッグ完了後の元のコードへの復帰も簡単に行えたため、開発サイクル全体の効率が向上しました。

実装変更の容易性

開発途中で要件や実装方針を変更したい場合でも、変更内容を生成AIに伝えるだけで新しいコード案を素早く提案してくれました。例えば、表示フォーマットのパターンを追加したいときも、既存コードの全体像を把握した上で、整合性のある変更案を提示してくれるため、スムーズに機能拡張ができました。

これは従来の開発方法では、自分自身でコード全体への影響を考慮しながら慎重に修正する必要があるため、時間がかかっていた部分です。生成AIの支援により、実装変更のサイクルが大幅に短縮されました。

生成AIの活用で苦労した点

本当のようでデタラメな実装

生成AIの最大の落とし穴は、**「一見正しそうに見えるが、実はまったく間違っているコード」**を堂々と提示してくることです。実際には存在しない関数や間違った引数を使った実装を、とても自信満々に提案してきます。

こうした「本当のようでデタラメな実装」に気づくまでに多くの時間を費やしてしまい、公式ドキュメントを丁寧に読み込んで検証する必要がありました。生成AIが提案するコードは常に疑いの目を持って確認することが重要だと学びました。

WindowsとmacOSの対応

プラグインをクロスプラットフォーム対応にする際、生成AIの限界が最も明確になりました。特にWindowsとmacOSの間でのパスの扱いやファイル操作、ビルド設定の違いなど、OS特有の対応が必要な部分では、生成AIは全く役に立ちませんでした。

結局、OBSのドキュメントやGitHubの既存プラグインのコードを自分で調査し、クロスプラットフォーム対応を実装することになりました。この部分は、生成AIの支援に頼らず、自分の調査と学習によって解決するしかありませんでした。

生成AIは一般的なコード生成には強いものの、検索してもすぐには答えが出てこないような問題については慎重に検討するべきことを実感しました。

生成されたコードのレビューが表面的にしかできない

もう一つの大きな課題は、生成AIが提案するコードを適切にレビューする能力の限界でした。OBSのプラグイン開発が初めてであり、C++もC言語の経験はあるもののほぼ使ったことがなかったため、生成されたコードの品質を深くレビューすることができませんでした。

実際には、コンパイルエラーやclang-formatが検出するような文法・スタイル上の問題は見つけられるものの、以下のような深刻な問題を見抜くことは困難でした:

  • メモリリークの可能性
  • 非効率なアルゴリズムの実装
  • スレッドセーフティの問題

つまり「動けばいい」というレベルでしか検証できず、コードの品質やパフォーマンスに関する深い理解に基づいたレビューができませんでした。これは生成AIを使う際の重要な注意点だと感じました。生成AIを最大限に活用するには、使用する技術やAPIについてある程度の知識が必要であると感じました。

完成したプラグイン

最終的に完成した「Match Counter for OBS」は以下の機能を持っています:

  • 勝利数・敗北数のカウントと表示
  • カスタマイズ可能な表示フォーマット
  • ホットキーによる素早いカウント操作

詳細はGitHubリポジトリで確認できます。

まとめ

今回の開発を通じて、生成AIは未経験の技術領域に挑戦する際の心強い味方になることを実感しました。OBSプラグイン開発のような未知の領域でも、適切なプロンプトとドキュメントへの参照を組み合わせることで、比較的短期間で機能するプラグインを作ることができました。

特に以下の点が生成AIを活用する上でのポイントだと感じています:

  1. ドキュメントへの参照を含める - 公式ドキュメントのリンクをプロンプトに含めると、より正確なコードが生成される
  2. 生成されたコードを疑う姿勢 - 自信満々に提案されても、実際には間違っていることが多いため検証が必要
  3. 複数のツールを組み合わせる - 対話型AI(Cline)とコード補完(GitHub Copilot)を併用することで効率が上がる
  4. 得意・不得意を理解する - 一般的なコード生成は得意だが、専門的な問題やクロスプラットフォーム対応などは苦手

生成AIは「魔法の杖」ではなく、**「強力なパートナー」**として活用するのが最適だと感じました。そのためには、対象技術に関する基本的な知識と、生成されたコードを批判的に評価する姿勢が求められます。

今後も生成AIを活用した開発に挑戦していきたいと思います。生成AIと人間の協業により、これまで敷居が高いと思われていた開発領域にも挑戦できる可能性が広がっていると感じています。

Discussion