
ANNAI は 2020 年 4 月から 7 月にかけて、Group モジュールに階層化機能を追加する Subgroup モジュールの開発をスポンサーしました。開発はドイツで Drupal を専門とするソフトウェア開発会社 Factorial に所属する Group モジュールのメインテイナー Kristiaan van Den Eynde が行いました。(Group モジュールは、多数のログインユーザーを持つサイト上において、Drupal コアのロールや権限では実現できない複雑なアクセス管理を可能にするモジュールです。)
Subgroup モジュールが依存する Group モジュールは、過去 5 年近くリリース候補の状態にありました。Subgroup モジュールの開発にあたっては、その安定性・安全性を確保するうえで Group モジュールの安定版のリリースが不可欠だったため、ANNAI は Subgroup モジュールの開発に加え、Group モジュールの安定版リリースに必要な作業のスポンサーも行いました。
ANNAI は今までにも海外の開発者と共同でプロジェクトを行ってきましたが、今回は海外の企業と協力する初めてのケースでした。
Subgroup モジュールの開発について
開発のプロセス
日本とヨーロッパ(夏時間)では 7 時間の時差があるため、リアルタイムの会話に依存せずに開発者が作業を進められるよう、丁寧なコミュニケーションを心がけました。
プロジェクト開始時には、単に ANNAI が必要としている機能の仕様を伝えるだけではなく、その機能が必要とされるプロジェクトの背景を詳細に伝えるところから始め、求められている機能が現実世界でどのような問題にたいするソリューションなのかを開発者に理解してもらうことに注力しました。このようにして、開発者が要件を正しくアーキテクチャーに反映し、最適なソリューションを構築できる体制をつくることを目指しました。
プロジェクト当初から、成果物をオープンソースで公開することを目標としていたため、汎用性が高いソリューションにする必要がありました。ANNAI が必要としているが汎用性に影響する機能は切り捨てるなど、難しい判断に迫られることもありました。
開発の管理はアジャイル型手法を用い、Jira 上で要件ごとに検収要件と優先順位を明確に示した上で、必須機能から開発を進めました。
API ドリブン・広範なテストカバレッジ
Drupal の拡張モジュールには、処理がフォームと結びついている機能の実装が少なからず存在し、これが API としての切り出しの際に問題を起こすことがあります。Subgroup モジュールの開発に当たっては、まず全ての機能を API として実装し、API の完成後に GUI を開発することで、モジュールの機能とフォームなどの GUI 要素を完全に分離した、理想的な設計となりました。これにより、ユニットテストの実施が容易になり、処理に時間のかかるブラウザーテストを必要とすることなくリグレッションを検知することが可能になりました。また、フォーム周りのコードも API を呼ぶだけの非常にシンプルな作りになっています。
このようなテストの容易さから、新たな API が追加されるごとにそれがカバーできるシナリオ全てをテストケースとして追加して、リグレッションを防ぎながら高いクオリティと信頼性を実現することができました。
Group モジュールの Drupal コアへの貢献
ほとんどの Drupal サイトに必ずインストールされるようなモジュールに比べると、Group モジュールは利用される数が限られるものの、企業・団体・学校組織などが所有する大規模サイトにおいて、多数のユーザーに対する詳細なかつ複雑な権限設定を行う上で、Group は不可欠なモジュールです。そのようなサイトにおいて、ユーザーのエンティティへのアクセスチェックをするためには非常に多くの設定をもとにアクセス権限を算出する必要があり、パフォーマンスの向上のためには算出された権限をキャッシュすることが欠かせません。Group モジュールのメインテイナーである Kristiaan はパフォーマンス向上のための方法を徹底的に追求するなかで、Drupal コアのキャッシング機能に非効率な挙動が多いことを突き止め、これを完全に入れ替えるモジュール VariationCache を開発しました(これについては 2019 Drupalcon Amsterdam において、Kristiaan がプレゼンテーションを行っています)。同モジュールはコアメインテイナー達にも高く評価されており、将来 Drupal コアのキャッシング機能を置き換えると見られています。
また今回の Group モジュールの安定版リリースに際しては、Drupal コアへのパッチ 3 件および Entity API への変更も 3 件コミットされました。プロジェクトページにあるように、Entity API モジュールは Drupal コアのエンティティ API の補完をするもので、これに追加された変更は後々コアへと移植されます。これにより、ANNAI は直接的・間接的に Drupal コアへ貢献することができました。
まとめ
Subgroup モジュールは、ユーザーに対する複雑なアクセス権限の付与とその管理をする Group モジュールに、階層化機能を追加します。この開発にはアジャイル型のプロジェクト管理手法を用い、広範なテストカバレージを持つ API ドリブンの理想的なアーキテクチャーを持つものに仕上がりました。
また Subgroup 開発プロジェクトを通じて、ANNAI は Group モジュールと Entity API へ貢献し、それは直接的・間接的な Drupal コアへの貢献にもなりました。このように、一つのモジュール開発を通して、ANNAI は広い範囲でコミュニティへ貢献することができました。
ANNAI は今後も国内の活動だけでなく、海外の企業やコントリビューターとも協力して Drupal コミュニティ への貢献を進めていきたいと思います。
おすすめ記事
関連コンテンツ
- DrupalとWordPressの違い─どちらのCMSを採用すべきか
- 大規模サイトのCMS選定基準 - インフラコストと運用負荷の最適化ガイド
- 大規模Drupalサイトのセキュリティ - 運用負荷を抑えた堅牢な環境構築
- Drupalの使い勝手は?使いにくい点と解決策
- Drupalの使い方 - インストールから設定までのステップバイステップガイド
- コンテンツの再利用を簡単に!Drupalのコンテンツモデリング
- Drupalを使った会員サイト構築のポイントとメリット
- モジュールとテーマのセキュリティ:Drupalでの安全なカスタマイズ
- Drupalのフォーム機能を使った効率的なデータ収集
- 多言語サイト構築におけるDrupalの強みと利用方法
Drupal 初心者講座バックナンバー
-
Drupal 9/10 初心者講座
-
第 1 回 歴史に見る Drupal の DNA
-
第 2 回 Drupal はフレームワークか?CMS か?他の CMS との比較
-
第 3 回 Drupal の特徴
-
第 4 回 Drupal 9 / 10 のインストール (1)
-
第 5 回 Drupal 9 / 10 のインストール (2)
-
第 6 回 Drupal にコンテンツを投稿してみる
-
第 7 回 Drupal のボキャブラリとタクソノミーの使い方
-
第 8 回 コンテンツ管理における Drupal と他の CMS との比較
-
第 9 回 Drupal のブロックシステム
-
第 10 回 Drupal の標準クエリビルダー Views の使い方
-
第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
-
第 12 回 Drupal の多言語機能と他の CMS やサービスとの比較
-
第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
-
第 14 回 Drupal のテーマシステムについて
-
第 15 回 Drupal の拡張モジュールの選定と使い方
-
第 16 回 Drupal をもっと知りたい方に向けた各種情報