目次

まえがき

本書の発行に寄せて

第1章 Drupalとは何か?

1.1 Drupalはコンテンツマネージメントフレームワーク
1.2 すぐに使える標準機能
1.3 Drupalの機能拡張とエコシステム
1.4 WordPressとの違い
1.5 Drupalのロードマップ
1.6 Drupalを利用しているWebサイトの例
1.7 システム要件と依存ライブラリー
1.8 Drupalをすぐに試すための起動コマンドとデモサイト

第2章 Drupalのローカル開発環境構築

2.1 DDEVでローカル環境に構築

第3章 ノンコーディングでサイト構築

3.1 管理画面の基本的な操作
3.2 レシピサイトを作ってみよう
3.3 AWS上にDrupalを構築する

第4章 CentOS Stream 8を使ったDrupal 9サイト環境構築

4.1 環境構築の選択肢
4.2 CentOS Streamのインストール
4.3 ミドルウェアのインストール
4.4 Drupalの導入と管理
4.5 Drupalの初期設定
4.6 まとめ

第5章 Drupalをコマンドラインで操作する

5.1 DrupalのCLI
5.2 Drushのインストール
5.3 よく使われる便利なDrushコマンド
5.4 まとめ

第6章 Drupalの構成管理

6.1 Drupalの構成管理とは
6.2 構成管理を握る構成設定
6.3 同期ディレクトリーの設定
6.4 エクスポート
6.5 インポート
6.6 おまけ 構成設定の変更点を可視化する方法
6.7 まとめ

第7章 Drupalコアのアップデート

7.1 Drupalコアのアップデートしよう
7.2 バックアップを作成する
7.3 圧縮ファイルの展開によるアップデート
7.4 Composerによるアップデート
7.5 バックアップから復元する
7.6 まとめ

第8章 テーマを開発してみよう

8.1 テーマとは
8.2 開発サイトの準備
8.3 step1:最小構成のテーマ
8.4 step2:テンプレートの追加
8.5 step3:リージョンの定義
8.6 step4:CSSやJSの組み込み
8.7 step5:Bootstrapを導入する
8.8 step6:テンプレートのカスタマイズ
8.9 サブテーマ
8.10 まとめ

第9章 サイトビルダー夫婦合格体験記

9.1 Drupalの試験に挑戦する?
9.2 まずは手を動かそう
9.3 いざ試験!

第10章 Googleログインを実現する

10.1 Google Cloud Platformの登録
10.2 「OAuth 2.0 クライアント ID」を取得する
10.3 モジュール設定画面でClient IDとSecretを設定
10.4 補足情報

第11章 管理画面をもっと便利に!モジュール3選

11.1 Admin Toolbar
11.2 Taxonomy Manager
11.3 Chosen

第12章 Migrate入門

12.1 Migrateの概要
12.2 Migrateを使うには
12.3 サンプルの記述内容
12.4 マイグレーションの拡張
12.5 まとめ

第13章 Drupal.orgの歩き方

13.1 出発地点
13.2 Initiative
13.3 Documentation
13.4 Security advisories
13.5 終着地点に代えて

あとがき

まえがき

丸山 ひかる

 本書を⼿に取っていただき、ありがとうございます。

 Drupal(ドゥルーパル・ドルーパル)は、2001年に公開された、割と歴史のあるオープンソースCMSです。ブログのような軽量なサイトから会員ポータル、ECサイトなどの大規模Webサービスまで、幅広く活用できます。DrupalはCMSながら、DevOpsを支える構成管理ツールやComposerによるパッケージ管理、オブジェクト指向プログラミングやSymfonyの採用、ヘッドレスCMS対応のためのWeb APIなど、開発者に嬉しい機能も豊富に揃っています。海外では非常に有名で利用者も多いですが、日本ではまだまだ知名度が低く、日本語の情報も少ないです。

 本書は、Drupalを知らない、触ったことがない方を対象とした、初心者向けDrupal解説本です。2021年2月現在の最新メジャーバージョンである、Drupal 9を題材としています。執筆者は、Drupalを触り始めて1年ちょっとのニューカマーから、10年超の熟達者まで幅広いメンバーで構成されており、開発現場の生きた知見がこの一冊に詰まっています。

 この本が、みなさんのDrupalを始めるきっかけになれば、これほど嬉しいことはありません。

