IntelliJのTasks機能とGitHubのIssuesを連携させてチケット駆動開発

いよいよ24日目の記事です。IntelliJ界のそうそうたるメンバーが寄稿される中、トリ前にも関わらず完全ステマ記事でお送りしております。

## 1.Tasks機能とは

Tasks機能は主にチケット駆動の開発（TiDD）をサポートすることを念頭に作られた機能だと思いますが、うまく使えばTiDDな人もそうではない人もとても便利な機能です。
メジャーどころのTracやRedmineをはじめ様々なサービスに対応しており、主要なサービスは全て網羅しています。


![スクリーンショット 2013-12-16 1.40.56.png](https://qiita-image-store.s3.amazonaws.com/0/3324/2347758f-8952-e4e0-8123-effa0c015b30.png "対応しているサービス")


今回はチーム開発に限らず個人の開発でも使うことの多いGitHubのIssuesと連携した例で説明します。GitHubのリポジトリに紐付いて標準で使える機能のわりに実際はあまり使われていないようにも感じますがIntelliJのTasks機能と連携することで個人の開発でもチケット駆動で便利に開発を進められますのでこれを機会にIssuesとTasks機能を連携させた開発に馴染んで頂ければ幸いです。
なお画面イメージは最新バージョンのIntelliJ 13です。12でもほぼ同じことができますが、まだの方は是非バージョンアップを…（ステマ）

## 2.IntelliJの設定

Preference > Tasks > Servers
+ボタンを押すと前述の対応サービスが表示されます。
GitHubを選択して各種情報を設定します。

![Preferences_と_Word_java_-__ormExample__-_ormExample_-____git_intellij_ormExample_.png](https://qiita-image-store.s3.amazonaws.com/0/3324/8a06a4dd-15c7-591c-711b-62be6333c36f.png "TasksのServer設定画面")

Create API TokenをクリックしてGitHubへ認証することでAPI Tokenを設定できます。
このあたりはGitHub以外のサービスを選んだ場合も設定内容はだいたい同じです。

Commit Messageタブではコミット時に自動でセットされるメッセージの内容を設定できます。

![スクリーンショット 2013-12-09 0.28.21.png](https://qiita-image-store.s3.amazonaws.com/0/3324/1a2672e1-db81-f783-4ae5-9ed61bfa1b99.png "コミットメッセージの設定")


ここでTiDDでない人向けに補足ですが、GitHubではCommit Messageにfixed #1と入力しておくとPushと同時に#1のIssueをCloseすることができます。fixedは書かなくても#の後に番号を入力すればコミットと指定した番号のIssueをリンクできます。

チケット駆動の開発ではコミットとチケットの関連付けは欠かせないのでコミットメッセージの入力忘れを防ぐためにもあらかじめここで設定できるのはとても便利です。
もちろんGitHub以外のサービスと連携した場合もそれぞれのルールにしたがってCommit Messageを設定できます。ここではfixedを設定しておくのは賛否が分かれるところだと思いますが#{number}は設定しておきたいところです。

ひと通りの設定を行った後、ツールバーにTasksのプルダウンが表示されれば設定完了です。

![taskspulldown.png](https://qiita-image-store.s3.amazonaws.com/0/3324/4f61a413-2a11-0e51-48ec-952d3a014e9f.png "ツールバーのTasksの状態")


## 3.Issuesとの連携

まずはGitHubのIssuesに以下のようなIssueを登録してあるところから話を進めます。

![スクリーンショット 2013-12-08 17.33.03.png](https://qiita-image-store.s3.amazonaws.com/0/3324/6662ca7c-6198-96ad-4a68-707bfbf681f0.png "Issuesの画面")

先ほどのツールバーのTaskのプルダウンを開いてOpen Taskをクリックすると登録しているIssuesが表示されます。

![スクリーンショット 2013-12-08 17.33.23.png](https://qiita-image-store.s3.amazonaws.com/0/3324/ffb0714e-86e8-c055-10a1-8282591d29c6.png "Taskの選択")

たくさんある場合はタイトルを入力して検索が可能です。残念ながらIssueの番号では検索できません。
また、Create New Taskをクリックすると独自にTaskを登録可能ですが、これはあくまでIntellijの中でTaskを追加するだけでGitHub側のIssueが追加されるわけではありません。

Taskを選択すると確認ダイアログが表示されます。

![スクリーンショット 2013-12-08 17.33.52.png](https://qiita-image-store.s3.amazonaws.com/0/3324/c8ec6ea4-5a65-0e17-f3b1-a03419153ebf.png "Task選択後の確認ダイアログ")

Clear current contextは現在開いているファイルの状態をクリアします。Tasks機能はTaskごとに開いたファイルの状態や編集中のファイルの状態を記憶してくれます。たとえばTask AではJavascriptの開発を行ってjsファイルを開いた状態だとします。Task BではSQLを修正することになった場合、Task Aの状態は必要ないのでClear current contextにチェックを入れて開発を進めると現在開いているファイルの状態を画面上からクリアして新たに開いたファイルの状態をTask Bの状態として覚えてくれます。

![takssave.png](https://qiita-image-store.s3.amazonaws.com/0/3324/a9585aeb-f9dd-f247-0724-f2cbd146ce18.png "Taskごとのchangelist")

もちろん、クリアされたcurrent contextも覚えていますので再度Task Aを選び直せば以前開いていたjsファイルの状態に戻すことができます。
とりあえずチェックを入れておくのがおすすめです。


Create branchはその名の通り、このTask用に新しくブランチを切るかどうかを指定します。これは目的に応じてチェックを入れることになると思います。


Create changelistはチェックしておくとTaskの名前でchangelistが追加されてTaskごとに編集したファイルが管理できます。複数のTaskを並行で進めてもchangelistにはTaskごとに編集したファイルが表示されます。並行で作業したあとでTaskごとにまとめてコミットしたり、特定のTaskの作業を中止して元に戻す時に便利です。これもとりあえずチェックを入れておくのがおすすめです。

![スクリーンショット 2013-12-08 18.06.50.png](https://qiita-image-store.s3.amazonaws.com/0/3324/8634eddf-02b7-c494-2c53-0eafd9f810bc.png "Taskごとのchangelist画面")



## 4.GitHubへの反映

次はTaskの作業をGitHub側に反映する際の説明です。


![スクリーンショット 2013-12-16 2.13.14.png](https://qiita-image-store.s3.amazonaws.com/0/3324/c4c67f92-284b-d164-9c60-4092ae742fca.png "changelistからのコミット")

前述のとおりchangelistごとに編集したファイルを選んでコミットしできます。
もちろん同じTaskの中でもファイル単位で選択して別々にコミットもできます。
Taskを選べばそのTaskで編集した全てのファイルをまとめてコミットできます。

コミットの時には先ほどあらかじめ設定しておいたCommit Messagesの内容が表示されます。

![スクリーンショット 2013-12-16 2.13.32.png](https://qiita-image-store.s3.amazonaws.com/0/3324/72e3227c-62fe-ed1b-f8da-02644293b494.png "コミットメッセージ")

もちろん設定済みのCommit Messageを修正したり追記することも可能です。

![スクリーンショット 2013-12-16 2.14.15.png](https://qiita-image-store.s3.amazonaws.com/0/3324/5f2aaa7c-b4ad-f9c6-2630-681665b02401.png "コミットメッセージ（追記後）")

Commit & Push後、GitHubにログインして該当のIssueの状態を確認してみるとコミットとIssueが結びついていることがわかります。またこのケースではfixedを指定したのでこのIssueはCloseされています。

![スクリーンショット 2013-12-22 1.05.22.png](https://qiita-image-store.s3.amazonaws.com/0/3324/165dcf15-c24f-adcc-fc30-ab2cae013020.png "CloseされたIssueの画面")


## 5.応用的な使い方と補足

前述のようにTaskごとに開いているファイルの状態は覚えているので緊急の不具合対応などの割り込みTaskが入っても安心して割り込み作業を行い、元のTaskに戻ることができます。元のTaskで修正していたファイルをメモしておく必要はありません。

なお、Taskの対応が終わってchangelistが空の状態から別のTaskに切り替えるときは今のTaskをchangelistから削除するかどうかを確認されます。

![スクリーンショット 2013-12-22 1.13.18.png](https://qiita-image-store.s3.amazonaws.com/0/3324/d663a8d5-c126-b410-16c5-0173ebde7b36.png "changelistからの削除確認ダイアログ")

まだ作業が残っている場合はそのまま残すこともできますが、changelistがTaskでいっぱいになりますので作業が終われば消します。もちろん消した後も再びTaskを選択してchangelistに追加することは可能です。
なお、私の経験では作業が終わって一度changelistから削除したTaskをもう一度呼び直したときにうまくTaskが切り替わらないことがありました。再現手順がはっきりわかっていないのですが、作業が終わっても再度修正が入る可能性があるTaskはchangelistから消さないほうがいいかもしれません。

このTasks機能は前述のようにGitHubだけでなく様々なサービスに対応しているためプロジェクトごとに別のサービスを登録して使うことができます。私も仕事の関係でプロジェクトごとにSVNとGitHubを使い分けています。基本的な使い方はどのサービスでも同じなので複数のサービスを併用しても特に不便は感じないと思います。


## 6.まとめ

チケット駆動のチーム開発に限らず、GitHubを使って個人でプログラムを公開している場合でもチケットとコミットの紐付けは重要ですが、面倒な作業でもあります。コミット時のコメントをうっかり忘れたり内容を間違ってしまってIssueとコミットの関連がカオスな状態になってしまい、結局Issuesも使わないというのは私の過去の経験談ですが、Tasks機能を使うようになってからはそのような失敗も減りました。同様の経験をお持ちの方は是非一度試してみて頂ければと思います。

なお、この機能はFree版のCommunity Editionsでも使えるようですので是非一度お試しください。
[IntelliJ IDEA Editions Comparison](http://www.jetbrains.com/idea/features/editions_comparison_matrix.html)

Tasks機能のJetBrainsのHelpページ
[Tasks | IntelliJ IDEA 13.0 Web Help](http://www.jetbrains.com/idea/webhelp/tasks.html)