Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

1.Tasks機能とは

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

スクリーンショット 2013-12-16 1.40.56.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

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

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

スクリーンショット 2013-12-09 0.28.21.png

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

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

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

taskspulldown.png

3.Issuesとの連携

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

スクリーンショット 2013-12-08 17.33.03.png

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

スクリーンショット 2013-12-08 17.33.23.png

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

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

スクリーンショット 2013-12-08 17.33.52.png

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

takssave.png

もちろん、クリアされた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

4.GitHubへの反映

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

スクリーンショット 2013-12-16 2.13.14.png

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

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

スクリーンショット 2013-12-16 2.13.32.png

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

スクリーンショット 2013-12-16 2.14.15.png

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

スクリーンショット 2013-12-22 1.05.22.png

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

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

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

スクリーンショット 2013-12-22 1.13.18.png

まだ作業が残っている場合はそのまま残すこともできますが、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

Tasks機能のJetBrainsのHelpページ
Tasks | IntelliJ IDEA 13.0 Web Help

radiocat
Web系技術とAndroidアプリ開発が中心。スクラムマスターもやってます。 よろしくお願いします。
http://radiocat.hatenablog.com/
rakus
「IT技術で中小企業を強くします!」というミッションを掲げ、中小企業の業務効率化に貢献する複数のクラウドサービスを提供しているIT企業です。「楽楽精算」「メールディーラー」など、国内トップシェアを誇る複数のサービスを開発し、累計導入社数は5万社を超えています。次の時代の"楽"を創るための、まだ見ぬサービスや機能を生み出す取り組みは、今日も続いています。
https://www.rakus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした