イライラを解消! 乱立するRedmineの情報をまとめて確認できる環境を構築する

CodeZine / 2014年12月15日 14時0分

実際のプロジェクト構造

 開発の新しいツールや技術は、全社・部署全体という大きなレベルではなく、小さなチームやプロジェクトがトライアル的に導入されることが多いと思います。その結果、普及期に入ったころにはシステムや運用ルールの統合がとんでもなく難しくなってはいないでしょうか。開発タスクを10倍気持ちよくする環境構築のノウハウを紹介していく本連載の第1回目として、今回は複数のRedmineでバラバラに登録されているチケットを横断的に照会、集計する仕組みを解説します。

■プロジェクト管理サイト、管理できていますか?

 弊社では、有名なプロジェクト管理向けWebアプリケーションツールの1つ「Redmine」を、弊社の主力製品であるERPパッケージの開発で利用しています。

 RedmineはRuby on Railsを利用したオープンソースのツールで、利用事例も非常に多数あります。

 ただし、弊社の開発部隊は1,000名を超える開発者、技術者を抱える大所帯で、Redmineの導入はプロジェクトやチームが個別に進めてきました。そのためタスクを、あるプロジェクトでは個人単位で管理し、またあるプロジェクトではチーム単位で管理するなど、運用の単位やルールがプロジェクトやチームによってバラバラです。

 また、Redmineには複数のサイトで管理されているチケットやガントチャートをまとめて見る仕組みがないため、複数のプロジェクトやチームに所属している開発者は、それぞれのRedmineサイトに1つ1つアクセスしなければなりません。筆者も、散在するプロジェクト管理の情報に翻弄され、4~5箇所の社内Redmineサイトを毎日巡回している状況です。

 「それなら、統合Redmineを作ってそれぞれのルールに適したワークフローを割り当てて一元管理すればいいじゃないか!」というのは正論です。しかし、プロジェクトごとに異なるビジネスルールを統一し、それぞれのプロジェクトごとのルールをワークフローの設定に落とし込み、データ移行をして……と考えると、気が遠くなってしまいます。「プロジェクト管理サイトを一元化するためのプロジェクト管理のために、Redmineを1つ立てようか!」なんて本末転倒な意見が出てしまったり……orz

 こんな不便で非効率な状況を解決したいと強く考えた筆者は、Redmine REST APIを使用して、各Redmineで管理されている情報を1枚のHTMLに集約する仕組みを構築しました。

 本記事では、その構築のエッセンスを紹介します。

■Redmine REST APIに触れてみよう

 Redmine REST APIのREST (Representational State Transfer) とはHTTP (もしくは HTTPS) 経由で対象のリソースを操作することを可能とするソフトウェアアーキテクチャの1つで、PUT、GET、DELETE、POST、OPTIONS、HEAD といった HTTP メソッドを利用してリソースの取得や変更を行います。Redmine REST APIを使うと、RESTの仕組みでRedmineの各種リソース、項目にアクセスできます(Redmine Developer Guide)。Alpha版扱いの項目もありますが、Issues (チケット) やProjects(プロジェクト)といった基本的な項目はStable(安定版)になっています。

 なお、本記事ではRedmine自体のインストール、セットアップの説明は割愛します。手軽に始めたいという方は、Bitnami社が提供するVMイメージなどを利用するとよいでしょう。

●RESTで情報を取得してみる

 ではまず、curl コマンドを使用して、Redmine上のリソースを取得してみましょう。なお、以下では redmine-server というホスト上にRedmineが構築されているものとします。

 次に示すのが、curl コマンドで取得したRedmine上のリソースです。そのままの出力ではごちゃっとしてよく分からないので、Pythonのjson.toolで整形しています。

$ curl http://redmine-server/issues/1.json | python -mjson.tool { "issue": { "assigned_to": { "id": 6, "name": "Takaaki NAKAJIMA" }, "author": { "id": 6, "name": "Takaaki NAKAJIMA" }, "created_on": "2014-11-27T03:01:17Z", "description": "Redmine \u306e\u8a18\u4e8b\u3092\u66f8\u304d\u307e\u3057\u3087\u3046\u3002", "done_ratio": 0, "due_date": "2014-11-30", "id": 1, "priority": { "id": 2, "name": "Normal" }, "project": { "id": 4, "name": "\u57f7\u7b46" }, "spent_hours": 0.0, "start_date": "2014-11-01", "status": { "id": 2, "name": "In Progress" }, "subject": "2014/12 \u6708\u53f7\u57f7\u7b46", "tracker": { "id": 2, "name": "Feature" }, "updated_on": "2014-11-27T05:12:10Z" } }
 curl を知らない方は、代わりに、ChromeやFirefoxなどのWebブラウザからhttp://redmine-server/issues/1.jsonにアクセスしてみてください。見慣れたRedmineとは異なった画面が表示されると思います。●ユーザ認証とAPIアクセスキーについて

 サイトによっては、匿名ユーザにはチケットの閲覧などを許可していないケースもあります。その場合には、Redmineのユーザ名とパスワードをURLに含めて次のように curl コマンドを実行します。

$ curl http://USERNAME:PASSWORD@redmine-server/issues/1.json
 ただし、この方法はセキュリティ上、あまりお勧めできません。認証にはAPIアクセスキーを使用しましょう。

 APIアクセスキーを有効にするには、Redmineの設定を変更する必要があります。管理権限を持ったユーザでRedmineにログインし、[管理]→[設定]を開いて[認証]タブへ移動します。そこで「RESTによるWebサービスを有効にする」にチェックを入れ、[保存]ボタンを押します。


「RESTによるWebサービスを有効にする」にチェック

 

 次に、APIアクセスキーを取得します。個人設定画面を開き、右側の API アクセスキーの下の表示のリンクをクリックします。40 桁程度のハッシュ値が表示されますので、こちらの値をメモしてください。

 curl 等で URL にアクセスするときに、key パラメータに上記の API アクセスキーを渡してください。

$ curl http://redmine-server/issues/1.json?key=API_ACCESS_KEY
 これで、アクセス制限がかかったサイトでも、ユーザ名およびパスワードを利用することなく、情報にアクセスすることができます。



CodeZine

トピックスRSS

ランキング