はじめに
Drupal Advent Calendar 2020 6日目の記事です!
Drupalでカレンダーを用意したくせに6日目に書きます。記事を提供してくださる皆さん、ありがとうございます!
今回はDrupalをやってみようと思ったら誰しも最初に通るインストールについて、Drupalの中身を覗きつつ解説します。
今回はブラウザからのインストールをする流れで説明しますが、drushから実行しても核となる処理は同じです。
インストーラーの仕組み
Drupalのリクエストの処理の中で、DBの定義が無い・DBにアクセスしても中身が空(テーブルが無い)と判断すると /core/install.php
にリダイレクトします。
インストールはこの /core/install.php
でコントロールされます。
/core/install.php
をざっくり整理すると
- インストールのタスクを見つけて順位付けする
- コアとprofileから、タスクリストを作成
- タスクを順番に沿って処理
以上です。
ここで言うprofileとは、インストールの最初の方で選択する「標準」「最小」「デモ: Umamiフードマガジン」とかのアレです。
そしてタスクとはこれです。
ブラウザとDrupal間でインタラクティブにインストール処理を進めるので、インストール中は何回もGetパラメタを持ちつつ/core/install.php
にアクセスしますが。1リクエスト・1レスポンスで1タスク進むイメージで大体OKです。
一応タスクを1つずつバラすと、画面に見えないタスクもあるので実際操作するページ数よりも多いです。
- install_select_language
- install_select_profile
- install_load_profile
- install_verify_requirements
- install_settings_form
- install_verify_database_ready
- install_base_system
- install_bootstrap_full
- install_profile_modules
- install_profile_themes
- install_install_profile
- install_import_translations
- install_configure_form
- install_finished
次にそれぞれのタスクを簡単に解説します。
各タスクの機能
install_select_language
一番最初のタスクは言語選択です。
ここで英語以外の言語を選択するとインストールの最後の方に翻訳ダウンロード・登録のタスクが発生します。
またこの後選択するprofileによって英語
が強制的にインストールされることもあります。Umamiがそれを利用しています。
参考 : core/profiles/demo_umami/demo_umami.info.yml
keep_english: true
だと、選択言語
+ 英語
がインストールされます。
参考 : https://git.drupalcode.org/project/drupal/-/blob/9.1.x/core/includes/install.core.inc#L1683
install_select_profile
profileの選択です。
install_load_profile
画面はありません。選択したprofileの初期処理です。名称そのまんまです。
install_verify_requirements
サーバの要件や選択したprofileが正しく動きそうかチェックしています。
NG項目がない時は画面がスキップされるので、わざとNG項目を作ってみた画面がこちらです。coreに存在しないモジュール Pathauto
をインストール対象にしてみました。
install_settings_form
データベースの接続情報を登録します。
通常ドキュメントルートからみて sites/default/settings.php
に保存されます。またすでにsettings.php
に接続情報が設定されている場合は、この画面はスキップされます。
install_base_system
画面はありません。
ここでuser
モジュールだけ先にインストールされます。基本スタンスとしてuser
機能は強制インストールのようです。
参照: core/includes/install.core.inc
install_bootstrap_full
画面はありません。
ここでセッションスタートが実行されます。
この後モジュールなどの長い処理に進むのですがブラウザとDrupal間で非同期通信が発生するので、そのためのセッションスタートなんだと勝手に思っています。
このタスクが終わるとDrupalのいつものセッション用cookieが付与されます。(リダイレクトが発生するのでレスポンスのset-cookieのスクリーンショットは取得できず無念)
install_profile_modules
profile指定のモジュールがインストールされます。profileごとの違いがここから分かりやすく出てきます。
profileの中にある 名称.info.yml
をみると何がインストールされるか分かります。
「標準」profileの場合、core/profiles/standard/standard.info.yml です。
install
部分がインストールするモジュールです。node, block, commentなど定番モジュールがずらっと指定されています。
ちなみにcoreに存在しないcontributeモジュールもDrupalの認識できるディレクトリに物理ファイルが存在すればインストール可能です。coreのモジュールもcontributeモジュールもDrupal本体からみれば取り扱いに違いはないからです。
install_profile_themes
profile指定のテーマがインストールされます。profileの記述はモジュールと同じ名称.info.yml
です。
themes
の部分ですね。
「標準」profileの場合、公開ページ用のテーマbartik
と管理ページ用のテーマsevene
の2つのテーマが指定されています。
install_install_profile
profileが用意したサイトに必要な設定がインストールされます。
よくあるDrupalをインストール手順は「標準」profileを選択して進むと思いますが、インストールが完了するとコンテンツタイプは基本ページ
・記事
、タクソノミーはタグ
がすでに用意されていることが多いのではと思います。
それは「標準」profileが用意した設定で、このタスクでインストールされます。profileによって提供する設定が異なるのでprofile間の違いが大きく現れるタスクです。
それぞれの設定はymlファイルになっていて、profileのconfig/install
ディレクトリに存在します。
「標準」profileの設定: core/profiles/standard/config/install
「最小」profileの設定:core/profiles/minimal/config/install
みていただけると分かると思うのですが「標準」と「最小」で設定の量がかなり違います。
ちなみに「最小」でインストールすると表示用のブロック設定がほとんどで管理メニューすら出てきません。コンテンツタイプもタクソノミーもないのでまずはそれを作って、他のモジュールをインストールするためにURL直打ちでモジュール一覧を表示して・・・という感じになりそうです。私はシンプルすぎてほとんど使ったことがありません。
install_install_profile おまけ
profileのconfig/install
はここで登録されますが、似たようなディレクトリconfig/options
が存在します。
これはインストールが完了後、個別にモジュールを有効化した際に一緒に登録する設定が格納されています。
「標準」profileでは、Media, Responsive Image, Content moderation の設定が用意されています。いずれもインストール直後では有効にならないモジュールですが、有効にした際にはprofileが初期設定のサポートしてくれます。
「標準」profileでMediaモジュールを有効にした場合、config/options
から5つのメディアタイプが登録されます。
参考 core/profiles/standard/config/optional
インストール後もprofile情報をDrupalでずっと保持しているなーと思ってたんですが、こういう用途で使われているんだなーと最近理解しました。それくらいprofileってインストール後の存在が薄いんですよね、自分のなかでは薄かったです、正直なところ。
install_import_translations
最初の言語選択で英語以外を選択した場合に翻訳ファイルの取得・登録されます。
install_configure_form
サイト設定と最初に登録するユーザの設定です。
install_finished
前のタスクで登録したユーザでログインさせてインストール完了です。
おまけ
スマホサイズでもインストールできる
バージョン8からレスポンシブを売りの1つとしているDrupalですが、インストールもスマホサイズの画面幅で崩れなしで操作可能です。
タスク一覧が表示されませんが、右上に進捗具合が分かる分母と分子の数字が表示されるようになります。
ちなみに翻訳のインストールは途中からタスクが差し込まれるようで、途中で分母が変わります。一瞬不安になりますw
インストール画面がかっこいいprofile
今回紹介したのはDrupal本体に存在するprofileを取り上げていますが、distributions の一部としてパワフルなprofileがたくさん存在します。
参考: https://www.drupal.org/project/project_distribution
今回は独断と偏見でインストール画面がかっこいいやつだけ紹介です。最後くらいは華やかに。
Thunder
Varbase
おしまいに
もともとは有名どころのDistributionでインストールした時にインストール直後の中身って結構違うんだような、なにやっているんだろう、という好奇心からドキュメントやコードを見ていました。
実はインストールの処理はDrupal本体がきちんと仕組みを提供していて、基本的にDistribution(profile)はDrupal本体の仕組みに沿ってカスタマイズ機能を提供していることがわかりました。Drupal本体ちゃんとしてるー!と(偉そうに)思ったので今回の記事をまとめた次第です。
インストールするモジュールとテーマ、設定だけなら、PHPコードなしでYAMLファイルを用意するだけのカスタマイズなので、「これがボクの最強profile!」 的なものも作れそうな気がします。
Distributionで頑張っているカスタマイズ部分についてはDrupal Meetup Tokyo で出すかもしれません。
ということで、Drupal Meetup Tokyo にぜひいらしてください! 絶賛オンライン開催中です!お待ちしています!