mcpField
D
directus

directus

github.com/terminalskills開発18452 回インストール今日更新
リポジトリ

directus について

Directusは、コンテンツサービスや社内ツール、データAPIを構築するチーム向けのオープンソースのヘッドレスCMS兼データプラットフォームです。既存のSQLスキーマを反映し、REST・GraphQL APIとビジュアル管理画面を生成します。

主な機能

  1. 01既存SQLデータベースのスキーマを反映
  2. 02REST・GraphQL APIの自動生成
  3. 03ビジュアル管理ダッシュボード
  4. 04ロール・ポリシーによるアクセス制御
  5. 05ファイルストレージと自動化フロー

活用シーン

  1. 01管理画面からウェブサイトのコンテンツを管理
  2. 02既存のデータベーステーブルをAPIとして公開
  3. 03運用データ用の社内ツールを構築
  4. 04イベント起点のフローで操作を自動化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terminalskills/skills --skill directus

インストール後、Claude Code で/directusを入力して読み込まれたか確認します。

同梱ファイル_scores.json

詳細

Directus

概要

Directus は、あらゆる SQL データベースを自動生成された REST および GraphQL API、ビジュアル管理ダッシュボード、ロールベースのアクセス制御、ファイルストレージ、自動化フローでラップする、オープンソースのヘッドレス CMS およびデータプラットフォームです。独自のスキーマを定義する Strapi とは異なり、Directus は既存のデータベースをそのまま反映します。管理 UI または SQL で列を追加すると、API が即座に更新されます。コンテンツ管理、社内ツール、データ API、バックエンド・アズ・ア・サービスに使用できます。

手順

ステップ 1:デプロイ

現在のリリースは Directus 12(12.4.x、2026 年 9 月。npm の directus には Node 22 以降が必要)です。本番環境では latest ではなく、バージョンタグを指定してください。ライセンスは MSCL-1.0(ソース公開型で、4 年後に GPL-3.0 に切り替わります)であり、現時点では MIT/GPL ではありません。v12 以降、一部の機能(SSO、カスタム権限ルール)にはライセンスキーが必要です。https://directus.com/license を参照してください。

# Docker (quickest start, SQLite)
docker run -d --name directus \
  -p 8055:8055 \
  -e SECRET="$DIRECTUS_SECRET" \
  -e ADMIN_EMAIL="[email protected]" \
  -e ADMIN_PASSWORD="$DIRECTUS_ADMIN_PASSWORD" \
  -e DB_CLIENT="sqlite3" \
  -e DB_FILENAME="/directus/database/data.db" \
  -v directus_data:/directus/database \
  -v directus_uploads:/directus/uploads \
  directus/directus:12.4.1

# Production: Docker Compose with PostgreSQL (+ Redis cache), as in the official guide
#   services: database (postgis/postgis:17-3.5), cache (redis:7), directus (directus/directus:12.4.1)
#   directus env: SECRET, DB_CLIENT=pg, DB_HOST=database, DB_PORT=5432, DB_DATABASE, DB_USER, DB_PASSWORD,
#   CACHE_ENABLED=true, CACHE_STORE=redis, REDIS=redis://cache:6379, ADMIN_EMAIL, ADMIN_PASSWORD, PUBLIC_URL
#   volumes: ./uploads:/directus/uploads  ./extensions:/directus/extensions

# Admin (Data Studio): http://localhost:8055

リバースプロキシの背後で使用する場合は、IP_TRUST_PROXY=true(v12 以降のデフォルトは false)と PUBLIC_URL を設定してください。監視については、/server/ping は公開されていますが、/server/health には v12 以降、認証が必要です。openssl rand -base64 32 で SECRET を生成してください。

ステップ 2:データモデリング

管理 UI または REST API を使用して、コレクション(テーブル)とフィールドを作成します。ユーザープロフィールの Token フィールドから静的トークンを取得するか、POST /auth/login でログインしてください。v11 以降、存在しないフィールドへのリクエストはエラーになります。

