名古屋大学 ID 管理・運用ツールのチームプログラム開発○堤 守政A)、田島 嘉則A)、山田 一成A) 、柘植 朗B)A)

部局系技術支援室 研究所・センター技術系（情報連携基盤センター）
B)

共通基盤技術支援室 情報通信技術系（情報連携統括本部）

概要
筆者らは、２００８年１月の名古屋大学ＩＤ（名大 ID）正式運用に伴い、名古屋大学ＩＤ管理・運用ツールを作成した。これは、人事・学務データを元にした LDAP サーバへのデータ登録から、ＩＤ発行通知、データ属性更新、管理者用パスワード初期化、そしてデータ更新履歴管理までを対象としている。開発言語は
ＪＡＶＡ、ＪＳＰ／サーブレット、Ｐｅｒｌである。本報告では開発環境と使用言語、及びプログラムの概要を示し、チーム開発の成果と課題について考察する。

1

はじめに

筆者らは２００６年２月に全学ＩＤ・名古屋大学ＩＤ管理・運用ツール暫定版を作成した。これは２００８年のメディア教育センターの機種更新までという限定で開発し、言語はＰＨＰ、Ｐｅｒｌを使用した。今回、２００７年度に新規作成した名古屋大学ＩＤ管理・運用ツールは、全学ＩＤから名古屋大学ＩＤへの移行、及び名古屋大学ＩＤの正式運用に使用する目的で開発したものである。使用言語はＪＡＶＡ、ＪＳＰ／サーブレット、Ｐｅｒｌに変更した。
本報告では、まず使用言語、開発環境、及びプログラム概要を紹介する。次に、プログラム研修を開発に活かすこと、またチーム開発の方法について実践経験を踏まえて考察する。

2

使用言語

今回の管理・運用ツール開発は、ＷEB 画面を通じて処理を行うプログラムとしてＪＳＰ／サーブレットを用いた。コマンドで実行する方は基本的にＰｅｒｌを使用した。ただし、更新内容ログ出力、及びログ管理プログラムはＪＡＶＡを利用している。
筆者らは、管理・運用ツール作成を依頼される前に、ＪＡＶＡ言語について週１回２時間程度の勉強会を４回行い、更にＪＳＰ／サーブレットの勉強会も同じく４回行う機会があった。これは教科書を用いて、担当者が講義するゼミ形式を取った。またＵＭＬについての研修も１回行った。Ｐｅｒｌについては、２年前の全学ＩＤ管理・運用ツール作成時に勉強会を行い、プログラミングも完了していたので、それを流用することができた。
ＬＤＡＰサーバへの接続用ＡＰＩにはＪＮＤＩ（Java Naming and Directory Inteface）とＪＬＤＡＰ（LDAPClass Libraries for Java）がある。今回は後者を採用した。これらのソフトはＷEB からダウンロードできる。
ダウンロードしたファイルには標準プログラムが添付されている。それを理解すればＬＤＡＰサーバへの基本的なアクセス、たとえばエントリ読み取り、属性の更新・削除などのプログラムが作成できる。
運用ツールの最終的な実行環境は Solaris９としたが、ＪＡＶＡ、ＪＳＰ／サーブレットのプログラミングに関しては PC を使い、その上で Tomcat を動作させ、Eclipse 環境上でプログラム開発及びデバッグを行った。

この環境でもＪＬＤＡＰを用いてＬＤＡＰサーバにアクセスすることができる。Eclipse 環境は、ソースプログラムを作成するときにナビゲータ機能が働き、適時必要なライブラリやインポートすべきクラスなどを参照することができる。また文法エラーもその場で指摘されるので、プログラムの効率的作成が可能である。

3

開発環境

次に Solaris9 上のプログラム開発環境について表１に示す。

表１
機種モジュール

4

SUN Fire V240
perl 関係：
perl-5.8.7perl-ldap-0.33
Convert-ASN1-0.20
IO-Socket-SSL-0.991
Net_SSLeay.pm-1.30
DBD-mysql-3.0006_1
DBI-1.51
Jcode-2.06
Authen-SASL-2.10
TermReadKey-2.30
XML-Parser-2.34
Digest-MD5-2.36
URI-1.35

開発環境

OS : Solaris9（SunOS 5.9）
MySQL 関係：
mysql-5.0.24
SSL 関係：
openssl-0.9.8bJava 関係：
java 1.5.0_06(jdk1.5.0_06)
jakarta-tomcat-5.0.28
mod_jk2.0.4
novell-jldap-2006.09.28
maven-2.0.7

