先日、ActiveLdap 1.0.2がリリースされました。(リリースアナウンス)
インストール:
% sudo gem install activeldap
ActiveLdapはLDAPの各エントリを通常のオブジェクトのように便利に扱うためのRuby用のライブラリです。リレーショナルデータベースのレコードを便利に扱うためのActiveRecordのLDAPバージョンというとイメージしやすいかもしれません。
Rubyで実装されたLDAPクライアントのNet::LDAPとActiveLdapのAPIを比べてみます。まず、LDAPサーバにTLSで接続し、バインドします。その後、エントリを検索し、属性を変更します。
Net::LDAP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
require 'net/ldap' Net::LDAP.open(:host => LDAP_HOST, :port => 389, :encryption => :start_tls, :auth => { :method => :simple, :username => LDAP_USER, :password => LDAP_PASSWORD }) do |ldap| entry = ldap.search(:base => ou=People,#{LDAP_BASE}", :scope => Net::LDAP::SearchScope_WholeSubtree, :filter => "(uid=*)")[0] ldap.modify(:dn => entry.dn, :operations => [[:replace, "sn", "new-sn"]]) end |
ActiveLdap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
require 'active_ldap' ActiveLdap::Base.establish_connection(:host => LDAP_HOST, :base => LDAP_BASE, :method => :tls, :bind_dn => LDAP_USER, :password => LDAP_PASSWORD) class LdapUser < ActiveLdap::Base ldap_mapping :dn_attribute => "uid", :prefix => 'ou=People', :classes => ["person"] end entry = LdapUser.find(:first) entry.sn = "new-sn" entry.save |
Net::LDAPでは主要なオブジェクトがLDAPクライアントを表しているNet::LDAPオブジェクトなのに対して、ActiveLdapではエントリを表しているLdapUserオブジェクトになっています。そのため、接続・検索するだけであればNet::LDAPの方がActiveLdapよりもシンプルです。クラスを定義する必要もありません。しかし、エントリを変更する必要がある場合はActiveLdapの方がシンプルです。
Net::LDAPとActiveLdapのAPIは対象としている利用者が違います。状況に応じて使い分けて下さい。
アプリケーションではNet::LDAPを使い、自動化されたテスト用のデータ作成・削除にActiveLdapを使う、ということも考えられます。
Net::LDAPとActiveLdapの速度の違いについては以前触れました: ActiveLdap 1.0.1リリース
1.0.2ではRails 2.2.2に対応しています。ただし、国際化まわりについては対応を見送っています。
また、ActiveDirectoryへの対応も強化されました。これは、クリアコードの業務でActiveDirectoryのエントリを操作するためにActiveLdapを利用したことの影響でもあります。
他にも、10以上のバグが修正されています。1.0.1を利用している場合は1.0.2へのアップグレードをおすすめします。
RubyでLDAPエントリを操作したい場合はActiveLdapが便利です。ActiveLdapは継続的に開発が続いていて、安心して使えるフリーソフトウェアです。
問題・要望がある場合はメーリングリストなどでどうぞ。