$30 off During Our Annual Pro Sale. View Details »

xonshとかいうshellの話

vaaaaanquish
PRO
February 19, 2020

 xonshとかいうshellの話

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

vaaaaanquish
PRO

February 19, 2020
Tweet

More Decks by vaaaaanquish

Other Decks in Science

Transcript

  1. xonshとかいうshellの話
    @vaaaaanquish

    View Slide

  2. 自己紹介的なやつ
    ● AI・機械学習チーム、河合、ばんくし
    ● xontributor
    ○ 多分日本人では一番 PR出してる (#12)
    ○ 補完時の画面描画とか非同期化とか
    ○ xontrib 3つ作ってる
    ● PyCon JP 2019でxonshの話した
    ● xonshアドベントカレンダー2017, 2018を企画
    ○ 16/50 本を担当
    ○ 日常的にもxonsh記事を書いている

    View Slide

  3. xonshの概要(一般教養ですが念の為)
    ● Python + shell scriptを実現するPythonで書かれたshell
    ● 現在v0.9.13
    ○ v1.0.0へのTracking issueあり
    ○ 私がdefault shellにするレベル
    ● Anthony Scopatz
    ○ サウスカロライナ大学 助教
    ○ Enthoughtという企業で働いた後
    天文物理学で博士号
    ○ 今は原子力工学の動画 YouTubeにあげたり
    普通に仕事しつつ草を生やす化け物
    ○ So cool

    View Slide

  4. xonshの立ち位置
    ● Python + shell scriptを実現するPythonで書かれたshell
    ● 概念はPython REPLに近いがインタプリタよりはshell寄り
    fish xonsh
     POSIX-compatible Python
    Bourne Shell (sh)
    PyConで使った最高の図

    View Slide

  5. そもそもshellとは
    ● ユーザの入力をターミナルから受け取りOS kernelに伝える
    ● システムコールをプロンプトとコマンドで対話的に利用するためのツール
    ● POSIX (IEEE Std 1003.2) で標準化された sh
    ○ 派生としてbash, zshを代表に多くのshellが使われている
    ○ ash, bsh, csh, ksh,...と長いが現在は bash, zsh, fishがメジャー
    ターミナル
    Shell
    Kernel
    気軽に低レイヤー屋に見せたら処される図
    - PROMPT
    - コマンド
    - 入出力

    View Slide

  6. xonshが実現するshell機能
    ● PLY (Python Lex-Yacc) による構文解析 -> AST
    ● 現在のxonshが動くPythonプロセス内のcontextに構文があるかを判定
     → pythonとしてexecで実行
     → shell commandとしてsubprocess execで実行
    ● 例:`ls -l` を見た時
     → 一般的にはshellコマンド
     → python変数の可能性も

    View Slide

  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が行っている

    View Slide

  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

    View Slide

  9. xonshが出来ること
    ● 独自Syntax ( $(), ![], @(),...,etc ) を利用したshell script + python
    ● モダンなshellが行うようなtab補完、Gray Suggest (ptkの機能)

    View Slide

  10. xonshが出来ること
    ● Python + shell scriptによるconfig記述 (.xonshrc)
    ○ $PROMPT, color,
    ○ keybindings, completer, history
    ○ xonsh自体もpythonなのでoverrideも
    ● pandas, matplotlib等の描画
    ○ Pythonで日常的に開発してると less感覚で使えて嬉しい
    ● 独自のenvライブラリによる環境管理 (vox)
    ○ 「hoge envと相性悪い」みたいな事がない

    View Slide

  11. みんなが使う意味ある?
    ● ほぼない

    View Slide

  12. みんなが使う意味ある?
    ● 既存のshellからの移行
    ○ 専用のsource_bashなるコマンドもあり概ね既存スクリプトはよしなに実行できる
    ○ bashの上でxonshプロセスを起動するなどして多重の環境変数や補完も (やや難しい)
    ○ 全部移行可能かと問われると微妙 (zshの拡張使いたいとか )
    ● 起動時間問題
    ● Pythonが憎い
    ○ わかる
    ● vaaaanquishブログしか技術記事が出てこない
    ○ わかる
    ○ それな
    ○ ごめんて

    View Slide

  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!!」って言ってくれる

    View Slide

  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言語版最近見てる

    View Slide

  15. おわりに
    ● xonshはいいぞ
    ● Tech Talk Shell Script会やりましょう!
    ○ みんなの便利コマンド、シェル芸が見たい!聞きたい!

    View Slide