Tidewave Rails について
Tidewave Rails は、コーディングエージェントに Ruby on Rails 開発向けのランタイムレベルのツールを提供する MCP サーバーです。エージェントは起動中の開発環境に対して、コードの実行、ログの参照、データベースへの問い合わせ、ロックされた gem バージョンに合わせたドキュメントの確認を行えます。
主な機能
- 01起動中のアプリの文脈での Ruby コード実行
- 02アプリのライブログの参照
- 03開発データベースへの SQL クエリ
- 04gem を含むクラスとメソッドのソース位置の特定
- 05Gemfile.lock のバージョンに固定されたドキュメントの参照
活用シーン
- 01ライブのアプリケーション状態に対して失敗しているコードパスをデバッグする
- 02開発データベースで作成処理後に保存された値を確認する
- 03アプリが使用するバージョンの依存 gem の API を調べる
MCP 対応
Tidewave Rails は、起動中の Web アプリの /tidewave/mcp パスにマウントされる HTTP(streamable)型の MCP サーバーで、project_eval、execute_sql_query、get_docs、get_source_location などのツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Tidewave Rails
Tidewave Rails は、コーディングエージェントを使った Ruby on Rails アプリの開発向けに、実行時レベルのツールを提供する MCP サーバーです。
エージェントはこの MCP サーバーを使って、開発中に実行中の Rails アプリと連携し、次のことができます。
- 実行中のアプリのコンテキストでコードを実行する(エージェント向けの Rails コンソールのようなものです)
- アプリの最新のログを読む
- 開発用データベースにクエリを実行する
- クラスやメソッドのソースコード上の位置を取得する
- アプリが依存する gem のバージョンに正確に対応したドキュメントを読む
この MCP サーバーは、Rails と Phoenix 向けのエージェント型開発環境である Tidewave のオープンソースコンポーネントです。
このプロジェクトは単独の MCP サーバーとして使うことも、以下の手順に従って Tidewave 製品と統合して使うこともできます。
インストール
1. アプリに Tidewave gem を追加する
次のコマンドを実行すると、アプリに Tidewave Rails を追加できます。
bundle add tidewave --group development
または、Gemfile の開発用グループに tidewave gem を手動で追加します。
gem "tidewave", group: :development
2. エージェント/エディターに Tidewave MCP を追加する
エディターまたは MCP クライアントの設定で、Tidewave MCP サーバーをタイプ「http」(ストリーミング可能)として追加し、Web アプリケーションが実行されているポートの /tidewave/mcp パスを指定します。たとえば、http://localhost:3000/tidewave/mcp です。
次の環境向けの個別の手順も用意しています。
使い方
ほかの MCP サーバーと同じように、エージェントは必要に応じて Tidewave MCP が公開するツールを呼び出します。また、明示的に呼び出すよう指示することもできます。
利用可能な MCP ツール
project_eval
実行中のアプリのコンテキストで Ruby コードを評価します。アプリの実行環境、読み込まれた依存関係、メモリー上のデータにアクセスでき、評価結果と標準出力に出力された内容を返します。エージェント向けの Rails コンソールのようなものです。
エージェントは、挙動を推測するよりコードを実行したい場合にこのツールを使い、実行中のアプリの実際の動作に基づいて次の手順を決められます。たとえば、メソッドを呼び出して返り値を確認したり、実行中のアプリの状態を使って失敗するコードパスを再現し、デバッグしたりできます。
execute_sql_query
アプリの開発用データベースに対して SQL クエリを実行し、行をエージェントに返します。
エージェントは、開発用データベースに対する任意の SQL の実行に利用できます。たとえば、現実的なデータを使ったときのページの表示を確認するために、テストレコードを挿入するよう依頼できます。また、作成アクションの後に、期待した値でレコードが保存されたかをエージェントが確認することもできます。
get_docs
クラス、メソッド、または定数のドキュメントを、アプリの Gemfile.lock で固定された正確な gem のバージョンから検索します。
エージェントは、クラスやメソッドの動作が不確かなときにこのツールを使えます。そうすることで、生成するコードを、古くなっている可能性のある学習データやアプリが依存するバージョンとの一致が保証されない一般的なドキュメント検索ではなく、アプリが使用する gem の正確なバージョンのドキュメントに基づかせることができます。
get_source_location
アプリと依存関係の両方を対象に、クラス、モジュール、メソッドが定義されているファイルと行番号を返します。
エージェントは、クラスやメソッドが定義されているファイルと行番号に直接移動するためにこの機能を使用できます。grep で検索する必要はなく、定義が gem の依存関係にある場合にも対応します。
また、ソーステキストを解析するのではなく、実行中のアプリから場所を特定するため、実行時に生成され、grep で検索できるリテラルな def として現れないメソッドを扱うメタプログラミングにも対応します。
メモ
ルートや関連付けなどのツールがないのはなぜですか?
Tidewave には、ルートや関連付けなどを一覧表示するツールは含まれていません。エージェントはそれぞれのソースファイルを読む方が適しており、その方がより多くのコンテキストを得られ、追加のツール呼び出しなしで必要な編集を行えるためです。
その代わり、Tidewave は、(新しいインスタンスを起動せずに)Rails アプリ内でコードを評価したり、ソースの場所を特定したりするなど、不足している機能を補うことを目指しています。メタプログラミングや、Bundler が依存関係をインストールできる場所が複数あることから、grep を使っても難しい場合があります。
トラブルシューティング
Tidewave のツールバーが表示されない
Tidewave のミドルウェアが実行された後に、レスポンスを圧縮(gzip、brotli など)している場合に発生することがあります。bin/rails middleware を実行し、Tidewave が Rack::Deflater などの後に配置されていることを確認してください。また、ブラウザーとターミナルのログにエラーがないか確認してください。
複数のホスト/サブドメインを使用する場合
開発中に複数のホスト/サブドメインを使用する場合は、ブラウザーがセキュアと見なす *.localhost を使用する必要があります。また、config/initializers/development.rb に次の設定を追加してください。
config.session_store :cookie_store,
key: "__your_app_session",
same_site: :none,
secure: true,
assume_ssl: true
さらに、rack-session のバージョン 2.1.0 以降を使用していることを確認してください。
上記の設定により、セキュアなコンテキスト(admin.localhost、www.foobar.localhost など)を使用している限り、複数のサブドメインにわたってアプリケーションを Tidewave 内に埋め込んで実行できます。
コンテンツセキュリティポリシー
Content-Security-Policy を有効にしている場合、コンテキストに応じたブラウザーのテストが正しく機能するよう、Tidewave は script-src に "unsafe-eval" を自動的に有効にします。また、frame-ancestors ディレクティブも無効にします。これは Tidewave が読み込まれる環境(デフォルトでは開発環境)でのみ行われます。
本番環境
Tidewave は、Web アプリケーションの開発をより迅速かつ効率的に進めるのに役立つ強力なツールです。ただし、Tidewave は本番環境での使用を想定していない点にご注意ください。
コードの再読み込みが無効になっている環境(通常は本番環境を含みます)で Tidewave を使用すると、エラーが発生します。
設定
次の構文で tidewave を設定できます。
config.tidewave.team = { id: "my-company" }
次の設定を利用できます。
-
allow_remote_access- セキュリティ上の理由から、サーバーが他のインターフェースでリッスンしていても、Tidewave はデフォルトで localhost からのリクエストのみを許可します。リモートアクセスを許可する場合とその方法については、セキュリティガイドラインをご覧ください(適切な知識がある場合に限ります)。 -
logger_middleware- Tidewave 自身のログを抑制するために、Tidewave がラップするロガーミドルウェア -
preferred_orm- 使用する ORM。:active_record(デフォルト)または:sequel -
team- Tidewave Team の設定を指定します。例:config.tidewave.team = { id: "my-company" } -
toolbar- Tidewave のツールバーを HTML ページに挿入するかどうかを制御します。デフォルトはtrueです。
謝辞
このプロジェクトの初期バージョンを作成してくださった Yorick Jacquin に感謝します。
開発
次のコマンドで Minitest スイートを実行します。
bundle exec ruby -Itest test/all_test.rb
ライセンス
Copyright (c) 2025 Dashbit
このファイルは、Apache License, Version 2.0(以下「ライセンス」)に基づいてライセンスされています。 ライセンスに従わない限り、このファイルを使用することはできません。 ライセンスのコピーは、http://www.apache.org/licenses/LICENSE-2.0 から入手できます。
適用される法律で要求される場合、または書面で合意されている場合を除き、 ライセンスに基づいて配布されるソフトウェアは、「現状のまま」で提供され、 明示的か黙示的かを問わず、いかなる保証も条件もありません。 ライセンスに基づく権利および制限については、ライセンスをご確認ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。



