Posted at
GitLabDay 19

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

More than 1 year has passed since last update.

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

以下は#で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など投げて頂けると泣いて喜びます!