SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

タスクが10倍気持ちよくなる 開発環境のリノベーション講座

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

タスクが10倍気持ちよくなる 開発環境のリノベーション講座 第1回


プログラミング言語を使ってRedmineから情報を取得する

 コマンドラインからシンプルなREST操作 (GET) を試してみたところで、次に、プログラミング言語を使ってRedmineにアクセスをしてみましょう。

 Redmineには、Redmine REST APIを経由してRuby、Python、Javaなどの各種言語から容易にアクセスできます。今回は例として、Pythonを使ってアクセスしてみます。

 事前準備として、サンプルコードで利用するライブラリPython Redmineを次のコマンドでインストールします。

$ easy_install python-redmine

 python-redmineのインストールが済んだら、Pythonを対話モードで起動し、Redmineサイトに接続してみます。

>>> from redmine import Redmine
>>> redmine = Redmine('http://redmine-server', key='API_ACCESS_KEY')

 アクセスキーではなく、ユーザ名とパスワードでアクセスするには次のようにします。

>>> redmine = Redmine('http://redmine-server', username='USERNAME', password='PASSWORD')

 では、プロジェクトのリストを取得してみましょう。次のようにコマンドを実行します。

>>> projects = redmine.project.all()
>>> for project in projects:
...     print("%d %s" % (project.id, project.name))

 すると、次のように結果が表示されます。

3 サークル活動
1 ビジネス
4 執筆
5 開発案件
2 ホーム

 どのオブジェクトがどのattributeを持つのかは、RedmineのDeveloper Guide をご覧ください。例えば、Projects なら nameid をはじめ、identifierdescription などのattributeがあることが分かります。

 チケット (Issues) についても同じように、次のコマンドで取得できます。

>>> issues = redmine.issue.all()

 特定のプロジェクトに含まれるチケットのみを取得するには、次のようにProject IDを指定します。

>>> issues = redmine.issue.all(project_id=1)

 ここまで示したように、たった数行のコードでRedmineへの接続と、プロジェクト一式、チケット一式の取得ができてしまいました。

 接続先のURLとAPIアクセスキーを複数用意し、それぞれについて、プロジェクトやチケットの情報を取得することで、複数Redmineサイトからの情報集約が実現できそうですね。

プラグインにするか独立したツールに仕立てるか

 Redmineは、Ruby on Railsフレームワークの流儀でプラグインを作成し追加する仕組みが提供されています。また、RubyのAPIライブラリも提供されているため、Rubyを用いてプラグインを作成することも可能です。

 今回取り組んでいる、情報収集ツールの利用想定として、週次や月次の打合わせでの進捗確認が考えられ、バッチ処理で実行して結果が見られればよいと判断します。また、出力結果をレポートとして履歴を残しておくことで、過去のどの時期にどんな状況であったかのスナップショットをアルバムのように残すことも可能です。

 これらの理由から、今回はRedmineに依存せずに、情報のみを集約することができる独立したツールとして作成することとします。

情報収集端末のイメージ
情報収集端末のイメージ

 

複数のRedmineサイトのURLとAPIアクセスキーの管理

 複数のURLとAPIアクセスキーを簡単に管理できる方法としては、設定ファイルを利用する手が考えられます。今回は、JSON形式で記述することとします。

{
    "site_a": {
        "site": "http://site_a/redmine/"
    },
    "site_b": {
        "site": "http://site_b/redmine/",
        "key": "API_KEY"
    }
}

 このJSONデータをPythonで読み取るには、次のように記述します。このコードでは、conf.json というファイルを読み取っています。

>>> import json
>>> f = open('conf.json')
>>> conf = json.load(f)
>>> f.close()
>>> conf['site_b']
{u'site': u'http://site_b/redmine/', u'key': u'API_KEY'}

 ただし、設定ファイルにはAPIアクセスキーを記載することになるので、読み取り権限を適切に設定するなど、保管には注意を払ってください。

プロジェクトやチケットの親子関係

 Redmine上のプロジェクトやチケットは親子関係を持つことができます。親と子の間には、次の図に示すように1対多の関係にあります。

プロジェクト、チケットの親子関係の例
プロジェクト、チケットの親子関係の例

 

 この図では、Project 2、Project 3はProject 1のサブプロジェクト(子)であり、Ticket 4、Ticket 5はTicket 3の子チケット、Ticket 10、Ticket 11、Ticket 12は、Ticket 8の子チケットです。

 REST API経由で、Project(プロジェクト)やIssue(チケット)の情報を取得すると、すべての要素がフラットな状態で返されます。

 ProjectもIssueも親は parent 属性で指定されているので、親子の依存関係を集約した情報に反映するには、この関係を解釈する必要があります。今回はこれを、親と子の関係を親から子への一方向リスト (1対多) で表し、できあがったツリー構造をバックトラックで辿るという方法で解釈します。

次のページ
プロジェクトの親子関係を保持するための実装

この記事は参考になりましたか?

タスクが10倍気持ちよくなる 開発環境のリノベーション講座連載記事一覧
この記事の著者

中島 隆明(株式会社ワークスアプリケーションズ)(ナカジマ タカアキ)

株式会社ワークスアプリケーションズ所属。R&D部門であるATE Div.に在籍し、パッケージソフトウェアを支える、インフラやOS、ミドルウェアといったシステムエンジニアリング領域を主に担当。CompTIA Cloud Essentials認定取得。趣味はジャズをはじめとした音楽全般。 ・Web s...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8331 2014/12/16 11:15

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー