zshの模様替えをしました

zshの模様替えをしました
Photo by Aaron Burden / Unsplash
💡
この記事は下の動画の受け売りです:

はじめに

今年も早いもので、すでに三月。春の始まりです。

春といえば新しい生活。心機一転!

周りの環境が大きく変わる方も多いのではないでしょうか?

今年の春、私の人生に大した変化はないのですが、それでも人生にちょっと新しい風を吹かしたいな~と思うので、今回思い切って模様替えをしようと思います!

ターミナル環境のね。

zshellって?

シェル (shell) とは、OSとユーザーの仲介役。ターミナルを開いたときに動くプログラムがシェルです。

そのシェルにも色々あるんです。sh, bash, fish, ksh などなど…。今回は、その中のzsh というシェルの話。

zshは高いカスタマイズ性が人気です。zsh そのものの機能と豊富なプラグインでターミナル環境を自分の好きなように設定できます。

私もzshを使い始めて数年たちますが、欲しいところにちゃんと手が届く、という印象です!

…とか言いつつ私は面倒くさがりなので、自分で.zshrc をイジることはしません。YouTubeやSNSなどで見つけたカッコいいターミナル環境をコピペして使うタイプです。

今回も便利なzsh 動画を見つけてきたのでこの記事で分解していきましょう。

インストール

お使いのOSのパッケージマネージャーでインストールしましょう。

私はDebianなので sudo apt install zsh

Mac OS なら brew install zsh

WindowsならWSL入れてから戻ってこい。

インストールできたら、zshをデフォにしましょう。chsh コマンドで使うシェルを変更できます。

$ chsh <ユーザー名>
Changing shell for <ユーザー名>
Password: <パスワードを入力>
New shell: [/bin/bash]: /bin/zsh #ここでインストールしたzshの保存先を入力
Shell changed.

$ echo $SHELL
/bin/zsh

プラグイン

前述したように、zsh にはプラグイン機能があります。zshの拡張性の高さはこのプラグインのおかげです。

このプラグインをインストールするためのプラグインマネージャーまで開発されてるので、設定は簡単です。

今回、私はzinit というプラグインマネージャーを使います。

GitHub - zdharma-continuum/zinit: 🌻 Flexible and fast ZSH plugin manager
🌻 Flexible and fast ZSH plugin manager. Contribute to zdharma-continuum/zinit development by creating an account on GitHub.

というわけで、プラグインをインストールするプラグインマネージャーをインストールしましょう。 zsh の設定ファイルである$HOME/.zshrcを編集します。

# ZINITのプラグイン保存先を設定
ZINIT_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/zinit/zinit.git"

# ZINITがないならインストール
if [ ! -d "$ZINIT_HOME" ]; then
    mkdir -p "$(dirname "$ZINIT_HOME")"
    git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
fi

# ZINITを読み込む
source "$ZINIT_HOME/zinit.zsh"

上記を$HOME/.zshrcに書き込んだら、新しいターミナルを起動しましょう。zinit zstatusコマンドでインストールが成功したかどうか確認できます。

Zinit's main directory: /home/rolzy/.local/share/zinit
Zinit's binary directory: /home/rolzy/.local/share/zinit/zinit.git
Plugin directory: /home/rolzy/.local/share/zinit/plugins
Completions directory: /home/rolzy/.local/share/zinit/completions
Loaded plugins: 6
Light loaded: 1
Downloaded plugins: 5
Enabled completions: 159
Disabled completions: 0
Completions available overall: 160
Snippets loaded: OMZP::aws <single file>, OMZP::command-not-found <single file>, OMZP::sudo <single file>
Compiled plugins: 5

プロンプト

zinitが設定できたらあとは楽勝です。まずはターミナル画面の見た目をいじってみましょう。

今回、Powerlevel10kというプロンプトを使ってみます。

# Powerlevel10kをインストール
zinit ice depth=1                   # git cloneのdepth指定
zinit light romkatv/powerlevel10k   # lightでプラグインのみダウンロード

これを書き込んだあとターミナルを開くと、親切なインストールWizardが表示されます。フォントの設定とか時計とかメッチャ親切に設定してくれます。

私はこんな感じに落ち着きました:

コマンドの色分け

続いてインストールするのは zsh-syntax-highlighting

