mutable.ai と adrenaline で Copilot Chat の限界を超える

大きめのプロジェクトだと、GitHub Copilot Chatで何か質問してもレポジトリ全体を俯瞰した回答が得られない。その結果、Copilot Chatを使わなくをなる。そんな方いませんか?少なくとも私はそうです

そんなエンジニアにこそ、mutable.aiやadrenalineは検討の余地ありです

mutable.ai/adrenalineは、ドキュメント自動生成ツールとして認知されていますが、チャットツールとして捉えた方が良いと思います

この記事では3つのシチュエーションを想定してmutable.aiとadrenalineに質問し、その回答例を紹介します

と、その前にmutable.aiとadrenalineについて簡単に紹介しましょう

mutable.ai/adrenalineとは?

両者とも、アプリケーションの仕様書(ドキュメント)を生成AIで作成するSaaSです。別々の会社が提供している競合サービスなので、導入を検討する際はそれぞれが比較対象となります

主な機能は以下の4つです

  1. GitHub連携し、実装仕様に関するドキュメントを自動生成する
  2. 機能を理解するのに有用なダイアグラム(図)も自動生成する
  3. レポジトリ・ドキュメントについて、自然文でチャットできる
  4. Repoのコードが変更されると、自動的にドキュメントも更新される

それぞれの機能イメージは、別記事でスクリーンショットをまとめていますので興味ある方は参照してください

  • TODO: mutable.ai の各機能スクリーンショット集
  • TODO: adrenaline の各機能スクリーンショット集

mutable.aiの公式ブログでは、これらの機能を利用する効果として「コードベースに習熟するまでの時間を50%短縮」「ドキュメント作成時間を90%短縮」すると説明しています

mutable.ai/adrenalineを利用するシチュエーション

mutable.aiとadrenalineで最も重要なのは「レポジトリ・ドキュメントについて、自然文でチャットできる」機能です。小規模なレポジトリであれば GitHub Copilot Chatでも全体を考慮した回答が得られますが、巨大レポジトリでは十分な回答が得られません(少なくとも自分はそう感じています)

この記事では、Redmine(.gitを除いて約21MB)をコピーしたレポジトリを用いて検証します。Redmineは、Ruby On Railsをベースに開発された、広く利用されている課題管理ツールです。OSSの中では、一般に提供されているSaaSや企業内の基幹システムと近い基本構造を持っているため、今回の検証対象として選択しました

mutable.aiとadrenalineに質問を投げるにあたっては、以下3つのシチュエーションを想定することとします

  1. 新しいエンジニアのオリエンテーション
  2. 機能追加(例:二段階認証でSMS認証を追加する)
  3. ユーザからの問合せ(例:ログインできなくなった)

新しいエンジニアのオリエンテーションで、mutable.ai/adrenalineを利用する

入れ替わりの激しいソフトウェア・エンジニア界隈。採用・オリエンテーションに追われる管理職エンジニアも多いでしょう。その際、自社アプリケーションについて説明する労力を減らす方法はないだろうか?例えばチャットでレポジトリ内の質疑したら、的確に回答してくれるチャットボットがあればいいな。自分は常々そう考えていました

ということでmutable.ai/adrenaline に以下の質問をして、どんな回答が得られるか確認してみます

  • Q_1: 新しくRedmine開発チームに参加します。どこから理解すれば効率いいですか?
  • Q_2: ログやエラーメッセージは、どのように管理されていますか?

ざっくりした質問「Q_1」と、具体的なテーマに絞った「Q_2」です

Q_1: 新しくRedmine開発チームに参加します。どこから理解すれば効率いいですか?

mutable.ai

画面上部にあるテキストボックスから、チャットで質問します

返信はモーダル内に表示されます。「Start conversation」をクリックすると、ChatGPTライクな見慣れたチャット画面に遷移します

得られた回答は、レポジトリ全体がシンプルに整理されており、回答内のハイパーリンクをクリックすれば深掘りして理解を進めていけます。回答内容を見ると(Redmine を知っているなら)、ぱっと見バランスの良い構成立てだと感じます

なお、チャットモーダルの背景が英語となっている点が気になった方もいると思います。この件は 先に紹介した個別記事(TODO)で触れています

adrenaline

画面右下のテキストボックスからチャットを開始します。最初、日本語で回答を得られなかったので「日本語で回答してください。」と文末に追加しました

回答を見ると、LLMが事前学習した内容の影響を強く反映されている印象があります。一般的に、Redmine自体にコミットする人は少なく、Pluginを開発するケースの方が多い。そのため、LLMの中にPlugin開発を前提とした考え方が染みついているようです

なお、adrenalineには画面上部に [記事|図](英語では [Article|Diagram])というトグルが設置されています。同じトピックに対して記事とダイアグラム(図)が1:1で対応するUIです。「図」に切り替えると、ダイアグラムが表示されます

記事の内容を的確にダイアグラム化していますが、一般的な内容のためあまり参考にはならない印象を持ちました

Q_2: ログやエラーメッセージは、どのように管理されていますか?

