11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ディップAdvent Calendar 2020

Day 18

【Xonsh】Python製シェルが尖りまくってて神

Last updated at Posted at 2020-12-18

Macのターミナル環境を色々改造しつつその一環としてshellも何個か見てきました。
bash, zsh, fish ...

中でもここ半年くらいはPython製のXonshが超絶お気に入りなので自分なりに紹介します。

ちなみに元ネタと言うか見つけたきっかけは、機械学習界隈で有名なばんくしさんのブログです。

Python製シェルxonshを半年使った所感や環境設定のまとめ

この人すごすぎ

What's Xonsh

タイトルのまんまですが、Pythonで作られたShellです。
Pythonで作られ、Pythonで動き、Pythonが実行できます。

他のシェルが何で動いてるかとかはわかりませんが、とにかくこいつが超尖っててイケてます。

Commnd and Python

Pythonで作られている事のメリットその1として、コマンドとPythonスクリプトの同居ができます。

 [ ~/Desktop/tmp ]                                                                                                                                                                
$ ls -al                                                                                                                                                                          
Permissions Size User Date Modified Name
drwxr-xr-x     - *** 18 12 19:20   .
drwx------     - *** 18 12 19:18   ..
 [ ~/Desktop/tmp ]                                                                                                                                                                
$ dirs = ['a', 'b', 'c']                                                                                                                                                          
 [ ~/Desktop/tmp ]                                                                                                                                                                
$ for dir in dirs: 
.     mkdir @(dir) 
.                                                                                                                                                                                 
 [ ~/Desktop/tmp ]                                                                                                                                                                
$ ls -al                                                                                                                                                                          
Permissions Size User Date Modified Name
drwxr-xr-x     - *** 18 12 19:21   .
drwx------     - *** 18 12 19:18   ..
drwxr-xr-x     - *** 18 12 19:21   a
drwxr-xr-x     - *** 18 12 19:21   b
drwxr-xr-x     - *** 18 12 19:21   c

こんな感じ。
わざわざ変数に入れてfor文回すよりmkdir × 3の方がはえーよ!!と思うかもしれませんが、
処理がえぐいくらい増えた時とかこれ使ったらめちゃくちゃイケてると思いませんか?

当然のごとく関数だって定義できちゃいます。

 [ ~/Desktop/tmp ]                                                                                                                                                                
$ def hello_xonsh(): 
.     print('hello xonsh !!!') 
.                                                                                                                                                                                 
 [ ~/Desktop/tmp ]                                                                                                                                                                
$ hello_xonsh()                                                                                                                                                                   
hello xonsh !!!

.xonshrc

他のシェル同様、xonshにもrcファイルがあります。(.xonshrc)
もう想像ついてるかもしれませんが、このrcファイルが全てPythonで記述できます。

個人的にはこれが神すぎて使ってる

  • Aliases
aliases['ls'] = 'exa -ahl --git'
aliases['la'] = 'exa -ahl --git'
aliases['ll'] = 'exa -ahl --git'
aliases['l'] = 'exa -ahl --git'
aliases['cat'] = 'bat'
aliases['tf'] = 'terraform'
aliases['do'] = 'docker'
aliases['dc'] = 'docker-compose'

aliasesという辞書型変数が内部で定義されていてそこに追加する。
かっこよすぎる。

  • env
import os
$DEV_ROOT = os.environ.get('HOME') + '/dev'

環境変数は$ + 変数名で定義する。
importすればPythonの標準ライブラリも使い放題。

  • Command
def _set_aws_profile(args):
    $AWS_PROFILE = args[0]
    $AWS_DEFAULT_PROFILE = args[0]
    print('aws profile is : ', p)
aliases['awsp'] = _set_aws_profile

複雑なコマンドは関数で定義してそのままaliasesに突っ込める。
args引数でコマンド引数を受け取れる。

ちなみに、ここでは引数をargsしか定義してないけど、他にもstdinとかstdoutとかも取れるみたい。
(ここはうまく使いこなせてない)

Install

ここまで読んでもし使いたくなってくれたらinstallは一瞬です。

$ brew install xonsh

もしくは

$ pip install xonsh

などなど、他にも大体の環境でインストールできる。

起動はそのまんま

$ xonsh

Use Xonsh!

Xonshは尖りまくってるゆえにデメリットもあります。
例えばコマンドによっては引数をシングルクオートでうまく括らないと動かない時とかありました。

でもそんなちっぽけなデメリットを遥かに上回るイケイケ具合なので使ってます。

Python好きはお試しを!!

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?