PhpStormとGitHub/Bitbucketのissueを連携させてブランチを自動生成してマージしてチケットのクローズまでを全部PhpStormにやってもらう時の流れ

「チケット」だったり「イシュー」だったり「タスク」だったり様々ですが、まあそういうやつと PhpStorm を連動させると便利。

とりあえず今回は GitHub と Bitbucket とつなげて、以下のような流れの作業を勝手にやってくれるようにする流れをまとめてみます。

  • GitHub / Bitbucket の issue を PhpStorm のタスクに取り込む
  • 対応する Git のブランチを自動生成する
  • 作業が終わったら
    • master をチェックアウトする
    • 作業ブランチを master にマージする
    • 作業ブランチを削除する
  • GitHub / Bitbucket にプッシュする
  • 自動でイシューをクローズする

Redmine も使ってるんだけど、これについてはまた後日。

前提

Git の運用方法は千差万別だと思うので、ここではタスクをひとつ取ってきてその作業をして対応するコミットをひとつ行うだけのシンプルなルールを前提としています。

作業はすべてキーボードショートカットでやります。覚えてしまえば楽ちんで、マウスを使う必要なし。

なお、手元にあるのが Mac なのでキーボードショートカットは Mac のもので書きますけど、他の環境でも同じようにできると思います。

事前準備

ソースコードの管理

プロジェクトのソースコードはすでに GitHub / Bitbucket で管理されているという前提でお願いします。詳細は割愛します。

Issue の担当者を割り当てる (GitHub)

GitHub の場合、issue の担当者が自分になってないと後で候補に出てこないので、自分が対応するものについては自分を担当者にしておく必要があるみたいです。

Bitbucket ではすべての issue が対象になるので特に担当者になってなくてもいける。

プラグインを入れる (BitBucket)

Bitbucket を使う場合は、この方法で連携用のプラグインを入れておきます。

また、Bitbucket プラグインでは場合に事前に認証情報を設定しておくことができるので、やっておくと後が楽です。

PhpStorm 環境設定の Other Settings > Bitbucket にユーザー ID とパスワードを入れるか、Add SSH Key… ボタンを押して Bitbucket に登録済みの SSH 公開鍵を指定します。

タスク連携

PhpStorm のプロジェクトと、外部サービスの (チケット|イシュー|タスク) を連携させます。

  1. 次のいずれかの方法で、タスクのサーバーを設定するウィンドウを開く。
    • 環境設定 (command + ,) を開いて、Tools > Tasks > Servers を選択する
    • command + shift + A でアクション呼び出しダイアログを開いて、”server” ぐらい入力したら候補に “Configure Servers” が出てくるのでそれを選ぶ
    • メニューバーの Tools > Tasks & Contexts > Configure Servers を選ぶ
  2. “Configured Servers” という欄の下に + ボタンがあるので、それを押す。
  3. GitHub なり Bitbucket なり、使いたいサービスを選択する。
  4. 対象サービスへのログイン情報を入力する。
    • GitHub の場合: Repository 欄にリポジトリの情報を入れて Create API Token ボタンを押すと GitHub のログイン情報を聞かれるので入力する。 API トークンを自動で取ってきてくれます。
    • BitBucket の場合: 前述の方法で設定しておけば自分がアクセスできるリポジトリが出てくるので選ぶだけ。
  5. Commit Message を選択して、コミットメッセージを設定する。
    • GitHub の場合: resolve #{number} {summary}
    • BitBucket の場合: resolve #{id} {summary}

    ここでメッセージを指定しておくとPhpStorm でタスクをクローズしたときに自動でコミットメッセージが入ります。

    上記は一例ですけど、resolve とか fix とかのコマンドに続けて # + issue 番号をコミットログに書いておくと、push したときに Issut が自動でクローズされるのでこんな感じで書いておく。

以上で事前の準備は完了。のはず。

タスクを切り替える

option + shift + N を押すとタスクを選択できます。

このとき、

  • “Clear current context” にチェックを入れると、現在タブで開いているファイルをいったんリセットして作業開始
  • “Create branch” のとこでで作業用のブランチ名を指定できます。最初から issue にあわせて入ってるので、特に希望がなければそのままでもいいかも。
  • “Create changelist” にチェックが入っていると、Git のブランチだけではなく PhpStorm の Changelist も作られます。お好みで。

return キーで確定すると、自動でブランチが切られてそこにチェックアウトされます。

作業する

タスクに対応する作業を行います。

タスク終了

option + shift + W を押してタスク終了を高らかに宣言。

ただ、Mac でこのキーの組み合わせを押すと „ という特殊文字の入力になってしまうので、エディタにフォーカスしてるとそっちが優先されてしまいます。エディタで全てのタブを閉じるとか、command + 1 でファイルツリーにフォーカスするとかしておく必要がある。

マウスで解決したい場合は Tools > Tasks & Contexts > Close Active Task… を選ぶ。

ともかくタスク終了ダイアログが出ます。

  • Close issue: ここにチェックを入れると、PhpStorm 側でタスクをクローズした時点で GitHub の issue もクローズされます。BitBucket には対応してないかも。
  • Commit changes: 変更をコミットします。
  • Merge branche(s): 今回のブランチを master にマージします。マージが成功したら作業ブランチは自動で削除されます。

この “Close issue” 機能を使うかどうかは一考の余地があるかも。コミットした時点でこのタスクが解決したことを宣言できて便利だけど、まだプッシュしてないから GitHub には反映されないので、他の人を混乱させる可能性もあるんじゃないかな。どうせあとでプッシュしたらコミットログにあるコマンドで自動クローズされるので、いまのところこのチェックは外してます。

push する

command + shift + K でコミットをプッシュします。

プッシュすると、設定したコミットログ書式にしたがって issue が自動でクローズされる。

ひとタスク完了!

ターミナルでもできるけど

もちろん Git の操作の部分はコマンドラインから同じことができるし、ちょっと複雑なことをやろうと思ったらそっちの方が簡単だと思います。

ただ、issue からタスクを取ってきて勝手にブランチを切ってくれたり、タスク終わったよと伝えたら自動でブランチを整えてくれたりするのはやっぱり便利。これ覚えてからはいつも使ってます。

何より、IDE を使いこなしてる感!

次お願いします

この記事は PHP Advent Calendar 2014 の24日目の記事です。昨日の記事はこちら。

明日が最終日なんですね。@yando さんおねがいします!

  • このエントリーをはてなブックマークに追加