はじめに
寒さがひとしお身にしみるころとなりました。そこでターミナルも衣替えをしようという突然の思いつきから、勢いでXonshとHyperを導入してみました。それらのインストールからデフォルトのログインシェルとしてまともに使えるようにするまでを書きます。ほとんどハマることもなく案外簡単に導入できました。
Xonsh
存在はばんくしさんのTLで知りました。
公式サイトによると、xonshはPythonで動くシェルで、初心者からエキスパートまでを対象としているそうです。シェルでPythonコードが動きます。
1日触ってみた感想としては、固定観念を覆すような変なシェルですが、条件分岐や繰り返しで、if ... fi
やdo ... done
のようなキモい構文(個人的感想)を強いられず、for i in range(n):
のような書き方が使えるので、Pythonに慣れていれば案外気持ちよく使えるのではないかといった感じです。
こんなことができます。$PATH.append()
でPATHを通せるあたり違和感があります。
$ from os import listdir
$ for name in listdir("."):
.. print(name, end="")
python ruby javascript
$ ls
python ruby javascript
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
$ $PATH.append("~/study")
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:~/study
Hyper
公式サイトによると、Electronベースのターミナルアプリです。HTML/CSS/JSで構成されているため拡張が簡単ということらしいです。
詳しいことはよくわかりませんが、Hyperを使っている人のターミナルはだいたいオシャレなイメージがあるので、以前から興味はありました。
以下は公式サイトから引用した画像で、簡単な設定でこんな感じの外観にできます。
導入
Xonshのインストール
公式サイトに従ってxonshをインストールしていきます。
Macの場合はHomebrewでインストールできます。
$ brew install xonsh
どうやらbash-completion
を入れるとTab補完が効いて良いそうです。
$ brew install bash-completion2
インストールできたらxonshを起動してみます。
$ xonsh
Welcome to the xonsh shell (0.8.3)
~ Ever wonder why there isn't a Taco Shell? Because it is a corny idea. ~
--------------------------------------------------------------------------------
xonfig tutorial -> Launch the tutorial in the browser
xonfig wizard -> Run the configuration wizard and claim your shell
(Note: Run the Wizard or create a ~/.xonshrc file to suppress the welcome screen)
成功しているとこのような画面に歓迎されます。
試しに以下のようなコマンド(コード?)を実行してみると、
$ print("hello")
hello
しっかりPythonが動いています。
Xonshの設定
設定はbashやzshと同じで.xonshrc
に記述します。見よう見まねで自分好みにしていきます。
$XONSH_COLOR_STYLE = "default"
# インデントをタブ4つに
$INDENT = " "
# 対応する括弧類を補完
$XONSH_AUTOPAIR = True
$XONSH_SHOW_TRACEBACK = True
# いい感じのプロンプトに
$PROMPT = "\n{CYAN}{short_cwd}{branch_color}{curr_branch:|{}}{PURPLE} ❯ "
# brewのパスを通す
$PATH.append("/usr/local/bin")
設定を反映させるためにxonshを再起動するとこのような見た目になります。
ログインシェルにする
ログインシェルをxonshに変更してみます。
$ which xonsh | pbcopy
xonshの場所を確認して/etc/shells
に追加します。
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/fish
/usr/local/bin/xonsh
あとは、ターミナルの環境設定から開くシェルのパスをxonshのものに変更してやればログインシェルに設定できます。
Hyperのダウンロード
しかし今回は、Hyperを使いたいので、まずはHyperをダウンロードします。
公式サイトからダウンロードして、開くとデフォルトでいい感じの見た目のターミナルが開くと思います。
Hyperの設定
⌘,
を押すとテキストエディタが開いて設定ファイルが編集できます。
module.exports = {
config: {
// ログインシェルにxonshを指定
shell: '/usr/local/bin/xonsh',
...
},
...
};
保存してHyperを再起動すると、xonshがログインシェルになっています。
あとは、好みでもう少し外観の設定をいじってみます。
module.exports = {
config: {
// ターミナルの枠の外観設定
hyperBorder: {
borderColors: ['#cc6666', '#f0c674'], // 枠の色(2色の間をグラデーション)
borderWidth: '3px', // 枠の太さ
}
...
},
...
plugins: ["
hyper-pane", // 画面分割
"hyper-tabs-enhanced", // いい感じのタブに
"hyper-statusline", // 下側にステータスを表示
"hypercwd", // 新しいタブを開いたときに同じディレクトリへ移動
"hyperborder" // ターミナルに枠をつける
],
};
こんな感じになりました。そこそこ見栄えのいいターミナルになったのではないでしょうか(yarnのwaringがダサいという話は置いておいて)。
envの問題
しばらく遊んでいると少し問題が発生しました。
Pythonのバージョンをpyenvで管理していたのですが、どうやら.xonshrc
でpyenvの初期化をしてもうまくいかないようなので、困りました(rbenvも同様です)。
調べてみるとsource-bash
というコマンドでbash用の設定を読み込めるようで、それを試してみたところ、すんなりと動きました。
適当に.xonsh_profile
というファイルを作成してpyenvとrbenvの初期化を書きます。
eval "$(pyenv init -)"
eval "$(rbenv init -)"
このファイルを.xonshrc
からsource-bash
で読み込むと、
source-bash ~/.xonsh_profile
しっかり、pyenv、rbenvが動作していることが確認できます。
$ which python
/Users/yoidea/.pyenv/shims/python
$ which ruby
/Users/yoidea/.rbenv/shims/ruby
ナウでヤングなターミナルの完成
シンタックスハイライトがまだ思い通りの色になっていませんが、Hyperとxonshの使用感は快適です。
この先何か問題が発生するかもしれませんが、現段階では、
- Shell ScriptよりPythonのほうが得意
- ターミナルの外観にこだわりたい
という方にはXonshとHyperの組み合わせを強くおすすめできると言えるでしょう。