Drupal

Drupal 11 の設定を環境間で同期する

概要

設定は開発環境で変更し、差分をレビューしてから本番へ同期します。コンテンツ、アップロードファイル、秘密情報は設定同期と別に扱います。

実施例

# 開発環境
drush config:export -y
git add config/sync
git commit -m 'Update Drupal configuration'

# 本番デプロイ後
drush config:import -y
drush cache:rebuild

注意点

同期前にはデータベースバックアップを取り、表示された差分に意図しない削除がないことを確認してください。

参考: 公式ドキュメント

続きを読む

Composer を使って Drupal 11 を Ubuntu に導入する

概要

Drupal本体・モジュール・DrushはComposerで管理します。Webサーバーの公開ディレクトリはプロジェクトのwebに限定します。

実施例

sudo apt update
sudo apt install php php-cli php-mysql unzip
composer create-project drupal/recommended-project site
cd site
composer require drush/drush

注意点

インストール後はファイル権限、データベース接続、公開ファイルのバックアップ、更新手順を運用文書に残します。

参考: 公式ドキュメント

続きを読む

Drupal 11 の現行テキスト編集環境を設定する

概要

Drupal 5向けTinyMCE手順は使いません。Drupal 11では有効なテキスト形式、許可HTML、メディア、編集権限をまとめて設計します。

実施例

# 本番で直接変更せず、検証環境で確認する
drush config:export -y
drush config:import -y
drush cache:rebuild

注意点

外部エディターを採用する場合も、保守状況、セキュリティ方針、メディア統合、アップデート手順を先に評価します。

参考: 公式ドキュメント

続きを読む

Ubuntu 上で Drupal 11 を運用するための構成

概要

Drupal 11はComposerで依存関係を固定し、Webルート、公開ファイル、設定同期ディレクトリを分けます。OSやPHPのサポート期間も運用計画に含めます。

実施例

composer create-project drupal/recommended-project my_site
cd my_site
composer require drush/drush
php -d memory_limit=256M ../vendor/bin/drush status

注意点

本番へ直接手作業で変更せず、検証環境でComposer更新と設定同期を確認してからデプロイします。

参考: 公式ドキュメント

続きを読む

InnoDB を安全に運用するための基本

概要

InnoDBの改善は定期的なOPTIMIZE TABLEではなく、バックアップ、遅いクエリ、実行計画、索引、ロック待ちを根拠に行います。

実施例

EXPLAIN ANALYZE
SELECT id, title
FROM articles
WHERE published = 1
ORDER BY created DESC
LIMIT 20;

注意点

変更前には復元可能なバックアップを取り、索引追加は書き込み負荷とロック影響を検証してから実施します。

参考: 公式ドキュメント

続きを読む

Drupal 11 Forms API で設定フォームを作る

概要

フォームはFormBaseまたはConfigFormBaseを継承し、入力検証と保存処理を分けます。サービスが必要ならコンストラクター注入を使います。

実施例

public function buildForm(array $form, FormStateInterface $form_state): array {
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this->t('Label'),
    '#required' => TRUE,
  ];
  return $form;
}

注意点

権限、CSRF保護、入力値の検証を省略せず、保存前後の振る舞いをテストします。

参考: 公式ドキュメント

続きを読む

Drupal 11 でページタイトルを設計する

概要

ページタイトルはルート、コントローラー、ブロック、テーマの責務を分けて設定します。HTMLを直接連結してtitleタグを変更する方法は使いません。

実施例

example_tools.report:
  path: '/example-tools/report'
  defaults:
    _controller: '\Drupal\example_tools\Controller\ReportController::page'
    _title: '運用レポート'
  requirements:
    _permission: 'access content'

注意点

動的タイトルは翻訳可能な文字列として返し、画面の見出しとブラウザーのタイトルが矛盾しないよう確認します。

参考: 公式ドキュメント

続きを読む

MySQL の旧文字コードを utf8mb4 へ安全に移行する

概要

文字コード移行は必ずバックアップと検証環境で行います。現在はutf8mb3や曖昧なutf8指定ではなくutf8mb4を明示します。

実施例

mysqldump --single-transaction --routines appdb > appdb-before-charset.sql
mysql appdb -e "ALTER TABLE articles CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"
mysql appdb -e "SHOW FULL COLUMNS FROM articles;"

注意点

実データがlatin1として誤認識されているケースは別手順です。少量の実データで往復検証してから本番へ進めます。

参考: 公式ドキュメント

続きを読む

Drupal 11 モジュールで設定を扱う

概要

設定はConfiguration APIで管理し、開発環境で検証してからエクスポート済みYAMLをデプロイします。旧バージョンの変数テーブル直接操作は使いません。

実施例

$config = $this->config('example_tools.settings');
$enabled = $config->get('enabled');

// config/install/example_tools.settings.yml
enabled: true

注意点

秘密情報は設定エクスポートへ含めず、settings.phpまたは専用のシークレット管理で扱います。

参考: 公式ドキュメント

続きを読む

Drupal 11 でイベントサブスクライバーを使う

概要

拡張ポイントがイベントとして提供されている場合は、イベントサブスクライバーで処理を登録します。既存hookとイベントは用途ごとに使い分けます。

実施例

services:
  example_tools.response_subscriber:
    class: Drupal\example_tools\EventSubscriber\ResponseSubscriber
    tags:
      - { name: event_subscriber }

注意点

処理は副作用を小さく保ち、キャッシュやレスポンスを不用意に変更しないよう自動テストを用意します。

参考: 公式ドキュメント

続きを読む
Drupal を購読