2015/12/03追記:待望のFirefox対応をしました!今日現在は、 https://www.zenhub.io/firefox からアドオンをインストールすることができます!
また、Firefox版の公開を記念して、初月割引や、ZenHubグッズ(!)がもらえるプロモーションコードがあるので、ZenHubを使ってみようか迷っていた方は、プロモーションコードを利用するとお得に始めることができます。
ZenHub公式ブログの記事はこちら
https://www.zenhub.io/blog/firefox-fans-can-now-use-zenhub-with-their-favourite-browser/
2015/07/01追記:このエントリー中のスクリーンショットは、古いバージョンのZenHubのものです。追記時点での最新の機能についてはZenHub2.0についてを参照してください。
ZenHubとは
専用の拡張をインストールすると、GitHubそのものが拡張される。
GitHubに足りないアジャイルらしさを組み込むもの。
- リポジトリを簡単に切り替えられる機能
- タスクボード(カンバン)
- ファイルアップロード機能をより便利にする
- コードのコメントやイシューのコメントに+1できる機能
- issueの情報をJSONファイルでエクスポートできる謎機能
ZenHubでできること
リポジトリを簡単に切り替えられる機能
リポジトリ名の横にボタンが増え、クリックするとリポジトリ一覧が表示される。
インクリメンタルサーチでリポジトリを簡単に切り替えることができる。
Ctrl+nで下候補に移動、Ctrl+pで上候補に移動できる。
地味に便利ですね。
タスクボード
リポジトリのページの右側にBoardsというメニューが増えている。
それをクリックすると以下の様なページがロードされる。
自分の好きなフローを選択する。無難なのは真ん中のやつか。
もしくはCreate your ownから自分で作ることもできる。
なお、このラベル(BacklogとかTo Doなどはあとから変えられる)
そして、実際に作った画面は以下である。
そしてissueを作る。
右側にPipelineというのがあるので、デフォはBacklogになっている(ここでは残務)が、進行中であれば別のものを選択したりできる。
issueが作成されていれば、PivotalやHuBoardのように、issueが一覧される。
移動したりラベルを変えるとリアルタイムで反映される。この並び順はおそらくZenHub側に保存される。
必要があればカラムを追加したり削除したりする。
カラムを削除した際に、そのカラムにあったissueはBacklogへ移動する。
HuBoardのようにここからissueの状態(assignやlabel)を変更することはできない。
issueをクリックして該当issueが別窓で開くのでそこから変えなくてはいけないのが面倒か。
また、LabelsやMilestone、Assigneeなどでissueをフィルターできるのは便利。
ファイルアップロード機能をより便利にする
これはこれで便利な機能。
GitHubのコメント欄にドラッグアンドドロップでファイルを添付できるようになる。
通常は、PNG/GIF/JPGしかアップロードできないのですが、ドラッグアンドドロップでアップロードする機能を使うと、どんなファイルでもアップロードできるようになる。
通常は https://cloud.githubusercontent.com
にアップされるのですが、そこから上げた場合はhttps://files.zenhub.io/
以下にアップされる。そしてそこへのリンクが作られる。
一応httpsであるのでまぁ、問題はないのかな。依存する先が増えちゃう気はするけど。
便利っちゃあ便利。アップロードできる容量などについては調べていない。
コードのコメントやイシューのコメントに+1できる機能
issueに+1したり
issueのコメントを+1したり
PRsのコメントに対して+1したり
+1されたことが通知されたり(特にポップアップとかバッジで通知されたりはしない)
- +1したデータはZenHub側に保存されている。
- +1した相手に対して、Chromeの拡張を通じて+1したことが通知される
コメントで +1 したり絵文字で表現してた部分だったので、これは地味に良いと思う。
issueの情報をJSONファイルでエクスポートできる謎機能
issueのページでExport Issueを押すと、Blob的なのでJSONを作って、ダウンロードできる。
https://github.com/geckotang/zenhub-demo/issues/1 をエクスポートしたものが以下。
使途不明JSON。
[
{
"url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/1",
"labels_url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/1/labels{/name}",
"comments_url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/1/comments",
"events_url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/1/events",
"html_url": "https://github.com/geckotang/zenhub-demo/issues/1",
"id": 48761532,
"number": 1,
"title": "Qiitaに記事を書く",
"user": {
"login": "geckotang",
"id": 683965,
"avatar_url": "https://avatars.githubusercontent.com/u/683965?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/geckotang",
"html_url": "https://github.com/geckotang",
"followers_url": "https://api.github.com/users/geckotang/followers",
"following_url": "https://api.github.com/users/geckotang/following{/other_user}",
"gists_url": "https://api.github.com/users/geckotang/gists{/gist_id}",
"starred_url": "https://api.github.com/users/geckotang/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/geckotang/subscriptions",
"organizations_url": "https://api.github.com/users/geckotang/orgs",
"repos_url": "https://api.github.com/users/geckotang/repos",
"events_url": "https://api.github.com/users/geckotang/events{/privacy}",
"received_events_url": "https://api.github.com/users/geckotang/received_events",
"type": "User",
"site_admin": false
},
"labels": [],
"state": "open",
"locked": false,
"assignee": {
"login": "geckotang",
"id": 683965,
"avatar_url": "https://avatars.githubusercontent.com/u/683965?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/geckotang",
"html_url": "https://github.com/geckotang",
"followers_url": "https://api.github.com/users/geckotang/followers",
"following_url": "https://api.github.com/users/geckotang/following{/other_user}",
"gists_url": "https://api.github.com/users/geckotang/gists{/gist_id}",
"starred_url": "https://api.github.com/users/geckotang/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/geckotang/subscriptions",
"organizations_url": "https://api.github.com/users/geckotang/orgs",
"repos_url": "https://api.github.com/users/geckotang/repos",
"events_url": "https://api.github.com/users/geckotang/events{/privacy}",
"received_events_url": "https://api.github.com/users/geckotang/received_events",
"type": "User",
"site_admin": false
},
"milestone": null,
"comments": 1,
"created_at": "2014-11-14T09:32:35Z",
"updated_at": "2014-11-14T09:38:47Z",
"closed_at": null,
"body": "- [x] 説明用のリポジトリを作る\r\n- [ ] 画像を公開できる画像にする",
"closed_by": null,
"comments_list": [
{
"url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/comments/63032141",
"html_url": "https://github.com/geckotang/zenhub-demo/issues/1#issuecomment-63032141",
"issue_url": "https://api.github.com/repos/geckotang/zenhub-demo/issues/1",
"id": 63032141,
"user": {
"login": "geckotang",
"id": 683965,
"avatar_url": "https://avatars.githubusercontent.com/u/683965?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/geckotang",
"html_url": "https://github.com/geckotang",
"followers_url": "https://api.github.com/users/geckotang/followers",
"following_url": "https://api.github.com/users/geckotang/following{/other_user}",
"gists_url": "https://api.github.com/users/geckotang/gists{/gist_id}",
"starred_url": "https://api.github.com/users/geckotang/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/geckotang/subscriptions",
"organizations_url": "https://api.github.com/users/geckotang/orgs",
"repos_url": "https://api.github.com/users/geckotang/repos",
"events_url": "https://api.github.com/users/geckotang/events{/privacy}",
"received_events_url": "https://api.github.com/users/geckotang/received_events",
"type": "User",
"site_admin": false
},
"created_at": "2014-11-14T09:38:47Z",
"updated_at": "2014-11-14T09:38:47Z",
"body": "GIFアニとかで説明するといい部分もあるかも"
}
]
},
{
"textStatus": "success",
"status": 304
}
]
感想
- ZenHubがいい感じにGitHubを拡張してくれるので良い。
- カンバンとかはHuboardでも代用できるけど、よく見るGitHubにカンバンができるのでまとまってていい
- GitHubのマークアップとかが変わると大変そう
- JSONは何に使うのかわからない(issueごとにしか保存できないし)
- GHEで使えるのかは調べてない