AWS×zsh 開発環境構築

AWS

AWSを扱うエンジニアにとって、快適な開発環境効率的なCLI操作は欠かせません。
しかし、シェルの設定が初期状態のままだと、補完機能が乏しく、AWSプロファイルの切替やコマンド整形に手間がかかることも多いはずです。

本記事では、まず zsh環境の基本構築(znapによるプラグイン管理やプロンプト調整) を行います。
その上でAWSエンジニア向けの効率化テクニックとして、以下の内容を紹介します。

  • AWSエンジニア向けのプロンプト設定
  • AWS CLIコマンドの補完設定
  • direnvによるAWSプロファイル切り替え効率化
  • jqとaliasによるCLIコマンドカスタマイズ

小さな工夫の積み重ねで、AWS開発をもっと快適に、もっとスマートにしていきましょう。

作成する.zshrc全文
# Created by newuser for 5.9
#
#--- Znap plugin manager ---
source ~/.znap/znap.zsh

#--- 基本プラグイン ---
znap source zsh-users/zsh-autosuggestions
znap source zsh-users/zsh-completions
znap source zsh-users/zsh-syntax-highlighting

#--- プロンプトを変更 ---
autoload -Uz promptinit && promptinit
prompt walters

#--- 左側プロンプトの設定 ---
# gitの表示設定
autoload -Uz vcs_info
precmd() { vcs_info }
setopt prompt_subst
PROMPT='%F{cyan}%n%f:%F{yellow}%~%f %F{green}${vcs_info_msg_0_}%f
$ '
zstyle ':vcs_info:git:*' formats '(%b)'

#--- 右側のプロンプト設定 ---
# AWS プロファイルの表示関数
aws_prompt_info() {
  local profile="${AWS_PROFILE:-default}"
  case "$profile" in
    *prod*)
      echo "%F{red}${profile}%f"
      ;;
    *stg*)
      echo "%F{yellow}${profile}%f"
      ;;
    *)
      echo "%F{green}${profile}%f"
      ;;
  esac
}

RPROMPT='$(aws_prompt_info)'

#--- AWS CLI補完 ---
autoload bashcompinit && bashcompinit
complete -C "$(command -v aws_completer)" aws

# fzf設定
if [[ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]]; then
  source /usr/share/doc/fzf/examples/key-bindings.zsh
fi
if [[ -f /usr/share/doc/fzf/examples/completion.zsh ]]; then
  source /usr/share/doc/fzf/examples/completion.zsh
fi

# fzf-tab追加
znap source Aloxaf/fzf-tab

#--- プロファイル自動切り替え ---
eval "$(direnv hook zsh)"

