74
45

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 5 years have passed since last update.

xonshが超カッコイイ話

Last updated at Posted at 2019-06-05

はじめに

私事ですが無事就職しました(おめでとうございます(ありがとうございます))

さて、今回はxonshというシェルが最高にイケててカッコイイので、会社のいろんな人に布教出来たらいいなと思って記事を書くことにしました、勿論他の人にも。(xonshの記事はググッてもまだ少ないから今なら目立てるとかいう気持ちはありません)

xonshって?

PythonistaのPythonistaのためのPythonistaによるシェルです(Pythonista以外にも便利ですが)

つまり、Pythonで作られたPythonが直接動作するシェルです。

え?????Pythonが直接動くの??????めっちゃカッコよくない?????????

そうです、めっちゃカッコイイです。しかも、後で紹介しますがシェルスクリプトと直接連携もできちゃいます。

当然bashコマンドも実行可能。

導入

6/7 追記:前提環境としてPython3.x系を導入しておいてください

pip install xonsh

readlineshellとして使うならば追加で

pip install gnureadline

macの場合bash補完パッケージとして

brew install bash-completion2

起動

シェルで xonsh とコマンド名を打てば、Pythonで書かれた xonsh が起動する。

$ xonsh

                       Welcome to the xonsh shell (0.9.5)                       

             ~ Python-powered, cross-platform, Unix-gazing shell ~              

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

xonshによるシェルスクリプトとPythonの連携

xonsh上ではシェルスクリプトやコマンドとPythonの連携が死ぬほど簡単です。

例えば

$PATH

の実行結果はリスト型のオブジェクト

EnvPath([
'usr/bin',
'usr/local/bin'
])

のように返されます。
Pythonのリスト型オブジェクトなので当然次のような操作が出来ます。

$PATH.append('任意のパス')

これ、めっっっっっちゃエモく無いですか?

こうすることで起動中のシェルに一時的にパスが追加されます、.xonshrcに記述すればずっと追加され続けます。

他にも

print($(ls -la))

これでコマンドの実行結果を出力できるし、当然変数に格納できるので

cmd = $(ls -la)

print(cmd)

とかも出来る、type()でクラスも調べられる。
ちなみにxonshを起動しなくても

xonsh -c "print($(pwd))"

とかも出来る。

他にも、Pythonファイルからのimportとか、Pythonがインタプリンタで出来ることはなんでも出来ます。

xonshrc

お察しの通りxonshrcはPythonで書ける。
例えば

def _hoge:
  return ('hogehoge', None)

aliases['hoge'] = _hoge

後はxonshで

hoge

と打ち込めばちゃんと出力される。
xonshrcの設定例に関しては先達がたくさんイケてるものを上げているのでそちらに譲ります(めんどくさかったわけではない)(そのうち記事を書くかも)

[2019/6/10: 追記]強力な補完

めっちゃ大事なポイントなのに書き忘れていたんですが、Xonshのメリットはもう一つ、強力な補完機能です。
といってもXonshのプロジェクトから分離してすべてのシェルで使えるのですが、xonshでは未だに標準でサポートしています。

brew install bash_completion2

これだけで強力な補完がいつでも利用できるようになります、bashなどで使いたい場合はinstallメッセージの指示に従う必要があるようです。

デメリット

こんだけとがってると、まあ当然いい事ばかりではないです、というわけでデメリットは以下

  • 起動が遅い
  • Pythonがわからないと恩恵が薄い

といったところです、起動に関してはmacでは不満を感じた事がないですが、wslで起動した時が顕著に遅いです(wsl自体が遅いのもありますがxonshは特に)
起動だけじゃなくスクリプトの実行もPython使ってる関係上どうしても他のシェルよりは遅くなります

2つ目に関しては…諦めるしかないですね、Pythonをしてください()

参考記事

ほとんどここの記事しか見てない

74
45
1

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
74
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?