現在の勤務先である Deeson が開発をスポンサーしている Group モジュールについて紹介したいと思います。
10年以上の間、Drupal サイトにおいて、ユーザーグループを作成する際の定番モジュールは Organic Group (OG) でしたが、ここ一年ほどで、それに匹敵する新たなモジュールが現れました。Group モジュールには Drupal 7 と 8 向けのベータがあり、安定リリースに向けてアクティブに開発が続けれられています。
メインテイナーの Kristiaan van den Eynde は、OG の設計・拡張性や操作性の問題を前に、独自に Group の作成を開始しました。
## Group モジュールの特徴
### パーミッションとロール
独自のパーミッション・ロールシステムを持つ OG と異なり、Group モジュールは Drupal ネイティブのそれを利用します。そのため、サイト管理者がパーミッションとロールを一元管理できる上、開発者が独自の機能を追加した際に意外なアクセス権限問題に悩まされることがありません。
### DX (Developer Experience)
Group のコードの多くはオブジェクト指向により書かれています。メインのオブジェクトはクラスとメソッドから構成されているため、PHPStorm などの IDE が自動的にメソッド名を提案してくれます。そのため、コードを追って関数名を探すような手間が省けます。
Group モジュールは、拡張性の高さを開発初期の段階から念頭に置いて作られたため、数多くのフックが用意されています。
これに関連して、Group モジュールはコードのドキュメンテーションが充実しており、機能の詳細を理解したり、拡張する際に大変役立ちます。 group.api.php というファイルにドキュメンテーションが含まれています。
### 関心の分離
OG の問題の一つは、グループを作成する際、親となるタクソノミータームやノードなどを必要とする点でした。これは OG により作成されたグループが、親となるエンティティとの機能とは切り離せないことを意味します。
Group モジュールにより作成されたグループは、それぞれが単一で存在するため柔軟性が高くなります。
### 多機能とのインテグレーション
Group モジュールは Entity API を利用しているため、インストール直後に Views, Rules, Title, i18n などと連携して使うことが出来ます。
## 利用した感想
僕自身、今年前半に担当したサイトの一つに利用しましたが、その時点ですでに安定性の面では全く問題はありませんでした。
ユーザビリティに関しても、Drupal に慣れているエンドユーザーは、操作に戸惑うことはありませんでした。
僕には別途、OG を利用したサイトを運営しているクライアントがいますが、上述のとおり OG のパーミッションやロールの設定が Drupal のそれと別れているため、管理者のトレーニングとサポートにかなりの時間を要しており、また先方の担当が変わるとまた説明しなければならないなど、かなり苦労しています。
設計理念やコードの拡張性、またユーザビリティなどにおいて、個人的には OG よりも Group のほうが優れていると感じています。今後の発展が楽しみなモジュールです。
Group と OG モジュールのメインテイナー、Kristiaan van den Eynde(左) と Amitai Burstein。Drupalcon Dublin にて
https://twitter.com/amitaibu/status/780710566193225728