はじめに
はじめまして!Orbiticsデータサイエンス部所属のYoshiokaです!昨今生成AIの活用が進んでおり、弊社でもいくつか検証のプロジェクトが進んでおりますので、簡単にはなりますが検証結果をシェアさせていただきます!
背景
現在の業務において、SQLコーディングは手作業で進めている部分が多く、効率化の余地が大きいと感じています。この課題に対し、近年目覚ましい発展を遂げている生成AIが有効な手段となりうるか、具体的な手法と検証内容を共有します。
特に、本資料では「Vibe Coding」と呼ばれる、生成AIと対話しながらCodingするアプローチを用いたSQLコーディングの効率化に焦点を当て、その概念と実際の検証計画、期待される効果について詳細に解説します。
現状の課題:SQLコーディング業務の効率化
データ分析において、データベースからのデータ抽出や前処理は不可欠であり、その中心となるのがSQLコーディングです。筆者はデータサイエンス部の一員として、日々様々な分析ニーズに応じたSQLクエリを作成しています。
しかしながら、これらのコーディング作業は多くの時間を要します。特に、複雑な条件指定、複数のテーブル結合、集計処理などを含むクエリは、手作業での記述、デバッグ、最適化に多くの工数がかかります。現状では、これらの作業はほとんど自動化されておらず、より迅速かつ効率的にデータを用意できる体制を構築することが求められています。
解決策の模索:生成AIとVibe Coding
この課題に対し、生成AIの活用が有効ではないかと考えました。単にゼロからコードを生成させるだけでなく、人間が意図や文脈を与え、AIがそれを基にコードを補完・生成するという、よりインタラクティブなアプローチが現実的かつ効果的ではないかと考えています。
まさにこのアプローチが、「Vibe Coding」です。Vibe Codingとは、コーディング作業において、コードの全体像や部分的な意図(=Vibe)を人間が提示し、生成AIがそのVibeを汲み取って具体的なコードスニペットや全体像を生成・補完する手法です。完全にAI任せにするのではなく、人間の判断や指示とAIの生成能力を組み合わせることで、コーディング速度と品質の向上を目指します。
Vibe Codingとは?
Vibe Codingは、以下の流れを基本的な考え方とします。
- 人間の意図(Vibe)の提示: コーダーは、実装したい機能、取得したいデータの条件、コードの構造など、抽象的あるいは具体的な意図を自然言語や既存のコード断片としてAIに与えます。
- AIによるコード生成/補完: 生成AIは与えられた意図(Vibe)を解釈し、関連するSQLコードを生成したり、既存のコードの欠落部分を補完したりします。
- 人間の評価と修正: 生成されたコードが意図に沿っているか、構文的に正しいか、効率的かなどを人間が評価し、必要に応じて修正や追加の指示を行います。
- 繰り返しの対話: 上記のプロセスを繰り返すことで、目的とするSQLクエリを効率的に完成させます。
この手法の肝は、AIがコードを「書く」ことだけでなく、人間の「考え」や「意図」を理解し、コーディング作業におけるブレインストーミングパートナーや強力なアシスタントとして機能する点にあります。
実践検証計画
Vibe CodingがSQLコーディング効率化にどれだけ寄与するかを定量・定性的に評価するため、以下の検証を実施します。
検証の目的
実際の業務で使用しているSQLクエリを題材に、Vibe Codingを用いた場合のコード生成にかかる時間と生成されたコードの精度を測定し、手作業と比較してどれだけ効率化が見込めるか、どのような場合に有効であるか、あるいは課題は何かを明らかにします。また、付随するドキュメント生成(Wiki形式の説明)についても、効率化・精度の観点から評価を行います。
検証内容の詳細
-
検証対象の選定: 実際のデータ抽出業務で使用頻度が高い、ある程度複雑さを持つSQLクエリを検証対象として選定します。今回は、実際の案件でも用いられるキャンペーンの効果検証に用いるSQLクエリを対象とします。
-
生成AIへの入力: Vibe Codingの実践として、生成AIへの入力情報を以下の通り準備します。
- 既存コード: 検証対象クエリのうち、入力となる会員テーブル、決済テーブルなど、集計前の元データに関するSQLコード断片を生成AIに与えます。
CREATE TABLE shema.作成テーブル AS WITH params AS ( SELECT 'YYYY-MM-01'::date AS キャンペーン開始日, 'YYYY-MM-31'::date AS キャンペーン終了日, ), tg_store AS ( SELECT 店舗マスタに関する諸々のカラム FROM shema.店舗マスタ ), sales AS ( SELECT カード決済に関する諸々のカラム FROM カード決済情報 WHERE 利用日 between キャンペーン開始日 and キャンペーン終了日 ), out_d AS( SELECT sales.* , 店舗情報の加工カラム FROM sales INNER JOIN tg_store USING(key1, key2) ) SELECT * FROM out_d;
- 自然言語による指示: 集計や結合、複雑な条件指定などの処理内容を、クエリから汲み取るように自然言語(日本語)で記述します。(めちゃ雑ですがこれでもいけた(笑))
添付クエリで作成されるテーブルを説明して
-
生成AIによるSQLコードおよびWikiの生成: ステップ2で準備した入力情報(既存コード断片と自然言語での指示)を生成AIに入力し、集計クエリ(集計・分析部分のSQLコード)の生成、および入力テーブルと出力結果テーブルをカラム単位で説明するWiki形式の文章の生成を依頼します。
プロンプト1: では、これらのテーブルを使ってキャンペーンに関する{集計したい指標の指示}で集計するようなSQLコードを生成せよ プロンプト2: グループ化のキーはXXXだけにして、指標Aと指標Bを横並びで比較できるようなアウトプットがいい プロンプト3: これを全体と個別の加盟店での内訳を集計したものにして ・・・以下、出力に関するやり取りを3ラリー程度 wikiの生成に関して プロンプト4: (wikiのサンプルページのPDFと併せて)生成したクエリを以下のような形式のwiki情報にまとめてほしい
-
結果の評価:
- 時間計測: 生成AIへの入力準備から、SQLコードおよびWikiの生成が完了するまでにかかった時間を測定します。この時間を、手作業で同様のSQLコーディングとそれに関する説明資料を作成する場合にかかるであろう時間と比較するためのデータとします。
- 精度検証: 生成されたSQLコードが、元のクエリと出力結果を比較して、論理的に同等であるかを確認します。具体的には、生成されたコードを実行して得られるデータが、元のクエリで抽出されるデータと一致するか、意図通りのデータが抽出できるかなどを評価します。
-
分析と比較: 測定した時間、生成されたコードの精度、修正にかかった時間などを分析し、手作業でゼロからコーディングおよび関連ドキュメントを作成した場合と比較して、Vibe Codingがどの程度効率化に貢献する可能性があるかを評価します。
AsIsとTobeの全体構成
今回の検証に際し、現状の処理フローからデータマートの作成クエリと自然言語プロンプトを入力とし、Vibe Codingを用いて効率化することを目指します。
検証環境
- データベース: AWS Redshift
- 対象SQL: AWS Redshiftに対してデータ抽出を行うためのSQLクエリ
- 生成AI: Gemini Advanced (2.5 Flash)
検証結果
時間
今回の検証における、手作業とVibe Codingを用いた場合の作業時間は以下の通りです。
-
手作業とVibe Codingの比較:
- Outputクエリの記述(AI生成 + 修正): 約3分の1に時間短縮
- コード確認・デバッグ: 約4分の1に時間短縮
- 関連Wiki(AI生成 + 修正)記載: 約15分の1に時間短縮
- 合計: 約4分の1以下に時間短縮
Vibe Codingを用いることで、作業時間を約4分の1以下に短縮できる可能性が示唆されました。特に、定型的な記述やWiki形式の説明生成において、AIの活用が効果的でした。
精度
生成されたSQLクエリと、元々存在した(手作業で作成した)クエリの出力結果を比較検証しました。
結果として、出力されるデータに最大で4.95%ほどの差異が見られました。この差異は、完全に一致することが望ましいデータ分析業務においては看過できない可能性があります。
しかしこの差異の原因を調査した結果、AIへの入力情報(自然言語での指示や既存コード)における、カラム名の厳密な指定や、細かな条件分岐に関する説明の不足が主な要因であると考えられます。したがって、使用するカラムや条件をより詳細かつ正確にAIに指示を与えることで、精度の改善が見込めると推測されます。
期待される効果と今後の展望
この検証を通じて、Vibe CodingがSQLコーディング業務において以下の効果をもたらす可能性があると考えています。
- コーディング時間の短縮: 特に定型的な処理や複雑な構文の記述において、AIが下書きを生成することで手作業の時間を大幅に削減できる可能性があります。
- ドキュメント作成時間の短縮: SQLだけでなく、関連するテーブル定義などのドキュメント作成も同時に行えることで、分析フロー全体の効率化に繋がる可能性があります。
- コード品質の向上: AIが一般的なプラクティスに基づいたコードを生成することで、構文ミスや非効率な記述を減らせる可能性があります。(※精度検証で課題が見られたため、指示の出し方の改善が重要)
今回の検証は最初のステップですが、ここで得られた知見(特に精度向上に向けた指示方法の改善点など)を基に、データサイエンス部内での生成AI活用ガイドラインの策定や、より高度な活用方法(例: クエリ最適化の提案、データモデリング支援など)についても検討を進めていきたいと考えています。