zsh & Powerlevel10kでシェルをパワーアップしよう!【アドカレ2020 2日目】

プログラミング アドカレ2020

函館からこんにちは。14期のcordx56です。

今回はPG班向けにシェルのカスタマイズについて書きました。 普段からシェルを使っている人から、シェルって何?という方にも向けて書いたつもりでいますので、是非読んでいっていただければと思います。

シェルとは

シェルとは、その名前をカーネルを貝のように包み込むことに由来する、コマンドインタプリタのことです。 ユーザの入力したコマンドを解釈し実行するアプリケーションのことを指します。 授業でCLIを触っていた方なら必ず触れています。 あのコマンドを入力する真っ黒な画面です。

一般的に特にカスタマイズされていないシェルは簡素なものです。 今回はこのシェルをカスタマイズするテーマであるPowerlevel10kを導入します。

Powerlevel10kとは

Powerlevel10kとはzshというシェル向けのテーマとなっています。 GitHubのREADMEを読んでもらえばわかる通り、速度、柔軟性、インストールしてすぐに使える体験が強調されています。

zshの導入方法

インストール

次にzshをインストールしましょう。 一般的なディストリビューションのパッケージマネージャではzshが簡単にインストールできることが多いです。

ここでは例としてUbuntu / Debianでのインストール方法を見てみましょう。

$ sudo apt update
$ sudo apt install zsh

簡単ですね!

インストールが終わったら、デフォルトのシェルとしてzshを登録しましょう。 chshコマンドを利用して、対話的にデフォルトのシェルを変更することができます。 ログインシェルを聞かれたら、「/bin/zsh」と答えましょう。

$ chsh
Password:
Changing the login shell for [ユーザ名]
Enter the new value, or press ENTER for the default
    Login Shell [/bin/bash]: /bin/zsh

初期設定

まずzshを起動します。

$ zsh
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).

おっと、初期設定画面が表示されましたね。

ここでは0を選択して何もせず終了するという手もありますが、折角なので対話的に設定ファイルを生成してみましょう。 1を押します。

Please pick one of the following options:

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

(2)  Configure the new completion system.  (Recommended.)

(3)  Configure how keys behave when editing command lines.  (Recommended.)

(4)  Pick some of the more common shell options.  These are simple "on"
     or "off" switches controlling the shell's features.

(0)  Exit, creating a blank ~/.zshrc file.

ここはRecommendedに従いましょう。 1を押します。

History configuration
=====================

# (1) Number of lines of history kept within the shell.
HISTSIZE=1000
# (2) File where history is saved.
HISTFILE=~/.histfile
# (3) Number of lines of history to save to $HISTFILE.
SAVEHIST=1000

1を押します。

HISTSIZE> 1000

HISTSIZEはシェルが保持する履歴の数の設定です。 特にこだわりがなければ、デフォルトの1000のままでいいでしょう。 エンターキーを押すと、一個前のメニューに戻ります。

次は2を押しましょう。

HISTFILE> ~/.histfile

HISTFILEは履歴が保存される場所の設定です。 特にこだわりがなければ、デフォルトの~/.histfileのままでいいでしょう。 エンターキーを押すと、一個前のメニューに戻ります。

次は3を押します。

SAVEHIST> 1000

SAVEHISTは保存する履歴の数の設定です。 特にこだわりがなければ、デフォルトの1000のままでいいでしょう。 エンターキーを押すと、一個前のメニューに戻ります。

最後に0を押して一番最初のメニュー画面に戻ります。

次に2を押して補完の設定をしましょう。

You can:
  (1)  Turn on completion with the default options.

  (2)  Run the configuration tool (compinstall).  You can also run
       this from the command line with the following commands:
        autoload -Uz compinstall
        compinstall
       if you don't want to configure completion now.

  (0)  Don't turn on completion.

1を押して、デフォルトのオプションで補完を有効にします。

最後に3を押してキーマップの設定をします。