Apache2 関係：
httpd-2.0.59
openldap 関係：
openldap-2.3.21
db-4.4.20

作成プログラムプログラムは、機能や使用形態によって９つに分けて分担した。それぞれの機能を紹介する。
4.1

管理ツール主画面

この画面は、先ず管理者の認証を行う。次に処理対象者の氏名や名大 ID 又は全学 ID の一部を用いて検索し、対象とする名大 ID を絞りこむ機能をもつ。名大 ID を決定した後は機能選択し、それぞれのプログラム画面に移動する。
4.2

名大ＩＤサーバへのデータ登録

職員は人事データ、学生は学務データを元にして名大 ID を付与し、LDAP サーバにエントリデータを格納する。名大 ID はランダムな英字２文字と７桁の数字で構成されるため、すでに発行された名大 ID と重複しないような工夫が必要である。当面は、あらかじめ名大 ID 候補を 10 万件発生させておき、その中から順に使う方式を採用している。新規登録時は、LDAP サーバ上の名大 ID が既存でないことを確認するために、存在チェックを行っている。
名大 ID は生涯一 ID を原則とする方針になっているため、必然的に名寄せ処理が発生する。すでに格納されたデータが完全であれば問題は起きにくいが、実際は氏名の表記等に揺らぎがある。全学 ID を複数持っていた人の名寄せ、及び名大の学生から職員になるような場合の名寄せプログラムについては、別グループメンバーが担当した。これを厳密に行うためには、人手の介入も含めた作業が必要になる。
部局の派遣職員などで、人事データが存在しない人については個別登録が発生する。また、すでに退職している名誉教授等からも、申請があれば名大 ID を登録する。一方、LDAP サーバへのデータ登録と平行して、職員証や学生証用のデータ編集出力作業も発生する。
4.3

エントリの消去

この機能について、全学 ID のツールの場合は、学部等の異動に伴うエントリの移動及び退出者等のエントリ消去のためのものであった。今回は名大 ID がランダムに発行されることもあり、LDAP エントリの格納形式がフラットな構造になったため移動は不要になった。エントリの消去については、生涯一 ID であることにより、少なくとも名大 ID 自体は残しておく必要が生じた。そこで｢エントリ消去｣というのは、名大 ID などの必須属性は残し、その他の任意属性を削除する処理である。複数の処理対象をデータとして用意しておき、コマンドを使って実行する CUI 版と WEB 画面を使ってビジュアルに操作を行う GUI 版がある。
4.4

エントリ内容属性更新

このプログラムはエントリ内の個別属性について挿入、変更、削除等の更新作業を行うためのものである。
たとえば、姓が変わったときなどに管理者が使用することを想定している。LDAP サーバのエントリはスキーマによって使用可能な属性が定義されているが、この属性名自体が追加されたり消去されることがあり得る。また将来的には統括本部の管理者以外に、学部の事務担当者などもエントリの属性更新を行うことが考えられる。そこでプログラムとは独立に、各管理者について、各々属性ごとの更新権限が外部ファイルによって設定できるように設計してある。これも CUI 版と GUI 版がある。
4.5

管理者用パスワード変更

名大 ID の所有者本人からパスワード問合せがあったときに、管理者が初期パスワードにリセットする WEBプログラムである。このプログラムは、次項で紹介する名大 ID 通知書発行プログラムと連携して動作する。
現在 LDAP サーバには、名大 ID のユーザエントリだけではなく、主に文系学部の WEB やメールサーバを集約した統合サーバのユーザ ID 情報、更に情報メディア教育センター、情報工学コース、情報文化学部の情報教育基盤システムにログインするためのユーザ ID 情報も格納されている。したがってパスワードを更新する場合は、名大 ID を基にすべての関連エントリを検索して、全パスワードを一括更新している。
4.6

名大 ID 通知書作成

名大 ID を LDAP サーバに登録したときに、名大 ID 及びパスワード通知書を発行するためのプログラムである。JAVA プログラムで該当データを抽出し、MS ACCESS を使用して通知書を出力する。単独又は複数の名大 ID 通知書発行に対応している。
4.7

データ更新内容履歴管理

