powerlineを使ったいい感じのターミナル環境の構築方法

Linux

MacBook Pro Late 2016を導入したのを契機に、これまで「いつかやってみたい」と思っていたpowerlineを導入してみました。あまり派手なコンソールは好みではないと思っていたのですが、実際使ってみると、悪くないです。ドヤりたくなります(苦笑)。

powerline

powerlineとは、要するにコンソール・ターミナルのコマンドラインをカッコよくするツールです。

https://powerline.readthedocs.io/en/latest/#

普通にzshの設定でコマンドラインをカスタマイズしてもいろいろ出来るんですが、powerlineはもっといろんなことができて、カッコよくなる・・・と、私の理解はその程度です(苦笑)。

もともと、iTerm2+tmux+zshという環境を使っていますので、ここに追加でpowerlineを適応してみました。設定は、とりあえずデフォルトで、細かなカスタマイズはあとで考えようと(いやー、これ、カスタマイズ凝りだすとキリがない気がして・・・)。

導入方法について

端的に言ってしまえば、powerline-statusパッケージを導入すれば終わりなんですが、若干、考えて置かなければいけないことがありますので、試行錯誤の結果として、以下の形にしています。

  • pipはなるべくパッケージで入れる。
  • powerline-statusはユーザー環境に入れる。

と、まぁコレだけなんですが、意外に油断すると混乱します(混乱しました)。

やることは、pip導入、powerline-status導入、対応フォント導入、そして最後に環境調整と、大きく4段階になります。

pip導入

pipの導入方法には、パッケージマネージャーで入れてしまう方法と、インストーラをダウンロードしてインストールする方法があります。

まず、あまりやらないであろうインストーラでの導入について。あまりやらないと言いながら、Macの環境はこれで入れています。理由は、Mac標準のPython環境があるため、例えばHomeBrewで入れたりすると環境がわけ分からなくなりそうだったからです。

# curl -O https://bootstrap.pypa.io/get-pip.py
# python get-pip.py --user

これで、pipが「/Users/username/Library/Python/2.7/bin/pip」に入ります。Pythonのバージョンがもしかしたら違うかもしれませんが、Python2であれば概ねこの辺です。

このままではPATHが通って無くて実行できないので、PATHを追加します。ただ、私は設定をdotfiles化しており、Linux環境でもユーザー環境にコマンドを入れることを想定して、以下のようにzshenvに追記しました。

for DIR in ${HOME}/Library/Python/2.7/bin ${HOME}/.local/bin ; do
        if [ -d ${DIR} ] ; then
                PATH=${PATH}:${DIR}
        fi
done

これで、Pythonライブラリと、.local/binをパスに追加できます。後述するpoweline系のコマンドもこのパスに入りますので、前準備の意味もあります。

パッケージで入れる場合は、比較的何も考えずにインストールできます。Ubuntu環境ではapt-getで入ります。

# apt-get install -y python-pip

CentOSならyumです。

# yum install -y python-pip

ディストリビューションによる環境差異を考えると、やっぱりインストーラでユーザー環境に入れるほうが安定性は高いかなぁと思います。

powerline導入

pipが入ってしまえば、powerlineの導入はpipで一発で行けます。

# pip install --user powerline-status

前述のPATH設定でユーザー環境のバイナリパスが追加されていれば、powerlineコマンド等が実行できる状態になっているはずです。

% which powerline
/Users/username/Library/Python/2.7/bin/powerline

まずはこれでpowerline自体は使えるようになりました。

フォントパッチというか、パッチのあたったフォント導入

powerlineでは一部専用のキャラクタを表示しますので、必要となるフォントセットを用意します。このフォントセットは、既存のTTFファイル(TrueTypeフォント)にパッチを当てる形で作成します。

私はターミナルフォントはRictyを使っていますので、これにパッチの当たったものを作りたいと。一応、成功した手順としては以下です。

  • パッチの当たったフォント「Google Fonts Inconsolata」をダウンロード
  • Migu M1フォントをダウンロード
  • ricty_generator.shをダウンロード。3.X系の最終版(3.2.4)がオススメ
  • powerline/fontpatcherをダウンロード
  • fontforgeをインストールした環境で、フォント生成&パッチ当てを行う(私はMac上のdockerでUbuntuコンテナ環境を作成して実行した)

