xonshとかいうshellの話

620c94b3affc3376c62540a64ce7ba36?s=47 vaaaaanquish
February 19, 2020

 xonshとかいうshellの話

社内LTイベントでの発表資料です。

620c94b3affc3376c62540a64ce7ba36?s=128

vaaaaanquish

February 19, 2020
Tweet

Transcript

  1. 2.

    自己紹介的なやつ • AI・機械学習チーム、河合、ばんくし • xontributor ◦ 多分日本人では一番 PR出してる (#12) ◦

    補完時の画面描画とか非同期化とか ◦ xontrib 3つ作ってる • PyCon JP 2019でxonshの話した • xonshアドベントカレンダー2017, 2018を企画 ◦ 16/50 本を担当 ◦ 日常的にもxonsh記事を書いている
  2. 3.

    xonshの概要(一般教養ですが念の為) • Python + shell scriptを実現するPythonで書かれたshell • 現在v0.9.13 ◦ v1.0.0へのTracking

    issueあり ◦ 私がdefault shellにするレベル • Anthony Scopatz ◦ サウスカロライナ大学 助教 ◦ Enthoughtという企業で働いた後 天文物理学で博士号 ◦ 今は原子力工学の動画 YouTubeにあげたり 普通に仕事しつつ草を生やす化け物 ◦ So cool
  3. 5.

    そもそもshellとは • ユーザの入力をターミナルから受け取りOS kernelに伝える • システムコールをプロンプトとコマンドで対話的に利用するためのツール • POSIX (IEEE Std

    1003.2) で標準化された sh ◦ 派生としてbash, zshを代表に多くのshellが使われている ◦ ash, bsh, csh, ksh,...と長いが現在は bash, zsh, fishがメジャー ターミナル Shell Kernel 気軽に低レイヤー屋に見せたら処される図 - PROMPT - コマンド - 入出力
  4. 6.

    xonshが実現するshell機能 • PLY (Python Lex-Yacc) による構文解析 -> AST • 現在のxonshが動くPythonプロセス内のcontextに構文があるかを判定

     → pythonとしてexecで実行  → shell commandとしてsubprocess execで実行 • 例:`ls -l` を見た時  → 一般的にはshellコマンド  → python変数の可能性も
  5. 7.

    xonshが実現するshell機能 • PLY (Python Lex-Yacc) による構文解析 -> AST • 現在のxonshが動くPythonプロセス内のcontextに構文があるかを判定

     → pythonとしてexecで実行  → shell commandとしてsubprocess execで実行 • 例:`ls -l` を見た時  → 一般的にはshellコマンド  → python変数の可能性も ここを上手いことやっているのが xonshの本質 • ターミナルを構築する機能は python prompt-toolkit (ptk) なるツールのwrapper • 本来のKernelにコマンドを伝える部分は subprocess のshellが行っている
  6. 8.

    xonshが実現するshell機能 • PLY (Python Lex-Yacc) による構文解析 -> AST • 現在のxonshが動くPythonプロセス内のcontextに構文があるかを判定

     → pythonとしてexecで実行  → shell commandとしてsubprocess execで実行 • 例:`ls -l` を見た時  → 一般的にはshellコマンド  → python変数の可能性も ターミナル ptk Shell (or in Python) Kernel 気軽に低レイヤー屋に見せたら処される図 その2 xonsh
  7. 9.

    xonshが出来ること • 独自Syntax ( $(), ![], @(),...,etc ) を利用したshell script

    + python • モダンなshellが行うようなtab補完、Gray Suggest (ptkの機能)
  8. 10.

    xonshが出来ること • Python + shell scriptによるconfig記述 (.xonshrc) ◦ $PROMPT, color,

    ◦ keybindings, completer, history ◦ xonsh自体もpythonなのでoverrideも • pandas, matplotlib等の描画 ◦ Pythonで日常的に開発してると less感覚で使えて嬉しい • 独自のenvライブラリによる環境管理 (vox) ◦ 「hoge envと相性悪い」みたいな事がない
  9. 13.

    xonshを使うメリットは? • 他のShellと比べて ◦ スクリプト言語を区別せず書けるという思想では多分一番使える ◦ lispのLush、SchemeのScsh、RustのNu shell…等はあくまでzsh, bashの再現 ◦

    似た思想としてRubyのRushがあるが開発進んでない感 ◦ Goで似たshell作ってる人もちらほら居るが完成度ならまだ xonsh ▪ それでもzshやfishの方が情報やコミュニティが大きい (小さいと楽しいこともあるけど ) • Pythonの資産を既に持っていると幸せになれる ◦ requests, pandas, matplot, ptk, iTerm2 API, OS X API, vim… ◦ 画像出力やaws cli, gcloudコマンドを簡単に拡張できる • ちょっとShellやCLIツールに詳しくなる • Anthony Scopatzが優しい ◦ すぐ「so cool!!」って言ってくれる
  10. 14.

    3年xonshを推してみて(個人的な主観) • ShellもといCLIをカスタマイズしたい需要自体が年々下がっている ◦ zshの機能性、完成度 ◦ 進化するIDE、VSCode、GitHubクライアント、Jupyter、Google Cloud Console、… ◦

    スクリプト言語の繁栄( Python、Ruby、Go…etc) ▪ sed, awkに行くまで道のりが長い ▪ そもそも2020年に複雑なshell scriptをメンテしたいかと言われると … ◦ Docker、リモートサーバの中に入って作業する事も人に依っては多くはない ◦ 伸びてるのはシェル芸 botくらいか…羨ましい… • 長らく別のshellを使っている人は移行しにくい ◦ 身体がshell scriptで出来ている人の無限の bashrc, zshrc ◦ VSCodeみたく「デフォルトで結構使える」「 GUIで設定できる」みたいな方向性に行くか …? • そもそもPythonじゃなくてよくね… ◦ それな ◦ xonshのコアライブラリptkのGo言語版最近見てる