# Create a "posts" collection via API
curl -X POST http://localhost:8055/collections \
  -H "Authorization: Bearer $DIRECTUS_ADMIN_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "collection": "posts",
    "meta": { "icon": "article", "note": "Blog posts" },
    "fields": [
      { "field": "id", "type": "uuid", "meta": { "special": ["uuid"] }, "schema": { "is_primary_key": true } },
      { "field": "title", "type": "string", "meta": { "required": true } },
      { "field": "slug", "type": "string", "meta": { "interface": "input" } },
      { "field": "content", "type": "text", "meta": { "interface": "input-rich-text-html" } },
      { "field": "status", "type": "string", "meta": { "interface": "select-dropdown", "options": { "choices": [{"text":"Draft","value":"draft"},{"text":"Published","value":"published"}] } } },
      { "field": "published_at", "type": "timestamp" }
    ]
  }'
ステップ 3:自動生成 API

コレクションが作成されると、Directus は完全な CRUD API を自動生成します。

# REST — List all published posts
curl 'http://localhost:8055/items/posts?filter[status][_eq]=published&sort=-published_at&limit=10' \
  -H "Authorization: Bearer $DIRECTUS_TOKEN"

# REST — Get single post with related author
curl 'http://localhost:8055/items/posts/4f1c2a9e-7b3d-4e58-9c61-2d0a8e5b7f10?fields=*,author.name,author.avatar' \
  -H "Authorization: Bearer $DIRECTUS_TOKEN"

# REST — Create post
curl -X POST http://localhost:8055/items/posts \
  -H "Authorization: Bearer $DIRECTUS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title": "Launch checklist", "content": "<p>Hello world</p>", "status": "draft"}'

# GraphQL — Same queries
curl -X POST http://localhost:8055/graphql \
  -H "Authorization: Bearer $DIRECTUS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"query": "{ posts(filter: {status: {_eq: \"published\"}}, sort: [\"-published_at\"], limit: 10) { id title content published_at author { name } } }"}'
ステップ 4:SDK の統合
// lib/directus.js — JavaScript SDK for frontend/backend integration
import { createDirectus, rest, readItems, createItem, authentication } from '@directus/sdk'

const client = createDirectus('http://localhost:8055')
  .with(authentication())
  .with(rest())
// await client.login({ email, password })  (object argument since SDK v11+; static token: client.setToken(token))

// Fetch published posts
const posts = await client.request(
  readItems('posts', {
    filter: { status: { _eq: 'published' } },
    sort: ['-published_at'],
    limit: 10,
    fields: ['id', 'title', 'slug', 'content', 'published_at', { author: ['name', 'avatar'] }],
  })
)

// Create a new post
const newPost = await client.request(
  createItem('posts', {
    title: 'Launch checklist',
    content: '<p>Step one</p>',
    status: 'draft',
  })
)
ステップ 5:ロール、ポリシー、権限

Directus 11 以降、権限はロールではなくポリシーに属します。ポリシー(admin_access、app_access、enforce_tfa、ip_access を持つ)は、ロールまたはユーザーに直接割り当てられます。ロールはネストできます。権限は複数のポリシー間で加算されます。デフォルトでは、公開(未認証)ロールには何も許可されていません。

# 1. Role
curl -X POST http://localhost:8055/roles \
  -H "Authorization: Bearer $DIRECTUS_ADMIN_TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "Viewer"}'
# -> note data.id as ROLE_ID

# 2. Policy, attached to the role through the access table
curl -X POST http://localhost:8055/policies \
  -H "Authorization: Bearer $DIRECTUS_ADMIN_TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "Read published posts", "admin_access": false, "app_access": false,
       "roles": ["3b6d0f2a-91c4-4a7e-8d52-6c1f0a9e4b27"]}'
# -> note data.id as POLICY_ID

# 3. Permission on the policy: read published posts only
curl -X POST http://localhost:8055/permissions \
  -H "Authorization: Bearer $DIRECTUS_ADMIN_TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "policy": "a8e41c70-5d2b-4f93-b0c6-17d9e2f3a845",
    "collection": "posts",
    "action": "read",
    "permissions": { "status": { "_eq": "published" } },
    "fields": ["id", "title", "content", "published_at"]
  }'

最初の 2 つの呼び出しで返された ID に、2 つの UUID を置き換えてください。Data Studio では、Settings > Access Policies にあります。

ステップ 6:Flows(自動化)

Directus Flows は、イベント、Webhook、スケジュール、または手動ボタンでトリガーされるビジュアル自動化パイプラインです(Zapier のように標準搭載されています)。フローはトリガーと連鎖したオペレーション(メール送信、URL リクエスト、スクリプト実行、アイテム更新など)で構成されます。オペレーションは Settings > Flows で作成してください。以下の API 呼び出しで作成されるのはトリガーだけであり、オペレーションのないフローは何もしません。

curl -X POST http://localhost:8055/flows \
  -H "Authorization: Bearer $DIRECTUS_ADMIN_TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "name": "Notify on Publish",
    "trigger": "event",
    "options": { "type": "action", "scope": ["items.update"], "collections": ["posts"] },
    "accountability": "all",
    "status": "active"
  }'

