TECH BLOG

エルカミーの技術ブログです

📈 Claude CodeでGrafanaダッシュボードを自動構築してみた|REST APIだけでセンサー監視画面を一発生成

はじめに

「Grafanaでダッシュボードを作りたいけど、パネルの追加・データソース設定・閾値設定…GUIでポチポチやるのが地味に面倒」と感じたことはありませんか?

IoTや製造業の現場では、設備や環境のセンサーデータを可視化したいニーズが増えています。しかし、計測項目が多くなるほどダッシュボードの構築は手間がかかり、顧客ごとのカスタマイズ対応も含めると工数が膨らみがちです。

本記事では、AnthropicのClaude Codeを使って、GrafanaのREST APIを叩き、ターミナルからダッシュボードを一発生成した過程をお伝えします。GUIを一切触らずに、データソースの追加からセンサー監視ダッシュボードの構築まで完了しました。

そもそもClaude Codeとは?

Claude Codeは、Anthropicが提供するターミナルベースのAIコーディングエージェントです。チャットで指示を出すと、ファイルの読み書き、コマンド実行まで自律的にこなしてくれます。

今回のポイントは、Claude Codeがcurlコマンドを自ら組み立ててGrafana APIを叩けること。「こういうダッシュボードを作って」と自然言語で伝えるだけで、APIリクエストのJSON構築から実行まで一気通貫で行えます。

この記事でわかること
  • Claude CodeからGrafana REST APIを使ってダッシュボードを自動生成する手順
  • Service Account Token の発行とAPIアクセスの設定方法
  • IoTセンサーデータを想定したダッシュボード設計の実例
  • MCP(mcp-grafana)の現状と、REST API直接方式を選んだ理由
前提条件
  • Grafana(本記事ではv12.4.0 / Homebrew版)
  • Claude Code(Anthropic APIキーが必要)
  • macOS

今回作ったもの

IoT機器のセンサーデータ監視を想定したGrafanaダッシュボードです。

image block

パネル タイプ 内容
Engine Temperature 時系列グラフ エンジン温度(閾値: 黄60°C / 赤80°C)
Fuel Pressure 時系列グラフ 燃料圧力(メイン/サブライン)
Current Status ゲージ RPM(閾値付きゲージ)
Atmospheric Pressure 数値表示 気圧(hPa)
Sensor Alert History テーブル アラート履歴

5秒ごとに自動リフレッシュされ、リアルタイム監視のイメージを掴めるデモになっています。


Step 1:Grafanaのインストールと起動

M1 MacBook Pro(メモリ8GB)でもGrafanaは軽快に動作します。Homebrew経由なら2コマンドで完了です。

brew install grafana
brew services start grafana

これだけで http://localhost:3000 にアクセスできます。初期ログインは admin / admin です。

Grafana自体のメモリ使用量は約256MB程度。Docker不要で、M1 Macでも全く問題ありません。


Step 2:Service Account Tokenの発行

Claude CodeからGrafana APIを操作するには、認証トークンが必要です。GrafanaのService Account機能を使います。

💡
なぜService Accountか?

Grafana v12では、従来のAPI Keys(/api/auth/keys)は非推奨となり、Service Account Token が推奨されています。Service Accountはユーザーとは独立した「サービス用アカウント」で、ロールベースの権限管理が可能です。

Claude Codeに発行を依頼

実はこのステップもClaude Codeに任せられます。「GrafanaのService Account Tokenを発行して」と伝えたところ、以下の2つのAPIを自動で実行してくれました。

# 1. Service Accountの作成
curl -s -X POST http://localhost:3000/api/serviceaccounts \
  -H "Content-Type: application/json" \
  -u "admin:<password>" \
  -d '{"name":"claude-code","role":"Admin"}'

# 2. トークンの発行
curl -s -X POST http://localhost:3000/api/serviceaccounts/<id>/tokens \
  -H "Content-Type: application/json" \
  -u "admin:<password>" \
  -d '{"name":"claude-code-token"}'

返却された glsa_ で始まるトークンを使って、以降のAPI操作を行います。


Step 3:データソースの追加

ダッシュボードにはデータソースが必要です。今回はデモ目的なので、Grafana組み込みのTestDataデータソースを使いました。外部DBのセットアップは不要です。

curl -s -X POST http://localhost:3000/api/datasources \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "TestData",
    "type": "grafana-testdata-datasource",
    "access": "proxy",
    "isDefault": true
  }'

TestDataはランダムウォーク(時系列のランダムデータ)を生成できるため、センサーデータのシミュレーションに使えます。

本番環境では、ここをPostgreSQL、InfluxDB、Prometheusなどに差し替えます。


Step 4:ダッシュボードの一発生成

ここが本記事のメインです。

Claude Codeに「IoTセンサーデータの監視ダッシュボードを作って。温度、圧力、回転数ゲージ、気圧、アラート履歴のパネルを含めて」と伝えたところ、Grafana Dashboard APIに対するJSON一式を自動生成し、curlで実行してくれました。

APIリクエストの構造

Grafanaの POST /api/dashboards/db エンドポイントに、ダッシュボード定義のJSONを送信します。

curl -s -X POST http://localhost:3000/api/dashboards/db \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "dashboard": {
      "title": "Ship Sensor Dashboard - Demo",
      "panels": [ ... ],
      "time": {"from": "now-6h", "to": "now"},
      "refresh": "5s"
    }
  }'
