Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Pythonをそのままシェルにできる「Xonsh」が好きな理由

シェル言語は、対話的な操作に非常に便利です。しかし、この利便性のための最適化は、プログラミング言語として使う際にはトレードオフとなることが多く、シェルスクリプトを書いているとその限界を感じることがあります。

もし、あなたのシェルがよりスケーラブルなプログラミング言語も理解できたらどうでしょう?たとえば、Pythonはいかがでしょうか?

そこで登場するのがXonshです。

Xonshのインストール

Xonshのインストールは簡単です。仮想環境を作成し、pip install xonsh[ptk,linux]を実行したあと、xonshコマンドを入力するだけです。

最初は、Pythonシェルの奇妙なプロンプトに戸惑うかもしれません:

$ 1+1
2

なかなか優秀な電卓です!

$ print("hello world")
hello world

もちろん、他の関数も呼び出せます:

$ from antigravity import geohash
$ geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
37.857713 -122.544543

普通のシェルとしても使える

しかし、Xonshは通常のシェルのように使うこともできます:

$ echo "hello world"
hello world

さらに、Pythonのコードとシェルコマンドを混ぜて使うことさえ可能です!

$ for i in range(3):
. echo "hello world"
.
hello world
hello world
hello world

強力な補完機能

XonshはPrompt Toolkitを利用しており、シェルコマンドとPython式の両方に対する補完をサポートしています。補完候補は視覚的にわかりやすく表示され、インラインのドロップダウンリストも備えているため、快適に入力を進められます。

環境変数へのスマートなアクセス

Xonshは環境変数へのアクセスもサポートしています。環境変数にPythonの型を適用するための、シンプルながら強力なヒューリスティックを採用しているのが特徴です。デフォルトは「文字列」ですが、たとえばパス変数は自動的にリストとして扱われます。

$ '/usr/bin' in $PATH
True

ブール演算子は両方のスタイルに対応

Xonshは、シェル形式とPython形式のどちらのブールショートカット演算子も受け付けます:

$ cat things
foo
$ grep -q foo things and echo "found"
found
$ grep -q bar things && echo "found"
$ grep -q foo things or echo "found"
$ grep -q bar things || echo "found"
found

これは、Pythonのキーワードが解釈されることを意味します。有名なDr. Seussの絵本のタイトルを表示したい場合は、キーワードを引用符で囲む必要があります。

$ echo green eggs "and" ham
green eggs and ham

引用符で囲まないと、意外な結果に遭遇します:

$ echo green eggs and ham
green eggs
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
xonsh: subprocess mode: command not found: ham
Did you mean one of the following?
as: Command (/usr/bin/as)
ht: Command (/usr/bin/ht)
mag: Command (/usr/bin/mag)
ar: Command (/usr/bin/ar)
nm: Command (/usr/bin/nm)

仮想環境はvoxで管理

仮想環境の扱いは少し注意が必要です。通常の仮想環境はBash風の構文に依存しているため、そのままでは動作しません。しかし心配いりません。Xonshにはvoxという独自の仮想環境管理システムが付属しています。

voxは、~/.virtualenvs内の環境を作成・有効化・無効化できます。virtualenvwrapperを使ったことがある人なら、この保存場所はお馴染みのはずです。

ただし注意点があります。現在有効化されている環境は、Xonsh自体には影響しません。つまり、有効化された環境からモジュールをインポートすることはできないのです。

$ xontrib load vox
$ vox create my-environment
...
$ vox activate my-environment
Activated "my-environment".
$ pip install money
...
$ python
...
>>> import money
>>> money.Money('3.14')
$ import money
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
ModuleNotFoundError: No module named 'money'

xontribによる拡張性

上記の最初の行はvoxを有効にするものです。voxxontribと呼ばれる、Xonsh向けのサードパーティ拡張機能です。xontribマネージャーを使えば、利用可能なすべてのxontribとその現在の状態(インストール済み、ロード済み、未導入)を一覧表示できます。

xontribを作成してPyPIにアップロードするだけで公開することも可能ですが、xontribインデックスに登録しておくのが良い作法とされています。そうすることでXonshが事前にその存在を認識でき、たとえば設定ウィザードがそのxontribを提案できるようになります。

まとめ

「Pythonを自分のシェルにできるのだろうか?」と考えたことがあるなら、その答えを知るまでの道のりは、pip install xonshのたった一歩だけです。

  1. Windows 10が使いにくいと言われる15の理由とその対策

    Windows 10は世界的に有名なオペレーティングシステムであり、定期的なアップデートによって信頼性を維持している点が特徴です。搭載されているアプリやウィジェットは完璧ではありませんが、十分に実用的です。しかし、設定や機能にはまだ改善の余地があります。 Microsoftは全世界で約13億人のWindows 10ユーザーを抱えていますが、「Windows 10は使えない」と感じている人も少なくありません。その理由は、日常的に発生するさまざまな問題にあります。例えば、エクスプローラーの不具合、VMwareとの互換性問題、データ消失などです。また、Windows 10 Proはファイル階層の管

  2. WhatsApp誕生10周年記念:私たちがWhatsAppを愛し続ける理由とは?

    スマートフォンでメッセージのやり取りをするのが大好きな人は多いのではないでしょうか。移動中でも、人混みの中にいても、テキストメッセージはほとんどあらゆる場面で私たちを助けてくれる頼もしい存在です。そしてメッセージアプリといえば、多くの人が真っ先に思い浮かべるのがWhatsAppでしょう。WhatsAppは単なるテキスト送信にとどまらず、写真や動画の共有、現在地の共有など、できることがたくさんあります。世界中の何十億ものユーザーに愛され、今やスマートフォンに必須のコミュニケーションアプリとなっています。 そんな私たちのお気に入りアプリ・WhatsAppが、ついに10歳の誕生日を迎えました!ハッピ