26
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitLabAdvent Calendar 2017

Day 19

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

Posted at

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

26
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?