CodeZine(コードジン)

特集ページ一覧

ノンコーディングでサイト構築~Drupalのレイアウトビルダーを使おう

Drupal 9で始めるWebサイト開発入門 第4回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/10/02 11:00

目次

ワークフローを使う

 組織でサイトを運用するような場面では、管理者、編集者など、適切な権限が与えられたユーザーで安全に管理できることが求められます。その際に利用できるのがワークフロー機能です。Drupal 8以前はコントリビュートモジュールで実現していましたが、コアでサポートされるようになりました。

 ここでは、各店舗のスタッフが店舗ページを編集し、管理者に承認申請するというシナリオでDrupalのワークフロー機能の一連の流れを見てみます。

モジュールの有効化

 必要なモジュールを有効化します。拡張機能ページより、以下2つのモジュールにチェックを入れて「インストール」します。

  • Workflows:ワークフローを管理するためのUIとAPIを提供します。
  • Content Moderation:Drupalのコンテンツの「未公開」「公開済み」の状態を拡張し、コンテンツにモデレーション状態を提供します。

店舗コンテンツタイプにワークフローを適用する

 環境設定>ワークフロー に移動します。デフォルトで「Editorial」というワークフローがすでに設定されているので、こちらを流用したいと思います。「編集」をクリックします。「このワークフローの適用先:」項目の「コンテンツ タイプ」を選択し、「店舗」にチェックを入れて保存します。

ロールとユーザーの作成

 「店舗エディタ」ロールを作成します。ユーザー>役割>役割の追加 から、下記のように入力し保存します。

役割名 店舗エディタ
システム内部名称 store_editor

 次に、店舗エディタに必要な権限を付与します。ユーザー>権限 に移動し、「店舗エディタ」列に下記6項目のチェックを入れて保存します。

 
Content Moderation Editorial workflow: Use Create New Draft transition.
Content Moderation 全ての未公開のコンテンツを表示
Content Moderation 最新バージョンを表示
Node 店舗: 新しいコンテンツを作成
Node 店舗: 任意のコンテンツを編集
Node テラス席あり店舗: リビジョンを表示

 「店舗スタッフA」というユーザーを作成し、店舗エディタ役割を割り当てます。ユーザー>ユーザーを追加 から、下記項目を埋めて保存します。

メールアドレス [任意のもの]
ユーザー名 店舗スタッフA
パスワード [任意のもの]
役割 [店舗エディタ] にチェックを入れる

店舗スタッフAとしてページを作成

 では実際にワークフロー機能を使って承認フローを回します。ブラウザの別ウィンドウにて「店舗スタッフA」としてサイトにログインします。

 新たに店舗ページを作成します。サイドバーの「コンテンツを追加」から下記項目を埋めます。

 
Tittle 銀座店
Body まる茶の記念すべき第4号店です。
電話番号 03-xxxx-xxxx
住所 東京都中央区銀座2丁目
店舗画像 [任意のもの]
店舗特徴 テラス席あり

 最後に「保存」をクリックします。店舗スタッフAはドラフト作成の権限はありますが、公開する権限は持たないので必然的にページはドラフトでの保存となります。保存の際にレビュアーに向けたログメッセージを残すことができます。

 ドラフト(未公開)ページが作成されました。

 では管理者権限で該当ページをレビューします。管理者権限でサイトにログインした状態で該当ページのURLにアクセスすると、ページのプレビューが表示されます。

 記事が問題ないことを確認できたら、「Moderation state」が「Published」になっていることを確認し、「適用」をクリックすることで記事が公開されます。

 この一連のフローや状態は 環境設定>ワークフロー から追加、変更が可能です。また、サイト上でワークフローは複数持つことが可能です。例えば店舗記事やニュース記事はシンプルな構造のワークフローを適用し、各部門のレビューが必要となるプレスリリースのようなコンテンツには、別途それに適したワークフローを作成し適用できます。

JSON:API

 これまで、コードに1行も触れず管理画面のみでコンテンツモデルを定義し、Webサイトに情報を格納していきました。これは同時に、標準に準拠した強力なAPIサーバーを構築していたと言っても過言ではありません。

 JSON:APIモジュールを有効にすると、ブログ投稿、ユーザー、タグ、コメントなどの全てのDrupalエンティティがJSON:API仕様に準拠したWebサービスを介してアクセス可能となります。DrupalをヘッドレスCMSとして、モダンなJavaScriptアプリケーション、チャットボット、スマートスピーカーなどで活用することができます。

