まえがき
本書の発行に寄せて
第1章 Drupalとは何か?
第2章 Drupalのローカル開発環境構築
第3章 ノンコーディングでサイト構築
第4章 CentOS Stream 8を使ったDrupal 9サイト環境構築
第5章 Drupalをコマンドラインで操作する
第6章 Drupalの構成管理
第7章 Drupalコアのアップデート
第8章 テーマを開発してみよう
第9章 サイトビルダー夫婦合格体験記
第10章 Googleログインを実現する
第11章 管理画面をもっと便利に!モジュール3選
第12章 Migrate入門
第13章 Drupal.orgの歩き方
あとがき
丸山 ひかる
本書を⼿に取っていただき、ありがとうございます。
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プロジェクトリード
簡単なブログサイトから大規模Webシステムまで、世界中のWebサイトで使われているDrupalの基本的な概念から、その魅力に触れていきます。
丸山 ひかる
Drupal1は、2001年にオープンソースプロジェクトとして公開された、PHP製のCMS(Content Management System)です。GPLのライセンスに基づいてソースコードが公開されており、誰でも無料でインストールして使い始めることができます。世界中の100万ものWebサイトで利用されているといわれていて、NASA、オーストラリア政府、NASDAQなどの金融機関から、ネスレ、ファイザー、IBMなどの巨大グローバル企業までが、Drupalを採用しています。
Drupalで作られているサイトは、簡単なブログサイトから、ECサイトや社内ポータル、宿泊予約システムなどの大規模なWebシステムまで、多岐に渡ります。それは何といっても、柔軟な拡張性を叶える設計思想と、オープンソースコミュニティーによる巨大なエコシステムの両軸で実現されています。
Drupalの公式ドキュメント2を読むと、説明にはCMSではなく、CMF(フレームワーク)と記載されています。インストールしてすぐに使えるというCMSのインターフェースと、フレームワークならではの汎用性の高さのふたつの特徴を併せ持ちます。
公式サイトからDrupalをダウンロード3してセットアップしてみると、Webサイトを構築するための沢山の機能が標準で備わっていることがわかります。公式サイトから配布されるファイルをDrupal Coreと呼び、それによって提供される機能をコア機能と呼んだりします。
独自のコンテンツタイプとフィールド
基本ページ(WordPressでいうところの固定ページ)、ニュース(時系列)などのコンテンツの種類とフィールドを定義することができる
タクソノミーとボキャブラリー
タグなどのコンテンツを分類するためのボキャブラリーを定義することができる
ユーザーとロール管理
細かなユーザー権限を管理することができる
Views
クエリビルダーツール。管理画面上でコンテンツの表示を操作できる
メディア管理
コンテンツに表示する画像や動画を管理できる
多言語機能
サイトを多言語展開する際に使用する
承認ワークフロー
コンテンツの承認ワークフローを自由に定義できる
構成管理
Drupalの構成をYML形式でエクスポート・インポートできる
キャッシング
動的コンテンツをキャッシュしてパフォーマンスを向上できる
JSON:API
Drupal内のコンテンツをWeb APIとして扱うことができる
コアが提供するのは、汎用的な利用を想定した最低限の機能のみです。多くの場合は、それだけでは作りたいサイトの要件を満たすことは難しいでしょう。そこで、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が有名です。
オープンソースCMSというと、WordPressが有名で人気です。Drupalを知らなくても、WordPressなら知っているという方が多いでしょう。WordPressは、Drupalと同じく、PHPで作られたオープンソースの動的CMSです。無料のテーマやプラグイン(Drupalのモジュールに該当)が数多く公開されているなど、いくつかの共通点があり、何が違うのか疑問に思う方も多いと思います。両者の違いは、いわゆるEasyかSimpleか、で説明できるのではないかと思います。
ブログシステムとして高い完成度を持つWordPressは、小~中規模サイトでの利用が多数を占めます。シンプルで直感的なインターフェースは、初心者にとってフレンドリーであり、すばやく簡単にサイトを立ち上げることができます。もちろん、Drupalでもこういった要件のサイトを立ち上げることは可能ですが、汎用性が高い分、設定のコストが高くつきます。
Drupalは元々、BBS(掲示板)システムから発展しました。抽象度の高いデータモデルを採用しており、拡張性の高いフレームワークとして機能します。コアはシンプルなので、適切なモジュールと組み合わせることで、オンラインショップ、フォーラム、Wikiシステムなど、色んなアプリケーションに化けます。そのため、大規模で複雑性の高いシステムに多数利用実績があります。WordPressでもプラグインを追加し、PHPコードを記述することで実現できますが、ブログシステムに最適化された設計上でのカスタマイズとなります。
導入コストが低く、ユーザーフレンドリーで簡単に使い始められるのが、WordPressの素晴らしい点です。しかし、汎用性と拡張性はDrupalに及ばず、逆に導入コストは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は、その取り組みの一環です。
表示画面を他の言語、フレームワークなどで作成するシステム。Drupalはコンテンツを管理するシステムとしての役割に集中し、Javascriptなど他の言語からWebサービスを使って、Drupalのコンテンツを呼び出すことになります。
・nasa.gov - アメリカ航空宇宙局(NASA)の公式サイト
・nasdaq.com - 株式市場
・tesla.com - 自動車のECサイト
・nestle.com - 世界最大の食品・飲料メーカー
・pfizer.com - 製薬大手企業
・lush.com - ハンドメイド化粧品のECサイト
・ibm.com - グローバルIT企業
・kyoto-u.ac.jp - 京都大学
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
・Drush、Drupal Console ※Drupalのコマンドラインツールです。第5章「Drupalをコマンドラインで操作する」で詳しく解説しています。
・Git
・Composer ※Composer 2.0に関してはDrupal 9.1で正式にサポート
Drupalの起動方法は多岐に渡り、第2章「Drupalのローカル開発環境構築」では、DDEV(Dockerコンテナ)でのDrupal環境構築方法をご紹介しています。ですが、実はDockerやDDEVを使わずとも、PHPのビルドインWebサーバーを利用して、ローカル環境にDrupalを簡単に起動する方法が存在します。
ここでは、クイックスタートコマンドを使用したDrupal起動方法と、Drupalが用意するデモサイト「フードマガジン Umami」をご紹介します。
Drupalをローカル環境に起動する方法は、たったのふたつのコマンドを実行するだけです。細かい説明は後にして、次のコマンドを叩いてみてください。なお、ここではmacOSを前提に、コマンドの説明を行います。また、この方法を利用するには、PHP 7.3以上が必要です。
まずローカルに作業ディレクトリを作成し、Drupalをダウンロードします。
$ mkdir drupal && cd drupal && curl -sSL https://www.drupal.org/download-latest/t
用意されているスクリプトを実行してDrupalを起動します。
$ php ./core/scripts/drupal quick-start standard
以上の操作で、ローカル環境でDrupalが動きます。インストールが完了すると、ブラウザーから http://127.0.0.1:8888 に管理者権限でアクセスできるようになります。
また、ターミナルには、ローカルサーバーの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/Dx3U5DfcS3QTm
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を起動したときのコマンドをもう一度見てみましょう。
$ php ./core/scripts/drupal quick-start standard
コマンドの第一引数にstandardが指定されています。クイックスタートコマンドの使用方法は、第一引数に「インストールプロファイル」を指定します。つまり、standardとは、インストールプロファイルのことを指します。
インストールプロファイルは、これから構築するサイトの特性や機能を、単一のダウンロードで提供するための仕組みを提供します。インストールプロファイルには、Drupalインストール時に含めたいモジュール、テーマ、設定ファイルを定義できます。Drupalコアには、3つのインストールプロファイルが含まれています。
standard
開始時点から、一般的な機能を利用できる形でインストールします。
minimal
あらかじめ設定された機能を使わずに、カスタムサイトを構築します。上級者向けです。
demo_umami
Drupalの性能がわかるサンプルサイトをインストールします。
試しに、demo_umamiプロファイルでDrupalを起動してみましょう。demo_umamiプロファイルを使用するには、quick-startコマンドの第一引数にdemo_umamiを指定するだけです。
$ 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コマンドが配置されているディレクトリーが異なるので、注意してください。
$ composer create-project drupal/recommended-project drupal_demo_umami
$ cd drupal_demo_umami
$ php ./web/core/scripts/drupal quick-start demo_umami
このdemo_umamiインストールプロファイルは、Drupalのコア機能でどんなことが実現できるのかを、フードマガジンサイトを例に紹介するためのデモサイトとして機能します。demo_umamiで使用されているコアの機能は、多言語、メディア管理、承認ワークフロー、レイアウトビルダーなど盛りだくさんなので、管理画面を眺めながら設定方法を学ぶことができます。
demo_umamiに関しても、あくまでもデモサイト、検証目的での利用に限定されます。本番サイトでは、standardプロファイルかminimalプロファイル、またはディストリビューションで提供されるインストールプロファイルを使ってサイトを構築しましょう。