12.3 以降、空のクエリを指定した更新/削除オペレーションは、すべてのアイテムに作用しなくなりました。本当にすべてのアイテムを対象にする場合は、{"limit": -1} を明示的に渡してください。

例

例 1:マーケティングサイト向けのコンテンツ API を構築する

ユーザープロンプト:「マーケティングサイトのバックエンド CMS が必要です。ブログ記事、チームメンバー、導入事例、よくある質問を扱います。技術に詳しくない編集者が、ビジュアルダッシュボードからコンテンツを管理できるようにしたいです。」

エージェントは次の作業を行います。

  1. Docker と PostgreSQL を使用して Directus をデプロイします。
  2. posts、team_members、case_studies、faqs のコレクションを作成します。
  3. リレーショナルフィールド(posts → author、case studies → tags)を設定します。
  4. フロントエンドに読み取り専用アクセスを許可する公開ロールを設定します。
  5. Directus SDK を使用して Next.js/Astro フロントエンドを接続します。
例 2:運用データ向けの社内ツールを構築する

ユーザープロンプト:「運用チームは注文、仕入先、在庫をスプレッドシートで管理しています。すべてを管理できる管理パネル付きの、適切なバックエンドを構築してください。」

エージェントは次の作業を行います。

  1. 既存の PostgreSQL データベースを参照するように Directus をデプロイします。
  2. Directus が既存のテーブルを自動検出し、API と管理 UI を生成します。
  3. ロールを作成します:admin(フルアクセス)、manager(CRUD)、viewer(読み取り専用)。
  4. 通知用のフローを設定します(新しい注文 → Slack アラート)。

ガイドライン

  • Directus はデータベースのスキーマを反映するものであり、所有するものではありません。Directus の管理画面または SQL から列を追加でき、どちらも同期されます。そのため、既存のデータベースでも安全に利用できます。
  • コンテンツ主体のアプリには、バックエンド・アズ・ア・サービスとして Directus を使用してください。複雑なビジネスロジック(複数ステップのワークフロー、カスタム計算など)には、カスタムエンドポイントで拡張するか、別の API レイヤーを使用してください。
  • PUBLIC ロールは慎重に設定してください。未認証ユーザーがアクセスできる内容を定義します。公開ブログの場合は、公開済みの投稿のみ読み取りを許可してください。
  • ファイルはデフォルトでローカルストレージにアップロードされます。本番環境では、スケーラビリティを確保するために S3、Cloudflare R2、または Google Cloud Storage を設定してください。
  • バージョン 11 からアップグレードする際に確認すべきバージョン 12 の破壊的変更:IP_TRUST_PROXY のデフォルトが false に変更、/server/health に認証が必要、?version=main が ?version=published に変更、クエリによる更新/削除で読み取り権限が適用(12.4)、インポートの上限が 50 MB、Docker イメージには pm2 がバンドルされ、実行時に npm/npx を使用しない。バージョン 10 から 11 へのアップグレードでは、権限がロールからポリシーに移動しました。全リスト:https://directus.com/docs/releases/breaking-changes
  • Directus は PostgreSQL、MySQL、MariaDB、MS SQL、SQLite、CockroachDB、OracleDB に対応しています(MySQL 5.7 はサポート対象外になりました)。本番環境には PostgreSQL を推奨します。

コメント