モジュールの有効化

 JSON:APIの利用に必要なコアモジュールを有効化します。拡張機能ページにて、以下2つのモジュールにチェックを入れ、インストールします。

  • JSON:API:エンティティをJSON:API仕様に準拠したWeb APIとして公開します。
  • Serialization:JSON、XMLなどの形式との間でデータをシリアライズします。

記事一覧を取得する

 では早速APIにアクセスします。JSON:APIのエントリポイント(/jsonapi)にGETリクエストを送信すると、全てのリソースが配置されている場所を示すリンクのリストが表示されます。

curl http://drupal-9-project-9-0-1.dd:8083/jsonapi
{
    "jsonapi": {
        "version": "1.0",
        "meta": {
            "links": {
                "self": {
                    "href": "http://jsonapi.org/format/1.0/"
                }
            }
        }
    },
    "data": [],
    "links": {
        "action--action": {
            "href": "http://drupal-9-project-9-0-1.dd:8083/jsonapi/action/action"
        },
        "base_field_override--base_field_override": {
            "href": "http://drupal-9-project-9-0-1.dd:8083/jsonapi/base_field_override/base_field_override"
        },
        "block--block": {
            "href": "http://drupal-9-project-9-0-1.dd:8083/jsonapi/block/block"
        },
        "block_content--basic": {
            "href": "http://drupal-9-project-9-0-1.dd:8083/jsonapi/block_content/basic"
        },

...(省略)...

 中身を確認すると、記事コンテンツタイプのページ一覧を取得するエンドポイントは /jsonapi/node/article ということが分かります。

curl http://drupal-9-project-9-0-1.dd:8083/jsonapi/node/article
{
    "jsonapi": {
        "version": "1.0",
        "meta": {
            "links": {
                "self": {
                    "href": "http://jsonapi.org/format/1.0/"
                }
            }
        }
    },
    "data": [
        {
            "type": "node--article",
            "id": "41b68b31-2504-4392-9f44-e0c51ee59204",
            "links": {
                "self": {
                    "href": "http://drupal-9-project-9-0-1.dd:8083/jsonapi/node/article/41b68b31-2504-4392-9f44-e0c51ee59204?resourceVersion=id%3A12"
                }
            },
            "attributes": {
                "drupal_internal__nid": 1,
                "drupal_internal__vid": 12,
                "langcode": "ja",
                "revision_timestamp": "2020-08-30T13:19:30+00:00",
                "revision_log": null,
                "status": true,
                "title": "2月の営業日",
                "created": "2020-08-29T07:18:30+00:00",
                "changed": "2020-08-29T07:19:15+00:00",
                "promote": true,

...(省略)...

 記事の構造化情報を取得することができました。JSON:APIのコンセプトや、より詳細は使用方法は公式ドキュメントを参照してください。

まとめ

 第4回では、前回に引き続きDrupalの新機能を紹介しながらサイト構築を行いました。レイアウトをドラッグ&ドロップで変更することができるレイアウトビルダー、コンテンツ制作のライフサイクルを管理するワークフロー、DrupalをヘッドレスCMSやAPIサーバーとして活用するためのJSON:APIモジュールなど、Drupalに関わる編集担当、管理者や開発者それぞれのニーズ、市場変化を汲み取った機能拡張がされていることがわかります。

 次回はDrupalサイトの「見た目」を定義するテーマシステムに触れていきます。サードパーティで提供されたテーマの利用方法、ベーステーマを継承したテーマのカスタマイズ、Twigでのテンプレート開発など、Drupalのテーマ開発の基本を学びます。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Drupal 9で始めるWebサイト開発入門

著者プロフィール

  • 丸山 ひかる(マルヤマ ヒカル)

    2014年、独立系ソフトウェア開発会社に新卒入社。 Web APIの開発をメインに、保守、運用、顧客サポートまで幅広く携わったのちに、テクニカルエバンジェリストとしてプロダクトの普及に貢献。 現在はDrupalを基盤としたエンタープライズ向けCMSプラットフォーム...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5