Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
自然言語で ActiveRecord を操作する試み
Search
dak2
October 06, 2025
65
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自然言語で ActiveRecord を操作する試み
Stdio の MCP Server を使って自然言語で ActiveRecord を操作してレコードを取得する試みについてのスライドです
dak2
October 06, 2025
More Decks by dak2
See All by dak2
特殊変数大全
dak2
0
12
登壇その後 - ZJIT への興味とハック
dak2
0
12
現場のトークンマネジメント
dak2
1
280
KaigiEffect.new(name: "dak2").generate
dak2
1
110
No Types Needed, Just Callable Method Check
dak2
1
8.9k
MCP Security Best Practices に見るセキュリティリスクとmodelcontextprotocol/ruby-sdk の authorization の現在地
dak2
0
70
DoD x RBS
dak2
0
35
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Site-Speed That Sticks
csswizardry
13
1.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
So, you think you're a good person
axbom
PRO
2
2.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
My Coaching Mixtape
mlcsv
0
310
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Music & Morning Musume
bryan
48
7.4k
Transcript
2025/10/06 【リジェクトConライク】Re:cycle〜Kaigi on Rails 2025編〜 株式会社タイミー 神山大智 自然言語で ActiveRecord を操作する試み
@_dak2_
自己紹介 Daichi Kamiyama (@dak2) • 株式会社タイミー(2024年6月入社) • バックエンドエンジニア ◦ 働き手であるワーカーの時間と事業者の時間のマッチング部
分を最適化するための改善や機能開発に従事 ◦ 最近は生成AIに対して丁寧にお伺いすることを生業にしてい るが、生成AIのアウトプットをレビューする認知負荷の高さに 疲弊している
今日伝えたいこと 自然言語で ActiveRecord は 操作できる!! *1 *1 本番環境で検証できてないです
目次 • 動機の話 • MCP との出会い • MCP サーバーを作る •
自然言語でクエリしよう
ある日思ったんですよね
自然言語でレコード を参照できると嬉しそう
rails c とか rails runner で取得して コピペしたら良いよね
値を取得するために 都度クエリを叩かないと
面倒だネ!
MCP を使えば なんとかできるんじゃない?
そもそも MCP って何?
AI アプリケーションと外部システム を繋ぐ機構のこと https://modelcontextprotocol.io/docs/getting-started/intro
None
AI エージェントが Google カレンダー とか Notion にアクセスして、パーソナ ライズされたレスポンスを返せる
MCP のユースケースって 何があるの?
https://github.com/modelcontextprotocol/servers
modelcontextprotocol/servers に MCP Server の実例、いわゆる “Real World MCP” が掲載されています
• Heroku • Notion • Prisma • TiDB • AWS,
Azure, Google Cloud Run, etc…
MCP のユースケース 増えていってる
9/23 に chrome-dev-tools MCP が発 表されました ブラウザのコンソールログやネットワークログを取得したり、スクリーンショッ トを撮影したりすることで、デバッグ情報を AI エージェントに提供できるみた
いです。便利そう https://developer.chrome.com/blog/chrome-devtools-mcp?hl=ja
データベース周りの MCP は どんなものがある?
https://github.com/googleapis/genai-toolbox
https://github.com/pingcap/pytidb
https://github.com/aliyun/alibabacloud-adb-mysql-mcp-server
https://github.com/niledatabase/nile-mcp-server
MCP でデータベースと接続する ユースケースはありそう
MCP 経由でデータベース見に行かなく ても、Rails の ActiveRecord を介して 見に行った方が早そう (接続時の認証まわり面倒そうですし)
ActiveRecord を介してレコードを取得 する MCP サーバーを作ろう
MCP サーバーを 自作していく
gem あるかな?
• fast-mcp ◦ 割と機能が揃ってる • mcp-rb ◦ Sinatra like の
DSL でシンプルに書ける • ruby-sdk ◦ MCP の Ruby 公式 SDK
複雑なものを 作るわけではないので拘りがない => 公式を使っておこう
前提 • 生成 AI の GUI は Claude Desktop ◦
=> Client • MCP サーバーは stdio • GUI から Rails プロジェクトのレコー ドを取得する
補足 MCP サーバーには • stdio ◦ 標準入出力なのでプロセスとして動かす • Streamable HTTP
◦ HTTP POST/GET を通じてやり取り
Let’s building
https://github.com/modelcontextprotocol/ruby-sdk/tree/main/examples 1. 実現方法を確認
https://github.com/modelcontextprotocol/ruby-sdk/blob/main/examples/stdio_server.rb 1. 実現方法を確認
とてもシンプルな構成で、Tool 定義し て stdio サーバーを立ち上げる 1. 実現方法を確認
ここで道筋の整理 🛤 • ActiveRecord を介してレコードを取 得できる Tool を定義 • Stdio
Server に定義した Tool を設定 • 標準入出力として呼び出し • Claude Desktop と連携 1. 実現方法を確認
https://github.com/modelcontextprotocol/ruby-sdk/blob/main/examples/stdio_server.rb 2. Tool を定義
https://github.com/dak2/activerecord-mcp/blob/main/lib/activerecord-mcp/tools/select_records.rb 2. Tool を定義
https://github.com/dak2/activerecord-mcp/blob/main/lib/activerecord-mcp/tools/select_records.rb 2. Tool を定義
https://github.com/dak2/activerecord-mcp/blob/main/lib/activerecord-mcp/tools/select_records.rb 2. Tool を定義
Open3#capture3 を使って別ディ レクトリの Rails アプリケーション で ActiveRecord を実行する 2. Tool
を定義
少し Open3 の説明
https://docs.ruby-lang.org/en/3.4/Open3.html#method-i-capture3 2-1. Open3
https://docs.ruby-lang.org/en/3.4/Open3.html#method-c-popen3 2-1. Open3
ActiveRecord を実行する別の Rails ア プリケーションのディレクトリを指定 する必要がある 2-1. Open3
https://docs.ruby-lang.org/en/3.4/Process.html#method-c-spawn 2-1. Open3
https://github.com/dak2/activerecord-mcp/blob/main/lib/activerecord-mcp/tools/select_re cords.rb 2-1. Open3
2-1. Open3 つまり、 大いなる力を使う ということです
https://github.com/dak2/activerecord-mcp/blob/main/exe/activerecord-mcp 3. Stdio MCP Server の立ち上げ設定
exe ディレクトリに定義した Stdio MCP Server をクライアント側、つまり Claude Desktop から呼んでもらう 3.
Stdio MCP Server の立ち上げ設定
~/Library/Application Support/Claude/claude_desktop_config.json 4. Claude Desktop と繋ぎ込み
別の Rails アプリケーションと言及して いましたが、posts だけのテーブルを 持った rails new に毛が生えた程度のア プリで実験してます
補足
デモ
注意事項
• SQL 文はちゃんと検証した方が良い • 本番環境で試していないです ◦ できると便利そうではある。ちょっと怖いけど • 認証周り(Authorization)未対応です •
かなり力技の実装になってると思いますw
まとめ
• 自然言語でクエリできる MCP サーバーも サクッと作れる • Open3 は用法用量を守って使った方が良 さそう •
modelcontextprotocol/servers 見ると 様々なユースケースがあるので見てみると 面白い