どうしてこうなるか分かりませんが、どうにもパッチの当たったInconsolataフォントを元にしつつ、最後にもう一度fontpacherを当てないと上手く行かなかったような・・・って、何度も繰り返しているうちに正直分からなくなったというのが実情。

いやね、上記で出てくる一つひとつの情報が意外にもう古くて怪しんです。特にricty_generator.sh。4.X系では、オプションとして4つのフォントファイル(Regular/Boldのascii/non-ascii)指定が必須になっていて、これがotfで配布されているInconsolataフォントと、どう組み合わせるのか分からず悩まされました。なので3.2.4を使うんですが。

で、だ。いろいろ探していたら、ズバリパッチ済みフォントが配布されていました。

https://github.com/mzyy94/RictyDiminished-for-Powerline

という訳で、これをダウンロードして、フォントインストールして終了・・・というあっけない幕切れとなりました。

フォント作成の手順が分かったので、それはそれで良かったんですがね。この辺はちゃんと情報まとめておかないと、そもそも手順が煩雑なので要注意です。

環境調整、設定ファイル修正

あとは設定ファイルを調整します。設定ファイルでやることは2つ。

  • powerline-daemon起動
  • powerline対応設定ファイルの読み込み

powerline-daemonはpowerlineで必要になるstatus情報を保持してくれる処理らしい・・・すみません、詳細追ってませんが、これを起動しないとプロンプトの表示がすこぶる遅くなります。

tmuxですが、.tmux.confの最後に以下を追記しています。本当は、パスの表記とかもうちょっとなんとかしたいんですが、tmuxを起動する環境は限られているという前提で多少楽観的に書いています。

# powerline
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'
run-shell "powerline-daemon -q"
source "${HOME}/Library/Python/2.7/lib/python/site-packages/powerline/bindings/tmux/powerline.conf"

zshのほうも基本同じです。ただ、こちらはLinux環境で使うことも想定して、パスの判定を入れています。

# powerline
PLDIRS=(Library/Python/2.7/lib/python/site-packages .local/lib/python2.7/site-packages)
PLCONF="powerline/bindings/zsh/powerline.zsh"
for DIR in ${PLDIRS}; do
        if [ -f ${HOME}/${DIR}/${PLCONF} ]; then
                powerline-daemon -q
                . ${HOME}/${DIR}/${PLCONF}
        fi
done

動作確認

あとは普通に、tmuxを起動したり、zshを起動したり、もちろんログインし直したりすれば、powerlineが有効になったコマンドラインが表示されます。デフォルト設定は悪くない感じかな、と個人的には思っています。

リモートサーバーの設定

と、このままでは、リモートサーバーにログインしたとき、そのコンソールはpowerlineに対応しないものになってしまうので、リモートサーバー側にも、powerlineとシェルの設定を入れておきます。もちろん、tmuxやフォントに関連する設定は必要ありません。

powerlineモジュールを導入して、上記の設定さえ読み込んでしまえば、リモートホストのコマンドラインもpowerline表示になります。

ここでの環境操作(同期)を行ううえでも、dotfilesは非常に便利です。

カッコいいコンソールはやる気も上がる?

という訳で、こんな画面になったと。

コマンドラインがオレンジで鍵マークが付いているのが、sshログインした先のサーバーのコマンドラインです。ちゃんとプロンプトがpowerline表示に変わりますので、統一感があります。

powerlineはパッケージ導入と設定の簡単な調整で、コマンドラインの表現力を大幅にアップできる非常に便利なパッケージです。サーバー側に適応すれば、リモートログインセッションも表示変更されます。派手なコンソールなんて・・・って思う方も居るとは思いますが、実際使ってみると、悪いものでもないなぁ、というのが個人的な感想です。

意外に、派手なコンソールって、使ってるとなんか楽しくなってくるんですよね。当然ながらpowerlineもいろいろカスタマイズできそうなので、次の機会では挑戦したいかなぁと思っています。

コメント

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