GitHub
cli
GitLab
GitLabDay 19

GitLab&GitHubを操作するためのCLIツール、hlbのご紹介

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

mpppk/hlb: CLI that provides unified & interactive interface to multiple git repository hosting services

特徴

  • 複数の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でそのページを開くことができます。
Image

以下は#でIssue、!でPR/MRを絞り込んで表示する例です。
Image

createコマンド

origin remoteが登録されていないgitリポジトリでhlb createを実行すると以下のような表示になります。
Image
このようにサービスの一覧が表示されるので、pushしたいサービスを選択すればOKです。
リモートリポジトリの生成とorigin remoteの登録が行われます。
以下は作成したリモートリポジトリにそのままpushしてhlb browseで表示する例です。
Image

pull-requestコマンド

実行するとエディタが開くので、PR/MRのタイトルとメッセージを入力してください。
保存して閉じるとカレントブランチに対応するPR/MRが作成されます。
以下はPR/MRを作って、hlb browseで表示する例です。
hlb pull-requet image

というわけで複数のgitホスティングサービスで使えるCLI、hlbのご紹介でした。
まだまだ作り始めたばかりですが、Issueなど投げて頂けると泣いて喜びます!