#--- エイリアスコマンド ---
alias ec2ls='aws ec2 describe-instances --output json \
  | jq -r "
      .Reservations[].Instances[] |
      {Name: ((.Tags//[])[]?|select(.Key==\"Name\").Value // \"-\" ),
       Id: .InstanceId,
       State: .State.Name,
       PublicIp: (.PublicIpAddress // \"-\") } |
      [ .Name, .Id, .State, .PublicIp ] | @tsv
    " | column -t'

zshの環境構築

前提条件として、開発環境のOSは Ubuntu Server 24.04 LTS を使用していきます。

Ubuntuのデフォルトのシェルはbashですが、本記事では開発効率を高めるために zsh を採用します。

zshとは、bashをベースに高いカスタマイズ性と豊富な拡張機能を備えたシェルであり、補完機能やテーマ対応プロンプトなどの機能を使用でます。1
また、プラグインマネージャー(例:znap)を利用することで、さまざまな拡張機能を簡単に導入できるのも魅力です。

zshを使った開発環境構築を実際のコマンドを交えてシミュレーションしていきます。

zshのインストール

AWS上にUbuntuのAMIを使用したEC2インスタンスを作成し、開発環境の構築を0から行う想定で解説します。

まずは、EC2インスタンスにログイン後、以下のコマンドを実行して早速zshをインストールしてみましょう。

sudo apt update
sudo dnf install -y zsh

command -v zsh コマンドを実行して、次のようになればインストール成功です。

$ command -v zsh
/usr/bin/zsh

続いて、開発者相当のユーザーを作成をします。今回は例としてzsh-userというユーザーを作成しました。
このとき、useraddのオプションで-s /bin/zshを指定することで、デフォルトのシェルがzshに変更されます。

sudo useradd -m -s /bin/zsh zsh-user
sudo passwd zsh-user
sudo usermod -aG sudo zsh-user

作成したユーザーに切り替えます。

sudo su - zsh-user

以下のような表示が出た場合は、ひとまず「0」を入力してEnterします。

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

(2)  Populate your ~/.zshrc with the configuration recommended
     by the system administrator and exit (you will need to edit
     the file by hand, if so desired).

--- Type one of the keys in parentheses --- 

echo $SHELLコマンドを実行して、次のように応答が変えれば、ユーザーのシェルがzshになっています!

echo $SHELL
/bin/zsh

znapのインストール

続いて、zshのプラグインマネージャーであるznapをインストールします。

プラグインマネージャーを導入することで、zshの設定やプラグインの管理を一元化することが可能です。
zshのプラグインマネージャーには、oh-my-zshやzinitなど様々な選択肢がありますが、本記事では軽量で高速、設定がシンプルなznapを例に設定方法を解説します。

znapはGitHubで公開されているため、以下のコマンドでインストールします。

git clone --depth 1 https://github.com/marlonrichert/zsh-snap.git ~/.znap

次に、.zshrcを以下のように編集し、プラグインマネージャの指定・基本的なプラグイン設定・プロンプトテーマの指定を行います。

vi ~/.zshrc
# .zshrc

# Created by newuser for 5.9
#
#--- Znap plugin manager ---
source ~/.znap/znap.zsh

#--- 基本プラグイン ---
znap source zsh-users/zsh-autosuggestions
znap source zsh-users/zsh-completions
znap source zsh-users/zsh-syntax-highlighting

#--- プロンプトを変更 ---
autoload -Uz promptinit && promptinit
prompt walters

.zshrcの更新が完了したら、以下のコマンドで設定を有効化します。lsコマンドでプラグインが導入されているかを確認することができます。

source ~/.zshrc
zsh-user@ip-10-0-0-104> ls -lt zsh-users                                                             
total 48
drwxr-xr-x. 5 zsh-user zsh-user 16384 Oct 21 22:05 zsh-completions
drwxr-xr-x. 8 zsh-user zsh-user 16384 Oct 21 22:05 zsh-syntax-highlighting
drwxr-xr-x. 6 zsh-user zsh-user 16384 Oct 21 22:05 zsh-autosuggestions

設定した基本プラグインですが、それぞれ次のような機能をもっています。

  • zsh-autosuggestions
    コマンド履歴から入力候補を自動提案してくれるプラグインです。
    グレーの文字で次に打ちそうなコマンドをリアルタイムで表示し、→キーで確定できます。
    頻出コマンド(例:aws s3 ls など)の再入力を省略でき、作業効率が向上します。
  • zsh-completions
    標準zshでは足りない補完スクリプトを追加するプラグインです。
    awsやterraformなどの多数のツールに対応しています。本記事では後述のaws_completerと組み合わせ、AWS CLI補完を高速化します。
  • zsh-syntax-highlighting
    コマンドライン上で構文を色分け表示するプラグインです。
    有効なコマンドは緑、存在しないコマンドは赤で表示されるため、タイプミスや削除コマンドの誤入力を素早く検知できます。

プロンプトテーマには、zsh標準で用意されている「walters」を使用しています。
ユーザー名やカレントディレクトリなどの情報が見やすく表示され、サーバー作業やAWS CLI操作などのテキスト中心の環境でも見やすいテーマです。
prompt -l コマンドを使えば利用できるテーマ一覧を確認できるので、使いやすいテーマをお好みで採用してください。

AWSエンジニア向け設定① -プロンプト設定-

AWSエンジニアのよくあるシチュエーションとして、開発・検証・本番などの複数のアカウントを切り替えながら作業することがあります。
そんなとき、プロンプトから一目で作業対象のアカウントを見分けられると、効率だけでなく安全性もぐっと高まるはずです。

この章では.zshrcを編集し、プロンプト上で次の情報を確認できるように整えていきましょう。

  • Gitブランチ
  • AWSプロファイル情報

Gitブランチをプロンプトに表示する

zshでは、プロンプトの表示内容を主に次の二つの環境変数で制御します。

  • $PROMPT:左側プロンプトの設定
  • $RPROMPT:右側プロンプトの設定

ここでは、左側プロンプトにGitブランチ名を表示し、見やすく色付けします。
.zshrcの末尾に以下を追記してください。

vi ~/.zshrc
# .zshrc

#--- 左側プロンプトの設定 ---
# gitの表示設定
autoload -Uz vcs_info
precmd() { vcs_info }
setopt prompt_subst
PROMPT='%F{cyan}%n%f:%F{yellow}%~%f %F{green}${vcs_info_msg_0_}%f
$ '
zstyle ':vcs_info:git:*' formats '(%b)'

設定内容のポイントは以下の通りです。

  • vcs_info:
    zshに標準搭載されているバージョン管理情報 (VCS) 表示機能。
  • precmd():
    プロンプト表示直前に自動実行される関数。ここで毎回vcs_infoを呼び出し、ブランチ情報を最新化。
  • setopt prompt_subst:
    PROMPT変数内で ${} による変数展開を有効化。
  • zstyle ‘:vcs_info:git:*’ formats ‘(%b)’:
    Gitブランチ名の表示フォーマットを定義

プロンプト書式の詳細はzsh公式ドキュメントを参照してください。2

.zshrcの更新が完了したら、以下のコマンドで設定を有効化します。

source ~/.zshrc

ユーザー名やカレントディレクトリの文字色が変わっていれば反映成功です。
Git情報が表示されるか、次の手順で確認してみましょう。

sudo apt install -y git
mkdir ~/git-test && cd ~/git-test
git init

以下のようにプロンプトが変更されていれば成功です。

AWSプロファイル名をプロンプトに表示する

右側のプロンプトには現在のAWSプロファイル名を表示するように設定します。
どの環境で操作しているかをひと目で確認でき、誤操作を防止できます。

AWS CLI のインストール

AWS CLIが未インストールの場合は、以下の手順で導入しましょう。

sudo apt install -y unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update

インストール後、次のコマンドでバージョンが表示されれば成功です。

$ aws --version
aws-cli/2.31.22 Python/3.13.7 Linux/6.14.0-1011-aws exe/x86_64.ubuntu.24

AWSプロファイルの作成

開発環境を想定し、devというプロファイルを作成します。各項目は実際のアカウント情報に合わせて設定してください。
(動作確認だけなら空欄のままでも構いません)

$ aws configure --profile dev
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: ap-northeast-1
Default output format [None]: json

同様に、検証環境・本番環境を想定したプロファイルも作成します。

aws configure --profile stg
aws configure --profile prod

登録済みプロファイルの一覧は aws configure list-profiles コマンドで確認できます。

$ aws configure list-profiles 
dev
stg
prod

.zshrc に右側プロンプト設定を追加

.zshrcに以下の内容を追記してください。

vi ~/.zshrc
# .zshrc

#--- 右側のプロンプト設定 ---
# AWS プロファイルの表示関数
aws_prompt_info() {
  local profile="${AWS_PROFILE:-default}"
  case "$profile" in
    *prod*)
      echo "%F{red}${profile}%f"
      ;;
    *stg*)
      echo "%F{yellow}${profile}%f"
      ;;
    *)
      echo "%F{green}${profile}%f"
      ;;
  esac
}

RPROMPT='$(aws_prompt_info)'

この設定では、AWS_PROFILE の値を取得し、プロファイル名に含まれる文字列に応じて表示色を切り替えています。

  • prodを含む → 赤(本番環境)
  • stgを含む → 黄(検証環境)
  • その他 → 緑(開発環境など)

.zshrcの更新が完了したら、以下のコマンドで設定を有効化します。

source ~/.zshrc

次に、環境変数AWS_PROFILEを「dev」「stg」「prod」に切り替えてみます。
各ケースでプロンプトの状態がどうなるか確認してみましょう。

AWS_PROFILE=dev と設定すると、プロンプトの右側に緑色の文字で(dev)と表示されました。

export AWS_PROFILE=dev

同様に、AWS_PROFILE=stgAWS_PROFILE=prod と設定すると、右側プロンプトの表示が変化することが確認できると思います。

AWSエンジニア向け設定② -CLI補完設定-

AWSエンジニアであれば、AWS CLIを使ってリソースの設定内容を確認したり、操作を行ったりする機会が多いはずです。
そんなとき、一般的なシェルコマンドと同じように<Tab>キーで補完が効くと、作業効率をぐっと高めることができます。

本章では、zsh環境にAWS CLIコマンドの補完機能を実装する手順を紹介します。

aws_completerの設定

AWS CLI のインストールの手順でインストールした、AWS CLI v2にはbashやzshで使える補完機能が標準で含まれています。この機能は、aws_completerというバイナリによって提供されます。

次のコマンドでaws_completerがインストールされているか確認しましょう。

$ command -v aws_completer                                                                                 
/usr/local/bin/aws_completer

zshで補完を有効にするには、bashcompinitを読み込み、aws_completerをcompleteコマンドで登録します。.zshrcの末尾に以下を追記してください。

vi ~/.zshrc
#--- AWS CLI補完 ---
autoload bashcompinit && bashcompinit
complete -C "$(command -v aws_completer)" aws

また、AWS CLI補完をログイン時から自動で有効化するには、ログインシェルでも.zshrcを読み込むように設定します。
.zprofileに以下を追記(または新規作成)してください。

vi ~/.zprofile
# ~/.zprofile

#--- login shellで.zshrcを読み込む ---
if [[ -f ~/.zshrc ]]; then
  source ~/.zshrc
fi

設定を反映します。

source ~/.zshrc

次のように<Tabキー>を押してみてください。

$ aws s<Tab>
$ aws s3 <Tab>

画像のようにAWS CLIのコマンドの候補の一覧が確認できるようにば成功です。

AWS CLIのコマンド補完

aws_completerによる基本的な補完設定が完了したら、次は補完候補をインタラクティブに選択できるようにするプラグインを導入しましょう。
ここでは、fzf-tabを使ってAWS CLIの操作をさらに効率化します。

fzfのインストール

まず、fzf(fuzzy finder)というCLI上でインタラクティブな検索を可能にするツールをインストールします。

sudo apt install -y fzf

続いて、.zshrcの末尾に以下を追記してください。

vi ~/.zshrc
# ~/.zprofile

# fzf設定
if [[ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]]; then
  source /usr/share/doc/fzf/examples/key-bindings.zsh
fi
if [[ -f /usr/share/doc/fzf/examples/completion.zsh ]]; then
  source /usr/share/doc/fzf/examples/completion.zsh
fi

各コマンドには次のような意味があります。

  • source /usr/share/doc/fzf/examples/key-bindings.zsh
    fzf標準のキーバインド(ショートカット)をzshに登録します。
  • source /usr/share/doc/fzf/examples/completion.zsh
    fzfを使ったインタラクティブな補完を有効にします。

.zshrcの内容を有効化します。

source ~/.zshrc

次のようなショートカットキーが有効になっていればfzfの設定は完了です。

  • ctrl + r
    履歴検索のショートカット。実行履歴を対話的に検索する機能です。
  • ctrl + t
    ファイル選択機能。ファイルパスをインタラクティブに指定できます。
  • alt + c (macの場合はecs + c)
    ディレクトリジャンプ機能。ディレクトリを検索しながら移動できます。

fzf-tabのインストール

ここまでで、一般的なシェルコマンドはfzfによって対話的に操作できるようになりました。
次に、AWS CLIの補完もインタラクティブに実行できるように、fzf-tabプラグインを導入します。

.zshrcに以下を追記してください。

vi ~/.zshrc
# ~/.zprofile

# fzf-tab追加
znap source Aloxaf/fzf-tab

設定を反映します。

source ~/.zshrc

次のように<Tabキー>を押してみてください。

$ aws s<Tab>
$ aws s3 <Tab>

画像のようにAWS CLIのコマンドの候補をインタラクティブに選択できるようになれば成功です。

AWSエンジニア向け設定③ -direnvによるAWSプロファイル切り替え効率化-

AWS CLIで複数アカウントを扱う場合、プロファイルを切り替えるためにAWS_PROFILE環境変数の値をその都度変更する必要があります。
しかし、毎回コマンドで設定するのは地味に手間がかかりますよね。

そこで、direnvを活用してディレクトリごとに自動でプロファイルを切り替える方法を紹介します。
アカウント単位でワークスペースを分け、ディレクトリを移動するだけで対応するAWSプロファイルが自動で適用されるように設定してみましょう。

はじめに、direnvをインストールします。

sudo apt install -y direnv

続いて、zshにdirenvの処理を組み込むための設定を.zshrcに追記します。

#--- プロファイル自動切り替え ---
eval "$(direnv hook zsh)"

設定を反映します。

source ~/.zshrc

direnvは、ディレクトリごとに自動で環境変数を切り替えられるツールです。
各ディレクトリに配置した.envrcファイルの内容を読み込み、環境変数を自動的に適用または解除してくれます。

これを利用して、開発環境・検証環境・本番環境ごとにAWSプロファイルを自動設定できるようにします。

次のコマンドを実行し、dev・stg・prodのディレクトリを作成して、direnvの設定をします。

mkdir -p ~/work/dev && cd ~/work/dev
printf "export AWS_PROFILE=dev\n" > .envrc
direnv allow

mkdir -p ~/work/stg && cd ~/work/stg
printf "export AWS_PROFILE=stg\n" > .envrc
direnv allow

mkdir -p ~/work/prod && cd ~/work/prod
printf "export AWS_PROFILE=prod\n" > .envrc
direnv allow

作成したディレクトリに移動してみましょう。次のように右側プロンプトのAWSプロファイル表示(前章で設定)が切り替わっていれば成功です。
また、環境変数を直接確認しても、切り替わっていることがわかります。

AWSエンジニア向け設定④ -jqとaliasによるCLIコマンドカスタマイズ-

AWS CLIを使うとAWS上のリソースの情報をコマンド一つで簡単に取得できます。
しかし、describeコマンドは表示がJSON形式で情報量が多く、必要な部分を目で追うのは少し大変ですよね。

本章では、jqを使って出力を整形し、alias(エイリアス)でコマンドを短縮する方法を紹介します。
これにより、必要な情報をすばやく、見やすく取得できるようになります。

jqが未インストールの場合は、以下のコマンドで導入してください。

sudo apt install -y jq

まずは、カスタマイズしていないaws ec2 describe-instancesの出力を確認してみます。
冒頭だけ抜粋していますが、全体は非常に長く、欲しい情報を探すのが大変です。

$ aws ec2 describe-instances
{
    "Reservations": [
        {
            "ReservationId": "r-0b158a901d73fdb24",
            "OwnerId": "xxxxxxxxxxxx",
            "Groups": [],
            "Instances": [
                {
                    "Architecture": "x86_64",
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/xvda",
                            "Ebs": {
                                "AttachTime": "2025-10-13T03:50:56+00:00",
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-0642fb6f8280c5632"
                            }
                        }
                    ],
                    "ClientToken": "4b1c7d89-975d-4c92-94a4-680d92cf8df5",
                    "EbsOptimized": true,
                    "EnaSupport": true,
                    "Hypervisor": "xen",

次に、Name・InstanceId・State・PublicIpのみを表形式で出力するエイリアスコマンド「ec2ls」を作成してみましょう。

.zshrcの末尾に以下を追記します。

vi ~/.zshrc
#--- エイリアスコマンド ---
alias ec2ls='aws ec2 describe-instances --output json \
  | jq -r "
      .Reservations[].Instances[] |
      {Name: ((.Tags//[])[]?|select(.Key==\"Name\").Value // \"-\" ),
       Id: .InstanceId,
       State: .State.Name,
       PublicIp: (.PublicIpAddress // \"-\") } |
      [ .Name, .Id, .State, .PublicIp ] | @tsv
    " | column -t'

設定を反映します。

source ~/.zshrc

実際にコマンドを実行すると、以下のように表示されます。

$ ec2ls
instance-1  i-0a5f1a2d98d30c95a  stopped  -
instance-2  i-05edf8896b18f29e6  running  54.x.x.x

冗長な出力がすっきり整形され、必要な情報だけを一目で確認できるようになりました。

まとめ

zsh開発環境の基本構築手順から、AWSエンジニアにとって役立つ4つの設定を紹介しました。

  • AWSエンジニア向け設定① -プロンプト設定-
  • AWSエンジニア向け設定② -CLI補完設定-
  • AWSエンジニア向け設定③ -direnvによるAWSプロファイル切り替え効率化-
  • AWSエンジニア向け設定④ -jqとaliasによるCLIコマンドカスタマイズ-

これらの設定を活用することで、AWS 環境での日常的な CLI 作業をより快適かつ安全に進められるようになります。
自身のワークフローに合わせてカスタマイズを重ね、開発環境を作り込むお役に立てれば幸いです。

  1. Z shell – Wikipedia ↩︎
  2. zsh: 13 Prompt Expansion ↩︎

コメント

タイトルとURLをコピーしました