GitHubにはhubというツールがあります。
これは、以下のようにTerminalからリポジトリの作成やブラウザ表示、プルリクエストの作成などを行うCLIツールです。
$ hub create # GitHubにカレントディレクトリ名のリポジトリが作成される
$ hub browse # カレントディレクトリのGitHubリポジトリページをブラウザで表示する
$ hub pull-request # 現在のブランチに対応するプルリクエストを作成する
これは慣れるととにかく便利で、ghq+pecoと組み合わせて爆速でGitHubリポジトリを開いたり、パッと思いついたコードをシュッとGitHubにpushしたりできます。
GitLabアドベントカレンダーでいきなりGitHubの話をしてしまいましたが、こういうツールはGitLabにも当然あって、Applications Supporting GitLab | GitLabから対応しているツールの一覧を確認できます。
Starの数的にはNARKOZ/gitlab: Ruby wrapper and CLI for GitLab REST APIが一番多そうです。
ところで、私は仕事でwindows+GitLab、家ではmac+GitHubという環境で開発しています。
そうすると、GitHubとGitLabに対応した、クロスプラットフォームなhubが欲しくなりますが、探してもそういうツールは見当たらない、というか複数のgitホスティングサービスに対応するのが明らかにめんどくさいので、誰もやろうとしないことがわかります。
というわけで、自分で作りはじました。(ここまで前置き)
hlb: git + hub/lab/bucket and more
特徴
- 複数のgitホスティングサービスをサポート
- 現時点ではGitHubとGitLabに対応しています。
- 勢いあまってreadmeにhub/lab/bucketとか書いてしまったので、抽象化レイヤーのAPIが固まったらやっていきたい...
- hubと同じコマンド体系
- まずはbrowse, create, pull-requestをサポート
- Interactive command
- 外部のfuzzy finderを利用して操作するコマンド(後述)
- クロスプラットフォーム
- golangの恩恵により、バイナリを落としてくるだけでwindows/mac/linux/etcで動きます。
導入
バイナリがあるのでReleasesから落としてきていい感じにしてください。
macの方はbrewでinstallできます。
$ brew tap mpppk/mpppk
$ brew install hlb
gopherな方はソースからどうぞ
$ go get github.com/mpppk/hlb
tokenの登録
~/.config/hlb/.hlb.yaml
を作成し、以下をコピペしてください
services:
- name: github.com # もしくはGHEのドメイン名
type: github
protocol: https # or http
oauth_token: xxxxxxxxxxxxxxxxxx
- name: gitlab.com # もしくはGitLabのドメイン名
type: gitlab
protocol: https # or http
oauth_token: xxxxxxxxxxxxxxxxxxxxx
GitHubのtokenはPersonal Access Tokensから、GitLabのtokenはPersonal Access Tokens · User Settings · GitLabから取得してください。
(使わないサービスのtokenは取得しなくて大丈夫です!)
browseコマンド
GitHubやGitLabがremoteとして登録されているリポジトリ内でhlb browse
を実行すると、そのリポジトリのページへ飛びます。
hlb browse issues
でIssueの一覧ページに飛んだり、hlb browse pull-requests/merge-requests
でPR/MRの一覧に飛んだりできます。利用可能なサブコマンドの一覧はhelpを見てください。
ibrowseコマンド
hlbでは複数のgitホスティングサービスサポート以外に、interactiveな操作を提供するという目標があります。
ibrowse(interactive browse)はその最初の実装で、pecoというfuzzy finderを利用してインタラクティブに表示するページを決めることができます。(なので、ibrowseコマンドを使う場合は、予めpecoのバイナリをパスが通る場所へ置いておく必要があります)
例えば# MR
と入力すると、IssueのうちMR
という単語を含むものが絞り込まれ、Enterでそのページを開くことができます。
以下は#
でIssue、!
でPR/MRを絞り込んで表示する例です。
createコマンド
origin remoteが登録されていないgitリポジトリでhlb create
を実行すると以下のような表示になります。
このようにサービスの一覧が表示されるので、pushしたいサービスを選択すればOKです。
リモートリポジトリの生成とorigin remoteの登録が行われます。
以下は作成したリモートリポジトリにそのままpushしてhlb browse
で表示する例です。
pull-requestコマンド
実行するとエディタが開くので、PR/MRのタイトルとメッセージを入力してください。
保存して閉じるとカレントブランチに対応するPR/MRが作成されます。
以下はPR/MRを作って、hlb browse
で表示する例です。
というわけで複数のgitホスティングサービスで使えるCLI、hlbのご紹介でした。
まだまだ作り始めたばかりですが、Issueなど投げて頂けると泣いて喜びます!