directus

Directusはデータベースとの連携性が高いヘッドレスCMSです。

本来CMSの一種なのでブログ系のサイトを構築するのに向いているのですが、データベースの情報をREST APIとして公開するためのフレームワークとしても使えそうです。というかこっちの用途で期待しています。

docker-compose.yaml

ほぼ公式サイトのサンプルそのままですが、アップロードした画像がdocker内に保存されてしまう問題があったので、ホスト側に保存されるよう修正しています。

KEYとSECRETはuuidgenコマンドで生成したものに書き換えておくと良いでしょう。
ADMIN_EMAILとADMIN_PASSWORDはお好きなものに変更してください。

参考:Installing with Docker | Directus Docs

version: '3.2'
services:
  database:
    container_name: database
    image: postgres:12
    volumes:
      - ./data/database:/var/lib/postgresql/data
    networks:
      - directus
    environment:
      POSTGRES_USER: 'directus'
      POSTGRES_PASSWORD: 'directus'
      POSTGRES_DB: 'directus'

  cache:
    container_name: cache
    image: redis:6
    networks:
      - directus

  directus:
    container_name: directus
    image: directus/directus:v9.0.0-rc.51
    volumes:
      - ./data/uploads:/directus/uploads
    ports:
      - 8055:8055
    networks:
      - directus
    depends_on:
      - cache
      - database
    environment:
      KEY: '255d861b-5ea1-5996-9aa3-922530ec40b1'
      SECRET: '6116487b-cda1-52c2-b5b5-c8022c45e263'

      DB_CLIENT: 'pg'
      DB_HOST: 'database'
      DB_PORT: '5432'
      DB_DATABASE: 'directus'
      DB_USER: 'directus'
      DB_PASSWORD: 'directus'

      CACHE_ENABLED: 'true'
      CACHE_STORE: 'redis'
      CACHE_REDIS: 'redis://cache:6379'

      ADMIN_EMAIL: 'admin@example.com'
      ADMIN_PASSWORD: 'd1r3ctu5'

networks:
  directus:

起動

以下のように起動します。

$ docker-compose up -d

表示

ブラウザから http://localhost:8055/ にアクセスすると、初期画面が表示されます。

Directus初期ログイン画面

ADMIN_EMAIL、ADMIN _PASSWORDに設定した値を入力するとログインできます。

おわりに

スマホアプリのサーバ側って本質的にはデータベースなのですが、データベースのアクセス制御はテーブル単位なので、データベースをアプリに丸ごと公開するわけにはいきません。

そこで通常はPHPなどでデータベースとスマホアプリの橋渡しとなるアプリケーションを書くんじゃないかと思います。橋渡しに期待したい役割は「クエリとJSONの相互変換」「適切なフィルタリング」といったところですが、それにしては書くコードが過剰なんです。大体ベタ書きはしないので、モデルやコントローラを書くでしょうし、フレームワークも何か採用するでしょうから、その周辺の知識も求められます。例えばLaravelであればマイグレーションを理解してモデルやコントローラ、ルーティングも理解して、artisanコマンドも覚えて・・・。まぁViewがない分楽ではあるのですが、役割からすると過剰です。

Directusを使えばロールにフィルタルールを書くだけで上記が実現できてしまいます。絶対早いよね。これからもDirectusの使い方について発信していきますのでよろしくお願いいたします。