プロジェクト管理サイト、管理できていますか?
弊社では、有名なプロジェクト管理向け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サービスを有効にする」にチェックを入れ、[保存]ボタンを押します。
次に、APIアクセスキーを取得します。個人設定画面を開き、右側の API アクセスキーの下の表示のリンクをクリックします。40 桁程度のハッシュ値が表示されますので、こちらの値をメモしてください。
curl
等で URL にアクセスするときに、key パラメータに上記の API アクセスキーを渡してください。
$ curl http://redmine-server/issues/1.json?key=API_ACCESS_KEY
これで、アクセス制限がかかったサイトでも、ユーザ名およびパスワードを利用することなく、情報にアクセスすることができます。