抜け出せないターミナルをつくろう
Tadashi Aikawa
2024/12/15 Minerva Lightning Talks

Tadashi Aikawa

Productivity Creator since 2010
OS
Windows (開発はUbuntu on WSL)
ターミナル
Windows Terminal / WezTerm (secondary)
言語
TypeScript >> Python = Go > Lua > Rust
エディタ
Neovim / Obsidian
デバイス
EIZO / HHKB Studio / SlimBlade
好き
創作活動・温泉・甘味・動物(ぬいぐるみ含む)
苦手
お酒・車・勉強
楽しい仕事
個人やチームの生産性を上げて成果に繋げる

Agenda

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

Chapter

01

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

なぜターミナルを使うのか?

わたしがターミナルを使う7つの理由

  1. 軽い
  2. 作業スピードが向上し自動化もしやすい
  3. 表示がシンプルで集中しやすい
  4. 好きな数・サイズのウィンドウ/タブを扱える
  5. エディタでNeovimを使うことが多いので親和性が高い
  6. かっこいい
  7. どこかで必要になるので

ターミナルが嫌われる3つの理由

  • 今の状況が分からない
    • 表現が乏しく情報も少なすぎるので...
  • 操作のコマンドが分からない
    • コマンドを覚えないといけないので...
  • 操作に時間がかかる
    • 毎回コマンドを打ち込んだり、履歴から探すので...

視点を問題に変えると...

  • 情報が少ない
  • コマンドがわからない
  • コマンドを打つのに時間がかかる
  • コマンドを履歴から探すのに時間がかかる

最高のサービスを受けたことのない人は最高のサービスを提供できない。
己の体験がサービスの限界を決めてしまうのだ。

視点を問題に変えると...

  • 情報が少ない
  • コマンドがわからない
  • コマンドを打つのに時間がかかる
  • コマンドを履歴から探すのに時間がかかる

これらの問題を解決できる最高のターミナル環境をつくろう

Don't think. Feel.
(考えるな。感じろ。)

It's like a finger pointing at the moon.
(これは月を指で指すようなものだ。)

Don't concentrate on the finger, or you will miss all that heavenly glory.
(指に集中するな。さもないと栄光を見失うぞ。)
映画『燃えよドラゴン』 リーの台詞

Chapter

02

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

ターミナルエミュレーターとは

『ターミナル』と呼んでいる黒い画面のアプリケーションのこと。

端末エミュレータ(たんまつエミュレータ、英: terminal emulator)とは、端末のエミュレーションを行うソフトウェアで、専用端末の代わりに使えるソフトウェアである。英語をそのままカタカナにしてターミナルエミュレータとも表記する。ターミナルソフト(英: terminal software)やターミナルアプリケーション(英: terminal applicationともいう。
端末エミュレータ - Wikipedia

※ 以降は単に『ターミナル』と呼びます

最近よく使われているターミナル

ターミナル 開発元 開発言語
Windows Terminal Microsoft 96.1k C++
Alacritty Alacritty o o o 56.9k Rust
kitty Kovid Goyal氏 o o 25.0k 色々
Warp Warp o o 21.6k Rust
WezTerm Wez Furlong氏 o o o 18.3k Rust
iTerm2 George Nachman氏 o 15.5k Objective-C
Wave Terminal Wave o o o 6.2k TypeScript/Go
◎: 標準インストール
o: 利用可能

ターミナルを決める上で大事にしていること

  • 応答スピード
    • 許容できるラグは10ms以下
  • マルチバイト文字列対応状況
    • 特に日本語と絵文字
  • タブ機能があるか
    • tmuxやZellijのようなターミナルマルチプレクサは使わないので
  • 表示にノイズが出ないか?
    • 特にNeovim利用時
  • いつものSSHフローでちゃんと動くか
    • SSHフローによって動作は変わるので
    • 回避ルートがあれば許容できる

Chapter

03

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

Zshとは

対話型を重視して設計されたシェル。

Zsh is a shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of bash, ksh, and tcsh were incorporated into zsh; many original features were added.
ZSH - THE Z SHELL

ここ数年のMac OSではデフォルトのシェル

Zshのカスタマイズ コマンド履歴の利便性向上

~/.zshrc

# コマンド履歴で過去の重複は削除 / 別セッションと履歴を共有
setopt histignorealldups sharehistory
# 永続化する履歴ファイルのパスを指定
HISTFILE=~/.zsh_history
# シェル実行中にメモリへ保存するコマンド履歴の最大数
HISTSIZE=1000
# .zsh_historyに書きこまれるコマンド履歴の最大数
SAVEHIST=1000

Zshのカスタマイズ オートコンプリート設定

~/.zshrc

autoload -Uz compinit
compinit

# 高度な補完
zstyle ':completion:*' completer _expand _complete _correct _approximate
# 大文字小文字や各種記号をfuzzyに考慮して補完
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
# ドットファイルを.はじまりでなくても補完
setopt globdots

zsh-autosuggestions 人間に優しいコマンドサジェスト ★31.7k

sudo apt install -y zsh-autosuggestions
echo "source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc

center

Chapter

04

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

ここからはひたすらオススメツールを紹介

まずは インストールしないと作業/仕事ができない ものから

mise 開発環境構築に特化したCLIツール ★11.8k

  • 直感的なコマンド
  • バージョン切り替えも楽々
  • 高パフォーマンス

Starship ターミナルの見た目を楽々カスタマイズ ★45.8k

  • 直感的な設定
  • 高いカスタマイズ性
  • あらゆるOS/シェルを同一の設定で

Neovim 至高のエディタ ★84.1k

  • 個人的にはすべてをNeovimでやっているため、これナシでは始まらない
    • ただ普通の人にはあまりオススメしないのも事実...

Lazygit 至高のTUI Gitクライアント ★54.2k

  • 開発中のGit操作はほぼLazygit

Lazydocker 至高のTUI Dockerクライアント ★39.3k

  • Dockerの状態確認や単純な操作はすべてlazydocker
  • ちまちまdockerコマンド打っていた日々には二度と戻れない

fzf ファジー検索機能の提供 ★66.2k

  • ファジー検索(曖昧検索)で絞り込み選択するUIを提供 (標準出力と連携可能)
  • バンドルされているイチオシ機能は コマンド履歴の実行

Zoxide いわゆる瞬間移動ってやつだ ★23.4k

  • z <移動したい場所の部分文字列>過去の移動履歴 を考慮して移動
  • zi <移動したい場所の部分文字列> で複数の候補をfzfで絞り込むこともできる

delta gitでも使える人間のためのdiff ★24.8k

center

ripgrep grepより数倍高速。しかも優しい ★49.2k

  • rg <文字列> でカレントディレクトリ配下を再帰的にイイ感じにgrepしてくれる
  • 全文検索機能を ripgrep で提供しているツールは多い

center

eza 美しいlsの代替 ★12.9k

  • カラー表示、アイコン表示、Gitステータス、ツリー表示 などに対応
  • lltree のaliasを作成して利用する
alias tree="eza --icons -T --no-user"
alias ll="eza --icons -l --git --no-user"

fd 優しくて高速なfindの代替 ★34.5k

  • fd <文字列> でカレントディレクトリ配下を再帰的にイイ感じにfindしてくれる
  • ファイル検索機能を fd で提供しているツールは多い

dust ディレクトリのデータ容量確認に ★9.1k

center

必須ではないけどあったら便利なもの

bottom 優しくてクールなtop ★10.4k

Lazysql Lazyの意志を継しTUIのSQLクライアント ★984

  • テーブルのデータを一瞬見たいときに便利

xh より便利なcurlのRust実装 ★5.7k

bat 綺麗なcat ★50.1k

  • Neovimを使っていなければ必要

center

Broot より良いディレクトリナビゲーションの追求 ★10.9k

  • ターゲットを決めてからアクションを指定するのが特徴的

Chapter

05

  1. ターミナルを使う理由
  2. ターミナルエミュレーターを選ぶ
  3. Zshの設定を整える
  4. オススメツール
  5. まとめ

まとめ

  • デメリットを打ち消せる ターミナル環境をつくろう
  • 自分にあったターミナルエミュレーターを使おう
  • 『履歴』『オートコンプリート』 に関するZshのカスタマイズをしよう
  • 必須のツールは Game Changer となるのでインストールしよう

付録 紹介ツール一覧 ★多い順

必須なもの

ツール名 一言説明 スター数
Neovim 至高のエディタ 84.1k
fzf ファジー検索機能の提供 66.2k
Lazygit 至高のTUI Gitクライアント 54.2k
ripgrep grepより数倍高速。しかも優しい 49.2k
Starship ターミナルの見た目を楽々カスタマイズ 45.8k
Lazydocker 至高のTUI Dockerクライアント 39.3k
fd 優しくて高速なfindの代替 34.5k
delta gitでも使える人間のためのdiff 24.8k
Zoxide いわゆる瞬間移動ってやつだ 23.4k
eza 美しいlsの代替 12.9k
mise 開発環境構築に特化したCLIツール 11.8k
dust ディレクトリのデータ容量確認に 9.1k

あったら便利なもの

ツール名 一言説明 スター数
bat 綺麗なcat 50.1k
xh より便利なcurlのRust実装 5.7k
Broot より良いディレクトリナビゲーションの追求 10.9k
bottom 優しくてクールなtop 10.4k
Lazysql Lazyの意志を継しTUIのSQLクライアント 984
※ 必須かどうかはtadashi-aikawa個人の場合に限った話

仕事だったら『所属』『代表プロダクト』『入社年』などを入れる