メインコンテンツに移動

Drupal9 インストール機能を追いかける

はじめに

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フードマガジン」とかのアレです。

profile

そしてタスクとはこれです。

タスク

ブラウザと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の選択です。

profileの選択

install_load_profile

画面はありません。選択したprofileの初期処理です。名称そのまんまです。

install_verify_requirements

サーバの要件や選択したprofileが正しく動きそうかチェックしています。

NG項目がない時は画面がスキップされるので、わざとNG項目を作ってみた画面がこちらです。coreに存在しないモジュール Pathautoをインストール対象にしてみました。

要件が満たさなかたっとき

install_settings_form

データベースの接続情報を登録します。

database接続設定の入力フォーム

通常ドキュメントルートからみて sites/default/settings.php に保存されます。またすでにsettings.phpに接続情報が設定されている場合は、この画面はスキップされます。

install_base_system

画面はありません。

ここでuserモジュールだけ先にインストールされます。基本スタンスとしてuser 機能は強制インストールのようです。

参照: core/includes/install.core.inc

install_bootstrap_full

画面はありません。

ここでセッションスタートが実行されます。

この後モジュールなどの長い処理に進むのですがブラウザとDrupal間で非同期通信が発生するので、そのためのセッションスタートなんだと勝手に思っています。

このタスクが終わるとDrupalのいつものセッション用cookieが付与されます。(リダイレクトが発生するのでレスポンスのset-cookieのスクリーンショットは取得できず無念)

cookie例

install_profile_modules

モジュールのインストール

profile指定のモジュールがインストールされます。profileごとの違いがここから分かりやすく出てきます。

profileの中にある 名称.info.ymlをみると何がインストールされるか分かります。

「標準」profileの場合、core/profiles/standard/standard.info.yml です。

standard.info.yml

install部分がインストールするモジュールです。node, block, commentなど定番モジュールがずらっと指定されています。

ちなみにcoreに存在しないcontributeモジュールもDrupalの認識できるディレクトリに物理ファイルが存在すればインストール可能です。coreのモジュールもcontributeモジュールもDrupal本体からみれば取り扱いに違いはないからです。

install_profile_themes

profile指定のテーマがインストールされます。profileの記述はモジュールと同じ名称.info.ymlです。

standard.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

標準のconfig/installの内容

「最小」profileの設定:core/profiles/minimal/config/install

最小のconfig/installの内容

みていただけると分かると思うのですが「標準」と「最小」で設定の量がかなり違います。

ちなみに「最小」でインストールすると表示用のブロック設定がほとんどで管理メニューすら出てきません。コンテンツタイプもタクソノミーもないのでまずはそれを作って、他のモジュールをインストールするためにURL直打ちでモジュール一覧を表示して・・・という感じになりそうです。私はシンプルすぎてほとんど使ったことがありません。

install_install_profile おまけ

profileのconfig/install はここで登録されますが、似たようなディレクトリconfig/options が存在します。

profileのツリー

これはインストールが完了後、個別にモジュールを有効化した際に一緒に登録する設定が格納されています。

「標準」profileでは、Media, Responsive Image, Content moderation の設定が用意されています。いずれもインストール直後では有効にならないモジュールですが、有効にした際にはprofileが初期設定のサポートしてくれます。

「標準」profileでMediaモジュールを有効にした場合、config/optionsから5つのメディアタイプが登録されます。

media追加画面

参考 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

Thunder

Varbase

Varbase

おしまいに 

もともとは有名どころのDistributionでインストールした時にインストール直後の中身って結構違うんだような、なにやっているんだろう、という好奇心からドキュメントやコードを見ていました。

実はインストールの処理はDrupal本体がきちんと仕組みを提供していて、基本的にDistribution(profile)はDrupal本体の仕組みに沿ってカスタマイズ機能を提供していることがわかりました。Drupal本体ちゃんとしてるー!と(偉そうに)思ったので今回の記事をまとめた次第です。

インストールするモジュールとテーマ、設定だけなら、PHPコードなしでYAMLファイルを用意するだけのカスタマイズなので、「これがボクの最強profile!」 的なものも作れそうな気がします。

Distributionで頑張っているカスタマイズ部分についてはDrupal Meetup Tokyo で出すかもしれません。

ということで、Drupal Meetup Tokyo にぜひいらしてください! 絶賛オンライン開催中です!お待ちしています!