4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Code PolarisAdvent Calendar 2024

Day 4

Drupalのモジュール開発Tips

Posted at

この記事は『Code Polaris Advent Calendar 2024』 の4日目の記事です。

こんばんは、Kyonです。

数年ぶりに、業務でがっつり開発をしていて、いろいろ調べたことのメモを書き残しておきます。

この記事では、CMSのDrupalのモジュール開発に関するTipsを読むことができます。

環境

  • Drupal 10.3.6
  • PHP 8.3.10
  • MySQL 5.7.44

モジュールとは

Drupalでのモジュールとは、CMSに機能を追加するためのPHP、Javascript、CSS等のファイルのまとまりです。

モジュールには3種類あります。
1. 素のDrupalで必要な「コアモジュール」
2. オープンソースで公開されてい無料で使用できる「コントリビュートモジュール」
3. 自分で追加する「カスタムモジュール」

この記事で取り扱うのは、3つ目の「カスタムモジュール」です。

参考Webサイト

1.2. 概念: モジュール
モジュールでDrupalサイトの機能拡張をしよう~インストールからモジュールを開発する方法を解説

カスタムモジュールで必要なもの

カスタムモジュールは自分で作ることができます。サイトの見た感を作り込みたいとか、より詳細なバリデーションを入れたいとか、そういうニーズを、コードを書くことで満たすことができます。

今回想定するモジュール

  • 名前:test
  • 機能:CSVファイルを出力
  • 実行タイミング:ビュー「〇〇管理一覧」に配置した「CSVエクスポート」ボタンを押下時

システムとしては、業務アプリを想定しています。その業務アプリの中で、「◯◯管理一覧」というビューがあり、そのビュー上に「CSVエクスポート」ボタンがあって、そのボタンを押下した時に、Drupalで管理されているデータを吸い上げてCSVファイルに出力するイメージです。

この記事では、CSVファイルに出力する処理については、言及しません。

ディレクトリ構成

web/modules/customディレクトリ直下に、カスタムモジュール用のディレクトリを作り、その中にコードを配置します。

下記では「test」という名前のモジュールを想定して、その際のディレクトリ構成を記載しています。

web/modules/custom
    test                ←ディレクトリ
        src             ←ディレクトリ
            Controller  ←ディレクトリ
                TestController.php
        test.info.yml
        test.module
        test.routing.yml

最低でもこれだけのディレクトリ構成とファイルは必要です。

必要なファイルについて

設定ファイル

test.info.ymlを指します。

中身は下記の通りです。

test.info.yml
name: test
type: module
description: 'CSVファイルを出力する'
package: Custom
core_version_requirement: ^10
author: Kyon

中身の説明は下記の通りです。

  • name:モジュールの名称。Drupalの管理画面に表示有り。
  • type:モジュールの場合は「modules」固定。
  • description:モジュールの説明。Drupalの管理画面に表示有り。
  • package:「Custom」というパッケージ名で管理することを表す。
  • core_version_requirement:Drupalのどのコアバージョンで動作するかを指定。
  • author:モジュールの作者名。

「package」「author」あたりは、関係者が多い(会社が複数社関わっている等)場合に設定しておくと、担当や責任範囲が分かりやすくて良いかなと思います。

モジュールフック設定

test.moduleを指します。

今回想定のモジュールでは特に記載することが無かったので、省略します。

ルーティング設定

PHPなら、おなじみの設定ですね。

test.routing.ymlを指します。

中身は下記の通りです。

test.routing.yml
test.downloadCSV:
  path: '/admin/list/downloadCSV/csv'
  
  defaults: 
    _title: 'CSV Download
    _controller: '\Drupal\test\Controller\TestController::downloadCSV'
  requirements:
    _permission: 'access content'

中身の説明は下記の通りです。

  • path:ルーティングのURL。今回だと、「CSVエクスポート」ボタンを押下時のURL。
  • _title:ページのタイトル。
  • _controller:ルーティングで使用するControllerファイル名とそのメソッド名。
  • _permission:アクセス可能な権限。「access content」だとどの権限のユーザもアクセス可。

「_permission」は、管理者権限のみアクセス可にしたい場合は「administrator」です。

Controller

一応PHPファイルのControllerも提示しておきます。

TestController.php
<?php
namespace Drupal\test\Controller;

use Drupal\Core\Controller\ControllerBase;

class HelloWorldController extends ControllerBase {

    public function downloadCSV() {
    // ここに処理を書く
    }
}

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

モジュールは上記のファイルを作成しただけでは、使用できません。

管理画面にログインして、モジュールをインストールする必要があります。

管理画面>管理>機能拡張 にアクセスして、リストの中から「test」モジュールを探します。

「test」モジュールにチェックを入れて、画面下部の「インストール」ボタンを押下します。

下記メッセージが表示されたら、インストール完了です。

ステータスメッセージ
モジュール test が有効化されました。

モジュールをアンインストールする場合

管理画面>管理>機能拡張>モジュールをアンインストール にアクセスして、リストの中から「test」モジュールを探します。

「test」モジュールにチェックを入れて、画面下部の「アンインストール」ボタンを押下することで、アンインストールが完了します。

ディレクトリを先に削除してしまうと、Drupalの管理と実態が合わず、管理画面にログインできなくなる可能性があるので、要注意です。

参考Webサイト

Drupalでカスタムモジュールを作ってみよう

Drupal 8 入門 : カスタムモジュール作成編

Drupalのモジュール作成方法 Part.1

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?