wikiを使って情報システムをつなぐ

 文書化やサポート要望の管理やコラボレーションを効果的に行うのは、多くの組織にとって困難な課題だ。大概の企業では顧客情報・サポート処理・一般知識ベースのシステムが独立しており、あるプロジェクトの全体像を見たり特定のクライアントに関するすべての情報を横断的に収集したりするのはほぼ不可能だからだ。しかし、wikiソフトウェアを利用すれば、そうした個別のシステムを一つにつなぐことができる。

 wikiの主たる目的は、オープン・スペースでのコラボレーションを実現することだ。コラボレーション用のアプリケーションにはいろいろあるが、wikiの場合、仕組みを知らなくてもコンテンツを容易に追加・編集・共有・リンクでき、しかも利用者数が無制限という特徴がある。

 一例として、中規模企業でソフトウェア製品を扱っているチームを考えてみよう。担当製品を導入しているクライアント・サイトは25か所、チームには開発者5名とソフトウェア・テスター2名がいる。コードはすべてCVSリポジトリーで管理、ソフトウェアのバグや要望はBugzillaで、ヘルプ・デスク・サポート・チケットはRTで、クライアント・サイト情報はSugarCRMで管理している。これらのアプリケーションはすべて社内ネットワーク上で動作しているものとする。さて、CTOである上司から、次期バージョン2.0の仕様と新機能、前バージョンで発見された問題点の対応状況、テスト計画、アップグレードが必要なクライアントについて、金曜までに報告し、今後リリースされるまで同様の報告を毎週提出せよと指示されたらどうするだろうか。

 大概のチームの管理者は、必要な情報を各システムの担当者から集め報告書を作成する。そして、これを毎週繰り返すだろう。しかし、そうした作業は、実は不要なのだ。チーム全員で使えるwikiを導入すれば、もっと簡単にできる。すべての必要な情報をwikiに置いてチームで更新できるようにし、チーム全員でプロジェクト情報を最新状態に保つようにすればよい。チームの管理者は今まで通り全体を把握でき、上司は指示した以上のことが得られるようになる。

 wikiを使用するに当たって、共通して注意すべき点がいくつかある。その一つは、非技術系の人の多くがwikiの趣旨と使い方を正確に理解していない場合があること。この問題は小規模で非公式な研修の機会を提供することで改善することが多い。また、wikiの趣旨はわかるが、使うのはどうしても苦手という人もいる。その場合は、WYSIWYGエディターが付属するwikiソフトウェアの導入を検討する。最近のwikiには大概付いている。

主なwikiソフトウェア

 機能が豊富なwikiパッケージは何百とあり、その多くはフリーだ。wikiソフトウェアについては、WikiMatrixというWebサイトを見るとよい。このサイトには豊富な情報が揃っている。よく使われているのは次の3種だ。

MediaWiki :Wikipediaサイトで使われているソフトウェア。PHPで書かれており、通常のLAMP(Linux Apache MySQL PHP)スタック上で動作する。多数の同時利用にも耐える。

SocialText :Perlで書かれ、バックエンドにMySQLを使う。主として、ホスト向けソリューションとして提供されている。統合WYSIWYGエディターがある。

MoinMoin :Pythonで書かれたwikiソフトウェア。設定が容易で、データベースは不要。

wikiを拡張する

 wikiでは、文字を直接入力することが多い。しかし、小さなカスタム・コードを付け加えれば、ほかのアプリケーションにある情報を利用することもできる。たとえば、ソフトウェアのリリース・ノートをwikiに公開したいが、課題管理システムへのリンクを作るのが面倒だとする。この場合、<issue>12345</issue>とwikiページに入力するだけで、課題管理データベースの情報が表示されるようにできる。

 ほとんどのwikiパッケージはパーサーとレンダラーという2つのコンポーネントから構成されており、一般に、わずかな行数のコードを追加すればコンポーネントを拡張できるようになっている。上に例示した方法で課題管理データベースの情報を取得できるようにするには、MediaWikiの場合、以下のようなPHPスクリプトを追加すればよい。

<?php
// meta information about the extension
$wgExtensionFunctions[] = 'wfIssue';
$wgExtensionCredits['parserhook'][] = array(
    'name' => 'Issue Tracker',
    'description' => 'Display Issue Information',
    'author' => 'Joe Coder',
    'url' => 'http://example.com'
);

// hook into the parser
function wfIssue() {
    global $wgParser;
    $wgParser->setHook('issue', 'renderIssue');
}

// the call back function that formats the issue information
function renderIssue($input) {
    // connect to the database and get the issue
    $dbo = new DB("mysql://localhost/database/user:password");
    $rs = $dbo->query("SELECT * FROM issues WHERE id = {$input}");
    $row = $rs->getRow();

    // format the outpur
    $output = "{$row["title"]}<br/>{$row["description"]}<br/>";
    return $output;
}
?>

 パーサーとレンダラーを拡張するための正確で詳細な情報は、お使いのwikiの解説書を見てほしい。

wiki作成に使えるライブラリー

 既存のwikiパッケージをカスタマイズするだけでは実現できないようなwikiが必要な場合も、ゼロから始める必要はない。出発点として使えるwikiパーサー/レンダラーのライブラリーがある。wikiテキストの読み込みや書式化という大仕事は、それらのライブラリーに任せればよい。ほとんどの場合は、ストレージ機能を実装してライブラリーに被せるだけで済む。有用なライブラリーを2つ挙げておこう。

Text_Wiki :PHPで書かれている。独自形式のwikiテキストを受け入れ、XHTMLで出力する。使いやすいAPIが付属しており、これを使えばwikiテキストの形式を拡張することができる。また、パーサーとレンダラーのルール・セットを独自に作ることもできる。

CGI::Wiki :Text_Wikiと同様の機能を持ち、それ以外の機能も少しある。記述言語はPerl。

まとめ

 wikiは、コラボレーションや情報収集問題の万能薬ではない。しかし、役には立つ。

Chad Files アーカンソー州出身のソフトウェア開発者。10年以上にわたりWebベース・アプリケーションを開発してきた。多くのオープンソース・プロジェクトにも開発者として参加している。

NewsForge.com 原文