mutable.ai

普通に、Railsっぽいログ管理をしてるなと理解できます。Redmine独自で特に気にすべき事はとりあえずなさそうです

adrenaline

こちらも、わかりやすく解説されています。Railsに詳しくない人も、ログ・エラー管理についての仕組みを俯瞰的に把握できそうです

[Article|Diagram]トグルをDiagramに切り替えてみます。Railsに詳しくない人も、ログ・エラー管理についての仕組みを俯瞰的に把握できそうな内容です

ダイアグラム内の「エラーメッセージ」という要素をクリックすると、当該要素についてドリルダウンして追っていけます。関連トピックや関連ファイルについてさらに追加調査を進められます

Chromeの翻訳機能で元の英語表示を変換しているため、変な日本語となっている箇所もありますが、スムーズに調査を進められる優れたUI/UXだと感じます

機能追加の際に、mutable.ai/adrenalineを利用する

Redmine にはデフォルトで SMS二段階認証機能は搭載されていません。機能追加の例として、このSMS二段階認証を追加する事を考えます

以下の質問を、mutable.aiとadrenalineに投げてみます

  • Q_3: 二段階認証でSMS認証を追加するにはどうしたらいいですか?日本語で教えてください。
  • Q_4: 二段階認証でSMS認証を追加するための開発・テストに必要な工数を見積もってください

Q_3: 二段階認証でSMS認証を追加するにはどうしたらいいですか?日本語で教えてください。

mutable.ai

SMS送信サービスと契約し、API経由でSMS送信する前提の回答が得られます。libディレクトリにSMS送信機能を実装するアーキテクチャで提案されます


同じスレッド内で「twilio のAPIを利用する想定で、sms.rbの内容を具体的に提案してください。また、ビューファイルについても具体的に提案してください」とお願いしてみます


細かな修正が必要かもですが、提案されたコードをベースに作業を進められそうです

adrenaline

mutable.ai同様、SMS送信サービスと契約し、API経由でSMS送信する前提の回答が得られます。異なるのは、Pluginとして実装するアーキテクチャを提案する点です

「結論」部分には、「この機能を追加するには、外部APIの利用、プラグインの開発、そしてRedmineのシステムへの深い理解が必要です」と書かれています。先に書きましたが、やはりadrenalineは、LLMの事前学習情報を重視した回答をする傾向があると感じます

Q_4: 二段階認証でSMS認証を追加するための開発・テストに必要な工数を見積もってください

開発STEPの全体像、及びそれぞれのSTEPの工数ボリュームを把握したいケースは多いです。そんな時も mutable.aiやadrenalineは使えるでしょうか?

mutable.ai


合計18人日と、やや保守的な見積結果となりました。でも全体のバランスは良いので、見積する際の参考にできそうです。スクラムのプランニング・ポーカーを、生成AI相手にしている感覚に陥ります(笑)

adrenaline

合計29人日と、超保守的な見積結果です。mutable.aiには無かった「要件定義」「設計」「ドキュメント作成」「レビューおよびフィードバックの取り込み」工程が含まれており、且つ各工程の個別見積も多めに見積もられているためです。うーむ

ユーザ問合せの対応時に、mutable.ai/adrenalineを利用する

Webアプリケーションを運用していると、それが企業内であるかパブリックであるかに関わらず、利用者からの問合せ対応が必要です。地味に大変な作業です。代表的な問合せは、ログインに関するものです

以下の質問をmutable.aiとadrenalineに投げてみます

  • Q_5: ユーザからログインできなくなったと報告がありました。どのような原因が考えられますか?
  • Q_6: アカウントロックを解除するにはどうしたら良いですか?

Q_5: ユーザからログインできなくなったと報告がありました。どのような原因が考えられますか?

mutable.ai

Redmineのアカウント管理機構を把握した上で可能性のある原因をリストし、それぞれについてソースコードへのハイパーリンクが貼られています。便利です

adrenaline

・・・。今回の対象レポジトリ固有の回答では無く、一般的な回答が返ってきました。ChatGPTで質問した場合とあまり変わりが無いですね

Q_6: アカウントロックを解除するにはどうしたら良いですか?

先の質問と同じスレッドで、追加質問します

mutable.ai

ソースコードへのハイパーリンク付きで、きちんとした説明が得られます

adrenaline

・・・。ChatGPTと変わらない。

今回検証して感じたこと

mutable.aiの方が、adrenalineと比べて適切なIndexを生成した上で回答している印象を持ちました

mutable.aiを本格的に導入したいな、と思いつつ。ソースコードすべてに対してのIndexを、他社(それもスタートアップ企業)に許可するというリスクを負うか?というのは、判断がなかなか難しいです

自分で同じような社内ツールを作ることもできそうですが、回答精度的に mutable.aiに追いつくのは結構ハードル高いだろうな。とも感じます

mutable.aiは、オンプレで導入する事も(利用・運用料金が爆上がりしそうですが)可能なようなので、オンプレでリスクがどれだけ軽減するかについても調べてみようかな・・・