本書の流れ

 まず初めに、Drupalとは何か、どんな機能があるのか、WordPressとどう違うのかなど、概要をご紹介します。次に、Dockerを用いたローカル開発環境の構築、AWSやさくらのVPSにDrupalをインストールする方法をご紹介します。後ろの章では、Drupal認定試験の合格体験記や他CMSからの移行方法など、もう少し機能やユースケースに絞ったDrupalの小話を、オムニバス形式でご紹介します。

 本書は、各章ごとに話が独立している「一話完結」型の構成となっています。最初から順に読んでいただくことを想定して章立てを行っていますが、興味のある箇所から読み進めるのもいいと思います。

前提とする知識

 本書を読むにあたり、次のような知識があると、より理解が深まります。

 ・Linuxコマンドの基礎知識

 ・WordPress、concrete5、Joomlaなどの他CMSの利用経験

 ・Web開発の基礎知識

謝辞

 本書は、普段Drupal関連のミートアップに顔を出しているコミュニティーメンバーで執筆し、相互にレビューを行いました。タイトなスケジュールかつ、普段の仕事がある中での執筆をありがとうございます。

 表紙は小松睦子さん(@marii_mikuriya)に描いていただきました。素敵なイラストをありがとうございます。

 そして、Drupalという素晴らしいソフトウェアに携わる世界中の貢献者の方々のおかげで、今日Drupalを便利に使うことができています。その方々がいなければ、コミュニティーメンバーにも会うことはなかったでしょうし、この本も誕生していませんでした。この場を借りて感謝します。ありがとうございます。

底本について

 本書籍は、技術系同人誌即売会「技術書典10」で頒布されたものを底本としています。

本書の発行に寄せて

This eBook is a must-read for anyone interested in learning to build powerful digital experiences with Drupal.This book will help many Drupal developers in Japan expand their Drupal skills.I'm confident this book will grow Drupal's adoption worldwide.


(日本語訳)この本は、洗練されたデジタル体験を構築することに興味がある全ての人に向けた必読書です。日本のDrupal開発者にとって、Drupalのスキルの幅を広げるための手助けになるでしょう。私は、この本がDrupalの採用を世界中に広めてくれる一翼を担う存在になることを期待しています。


―― Dries Buytaert
Drupal創始者 兼 Drupalプロジェクトリード

第1章 Drupalとは何か?

簡単なブログサイトから大規模Webシステムまで、世界中のWebサイトで使われているDrupalの基本的な概念から、その魅力に触れていきます。

丸山 ひかる

1.1 Drupalはコンテンツマネージメントフレームワーク

 Drupal1は、2001年にオープンソースプロジェクトとして公開された、PHP製のCMS(Content Management System)です。GPLのライセンスに基づいてソースコードが公開されており、誰でも無料でインストールして使い始めることができます。世界中の100万ものWebサイトで利用されているといわれていて、NASA、オーストラリア政府、NASDAQなどの金融機関から、ネスレ、ファイザー、IBMなどの巨大グローバル企業までが、Drupalを採用しています。

 Drupalで作られているサイトは、簡単なブログサイトから、ECサイトや社内ポータル、宿泊予約システムなどの大規模なWebシステムまで、多岐に渡ります。それは何といっても、柔軟な拡張性を叶える設計思想と、オープンソースコミュニティーによる巨大なエコシステムの両軸で実現されています。

 Drupalの公式ドキュメント2を読むと、説明にはCMSではなく、CMF(フレームワーク)と記載されています。インストールしてすぐに使えるというCMSのインターフェースと、フレームワークならではの汎用性の高さのふたつの特徴を併せ持ちます。

1.2 すぐに使える標準機能

 公式サイトからDrupalをダウンロード3してセットアップしてみると、Webサイトを構築するための沢山の機能が標準で備わっていることがわかります。公式サイトから配布されるファイルをDrupal Coreと呼び、それによって提供される機能をコア機能と呼んだりします。

独自のコンテンツタイプとフィールド

基本ページ(WordPressでいうところの固定ページ)、ニュース(時系列)などのコンテンツの種類とフィールドを定義することができる

タクソノミーとボキャブラリー

タグなどのコンテンツを分類するためのボキャブラリーを定義することができる

ユーザーとロール管理

細かなユーザー権限を管理することができる

Views

クエリビルダーツール。管理画面上でコンテンツの表示を操作できる

メディア管理

コンテンツに表示する画像や動画を管理できる

多言語機能

サイトを多言語展開する際に使用する

承認ワークフロー

コンテンツの承認ワークフローを自由に定義できる

構成管理

Drupalの構成をYML形式でエクスポート・インポートできる

キャッシング

動的コンテンツをキャッシュしてパフォーマンスを向上できる