キーマップの設定はお好みでするのがよいでしょう。 私はViのキーマップを設定しました。 Viユーザでなければ、Emacsのキーマップが推奨されています。

1を押して、eを押します。

完了したら、0を押して一番最初のメニュー画面に戻りましょう。

最後に0を押して、変更を保存して初期設定を終了します。

これでzshの導入は完了です! お疲れさまでした。

Powerlevel10kの導入方法

フォントのインストール

まずはシステムにフォントをインストールしましょう。 ここからフォントをダウンロードしてシステムにインストールします。 Windowsでは、「設定 > 個人用設定 > フォント」からインストールできます。

フォントのインストールができたら、ターミナルのフォントを設定しましょう。 Windows Terminalであれば、設定ファイルの各プロファイルに"fontFace"という項目を設定すれば大丈夫です。

"fontFace": "MesloLGS NF",

インストール

以下のコマンドを実行してPowerlevel10kをインストールします。

$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.powerlevel10k
$ echo 'source ~/.powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc

インストールが終わったらターミナルを閉じて、開きなおします。

そうすると自動でPowerlevel10kの初期設定が始まります。

初期設定

   This is Powerlevel10k configuration wizard. You are seeing it because you haven't
  defined any Powerlevel10k configuration options. It will ask you a few questions and
                                 configure your prompt.

                    Does this look like a diamond (rotated square)?
                      reference: https://graphemica.com/%E2%97%86

ダイアモンド(回転した四角)が表示されているか聞かれています。 正常に表示されていれば、yを押しましょう。

                              Does this look like a lock?
                     reference: https://fontawesome.com/icons/lock

ロックが表示されているか聞かれています。 南京錠のようなものが表示されていれば、yを押しましょう。

                   Does this look like a Debian logo (swirl/spiral)?
                  reference: https://debian.org/logos/openlogo-nd.svg

Debianのロゴが表示されているか聞かれています。 正常に表示されていれば、yを押しましょう。

                      Do all these icons fit between the crosses?

バツマークとアイコンがどのように表示されているか聞かれています。 バツマークとアイコンが重なっていなければyを、重なっている場合はnを押してください。

次はプロンプトのスタイルを聞かれます。 お好みで1から4の中から選んでください。

次に文字セットについて聞かれます。 1のUnicodeを選択すると表現力豊かなプロンプトが利用できるのでおすすめです。

ここから先は前の選択次第で設定項目が変わります。 ここでは多様な設定を網羅することはできないので、ここから先は質問に答えていく形で皆さん自身で設定してください。 すべてお好みで選択しましょう。

設定のカスタマイズ

設定が終わるといくつかの隠しファイルが生成されていると思います。 まずは.zshrc。 これはzshの設定です。 zshの初期設定で設定した内容が既に書き込まれています。

次に.p10k.zsh。 これはPowerlevel10kの設定です。 こちらも初期設定で設定された内容が既に書き込まれています。 今回はこちらのファイルをいじって表示を変えてみましょう。

.p10k.zshの中から次の行を探し出します。

typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(

恐らく、次のようになっているはずです。

  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    os_icon                 # os identifier
    dir                     # current directory

設定のこの部分を次のように書き換えて、ユーザ名とコンピュータ名を表示するようにしてみます。

  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    os_icon                 # os identifier
    user
    host
    dir                     # current directory

2行付け加えたのがわかるかと思います。 userhostですね。 ファイルを変更して保存したら、一度シェルを閉じてもう一度開いてみましょう。 ユーザ名とホスト名がプロンプトに表示されるようになるかと思います。

他にも様々な設定を.p10k.zshファイルに書くことができます。 ドキュメントは少ないですが、自分好みのプロンプトのために、.p10k.zshファイルを書き換えてみてはいかがでしょうか。

おわり

お疲れさまでした! きれいで自分好みなシェルが手に入ったでしょうか?

良いシェルと良い開発ライフを~