[おすすめ]ターミナルでの作業効率が爆上げするTUIツール5選


こんにちわ、ゴリラです。

普段、筆者は主にターミナルで仕事をしています。そこで作業効率化のためいくつかTUIツールを使っています。
今日は、個人的におすすめのTUIツールを5つ紹介していきます。

これらを導入することで、ターミナルでの作業効率が上がると思いますので、ぜひ導入して試してみてください。
また、こんな便利なツールがあるよって方いましたら、ぜひコメントをくださいー

  • 2019/11/28 追記
    • ffのブックマーク機能
  • 2-19/11/29 追記
    • ffの入力補完を追記

Git

lazygitというTUIツールを使っています。

lazygit機能が豊富なので紹介しようとすると長くになってしまうため、筆者が普段使っていて便利だなと思う機能を紹介します。
詳しく知りたい方はREADMEもしくは作者本人によるおすすめの15機能をまとめた動画を見てください。

未コミットファイルの差分

lazygitを起動するとFilesに未コミットのファイルが表示されます。Unstaged Changesに選択したファイルの差分が表示されます。ファイルの選択はjkもしくはで、差分をスクロールする時はCTRL-dCTRL-uを使用します。

ちなみに、変更を取り消すときはdを使用します。未コミットなので消したら消えるのでご注意ください。

コミットの差分

Commitでコミットを選択するとPatchにコミットの差分を確認できます。

コミット済みファイルの差分

CommitでEnterを押下するとCommit filesが表示されます。ファイルごとに差分を確認したい時に便利です。ちなみにこの機能は筆者が実装しました。便利だなと思いました。

ステージング

FilesSpaceを押下すると選択したファイルをステージングできます。
aで全ファイルをステージングできます。ステージングしたら色が変わるのでわかりやすいですね。

行単位のステージング

FilesEnterを押下すると変更した行単位のステージングができます。選択した行でSpaceを押下するとStaged Changesに変更が追加されます。Tabを押下してStaged Changesに移動してdを押下するとステージングした変更を戻すことができます。とても便利です。

コミット

Filescを押下するとコミットメッセージを入力するパネルが表示されるのでそこでメッセージを入力したEnterを押下するとコミットできます。
より詳細なコミットメッセージを書きたいことが多いと思うので、Cを押下すると$EDITORに設定されているエディタを起動してコミットできます。

コミット間の差分

CommitsSpaceを押下するとコミット差分モードに切り替わり、次に選択したコミットとの差分を確認することができます。ちなみにこれも筆者が実装しました。便利だなと思いました。

コミットにステージングファイルを追加

FilesAを押下するとステージングしたファイルをコミットに追加することができます。
EscもしくはCTRL-[で操作をキャンセルできます。

コミットメッセージの変更

CommitsRでエディタを使ってコミットのメッセージを変更できます。

コミットの取り消し

Commitsgで選択したコミットまでリセットできます。soft、mixed、hardを選択できます。

ブランチ作成

Branchesnを押下すると新しいブランチを作成できます。

lazygitまとめ

ざっくりですが、いくつか機能を紹介しました。
他にもたくさんの機能がありますが、筆者もそこまで使いこなせているわけではないので、ぜひ読者自身で触ってみてください。

Docker

最近開発ではdockerを使う方が多いのではないのでしょうか。筆者もその一人です。
dockerは基本コマンドで操作しますが、より簡単に操作できるTUIツールdocuiを以前作りました。より詳細な解説はこちらの記事を参考していただくとして、ここでは軽く紹介します。

イメージ取得

image listpでイメージをpullすることができます。これはdocker pullと同様な動きになります。基本操作は非同期で動くので、pullしている間にコンテナを起動したりすることもできます。便利ですね。

イメージの検索

image listfでイメージをDockerHubから検索できます。search resultpを押下すると選択したイメージをpullできます。

コンテナの作成

image listcでイメージからコンテナを作成できます。docker createに相当します。

コンテナの起動・停止

container listuでコンテナを起動、sでコンテナを停止できます。

コンテナのアタッチ

CTRL-eでコンテナにアタッチすることができます。これはdocker execと同様な動きになります。

フィルターリング

全パネル/でフィルターリングできます。絞り込みしてコンテナ、イメージを操作するときに便利です。

docuiのまとめ

docuiを使用するとイメージ、コンテナの操作が楽になります。ぜひ使ってみてください。
ちなみに、最近筆者はdocker.vimというVimのプラグインを作成してから、そちらを使うことが多くなりました。これはVim上でdocuiと同等なことができるプラグインです。Vimmerの方はぜひ試してみてください。

JSON

JSONといえば、Web APIですね。システム間のデータ連携にJSONを使うことが一般的かと思います。そしてJSONといえばjqというコマンドも有名かと思います。
ただ、jqはインタラクティブにJSONを操作できないので、筆者はtsonというTUIツールを作りました。

tsonはJSONをツリー状にしてノードを操作することができます。主機能を紹介していきます。

起動方法

3種類の起動方法があります。
1. tson < test.jsonでファイルから読み込む
2. curl https://jsonplaceholder.typicode.com/todos/1 | tsonでパイプラインから読み込む
3. tson -url https://jsonplaceholder.typicode.com/todos/1でURLから読み込む

起動すると次の画面になります。

画像の場合のJSONは次になります。

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

値を折りたたむ

Hで値ノードを折りたたむことができます。どんなキーがあるのかぱっと確認する時に便利です。

フィルターリング

fもしくは/でキーと値を絞り込むことができます。特定のキーの値を確認するときに便利です。

編集

Enterでノードの値を編集できます。

簡易的な編集の場合はEnterで十分ですが、ガッツリ編集したいこともあると思うので、そういうときはe$EDITORに設定されているエディタを使って編集できます。

エディタ終了後、tsonに戻りその結果が反映されます。

保存

現在のツリー状態をJSONファイルに出力できます。レスポンスの情報を保存するときに使えます。

組み込み

tsonを使用して、次のように既存アプリケーションに組み込むことができます。
ご自身のアプリケーションでtsonのインターフェイスを使用して編集などを行うことができます。そしてtsonを終了すると、その時点のJSONをバイト列で受け取ることができます。

package main

import (
    "fmt"

    tson "github.com/skanehira/tson/lib"
)

func main() {
    j := []byte(`{"name":"gorilla"}`)

    // tson.Edit([]byte) will return []byte, error
    res, err := tson.Edit(j)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(res))
}