LDAP サーバのエントリや属性を更新したときに、どの項目が誰によってどのように更新されたかの履歴が分かることを目的としたプログラムである。ログの格納先はデータベースを利用する。現在は MySQL 又は ORACLE に対応している。ログは、現在の当該 LDAP エントリの内容を LDIF 形式にして一つのフィールド値として扱い、その内容を更新プログラムや実行ユーザ名、さらに更新前後フラグ情報等と共に、テーブルタプルの各フィールドに格納する方式を取っている。LDAP サーバの更新に問題が発生したときは、該当LDIF データを元にしてエントリを復元できる。

5

チーム開発の成果と課題

チーム開発の利点の一つは技術の共有である。個人が修得した技術はすばやく他メンバーに伝えることができる。たとえば LDAP 関連の技術をメンバー全員が独立して勉強するとなると、かなり期間が必要になる。
個人が試行錯誤して得られた LDAP の概念や知識が、短期間にメンバーで共有できるというのは強みである。

もう一つの利点は分業制である。メンバーの一人が開発環境を構築すれば、他のメンバーはそれを共有できる。いうまでもなく、プログラム開発も分業の効果は大きい。
名大 ID 管理・運用ツールの規模のプログラムは、たとえば 3 ヶ月などの期間を限定された場合、一人で作成するのは困難である。たとえ作成できたとしても、プログラムを運用・実行させる段階では複数の人員が必要になる。今回のプログラムでは、特に WEB 画面を使ったプログラム分担を行う際に、メンバーが同じような機能を重複作成しなくて良いように調整した。ここで複数の WEB プログラムを連携するための方法としては、JAVA のセッション変数を利用した。そのためには、あらかじめメンバー間のプログラムで使用するセッション変数を統一する必要がある。結果として、入出力のデータ構造が定まっており、そのデータ内容が安定している場合のプログラム作成は、ほぼ開発計画通りに進めることができた。逆に、入出力内容や仕様が確定しない部分のプログラムについては、完成が遅れざるを得なかった。
JAVA プログラム作成においては、デザインパターンなどモジュールごとの独立性を高め、互いの依存性を少なくすることでプログラムを部品化し、仕様変更にもすばやく対応できる手法がある。今回の勉強会では時間的にそこまで進めることができなかったが、MVC（Model View Controller）による各モジュールの独立性確保の意義については研修を行った。しかし WEB プログラムで画面を切り替えて動作させるときの制御(Controller）の方法がメンバー間で共有できず、各自のプログラムの記述方法が異なってしまった。これについては Spring などのフレームワークを使って解決する手法がある。また今後は、デザインパターンなどのプログラム手法を取り入れて、仕様変更に強いプログラム作成を行っていくことが必要である。

6

おわりに名大 ID の管理・運用ツールプログラムについて、チーム開発した機能と成果・課題について報告した。一般的に、プログラム言語において文法や使用方法を学ぶことと、それを現実の問題に適用してプログラミングできることとの間には壁が存在する。今回は、タイミングよく、学んだ言語を実際の仕事に適用することで理解が深まり、結果を出すことができた。まだ JAVA を使用したプログラミングテクニックとしては初歩的な段階であるが、今後も研修を重ねて高度な手法を取り入れていきたい。
最後に、プログラム開発の中間発表会等で、有益な意見やコメントをいただいた ID プロジェクトの教職員に感謝する。

参考文献
[1]

稲地稔, “OpenＬＤＡＰ入門”, 技術評論社, ２００３年８月[2]Gerald Carter,”LDAP-設定・管理・プログラミング”,オーム社,2003 年 12 月

[3]

平野 靖,“入門 LDAP 認証”, 名古屋大学情報連携基盤センターニュース, 2005 年 2 月,5 月,8 月[4]岡田謙一,重野寛,上田真太郎,川口信隆,“新 Java 教科書”,SRC,2006 年 5 月 25 日

[5]山田祥寛,”10 日でおぼえる JSP サーブレット入門教室”,SE,2005 年 6 月 1 日[6]

掌田津揶乃,”Eclipse3 ではじめる Java プログラミング入門”,秀和システム,2006 年 10 月 4 日[7]

堤守政,田島嘉則,山田一成,田島尚徳,”名古屋大学ＩＤのための管理・運用ツールの作成について”,分子科学研究所技術研究会報告,No.17 2006.3[8]

田島嘉則,山田一成,柘植朗,堤守政,”名古屋大学ＩＤサーバ正式運用に伴うツールプログラムの開発”,全国共同利用情報基盤センター研究開発論文集,No.29 2007.10[9]

山田一成,堤守政,田島嘉則,柘植朗, ”名古屋大学ＩＤ運用に伴うツールプログラムの開発”,核融合科学研
究所技術研究会報告,2008.3