【Drupal 10】カスタムテーマ開発においてのファイル構成

  •  
 
MAXIMUM に投稿

タグ

1. はじめに

今回はカスタムテーマに関するアクイアジャパンのウェビナーをベースに、どのファイルが・どこに配置され・どのような役割を持つのかというファイル構成に焦点を当てて体系的に解説します。
https://www.youtube.com/watch?v=WuqAOL3YwRo&list=PLVkpj3GMKNm0HUyMnEShXZz2374dpVfH-
 


2. カスタムテーマの全体像(ディレクトリ構造)

Drupal 10で独自のカスタムテーマを作成する場合、ファイルの配置場所はドキュメントルート直下の themes/custom/ ディレクトリ配下となります。

今回構築するカスタムテーマ marucha_theme の標準的なディレクトリ構造は以下の通りです。

web/themes/custom/marucha_theme/
├── marucha_theme.info.yml       # 【必須】テーマの名前や親テーマ、読み込むライブラリ等のメタ情報定義
├── marucha_theme.libraries.yml  # サイト内で使用するCSSやJavaScriptの読み込み管理定義
├── marucha_theme.breakpoints.yml# レスポンシブ画像モジュールと連携するための画面幅定義
├── marucha_theme.theme          # テンプレートにデータを渡す前にPHP側で加工を行うファイル
├── theme-settings.php           # テーマ固有の管理画面入力フォームを拡張するための定義ファイル
├── config/
│   └── install/
│       └── marucha_theme.settings.yml # テーマインストール時に自動登録される設定の初期値データ
├── css/
│   └── style.css                # テーマ固有のスタイルシート
├── js/
│   └── script.js                # テーマ固有のJavaScriptファイル
└── templates/
    ├── page.html.twig           # ページ全体のヘッダー、メイン、フッター等の骨組みを定義するテンプレート
    └── node.html.twig           # 記事やカスタムコンテンツなどの個別要素(ノード)を定義するテンプレート

3. 主要ファイルの役割と記述例

それぞれの構成ファイルには、Drupalシステムがテーマを解釈するための明確な役割が与えられています。

① marucha_theme.info.yml (システムへのテーマ登録)

テーマをDrupalに認識させるためのファイルであり、唯一必須となる設定ファイルです。テーマの基本プロパティのほか、使用する親テーマの指定、読み込むライブラリ、レイアウト構成を定義します。

name: 'Marucha Theme'
type: theme
description: '標準デザインをベースにしたカスタムサブテーマです。'
core_version_requirement: '^9 || ^10'
base theme: olivero
libraries:
  - marucha_theme/global-styling
  - marucha_theme/global-scripts

② marucha_theme.libraries.yml (CSS/JSの管理)

HTML(Twig)に対して直接 <link><script> タグを記述することはDrupalでは非推奨です。CSSやJSは必ずこのファイルで「アセットライブラリ」として部品単位で定義します。これにより、キャッシュが最適化されます。

global-styling:
  version: 1.0
  css:
    theme:
      css/style.css: {}
global-scripts:
  version: 1.0
  js:
    js/script.js: {}
  dependencies:
    - core/jquery

③ marucha_theme.breakpoints.yml (レスポンシブ画像との連携)

レスポンシブWebデザインにおける画面切り替えのピクセル幅条件を、システムに可視化して登録するファイルです。

ここに定義した目印はモジュールに連携され、ブラウザの幅に応じて最適な画像サイズを動的に出し分ける <picture> タグの自動生成に利用されます。

marucha_theme.mobile:
  label: mobile
  mediaQuery: '(min-width: 0px)'
  weight: 0
  multipliers:
    - 1x
marucha_theme.wide:
  label: wide
  mediaQuery: '(min-width: 851px)'
  weight: 1
  multipliers:
    - 1x

④ marucha_theme.theme (PHP前処理)

PHPファイルであり、ビュー(HTML)を出力する前にバックエンド側でデータを加工します。

管理画面からユーザーが入力したURLを取得し、Twigテンプレートが扱える変数配列($variables)へ代入します。

<?php
function marucha_theme_preprocess_page(&$variables) {
  $variables['twitter_url'] = theme_get_setting('twitter_url');
}

⑤ theme-settings.php & config/install/marucha_theme.settings.yml

管理画面の入力フォーム自体をForm APIで拡張・カスタムするためのPHPファイルです。

合わせて、config/install/ ディレクトリ配下に同名の設定YAMLを配置しておくことで、テーマの新規インストール時に自動適用される初期値をDBへインポートさせることができます。


4. まとめ

Drupal 10のテーマ開発は、ファイル構成の共通ルールが厳格に決まっているため、一度構造を理解してしまえば破綻しにくく、安全な開発が可能です。

特に、本ブログ例のように既存の標準テーマを base theme として指定し、必要なテンプレートファイルやCSS/JSだけを差分として上書きしていくサブテーマ手法だとコアの恩恵を受けながら、独自要件を最小限のコード量で満たせる為、便利でした。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。