はじめに
はじめまして、テクノロジー戦略室室長の竹下です。現在、AI推進室として活動しており、今回こちらのブログにお邪魔して書かせてもらいました。Leverages Tech Blogでもいろいろ書いているので、そちらもぜひ見てください!
業務上、アンケートの分析だったり、そこからの示唆の分析などを行うことも多々あるのですが、そんな時に最近はDuckDBを利用しています。この記事では、DuckDB + DuckDB MCP + VSCode copilotを利用した自然言語で分析を手軽にできる環境のご紹介をしたいと思います。
DuckDBとは
DuckDBとは、ローカル、シングルノードで動作する、高性能な分析データベースシステム(列指向DB)です。
- 標準SQLに加えて、分析用の関数を豊富にサポート
- csv,json,parquetなど豊富な形式のimportが可能
- CLI mode, notebook gui modeに、Python,Javaなどのライブラリサポートなど利用しやすい
と言ったメリットがあります。
MCPサーバーとは
最近流行りのModel Context Protocolです。
ここでは詳細な説明は割愛しますが、AIが外部のツールを使うための共通のプロトコルです。この資料などを参考にしてください。
また、DuckDBだけでもCLIから利用可能ですが、MCPサーバー経由にしたほうが体感精度が上がっている気がするのと、パーミッションなどの設定が楽なので、利用しています。
データ分析の準備
1: DuckDBのインストール
DuckDB Installation に従ってDuckDBをインストールしてください。Macでbrewが入っているなら、
brew install duckdb
でインストール可能です
1: ダミーデータの作成
今回はサンプルとして、「AIツールの活用アンケート」として次のような設問をGoogleフォームで収集し、その回答を分析してみたいと思います。
| 設問 | 回答種類 | 回答例 | 
|---|---|---|
| あなたはAIツールを使っていますか? | 「はい」「いいえ」の二択 | はい | 
| AIツールの満足度を教えて下さい | とても不満、やや不満、普通、すこし満足している、とても満足しているの四択 | 不満 | 
| どのツールを利用しています | Copilot,Cursor,Windsurf,Claude code, Kiroの複数選択式 | Copilot,Cursor | 
| コメント | フリーテキスト | AI活用で生産性が上がりました | 
データ例
あなたはAIツールを使っていますか?,AIツールの満足度を教えて下さい,どのツールを利用していますか?,コメント はい,やや不満,Copilot,思ったよりAIが賢くない いいえ,,,使いたいと思っていない はい,とても満足,"Cursor,Windsurf", はい,普通,"Kiro,Claude Code",使いこなせていない
1: VSCodeにMCPサーバーを登録
DuckDBがインストール出来たら、次はMCPをセットアップしていきます。公式の用意しているmcp-server-motherduckを使います。ドキュメントのLocal DuckDB fileの設定を追加してください。または、
⌘+P > uvx mcp-server-motherduck –db-path /{absolute/path}/local.db > DuckDBを実行すればMCPサーバーを登録出来ます。
または、.vscode/mcp.jsonファイルを作成し、
{
    "servers": {
        "DockDB": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "mcp-server-motherduck",
                "--db-path",
                "/{absolute/path}/local.db"
            ]
        }
    },
}
と設定します。
ファイルパスは絶対パスで指定してください。
なお、VSCode以外にも、Claud descktopやCursor, GooseなどMCPサーバーが使えるものならどれでも使えます。設定方法は各ツールで異なるため、それぞれのマニュアルを参照してください。
2: CSVやスプレッドシートからインポート
スプレッドシートも、そのままURLからインポートしてこれますが、AIはまだ上手くやってくれないので、今回はCSVからインポートします。ローカルにファイルを落とせば大体の形式がインポートできます。
プロンプト answer.csvを、そのままimportして
を実行すれば、とりあえずlocal.dbに入れてくれます。テーブル名は、ファイル名(今回の場合はanswer)で作成されています。
余談
リセットしたければ、local.dbファイルを削除し、最初から指示を与えて行けばデータを復元できます。
3: AIへのインストラクション
copilotの場合は、github/copilot-instructions.md ファイルを用意しておくと、その内容を常に参照してくれます。ここで事前知識を与えることで、作業が楽になります。ここでは例えば次のようなインストラクションを設定しておきます。
* 指示がない場合'answer'テーブルを使用する * 結果は常に表形式で出力して * "統計値"と指示されたら、"平均値","中央値","分散","偏差"を計算して返す * "数値データ"と指示されたら、"satisfaction"カラムを使って
3: 事前データ処理
ここからは実際に使ったプロンプトを交えて紹介していきます。プロンプトはあくまで一例で、同じプロンプトでも同じ挙動にならなかったり、他のプロンプトでも同じことができるので、各自で検証をお願いします。
カラム名変更
カラム名が日本語になっている場合、英語に直しておいたりなどすると後々便利です。
カラム名を"tool use", "satisfaction", "using tools", "comment"に変更して
数値化
例えばアンケートで、選択肢の回答で「悪い」「普通」「良い」のようなラベルで回収していた場合、分析する場合には1~3などの数値にマッピングしたいことがあると思います。それらのマッピングも簡単です。
tool useを、はい:1、いいえ:0に変換して
satisfactionを、とても不満:1, やや不満:2, 普通:3, やや満足:4, とても満足:5に変換して
One hot encoding
複数選択回答は分析するために、選択肢毎にカラムを用意し、選択されていたら1,されてないなら0に変換して分析をします。そのデータ変換はOne hot encodingと呼ばれます。
using toolsをone hot encodingして
キーワードが含まれているかの抽出
フリーテキストに特定のキーワードが含まれているかどうかも簡単にカラム化出来ます。
commentに"生産性"というキーワードが含まれているかのカラムを追加して。カラム名は"productivity"
おまけ: DuckDB UI
DuckDBはデフォルトでNotebookスタイルのUIも表示されています。
次のようなコマンドで起動できます。クエリ結果を表で表示、スキーマを見る、実行したコマンドを再実行などもできます。
duckdb local.db -ui
ただし、readonlyモードで起動できないので、他にdbへの操作を行っているとロックのコンフリクトが起きてしまうので注意してください。
データ分析の実行
基本的な統計値の取得
インストラクションで指示しているので、次のような指示で取得出来ます。
数値データの統計値を出して
他にも様々な統計関数をサポートしているため、基本的な統計値の取得はすぐ出来ます。
エージェントに分析をさせる
もちろん、エージェントに考えさせることも可能です。
満足度と使用ツールの関係を分析して
など対応してくれます
まとめ
DuckDB + DuckDB MCP+ VSCode copilotを組み合わせることで、お手軽に自然言語で各種分析が可能になります。また、インストラクションなどを組み合わせることで、効率的に分析を進めることが可能になります。皆さんも、これまでスプレッドシートで頑張っていた分析業務をDuckDBでやってみませんか?