JetBrainsユーザーグループにて「IntelliJとYouTrack」というタイトルにて発表してきましたが、グダグダな発表をしたのでちゃんとまとめた記事を書きます。
要点
JetBrains系IDEでは、標準に付属しているツールを用いることで、スマートに作業ができます。(なお、一部のIDEについてはリポジトリーからインストールしないといけなさそうです(GoglandにはTaskManagementプラグインが付属していないようだった))
- Task Management プラグイン
- VCSツール
- JetBrains IDEを用いたワークフロー
- ITSに登録したチケットを元に
Taskを開く Taskに関係のない変更(ちょっと気になった部分のリファクタリングなど)を行った場合は別の Changelist で管理する- 他の
Taskに取り掛かる場合には開いているファイルなどの情報(Context)が自動で切り替わる Task終了と同時にイシュー管理システムのステータスを更新する
- ITSに登録したチケットを元に
Task Managementプラグイン
ITS(イシュー管理システム)とIDEを連携させてTask と Context を管理できるプラグインです。Task はイシュー管理システムのチケットに該当する、作業の単位をあらわします。Context は開いているファイルのカーソルの位置や、プロジェクトツリーの開いているディレクトリー、ツールウィンドウの状態などIDEの状態をあらわします。IDEにておこなう作業(Task)はITSのチケットに基づいておこなわれ、作業している状態(Context)が作業に関連づいているような感じです。
ITSの設定
特に何も操作をしていなければ、IDE上では Default Task が選択されており、その Context は Default Task に紐付いたコンテクストになっています。
上の画像は Default Task にて作業をおこなった後の状態です。画像右上のあたりにあるプルダウンが Default Task となっているのがわかるかと思います。
まず、ITSに登録されているチケットと連動させます。
Tools > Task & Contexts > Configure Servers... からITSのサーバー設定を行います。
リストの左下にある + ボタンから連携するサーバーの種類を選びます。JIRA/YouTrack/Redmine/Trackなど主要なITSはカバーしています(Backlogはありませんが…)。
サーバーを選択した後、ITSのURL、ログイン用ユーザー名、パスワード、チケット検索用のクエリを入力してサーバーの設定は完了です。
このプラグインの具体的な使い方は後述します。
VCSツール
IDEとVCSを連携させる機能もあります。以下はGitベースでの解説ですが、他のVCSでも同様のことができ(ると思い)ます。
基本的な操作
addは自動的に行われます。IDE内でおこなった変更はすべてaddされた状態になります(正確にはaddされていないけど、IDEにてadd相当の状態として管理されている)。commitは⌘+Kからおこないます。コミットの前にコードインスペクションやリフォーマット、importのオプティマイズなどをおこなえます。pushは⌘+⇧+Kです。- ブランチの選択、新しいブランチの作成は右下のブランチのプルダウンからおこないます。
fetchはVCS>Fetch、mergeは右下のブランチからマージするブランチを選んでからMergeを選びます
上の画像は現在のブランチから新しいブランチを作成する場合
上の画像は origin/master ブランチを現在のブランチにマージする場合
Changelist
IDEのVCS連携は普通すぎるのですが、changelistはかなり強力な機能です。この機能によりコミットをより綺麗なものにできます。changelistは変更されたファイルを意味のある単位にまとめた集まりのことです。IDEのコミットはこのchangelist単位で行われます。よく言われる git add . をしないでファイルを指定して git add していると思いますが、changelist機能はIDEでその慣例をサポートするための機能です。先程IDE上で行われた変更は add された状態になると記述しましたが、正確にはchangelistで管理された状態になります。そしてコミットの際にchangelistにあるファイルが add されてコミットされます。
changelistを使っていくと、よくある関係ない変更がコミットに紛れ込んでしまうようなケースでも、簡単にコミットを綺麗に保つことができます。例えば、現在のチケットとは関係のない部分のちょっとしたリファクタリングをおこなったとしても、その変更を別のchangelistに入れておくことでコミットの中に関係のない変更が紛れ込むのを抑制したりできます。
changelistは左下の方にあるVersion Controlツールのchangelistタブで見ることができます。
changelistにはアクティブなchangelistとアクティブでないchangelistの二つがあります。エディタスペースなどでおこなった変更はすべてアクティブchangelistに加わります。そしてコミットする場合もアクティブchangelistに入っているファイルがコミット対象になります。
現在行っている作業と関係のない変更はすべてアクティブでないchangelistに加えるとよいでしょう。changelist間のファイルはドラッグ&ドロップで移動できます。
アクティブchangelistの切り替えは、changelistを選んでから左のチェックボックスのようなボタンを押すことで切り替えられます。
左にある + ボタンから新しいchangelistを作ることができます。
ダイアログにはchangelistの名前を入力します。なお、コミットコメントを先に書いておきたい場合は、コメント欄に書いておくこともできます。
IDEを用いたワークフロー
以下、JetBrains系IDE(ここではIntelliJ IDEA)とITS(ここではYouTrack)とGit(およびGitHub)を用いたワークフローのサンプルケースを記述します。
1. チケットから Task を開く
現在、次のような未解決のチケットが自分に割り当てられているとします。
Default Task のコンテクストで Tools > Task & Contexts > Open Task(または ⌥ + ⇧ + N)から上記チケットの中から一つ選びます。
Open Task ダイアログにて次のように設定して、 Task を開きます。
- Update issue state → In Progress に更新
- 現在の
Contextをクリアする(別のContextを作ると同意) - Create branch → masterからチケットのIDと同じ名前のブランチを作成
- Changelist → 新しいchangelistを作成
Task を開いた後のIDEの状態。 Context をクリアすると、今まで開いていたファイルなどがすべて閉じられた状態になります。
もちろん、ITSではチケットの状態が更新されています。
2. 作業をする
コードを書きます。おこなった変更はすべて先程作成したchangelistに入ります。
ここで Task と関係のない変更を行います。
この変更は同じコミットに加えたくないので、新しいchangelistを作成して、そちらに移します。
⌘ + K からコミットします。
3. 他の Task を開く
作業の途中ですが、別の変更もしてしまったため、その変更に該当するチケットから Task を開きます。この際、ブランチ作成元のブランチは現在のブランチでなくmasterを指定しておきます。
新しい Task に切り替える際に、アクティブchangelistの中身が空の場合はchangelistを削除するか聞かれます。削除してしまってかまわない場合は「Remove」を、削除しない場合は「Cancel」を選びます。
先程、一時的にchangelistに加えておいた変更をドラッグ&ドロップで新しいchangelistに移動させます。
この後にコミットをしておきます。
そして Tools > Task & Contexts > Switch Task(⌥ + ⇧ + T)から最初に作った Task に切り替えます。
4. Task を終了する
Tools > Task & Contexts > Close Active Task(⌥ + ⇧ + W)から Task を終了します。
Task を終了する際にできることは次のことです。
- ITSのステータスを更新する
- まだコミットしていない変更をコミットする
- (コミットした上で)変更をブランチの作成元にマージする
プルリクエストからマージしたいので、ここではITSのステータスを「Waiting Review」に更新するだけにとどめます。
なお、 Task を終了しても、IDE上では特に変化があるわけではありません。というのも、レビューによってこの後に同じ Context にて作業をする可能性があるかもしれないからです(と理由を言い切ることもできない…)。
プルリクエストを作っていないので、IDEから作ります。特にキーマップを割り当てていないかぎりプルリクエストの作成はキーマップからはできないので、 ⌘ + ⇧ + A からコマンドを探してプルリクエストを選びます。
titleとdescriptionを入力して「OK」を押してプルリクエストを作成します。
これでプルリクエストが作成されます。
このような形で、JetBrains系のIDEとITSを連携させるとかなりスマートに作業ができます。
おわり