コマンドを色分けしてくれます。

# コマンド色分け
zinit light zsh-users/zsh-syntax-highlighting

ターミナルを再度読み込むと、コマンドの部位を色分けして読みやすくしてくれます。

Auto Complete

次はコマンドのオートコンプリート(コマンド補完機能)をインストールしてみましょう。

# オートコンプリートのインストール
zinit light zsh-users/zsh-completions

# fzf拡張機能
zinit light Aloxaf/fzf-tab

# オートコンプリート設定
## コンプリーションを読み込み
autoload -U compinit && compinit

## キャッシュされた過去の補完を読み込み
zinit cdreplay -q

## ファイル検索の大文字小文字を補完する
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

## 補完する際、ファイル一覧に色をつける
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" 

## デフォの補完画面ではなくfzfを利用する
zstyle ':completion:*' menu no                          

## cd時に行き先のフォルダの内容を表示
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath'

# fzf拡張機能をON(fzfのインストールが必要)
eval "$(fzf --zsh)"
  • オートコンプリートを可能にするのはzsh-users/zsh-completionsというプラグインです
  • そこにfzfというプログラムの拡張機能を追加します。すると、補完時に検索ボックスが表示されるようになります
  • オートコンプリートの細かい設定もzstyleで指定してます。

設定を保存する前に、fzf本体もインストールしてあげましょう。

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install

新しいターミナルを開くと、zshが色々補完してくれるようになります。

cd するときにPathを途中まで書いてTab

Ctrl+rで過去のコマンドを検索

コマンドの途中でTabで候補を検索

Auto Suggest

続いて、以前使ったコマンドを自動で提案してくれるプラグインをご紹介。

# オートサジェスト
zinit light zsh-users/zsh-autosuggestions

# 提案を使う際のキーバインド(下記はCtrl+f)
bindkey '^F' autosuggest-accept

# コマンド履歴の設定
HISTFILE=~/.zsh_history
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S:   "
HISTSIZE=50000               # 保存するコマンド数
SAVEHIST=50000               # 保存するコマンド数
HISTDUP=erase                # 重複コマンドは保存しない
setopt appendhistory         # 使ったコマンドはすぐファイルに追加
setopt sharehistory          # 全セッションに履歴を共有
setopt hist_ignore_space     # スペースで始まるコマンドは保存しない
setopt hist_ignore_all_dups  # 重複コマンドは履歴から削除

これを書いてターミナルを再度読み込むと、コマンドを書く際に過去使ったコマンドを表示してくれます。

過去使ったコマンドがグレーで表示されます。Ctrl+fと打つと、提案されたコマンドを使うことができます。

エイリアス

最後に、aliasでよく使うコマンドを省略しましょう。私のはこんな感じ:

alias ls='ls --color=auto'
alias c="clear"
alias pip="pip3"
alias python="python3"
alias vim="nvim"
alias gs='git status'
alias push='git push'
alias pull='git pull'
alias sa='source env/bin/activate'

おわりに

今回の.zshrcへの変更はこちらでも確認できます:

ZSH update by rolzy · Pull Request #2 · rolzy/dotfiles

Read more

Terraformを使って"AWS Lambdaとその取り巻き"を召喚しよう

Terraformを使って"AWS Lambdaとその取り巻き"を召喚しよう

はじめに 人生、いろんな「派閥」ってありますよね。私が属するITインフラ業界にも色々あります。どのクラウドを使うか、どのIDEを使うか、どのOSを使うか…枚挙に暇がありません。 インフラ(IaC)言語もその一つ。私はこの業界に足を踏み入れてから、ずっとCloudFormation派閥です。私はAWS専門だったので、AWS公式のCloudFormationで仕事が成り立ってました。 しかし最近、AzureやDatabricks関連の仕事も私に降ってくるようになりました。そうなると、AWS限定のCloudFormationでは対応できません。 そんなとき、複数のクラウドプラットフォームに対応できるTerraformという存在を耳にしました。 Terraformの練習として、AWS Lambdaとその取り巻き(ECR, IAM, Secrets Manager, CloudWatch, SQS) を召喚してみたので、この記事にまとめます。 環境構築 まずは公式マニュアルを参考にTerraformをインストールしましょう。 ターミナルからTerraformが動けば、インストー

By Roland Thompson