xonsh入門

![17418188.png](https://qiita-image-store.s3.amazonaws.com/0/258841/58b1187e-b6ff-28af-f8d1-f7efe91b0397.png)

# 背景

Python製のpython使い向けのUnixライクなシェルがあるって噂を聞き調べて見るとxonsh(コンシュ)なるものを見つけました。
使ってみたいと思い導入して使って見たので感想と導入方法を記載します。

# xonshとは

Python製のシェル
CLI上でPythonコードの記述とシェルコマンドを利用できます。

つまり下記みたいな事が出来る。

``` bash
$ ls -l                                                                               
total 0
-rw-r--r--  1 Ryuichi  staff  0 11 25 16:03 testfile.py

$ a = 20 ; b = 40                                                                     
$ print(a + b)                                                                        
60
```

コマンド/Pythonコードが切り替え無しで実行できる！すごい！

参考にしているサイトは下記です
◼ [GitHub](https://github.com/xonsh/xonsh)
◼ [公式サイト](https://xon.sh/sidebar.html)

また[@vaaaaanquish](https://twitter.com/vaaaaanquish)さんが色々と為になる記事を___日本語___で書いているのでとても参考になるのでぜひともチェックしてみてください。(日本語の記事が大変少ないのでとても助かります)

bashやzshとの比較に関しては公式にこんな感じでまとまっています。
<img width="754" alt="スクリーンショット 2018-11-25 16.24.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/258841/c73fb81e-58cd-583f-7b12-6282294e1da7.png">

bashやzshと比較してもIPythonと比較しても機能面で優秀ですね。
shellコマンドが使えるのはとても便利です。

# 導入

とっても簡単です。
公式ガイドにはMac以外の導入方法もあるのでそちらをご参照ください。

``` bash
$ brew install xonsh
$ which xonsh
/usr/local/bin/xonsh

# 最新バージョンは0.8.3
$ $ xonsh --version                                                      
xonsh/0.8.3

# インストールしたら「xonsh」で起動します
$ xonsh

                            Welcome to the xonsh shell (0.8.3)                            

                                ~ The xonsh is a symbol ~                                 

------------------------------------------------------------------------------------------
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)
```

Tab補完に「bash-completion2」が必要です。
1を導入済みの方は削除後にインストールしてください。

``` bash
$ brew unlink bash-completion
$ brew install bash-completion2
```

Tab補完が下記のようになっていればインストール成功です。
<img width="818" alt="スクリーンショット 2018-11-25 16.21.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/258841/3d90fb8d-95c2-97bb-0aed-1620ce277577.png">

# 簡単に遊んでみる

#### 基本動作

まずは基本的な操作を色々試してみました。

``` bash:bashスクリプトを実行
Ryuichi@iMac8270 ~/work/tmp/xonsh $ cat test.sh                                           
#!/bin/bash

date
pwd
ls -l
echo 'hello xonsh' > test.tmp
cat test.tmp
rm -f test.tmp
ls -l test.tmp

Ryuichi@iMac8270 ~/work/tmp/xonsh $ ./test.sh                                             
2018年 11月25日 日曜日 16時32分56秒 JST
/Users/Ryuichi/work/tmp/xonsh
total 8
-rwxr-xr-x  1 Ryuichi  staff  101 11 25 16:32 test.sh
-rw-r--r--  1 Ryuichi  staff    0 11 25 16:03 testfile.py
hello xonsh
ls: test.tmp: No such file or directory
```

上記は実行できて当然で面白みもないので次はPythonの構文も混ぜて作ってみます。
pythonとunameコマンドでOS名とホスト名を表示しています。

``` bash
$ cat testfile                                          
import platform
import socket

uname -s
hostname
print(platform.system())
print(socket.gethostname())

$ ./testfile                                            
Darwin
iMac8270
Darwin
iMac8270
```

# まとめ

とりあえず導入まで。
コマンド作成とかTab補完作成もしてみたが記事にまとめるのはまたいつかまとめます。