この記事では、全文検索サーバー Fessを利用してJIRAの課題(issue)やConfluenceのwikiコンテンツ等を横断検索する方法を紹介します。
これはFess上で実際にissueの検索を行っている画面のスクリーンショットです。

JIRA/Confluenceとは?
JIRAはAtlassian社が開発したソフトウェアで、課題管理、進捗管理、スケジュール管理など、プロジェクト全般を広く管理することができます。
Confluenceは同じくAtlassian社のソフトウェアで、JIRAと連携して、wikiで情報共有を行うことができます。
導入手順
FessでJIRA/Confluenceを横断検索するための手順を説明します。
導入の流れは次のようになります。
- プラグイン追加
 - Fessの起動
 - 認証設定
 - クローラの設定・実行
 
1. プラグイン追加
Fessの現バージョン(12.2.0)には、デフォルトでは含まれていない機能であるため、自分で追加する必要があります。
ここからfess-ds-atlassian-12.2.0.jarをダウンロードします。
ダウンロードしたjarファイルは[Fessのパス]/app/WEB-INF/lib/に配置します。
2. Fessの起動
このページを参考にFessを起動します。
JIRAのサーバー版を利用している場合、デフォルトではhttp://localhost:8080/で起動します。
Fessもデフォルトではhttp://localhost:8080/で起動するため、そのままでは衝突してしまいます。
衝突を避けるには、例えばFessを起動する際、
$ ./bin/fess -Dfess.port=8081
というような感じで、ポート番号を指定すればよいです。
3. 認証設定
データを取得するために認証情報をパラメータとして与える必要があり、そのための設定を行います。
認証方法としてはBasic認証またはOAuthを利用します。
3A. Basic認証の場合
利用しているAtlassian製品のアカウントのユーザー名とパスワードをパラメータとして与えます。
ここでは、特にJIRA/Confluence側で設定することはありません。
3B. OAuthの場合
Atlassian製品のOAuthについてはこのページ通りに行います。
認証情報として必要になるのは、config.properties内の「secret」「jira_home」「consumer_key」「private_key」「access_token」です。
このチュートリアルにはJIRAのOAuthについて掲載されていますが、Confluenceでも同様の方法で認証することが出来ます。
以下、やる事だけを簡単にまとめました。
3B-1. RSA鍵生成
openssl genrsa -out jira_privatekey.pem 1024
openssl req -newkey rsa:1024 -x509 -key jira_privatekey.pem -out jira_publickey.cer -days 365
openssl pkcs8 -topk8 -nocrypt -in jira_privatekey.pem -out jira_privatekey.pcks8
openssl x509 -pubkey -noout -in jira_publickey.cer  > jira_publickey.pem
3B-2. OAuthTutorialClientの設定
hg clone https://bitbucket.org/atlassian_tutorial/atlassian-oauth-examples
cd atlassian-oauth-examples/java
mvn clean compile assembly:single
cd target
java -jar OAuthTutorialClient-1.0.jar requestToken
最後のコマンドではエラーが出ますが、config.propertiesを生成しているだけなので気にしなくて大丈夫です。
生成されたtarget内のconfig.propertiesは次の様に設定します。
jira_home=http\://localhost\:8080
consumer_key=OauthKey
private_key=MIICdw...AQE\=
jira_homeはJIRAのURL、
consumer_keyはそのままOauthKey、
private_keyはjira_privatekey.pcks8の中身から改行を削除したもの
に設定します。
若干エスケープが必要な文字があるので注意してください。
3B-3. JIRA/Confluence側の設定
アプリケーションリンクの設定(/plugins/servlet/applinks/listApplicationLinks)を開きます。
「リンクするアプリ〜」に適当なURL(例: http://example.com/)を入力して、新しいリンクを作成します。「入力したURLから応答がありません。」と言われますが続行します。
Link applicationsダイアログで必要事項を適当に入力して続行します。

必要事項を入力して続行します。
コンシューマーキーはconfig.propertiesと同じOauthKeyにします。
公開鍵はjira_publickey.pemの中身を貼り付けます。

3B-4. OAuth Dance
java -jar OAuthTutorialClient-1.0.jar requestToken
これを実行すると次のように出力されます。
Token:			xe8yADzgduOc1GwbLcKUQbyAbKlPhVTv
Token secret:	lGk0heoiVWKgyEVM1R5ANTJVfKMkKuiS
Retrieve request token. Go to http://localhost:8080/plugins/servlet/oauth/authorize?oauth_token=xe8yADzgduOc1GwbLcKUQbyAbKlPhVTv to authorize it.
指定されたURLを開き、「許可」すると、確認コードが表示されます。
確認コードを利用してアクセストークンを取得します。
java -jar OAuthTutorialClient-1.0.jar accessToken cEzTBX
これでJIRA/Confluence側のOAuthの設定が完了します。
4. クローラの設定・実行
JIRA/Confluenceをクロールするための設定をします。
公式ドキュメントのこのページも参考にしてください。
4-1. クローラの設定
Fessの管理画面を開き、クローラ > データストアと移動し、新規作成をします。
新規作成画面では、
- 名前
 - ハンドラ
 - パラメータ
 - スクリプト
 
の4項目を設定して、作成を完了します。
「名前」には好きな文字列を入力してください。
「ハンドラ」はJiraDataStore(ConfluenceDataStore)を選択してください。
「パラメータ」は次のようなフォーマットで入力してください。
home=http://localhost:8080
oauth.consumer_key=OauthKey
oauth.private_key=MIICdw...QE=
oauth.secret=cEzTBX
oauth.access_token=W1jjOV...ye
キーと値の説明は次のようになります。
| キー | 値 | 
|---|---|
| home | JIRA/ConfluenceのURL | 
| oauth.consumer_key | コンシューマーキー (OAuth) | 
| oauth.private_key | 秘密鍵 (OAuth) | 
| oauth.secret | 認証キー (OAuth) | 
| oauth.access_token | アクセストークン (OAuth) | 
| basicauth.username | ユーザ名 (Basic認証) | 
| basicauth.password | パスワード (Basic認証) | 
| issue.jql | JQL (JIRAのみ) (任意) | 
oauth.*については、config.propertiesの中身と対応しています。
また、この例ではOAuthを利用していますが、Basic認証またはOAuthのどちらかの認証情報が必要です。
「スクリプト」はJIRAとConfluenceで異なります。
JIRA
url=issue.view_url
title=issue.summary
content=issue.description + issue.comments
last_modified=issue.last_modified
取得出来る値のキーと値の説明は次のようになります。
| キー | 値 | 
|---|---|
| issue.view_url | issueを閲覧するURL | 
| issue.summary | issueの要約 | 
| issue.description | issueの説明 | 
| issue.comments | issueのコメント | 
| issue.last_modified | issueの最終更新日時 | 
Confluence
url=contentview_url
title=content.title
content=content.body + content.comments
last_modified=content.last_modified
| キー | 値 | 
|---|---|
| content.view_url | ページを閲覧するURL | 
| content.title | ページのタイトル | 
| content.body | ページの中身 | 
| content.comments | ページのコメント | 
| content.last_modified | ページの最終更新日時 | 
4-2. ジョブスケジューラの作成
4-1で作成したクロールをクリックすると、クロール設定が開き、そこから「新しいジョブの作成」をします。
後からでも変更はできるので、とりあえず試す場合はそのままの設定で大丈夫です。
詳しいジョブスケジューラの設定については、このページを参考にしてください。
4-3. クローラの実行
システム > スケジューラと移動し、4-2で作成したジョブを開きます。
その画面から、「今すぐ開始」をします。
状態が「実行中」から「有効」になるまで待ちます。
4-4. 検索のテスト
これでFessでJIRA/Confluenceを横断検索することが出来るようになりました。