JSON:API

Drupal内のコンテンツをWeb APIとして扱うことができる

1.3 Drupalの機能拡張とエコシステム

モジュール

 コアが提供するのは、汎用的な利用を想定した最低限の機能のみです。多くの場合は、それだけでは作りたいサイトの要件を満たすことは難しいでしょう。そこで、Drupalでは、モジュールと呼ばれる小さい機能の単位で、機能を追加できます。

 実は、標準機能も複数のモジュールの集まりです。たとえばViewsと一言でいっても、「Views」「Views UI」のふたつのモジュールで構成されています。ViewsはViews UIの依存関係なので、Viewsがなければ機能しません。逆にViews UIが必要なければ、非有効化して削ぎ落とすこともできます。このように、モジュールは細かい機能の単位で、複数のモジュールを組み合わせて、ひとつの機能を提供することもできます。Drupalコアに含まれるモジュールを「コアモジュール」と呼びます。他に、Drupal.orgでは4万個以上のモジュールが公開4されており、無料でインストールして使うことができます。これをコントリビュートモジュールと呼び、Drupalのコントリビューター(貢献者)が管理しています。

 コアモジュール、コントリビュートモジュールでも足りない機能があったときは、自分でモジュールを実装することで対応します。これをカスタムモジュールと呼びます。

テーマ

 サイトのデザインを変更するには、マークアップやCSSスタイルを定義するテーマシステムで行います。モジュール同様、コアにいくつかのテーマが標準で搭載されており、さらにDrupal.orgに多彩なコントリビュートテーマが公開されています。Drupal内のコンテンツや処理に影響を与えずに、テーマを切り替えることができます。自分でレイアウトを調整したい場合は、カスタムテーマを作成します。

ディストリビューション

 モジュールを組み合わせてシステムを構築することを、Drupalではよく、レゴブロックにたとえられます。ひとつひとつは小さな部品ですが、組み合わせ次第で大きな城からドラゴンまで、多様に形を変えて構成できます。では、あなたがレゴブロックで城を作るときを想像してみてください。おそらく、城が作れるパッケージ化されたレゴブロック一式を購入するのではないでしょうか。Drupalでも同様に、ディストリビューションと呼ばれる特定の用途に合わせて、モジュールやテーマをパッケージ化されたものを使用できます。SNSに特化したOpen Social5、メディアサイトに特化したThunder6が有名です。

1.4 WordPressとの違い

 オープンソースCMSというと、WordPressが有名で人気です。Drupalを知らなくても、WordPressなら知っているという方が多いでしょう。WordPressは、Drupalと同じく、PHPで作られたオープンソースの動的CMSです。無料のテーマやプラグイン(Drupalのモジュールに該当)が数多く公開されているなど、いくつかの共通点があり、何が違うのか疑問に思う方も多いと思います。両者の違いは、いわゆるEasyかSimpleか、で説明できるのではないかと思います。

ブログなどの小~中規模サイト

 ブログシステムとして高い完成度を持つWordPressは、小~中規模サイトでの利用が多数を占めます。シンプルで直感的なインターフェースは、初心者にとってフレンドリーであり、すばやく簡単にサイトを立ち上げることができます。もちろん、Drupalでもこういった要件のサイトを立ち上げることは可能ですが、汎用性が高い分、設定のコストが高くつきます。

複雑性の高い大規模サイト

 Drupalは元々、BBS(掲示板)システムから発展しました。抽象度の高いデータモデルを採用しており、拡張性の高いフレームワークとして機能します。コアはシンプルなので、適切なモジュールと組み合わせることで、オンラインショップ、フォーラム、Wikiシステムなど、色んなアプリケーションに化けます。そのため、大規模で複雑性の高いシステムに多数利用実績があります。WordPressでもプラグインを追加し、PHPコードを記述することで実現できますが、ブログシステムに最適化された設計上でのカスタマイズとなります。

どちらを選ぶ?

 導入コストが低く、ユーザーフレンドリーで簡単に使い始められるのが、WordPressの素晴らしい点です。しかし、汎用性と拡張性はDrupalに及ばず、逆に導入コストはDrupalが高いです。両者のトレードオフを意識することで、採用シーンがイメージできるのではないでしょうか。

1.5 Drupalのロードマップ

 毎年、DrupalCon7と呼ばれる、コミュニティー主催のグローバルカンファレンスが行われています。そこでは、Drupalの創始者であり、現在もプロジェクトリードを務めるドリス・バイタルト(Dries Buytaert)によるキーノート(通称Dries Note)で、Drupalのビジョンと今後の方向性が発表されます。2020年6月に行われたDrupalCon Global 2020では、次のメジャーバージョンであるDrupal 10に向けての5つイニシアチブ(取り組み)が発表されました。

