Inspiration
世間では仕様を自然言語で記述してそれをコードとして出力する取組が大変盛り上がっていますが、開発者の目線に立つと、実はこのソリューションは全く適切ではありません。開発者はコードを書くのが好きで、ドキュメントを作成したりテストしたりするのが嫌いなのです。このコアアイディアをベースに、コードさえ書けば、それに付随するドキュメント生成・テストケース生成をやってくれるサービスとして企画・実装しました。
What it does
開発者が作成したコードをアップロードすることで、その全体像を解析し、設計書やテスト仕様書のたたき台を作成します。モデルはGeminiとClaudeの2種類を選択できます。
How we built it
開発者負担軽減の達成を目指して開発を進めました。まず、コード解析に基づいてドキュメントやテストケースを自動生成するため、GeminiとClaudeという二つの異なる大規模言語モデルを用意しました。 アーキテクチャはクラウドネイティブで、ユーザが簡単にコードをアップロードできる直感的なUIを目指しました。現時点はZIPでまとめたファイルをアップロードしますが、様々な形式に今後対応させる見込みです。フロントとなるWebサイトはCloud Storageにホスティングしています。Cloud Run Functionsを使いVertex APIをコールし、コードを解析して結果を返します。モデルはGeminiとClaudeを選択して利用できるようにしました。解析結果を元に設計書やテストケースを生成する処理は、編集可能なプロンプトテンプレートで主に制御されています。
Challenges we ran into
適切な結果を出力するプロンプティングの調整にはかなり時間を掛けました。また、テストケースの生成についても、一見するとそれっぽいものが出ているのですが、カバレッジなどに甘いところが多く、引き続きの検討・検証が必要なポイントと感じています。また、今回実装が間に合いませんでしたが、UIイメージから仕様書やコードを出力する取組にも挑戦していました。落書きレベルの簡単なUI図から結果を出力することでマルチモーダル化を目指しましたが、この課題は今回達成できず悔いが残っています。
Accomplishments that we're proud of
このサービスを構築した中で、アイディアとしてはややプリミティブであるものの、自然言語からコードを生成するというよくあるユースケースの逆を開発者目線で実装したところは良い成果でした。実際の開発現場でも、コードを書くことそのものよりもドキュメントの作成に7割以上の手間が掛かっているという実態もあり、このアプローチの方が適切だと考えています。 また、モデルの切り替えを簡単にできるようにUIを作ったのですが、これはモデルの拡張や比較をする際に非常に有用なFeatureであり、他のサービスにも応用可能なものと確信しています。
What we learned
本ハッカソンを通じて、異なる大規模言語モデル(GeminiとClaude)の特性をそれぞれ深く理解することができました。モデルごとに得意とするタスクが異なるため、用途に応じたモデル選択や、どのようにAPIを活用すれば最適な結果が得られるかについて大きな学びがありました。現時点はユーザがモデルを選択しますが、タスクによって自動で切り替えるなど、この仕組みには大きなポテンシャルがあると感じています。また、コード解析を行う際に、コードの構造や書き方によってモデルのパフォーマンスが大きく変わることを実感しました。事前のコード整形や標準化の重要性を認識したので、この点も今後盛り込みたいです。 また、実際にこのサービス自体を作っていて、やはりコードを書くこと自体はなんの苦もないことを改めて実感しました。このサービスのドキュメントを作れとか網羅テストをやれとか言われたら、きっとかなりモチベーションが下がるでしょう(笑) 直感的には、技術の民主化とか生産性向上などの旗印で自然言語からのコード生成が重要に思えますが、コードベースで明確にディスカッションすることを好む開発者には、逆のアプローチの方が遥かに助けになるので、双方のアプローチで更なるDXを実現できる社会を目指したいです。
What's next for CodeBlossom
- よりよい結果を得るためのプロンプティングの考案
- コード規約などプロジェクト固有の決まりをアップロードしてRAGさせる仕組みの実装
- 利用できるモデルの追加・拡張
- 異なるモデルで同時実行し比較する機能の追加、また自動比較・評価の機能
- UIイメージなど文字情報以外のインプットからの結果出力、マルチモーダル化

Log in or sign up for Devpost to join the conversation.