
Terraform のステートをデータベースで管理して tfstate 管理のボトルネック解消を目指す Stategraph という新プロダクトがある.ウェブサイトに書いてある Plans in seconds, not minutes はインパクトがある🔥2026年2月25日に開催された Stategraph Demo Day に参加して興味を持った.
なお tfstate 管理以外にも「並列 apply」・「インベントリ」・「MQL クエリ」・「ドリフト検出」など Terraform プロジェクトであると便利な機能がいくつもある.詳しくはドキュメント参照❗️
Quickstart (Docker Compose)
まずは Docker Compose ベースの Stategraph で Quickstart を試してみる.
1. Create a project directory
$ mkdir stategraph && cd stategraph
2. Create the docker-compose.yml file
ドキュメントでは docker-compose.yml になってるけど,現時点で推奨される compose.yaml にした.Docker Compose で Stategraph と PostgreSQL のコンテナが立ち上がるようになっていた.
services: db: image: postgres:17-alpine user: postgres environment: POSTGRES_PASSWORD: "stategraph" POSTGRES_USER: "stategraph" POSTGRES_DB: "stategraph" healthcheck: test: ["CMD", "pg_isready", "-d", "stategraph", "-U", "stategraph"] interval: 3s timeout: 3s retries: 5 volumes: - db:/var/lib/postgresql/data/ networks: - stategraph server: image: ghcr.io/stategraph/stategraph-server:latest environment: # Database configuration DB_HOST: "db" DB_PORT: "5432" DB_USER: "stategraph" DB_PASS: "stategraph" DB_NAME: "stategraph" # Required: Your public URL STATEGRAPH_UI_BASE: "http://localhost:8080" ports: - "8080:8080" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health/live"] interval: 10s timeout: 5s retries: 5 start_period: 120s depends_on: db: condition: service_healthy networks: - stategraph networks: stategraph: volumes: db:
3. Start Stategraph
$ docker compose up -d
✔ Network stategraph_stategraph Created
✔ Volume stategraph_db Created
✔ Container stategraph-db-1 Healthy
✔ Container stategraph-server-1 Started
4. Verify the deployment
ちゃんと起動してそう👌
$ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS stategraph-db-1 postgres:17-alpine "docker-entrypoint.s…" db About a minute ago Up About a minute (healthy) 5432/tcp stategraph-server-1 ghcr.io/stategraph/stategraph-server:latest "runsvdir /etc/servi…" server About a minute ago Up About a minute (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp $ curl http://localhost:8080/health/live ok $ curl http://localhost:8080/health/ready
5. Access the UI
http://localhost:8080 にアクセスするとライセンスキーの入力を求められる.今回はメールアドレスを登録すると Your Stategraph License Key というメールが届いてライセンスキーを取得できた.

そしてライセンスキーを入力すると Stategraph の管理画面(ローカル)に入れた❗️

Quickstart (State Backend)
次に Terraform 側の設定に進む.
まずは Stategraph CLI(stategraph コマンド)をインストールしておく.
$ brew tap stategraph/stategraph $ brew install stategraph
Step 1: Create an API Key
Stategraph の管理画面で API キーを発行して環境変数に設定する.
$ export TF_HTTP_USERNAME="session" $ export TF_HTTP_PASSWORD="xxxxx"

Step 2: Create a State
次に stategraph states create コマンドでステートを作って,レスポンスに含まれる group_id をコピーしておく.
$ export STATEGRAPH_API_BASE="http://localhost:8080" $ export STATEGRAPH_API_KEY="$TF_HTTP_PASSWORD" $ stategraph states create --tenant xxxxx --name "sandbox-stategraph" { "created_at": "2026-02-27T02:14:25Z", "group_id": "xxxxx", "id": "xxxxx", "name": "sandbox-stategraph", "workspace": "default" }

Step 3: Configure Terraform Backend
そして group_id 付きの URL を backend.tf の http バックエンドに設定すれば OK👌
terraform { backend "http" { address = "http://localhost:8080/api/v1/states/backend/xxxxx" } }
Step 4: Initialize Terraform
あとは適当に main.tf を実装しておく.今回はサンプルとして Amazon S3 バケットと Amazon SQS キューをデプロイする.
- aws_s3_bucket
- aws_s3_bucket_versioning
- aws_sqs_queue
resource "aws_s3_bucket" "stategraph" { bucket = "kakakakakku-sandbox-stategraph" } resource "aws_s3_bucket_versioning" "stategraph" { bucket = aws_s3_bucket.stategraph.id versioning_configuration { status = "Enabled" } } resource "aws_sqs_queue" "stategraph" { name = "kakakakakku-sandbox-stategraph" }
そして init を実行する.
$ terraform init
Step 5: Verify
あとは通常通りに plan と apply を実行すると AWS アカウントに Amazon S3 バケットと Amazon SQS キューをデプロイできた.
$ terraform plan $ terraform apply
ここで Stategraph の管理画面で States を確認するとリソースを確認できた❗️

ちなみに Stategraph の管理画面で Download ボタンを押すと sandbox-stategraph.tfstate を取得できた.これならもし Stategraph をやめて S3 バックエンドに戻るっていう場合も安心できそう.
MQL
Stategraph では MQL というクエリ言語を使ってステートに対してクエリを実行できる.
試してみたクエリ1
SELECT address, attributes FROM instances LIMIT 10

試してみたクエリ2
SELECT address, name, type, mode FROM resources WHERE type = 'aws_s3_bucket'

まとめ
Stategraph の Quickstart を試してみた❗️Stategraph を使うイメージが掴めて良かった.しかし Stategraph の強みである「高速な plan 実行」などは体験できてなく,もう少し規模の大きな Terraform プロジェクトが必要になりそう.
有料プランに切り替えれば他の機能も使えるらしく気になる👀
引き続き Stategraph のアップデートを追いかけていこうと思う \( 'ω')/
Stategraph Demo Day
2026年2月25日に開催された Stategraph Demo Day の動画も公開されているので Stategraph の公式デモを見るならこちらから❗️
関連ポスト
Terraform の plan を "秒" で完了できる「Stategraph」
— カック (@kakakakakku) 2026年2月12日
まだリリース前で 2/25 に Demo Day があるらしくて気になる💡tfstate を PostgreSQL で管理する新しいバックエンドって感じなのかしら
Stategraph — Terraform & OpenTofu without the state file bottleneckhttps://t.co/LYfVkmpNks
さっそく Stategraph の Quickstart を試していくぞ💪https://t.co/CJgXS2rBlK
— カック (@kakakakakku) 2026年2月27日