Decoupled Menus

JavaScriptフロントエンドのためのメニューコンポーネント

Automated updates

セキュリティーリリースの自動更新

New front end theme

モダンな外観と操作性を備えた新しいデフォルトのフロントエンドテーマ

Easy out-of-the-box

「すぐに使える」体験の向上

Drupal 10 readiness

2022年6月公開予定のDrupal 10に向けて、PHP、Symfonyの主要な依存関係のアップデート

 2001年にDrupal 1.0がリリースされてから、Drupalは20年に渡って、多くの技術革新を受け入れてきました。Drupal 8では、PHPフレームワークのSymfonyを採用して、アーキテクチャを大幅に刷新しました。Drupal開発者にとって、7から8は痛みを伴う移行となりました。ですが、レイアウトビルダー、メディア管理、JSON:API、BigPipeなど、多くの優れた機能をリリースし、Drupalのイノベーションスピードを速めることにも繋がりました。

 近年では、スマートフォンアプリ、スマートウォッチ、IoT機器、スマートスピーカー、デジタルサイネージが登場し、同じデータをマルチチャネルに配信する基盤や、ソリューションが求められています。この背景から、DrupalをヘッドレスCMSとして、最高の構造化データエンジンおよびWebサービスプラットフォームに対応させる取り組みが始まっています。イニシアチブのひとつであるDecoupled Menusは、その取り組みの一環です。

ヘッドレスCMSとは?

表示画面を他の言語、フレームワークなどで作成するシステム。Drupalはコンテンツを管理するシステムとしての役割に集中し、Javascriptなど他の言語からWebサービスを使って、Drupalのコンテンツを呼び出すことになります。

1.6 Drupalを利用しているWebサイトの例

 ・nasa.gov - アメリカ航空宇宙局(NASA)の公式サイト

 ・nasdaq.com - 株式市場

 ・tesla.com - 自動車のECサイト

 ・nestle.com - 世界最大の食品・飲料メーカー

 ・pfizer.com - 製薬大手企業

 ・lush.com - ハンドメイド化粧品のECサイト

 ・ibm.com - グローバルIT企業

 ・kyoto-u.ac.jp - 京都大学

1.7 システム要件と依存ライブラリー

 Drupalの執筆時点(2021年2月)での最新バージョンは9.1.4です。8最新バージョンをもとに、Drupalを動かす環境要件と、Drupal構築でよく利用されるツールを紹介します。

システム要件

 ・Apache 2.4.7以上

 ・Nginx 0.7.x以上

 ・PHP 7.3以上 ※PHP 8.0に関してはDrupal 9.1で正式にサポート

 ・MySQL 5.7.8以上

 ・MariaDB 10.3.7以上

 ・SQLite 3.26以上

 ・(pg_trgmモジュールを備えた)PostgreSQL 10以上

主なサードパーティーの依存関係

 ・Symfony 4.4

 ・Twig 2

 ・CKEditor 4

 ・PHPUnit 8

Drupal構築に便利なオプショナルツール

 ・Drush、Drupal Console ※Drupalのコマンドラインツールです。第5章「Drupalをコマンドラインで操作する」で詳しく解説しています。

 ・Git

 ・Composer ※Composer 2.0に関してはDrupal 9.1で正式にサポート

1.8 Drupalをすぐに試すための起動コマンドとデモサイト

 Drupalの起動方法は多岐に渡り、第2章「Drupalのローカル開発環境構築」では、DDEV(Dockerコンテナ)でのDrupal環境構築方法をご紹介しています。ですが、実はDockerやDDEVを使わずとも、PHPのビルドインWebサーバーを利用して、ローカル環境にDrupalを簡単に起動する方法が存在します。

 ここでは、クイックスタートコマンドを使用したDrupal起動方法と、Drupalが用意するデモサイト「フードマガジン Umami」をご紹介します。

ローカル環境でDrupalを起動する

 Drupalをローカル環境に起動する方法は、たったのふたつのコマンドを実行するだけです。細かい説明は後にして、次のコマンドを叩いてみてください。なお、ここではmacOSを前提に、コマンドの説明を行います。また、この方法を利用するには、PHP 7.3以上が必要です。

 まずローカルに作業ディレクトリを作成し、Drupalをダウンロードします。

Drupalのダウンロード

$ mkdir drupal && cd drupal && curl -sSL https://www.drupal.org/download-latest/tar.gz | tar -xz --strip-components=1

 用意されているスクリプトを実行してDrupalを起動します。

Drupalの起動

$ php ./core/scripts/drupal quick-start standard

 以上の操作で、ローカル環境でDrupalが動きます。インストールが完了すると、ブラウザーから http://127.0.0.1:8888 に管理者権限でアクセスできるようになります。

図1.1: クイックスタートコマンドで起動したDrupalサイト

 また、ターミナルには、ローカルサーバーのURLや管理者アカウントのログイン情報が出力されます。

ターミナルの出力結果

17/17 [============================]

Congratulations, you installed Drupal!

Username: admin

Password: GQacya62ZrfI5nQu

Drupal development server started: <http://127.0.0.1:8888>

This server is not meant for production use.

One time login url: <http://127.0.0.1:8888/user/reset/1/1613891660/Dx3U5DfcS3QTmCfwpK0ipvItUHa3y07pJg-QsmNU3Io/login>

Press Ctrl-C to quit the Drupal development server.

 Ctrl-CキーでWebサーバーを終了します。再びサイトを立ち上げるには、php ./core/scripts/drupal quick-startコマンドを実行します。

クイックスタートコマンドとは?

 Drupalコアに組み込まれているクイックスタートコマンド9とは、Drupal-8.6.x以降に追加された新機能です。PHPのビルトインWebサーバーとSQLiteデータベースを使用して、Drupalをローカル環境にインストールして実行します。これは本番サイトでの使用を目的としたものではなく、お試し環境としての利用に限定されます。

 クイックスタートコマンドで使用可能なオプションは、ヘルプコマンドを実行して確認できます。

クイックスタートコマンドのヘルプコマンド

$ php ./core/scripts/drupal quick-start --help

 さて、ここでDrupalを起動したときのコマンドをもう一度見てみましょう。

Drupalの起動コマンド

$ php ./core/scripts/drupal quick-start standard

 コマンドの第一引数にstandardが指定されています。クイックスタートコマンドの使用方法は、第一引数に「インストールプロファイル」を指定します。つまり、standardとは、インストールプロファイルのことを指します。

Drupalのインストールプロファイル

 インストールプロファイルは、これから構築するサイトの特性や機能を、単一のダウンロードで提供するための仕組みを提供します。インストールプロファイルには、Drupalインストール時に含めたいモジュール、テーマ、設定ファイルを定義できます。Drupalコアには、3つのインストールプロファイルが含まれています。

standard

開始時点から、一般的な機能を利用できる形でインストールします。

minimal

あらかじめ設定された機能を使わずに、カスタムサイトを構築します。上級者向けです。

demo_umami

Drupalの性能がわかるサンプルサイトをインストールします。

Drupalのデモサイト

 試しに、demo_umamiプロファイルでDrupalを起動してみましょう。demo_umamiプロファイルを使用するには、quick-startコマンドの第一引数にdemo_umamiを指定するだけです。

Drupalのダウンロードと起動

$ mkdir drupal_demo_umami && cd drupal_demo_umami && curl -sSL https://www.drupal.org/download-latest/tar.gz | tar -xz --strip-components=1

$ php ./core/scripts/drupal quick-start demo_umami

 tarファイルを使用する代わりに、ComposerでDrupalプロジェクトを作成する場合は、以下の方法になります。quick-startコマンドが配置されているディレクトリーが異なるので、注意してください。

Drupalのダウンロードと起動 (Composerの場合)

$ composer create-project drupal/recommended-project drupal_demo_umami

$ cd drupal_demo_umami

$ php ./web/core/scripts/drupal quick-start demo_umami


図1.2: demo_umamiのインストールプロファイルで起動したデモサイト

 このdemo_umamiインストールプロファイルは、Drupalのコア機能でどんなことが実現できるのかを、フードマガジンサイトを例に紹介するためのデモサイトとして機能します。demo_umamiで使用されているコアの機能は、多言語、メディア管理、承認ワークフロー、レイアウトビルダーなど盛りだくさんなので、管理画面を眺めながら設定方法を学ぶことができます。

 demo_umamiに関しても、あくまでもデモサイト、検証目的での利用に限定されます。本番サイトでは、standardプロファイルかminimalプロファイル、またはディストリビューションで提供されるインストールプロファイルを使ってサイトを構築しましょう。

試し読みはここまでです。
この続きは、製品版でお楽しみください。