Claude Codeが自動設計したパネル構成

注目すべきは、Claude Codeがセンサー監視に適したパネルタイプを自動選択した点です。

データ特性 選択されたパネルタイプ 理由
時系列データ(温度・圧力) timeseries トレンドの推移が視覚的にわかる
瞬時値(RPM) gauge 現在値と危険域が一目でわかる
環境値(気圧) stat 大きな数字で現在値を強調
ログ(アラート) table 履歴を時系列で一覧表示

さらに、温度パネルには閾値(60°Cで黄色、80°Cで赤) が自動設定され、RPMゲージにも正常域・注意域・危険域の色分けが入っていました。「センサー監視」と伝えただけで、実運用で必要な閾値設定まで考慮してくれるのは、Claude Codeの文脈理解力の強さです。

レイアウト

パネルの配置(gridPos)もClaude Codeが自動で計算しています。

┌──────────────────────┬──────────────────────┐
│  Engine Temperature  │   Fuel Pressure      │  ← 時系列(上段)
  (timeseries)           (timeseries)       │
├────────┬─────────────┼──────────────────────┤
│ RPM    │ Atmospheric │ Alert History        │  ← 現在値+履歴(下段)
(gauge)   (stat)        (table)            │
└────────┴─────────────┴──────────────────────┘

GUIで同じ作業をやると、パネル追加→データソース選択→クエリ設定→閾値設定→レイアウト調整…で30分〜1時間はかかります。Claude Codeなら数分です。


MCP(mcp-grafana)は使えなかったのか?

Grafana公式が提供するmcp-grafana(MCP: Model Context Protocol サーバー)を使えば、Claude CodeからGrafanaをネイティブに操作できるはずでした。今回も最初はMCP経由を試みました。

試したこと
  1. go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest でバイナリをインストール
  2. Claude Codeの settings.json にMCPサーバーとして登録
  3. 環境変数 GRAFANA_URLGRAFANA_SERVICE_ACCOUNT_TOKEN を設定
結果

mcp-grafanaバイナリ自体は正常に起動するものの、Claude CodeのDeferred Toolsとして認識されませんでした。MCP接続の初期化タイミングの問題か、バージョン互換の問題か、解決できず(mcp-grafana v0.11.2 / Claude Code 2026年3月時点)。。。

REST API直接方式で十分だった

ただ結果的には、Grafana REST APIをcurlで直接叩く方式で全く問題ありませんでした。むしろこの方式には以下のメリットがあるように感じます。

観点 MCP方式 REST API直接方式
セットアップ Go/npxインストール+設定 不要(curlのみ)
デバッグ MCPサーバーのログ確認が必要 curlのレスポンスで即判断
再現性 バージョン依存? curlコマンドをそのまま再利用可
学習コスト MCPの理解 REST APIのドキュメントだけでOK

MCPは今後の課題としつつ、現時点ではREST API直接方式が実用的でした。


実務への応用:本番環境ではどう使う?

今回はTestDataでデモしましたが、実務で使う場合のステップも整理しておきます。

データソースの差し替え
# PostgreSQLの例
curl -s -X POST http://localhost:3000/api/datasources \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sensor DB",
    "type": "postgres",
    "url": "your-db-host:5432",
    "database": "sensor_data",
    "user": "grafana_reader",
    "secureJsonData": {"password": "xxx"},
    "jsonData": {"sslmode": "require"}
  }'

InfluxDB、Prometheus、Amazon Redshiftなど、Grafanaが対応するデータソースであれば同じ要領で差し替え可能です。

アラート設定の追加

Grafana v12のUnified Alertingを使えば、閾値超過時にSlack/メール/PagerDutyへ通知を飛ばせます。これもREST APIで設定可能です。センサーデータの異常検知をリアルタイムで通知したい場合に有用です。

顧客・用途ごとのダッシュボードを量産

Claude Codeが生成したダッシュボードJSONをGitリポジトリで管理すれば、ダッシュボードのバージョン管理が実現します。テンプレートをベースに、表示項目やフィルタ条件を変えた顧客別ダッシュボードを量産するのも容易です。環境の再構築やステージング→本番の昇格も、curl 1発で完了します。


まとめ

Claude Code × Grafana REST APIの組み合わせで、ダッシュボード構築の全工程をターミナルから自動化できました。

工程 手動(GUI) Claude Code
Service Account作成 UI操作 curl自動実行
データソース追加 UI操作 curl自動実行
ダッシュボード構築 30分〜1時間 数分
閾値・レイアウト設定 パネルごとに手動 JSON一括設定

特に印象的だったのは、「センサー監視ダッシュボード」と伝えただけで、パネルタイプの選択・閾値の設定・レイアウトの計算まで適切に行われた点です。Grafanaの機能を熟知したエンジニアが設計したかのような、実用的なダッシュボードが自然言語の指示から生成されました。

計測項目が多い現場や、顧客ごとにカスタマイズが必要なプロダクトでは、ダッシュボード構築の工数削減に大きく貢献できるアプローチです。

GUIでの手作業に時間を取られている方は、ぜひClaude Code × REST APIの組み合わせを試してみてください。一度体験すると、もうGUIには戻れなくなるかもしれません。

参考URL
Dify構築運用のご相談