uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

わたしの好きなプラグインシリーズその2 Grails Acegiプラグイン

(注意)良く分かってないまま勢いで書きました。コメントや誤り指摘がありましたらお願い致します。

Grails AcegiSecurityプラグインは、Springセキュリティをラッピングして簡易に利用可能にしたGrailsのプラグインです。Springセキュリティとは、以前「Acegi Security」と呼ばれていた、Spring Framework上で利用可能な認証認可に関するフレームワークです。Springセキュリティは、Spring FrameworkのDIの機能を駆使し、非常にカスタマイズ性が高く作られています。カスタマイズ性が高い理由は、アプリケーションにおけるセキュリティに関する要件がもともと、柔軟であるからですね。例えば、

  • 認証のためのアカウント・パスワード情報をDBに置くかLDAP
  • URLベースで認可するか、機能ごとか
  • 機能の集合としてロールを定義してURLと結び付けるとか
  • 携帯の端末IDで認証するとか

など、非常にさまざまな側面があります。わたしのような凡人だと、えーいこんなの案件ごとにハードコーディングしてまえ!と思うのですが、Spring セキュリティはあきらめない。例えば以下のような処理に定型化して、各ステップを差し替え可能にしてるんです。



上の図は(IBMの記事「Acegi を使って Java アプリケーションをセキュアにする、第 1 回: アーキテクチャーの概要とセキュリティー・フィルター」より引用)。

さてご想像の通り、上のようなフレームワークを使いこなすのは簡単なことではございません。機能一覧を一通り理解するのですら、相当かかります。汎用性・柔軟性が高く、機能が多いことの代償だと言えましょう。

ただ、いったん理解すれば、Webアプリ開発が相当楽になることも想像にかたくありません。問題はその初期コストです。

GrailsのAcegi Securityプラグインは、Springセキュリティが可能にする典型的なコードの一通りのことをひととおり準備してくれます。例えば、アカウント管理をDB上に置いて管理画面で管理するようなところは、デフォルトで可能です(もちろんGrailsなのでscaffoldでCRUD編集可能)。加えて、ある程度の設定はDSLで可能としています。(まあこの設定が容易とはいえませんですが)。カスタマイズはなかなか大変ですが、汎用的なものをベースとして簡易なものを実現しているので、筋はよいわけです。

このような構図は、Grailsの各所でしばし見られます。生産性を高め、汎用的にしていけば行くほど、フレームワークは大規模化・難解なものになっていきます。だからといって単機能なものに立ち返れば良いかというと、それで結局機能が足りなくて作り足しすることになるなら、出口のないループです。

Grailsは、プラグイン・DSLにより、このような「機能地獄のスパイラル」から脱出しうる一つの希望を示してくれていると思っています。

ちなみにわたしはまだ全然Acegi Securityもプラグインも使い込んでおらず理解していません。あしからず・・