自分のツールでtsonのインターフェイスを使いたい方いましたら、ぜひ試してみてください。

tsonまとめ

シンプルなツールですが、大きなJSONを操作するときに特に便利かと思います。ぜひ使ってみてください。

ファイラー

筆者は普段mkdircpmvといった操作を行うことが多いのですが、ファイルパス入力が意外とめんどくさいなと感じています。補完があるとはいえ、もっとインタラクティブに操作できたらいいなぁと思ってffというTUIツールを作りました。
あ、某ゲームではないです。

入力補完

パスを入力する時に、自動でファイルパスを補完してくれます。便利ですね。

プレビュー

-previewオプションをつけるとプレビューパネルで、ファイルの中身、ディレクトリの中身を見れます。

CTRL-j/CTRL-kでプレビューをスクロールできます。

新規作成

nでファイル、mでディレクトリを新規作成できます。

コピー

yでファイル、ディレクトリをマーク(色が変わります)して、pでマークした対象をカレントディレクトリにコピーできます。

名前変更

rでファイル、ディレクトリの名前を変更できます。

編集

e$EDITORに設定されているエディタを使ってファイルを編集できます。

ブックマーク

bで選択したディレクトリをブックマークする事ができます。
Bでブックマーク一覧を表示して、Ctrl-gでブックマークしたディレクトリに移動できます。

Vimで使う

Vimにはターミナル機能があるので、それを使用してffを動かすことができます。
Vimで:vert term ++close ffで次の画像のように使用することができます。プラグインを導入しなくてもVimを終了することなくファイル、ディレクトリの操作を行うこともできます。便利ですね。

ffのまとめ

まだ作ったばかりのツールなので、これからもう少し機能を追加していきます。
例えば、複数の対象をマークする機能、シェルコマンドを実行する機能を実装する予定です。

プロセスビュアー

普段ツールを作ってると、バグって固まってしまうことがあり、プロセスを手軽にkillするツールほしいなと思ってpstというTUIツールを作りました。

どうせならプロセスの情報を色々見れたらいいなと思い、プロセス環境変数といった情報を表示できるようにしました。
プロセスの情報を取得するのにpslsofの外部コマンドを使用しています。

フィルターリング

プロセス名をフィルターリングできます。

プロセスツリー

processesで選択したプロセスにぶら下がっている子プロセスをprocess treeで確認できます。

プロセスkill

processesもしくはprocess treeKで選択したプロセスをkillできます。

pstまとめ

pstはプロセスモニターというより、プロセスビューアに近いです。なぜならプロセス情報を非同期で更新していないからです。理由はツール自体を重くしたくないし、killする対象を都度検索すればいいと考えているからです。
不便だと思ったら改善するかもしれません。

まとめ

一通り、筆者が普段使っているTUIツールを紹介しました。いかがだったでしょうか。
少しでもみなさんの作業効率があがると嬉しいです。

また、気が向いたらこうったTUIツールの記事を書こうと思います。
ではではー