
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 サイトの構成設定を診断するには
- Drupal8のTomeモジュールで静的サイトを生成する
- Drupal8でWordPressの新エディターGutenbergを使ってみた
- Drupal のレイアウトビルダが持つ強力な機能と独自の特徴
- Developers Festa Sapporo 2018で Webシステム開発基盤としてのDrupal を紹介してきました
- Open ID Connectを用いて、GoogleアカウントでDrupalにログインする
- 開発者向け:Drupal 8においてECKとParagraphsどちらを使うべきか?
- 開発に役立つ!Drupal 8 主要モジュールの機能説明付き一覧
Drupal 8初心者講座バックナンバー
Drupal初心者講座について
第1回 歴史に見るDrupal のDNA
第2回 Drupalはフレームワークか?CMSか?
第3回 Drupalの特徴
第4回 Drupal 8のインストール(1)
第5回 Drupal 8のインストール(2)
第6回 コンテンツを投稿してみる
第7回 ボキャブラリとタクソノミーを使う
第8回 コンテンツ管理におけるDrupalと他のCMSとの比較
第9回 Drupal 8のブロックシステム
第10回 Drupalの標準クエリービルダ Views
第11回 Drupalと他のCMSのクエリビルダー機能を比較
第12回 Drupal 8の多言語機能と他のCMSやサービスとの比較
第13回 Drupalの権限設定とWordPressやMovable Typeとの比較
第14回 Drupalのテーマシステムについて
第15回 Drupalの拡張モジュールの選定と利用方法
第16回 Drupalをもっと知りたい方に向けた各種情報