Claudeを使用したMCPサーバー経由でのテーブルのコメントの修正 (2025/07/31)
Claudeを使用したMCPサーバー経由でのテーブルのコメントの修正 (2025/07/31)
数多くのAIアシスタントの中から選ぶことができますが、その一つがClaudeです。Claudeのユニークな点は、Anthropic社のLLM(学習モジュール)でも利用できることです。これは、MicrosoftがVS CodeのCopilotで実現したような、いわばワンストップソリューションと言えるでしょう。
私はAnthropicの無料アカウントとデスクトップアプリケーションを使用しています。これを使うとMCPサーバーの設定が可能で、ちょうどOracleデータベース用のMCPサーバーを所有しているので便利です。

この設定が完了すれば、クロードのLLM(法務マネージャー)は当社のツールにアクセスできるようになります。
- 接続一覧
- 接続する
- 切断
- run-sqlcl
- run-sql
オブジェクト名やコメントなどを改善することで、LLM(言語学習者)の作業は楽になるが…
…LLMは、より良いオブジェクト名やコメントを考えるのにも役立ちます!
例えば、既存のテーブルのコメントを「修正」または改善するように指示することはできますが、最悪のシナリオ、つまりコメントがまったくないテーブルから始めた場合はどうでしょうか?
私のStravaテーブル、気に入りましたか?
SQL> desc strava Name Null? Type ________________ ________ _________________ ID NUMBER(38) ACTIVITY_DATE DATE ACTIVITY_NAME VARCHAR2(100) ACTIVITY_TYPE VARCHAR2(100) DESCRIPTION VARCHAR2(4000) ELAPSED_TIME NUMBER(38) DISTANCE NUMBER(38) COMMUTE VARCHAR2(10) GEAR VARCHAR2(100) FILENAME VARCHAR2(100) COLM_STUFF VARCHAR2(20)
はい、そうです。データ自体は面白いのですが…表にコメントがありません。
Claudeに聞いてみよう
Claude Desktop、Claudeのsonnet4 LLMを使用。
質問:私のデータベースに接続して、Stravaテーブルの列コメントを最適化するのを手伝ってもらえますか?
クロード:データベースへの接続と、STRAVAテーブルの列コメントの最適化をお手伝いします。まずは、利用可能なデータベース接続を確認することから始めましょう。

「一度だけ許可」を選択します。これは、リスト接続ツールへのこの単一のリクエストに対して許可を与えることを意味します。再度実行したい場合は、再度許可を求める必要があります。
私の接続を調べて気に入った接続を見つけ、それを使ってデータベース接続を行う許可を求めます。

「常に許可」と「一度だけ許可」に関する注意点については、前述と同様です。
さあ、今から真剣に注意を払い始めよう
LLMがデータベースへのアクセス権を取得すると、LLMは実行したいSQLコードを自動的に生成します。そして、そのコードと、実行権限の要求を私たちに表示します。

そのクエリを読みます。正しいでしょうか?意味が通じますか?また、データベースへのアクセス許可を求める前のプロンプトについてですが、常に正しいデータベースにアクセスしていることを確認する必要があります。

私のテーブルを見つけ、コメントが全くないことを確認したところ、エディターで確認するためのコメント候補が生成されました。
そして、提案内容を実装するためにそのコードを実行するかどうかを尋ねられました。

これで作業は完了したので、完全にコメントが書き込まれたテーブルを点検できます。

私の「COLM_STUFF」列をどう扱えばいいのか、全く分からなかったようです。あれはテストのために追加したものだったのですが。コードが提案された時に自分でコメントを修正することもできたし、あるいはデータサンプリングを指示して、その列(Colm、分かりますか?)が何をするのかをよりよく理解することもできたはずです。
まだ終わりではありません。
接続を切断しましょう。接続を維持するには費用がかかるので、自分たちで後始末をしましょう。

それでは、前回の作業セッション以降にデータベースに記録された内容を見てみましょう。

まとめと要点
あなたは以下のことができます、またはすべきです。
- Claudeを含む、MCP互換のAIクライアントを使用してください
- MCPサーバーツールへのアクセスを承認する前に必ず確認してください。
- SELECT文を実行するだけでなく、それ以上のことを実行します。
- スキーマ内の DBTOOLS$MCP_LOG テーブルを使用して、ユーザーで MCP を介して行ったすべての操作を確認できます。
もう一つだけ…
これは簡単すぎた!
よし、もっと難しくしてみよう。
ひどい名前の表はどうでしょう?LLM(法学修士)の学生でも、そこから推測したり推論したりするのは難しいでしょう。
SQL> info bad_name TABLE: BAD_NAME LAST ANALYZED:2025-07-31 19:43:55.0 ROWS :107 SAMPLE SIZE :107 INMEMORY :DISABLED COMMENTS : Columns NAME DATA TYPE NULL DEFAULT COMMENTS ABC NUMBER(6,0) Yes DEF VARCHAR2(20 BYTE) Yes GHI VARCHAR2(25 BYTE) No EMAIL VARCHAR2(25 BYTE) No JKL VARCHAR2(20 BYTE) Yes MNO DATE No PQR NUMBER(8,2) Yes SQL> select 'good luck with that, Claude!';
つまり、最初の結果はまあまあだったということだ。

しかし、私は馬鹿ではないし、LLM(法学修士)課程は提案を受け入れるのが得意だ。
プロンプト:推測する代わりに、テーブルのデータをサンプリングして、各列に実際に何が格納されているかを確認してみてはどうでしょうか?
クロード:素晴らしいアイデアだ!推測するよりずっと賢明だ。BAD_NAMEテーブルの実際のデータをサンプリングして、各列に何が含まれているかを確認しよう。そうすれば、より正確で意味のあるコメントを作成できるだろう。
そして今では、目の前のタスクをはるかにうまくこなせるようになった。
これは、以下のSQLを実行するように要求します。
SELECT /* LLM in use is claude-sonnet-4 */ * FROM BAD_NAME WHERE ROWNUM <= 10はい、最初の10行を読み込みます。

列名がもっと分かりやすくなるかどうかは分かりませんが、少なくとも各列の中身は理解できるようです。また、従業員にもジャンプしたので、日付フィールドはHIRE_DATEだと想定しているようです。興味深いですね…。

コメント
コメントを投稿