Pro Yearly is on sale from $80 to $50! »

xonshとかいうshellの話

620c94b3affc3376c62540a64ce7ba36?s=47 vaaaaanquish
February 19, 2020

 xonshとかいうshellの話

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

620c94b3affc3376c62540a64ce7ba36?s=128

vaaaaanquish

February 19, 2020
Tweet

Transcript

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

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

    補完時の画面描画とか非同期化とか ◦ xontrib 3つ作ってる • PyCon JP 2019でxonshの話した • xonshアドベントカレンダー2017, 2018を企画 ◦ 16/50 本を担当 ◦ 日常的にもxonsh記事を書いている
  3. xonshの概要(一般教養ですが念の為) • Python + shell scriptを実現するPythonで書かれたshell • 現在v0.9.13 ◦ v1.0.0へのTracking

    issueあり ◦ 私がdefault shellにするレベル • Anthony Scopatz ◦ サウスカロライナ大学 助教 ◦ Enthoughtという企業で働いた後 天文物理学で博士号 ◦ 今は原子力工学の動画 YouTubeにあげたり 普通に仕事しつつ草を生やす化け物 ◦ So cool
  4. xonshの立ち位置 • Python + shell scriptを実現するPythonで書かれたshell • 概念はPython REPLに近いがインタプリタよりはshell寄り fish

    xonsh  POSIX-compatible Python Bourne Shell (sh) PyConで使った最高の図
  5. そもそもshellとは • ユーザの入力をターミナルから受け取りOS kernelに伝える • システムコールをプロンプトとコマンドで対話的に利用するためのツール • POSIX (IEEE Std

    1003.2) で標準化された sh ◦ 派生としてbash, zshを代表に多くのshellが使われている ◦ ash, bsh, csh, ksh,...と長いが現在は bash, zsh, fishがメジャー ターミナル Shell Kernel 気軽に低レイヤー屋に見せたら処される図 - PROMPT - コマンド - 入出力
  6. xonshが実現するshell機能 • PLY (Python Lex-Yacc) による構文解析 -> AST • 現在のxonshが動くPythonプロセス内のcontextに構文があるかを判定

     → pythonとしてexecで実行  → shell commandとしてsubprocess execで実行 • 例:`ls -l` を見た時  → 一般的にはshellコマンド  → python変数の可能性も
  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が行っている
  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
  9. xonshが出来ること • 独自Syntax ( $(), ![], @(),...,etc ) を利用したshell script

    + python • モダンなshellが行うようなtab補完、Gray Suggest (ptkの機能)
  10. xonshが出来ること • Python + shell scriptによるconfig記述 (.xonshrc) ◦ $PROMPT, color,

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

  12. みんなが使う意味ある? • 既存のshellからの移行 ◦ 専用のsource_bashなるコマンドもあり概ね既存スクリプトはよしなに実行できる ◦ bashの上でxonshプロセスを起動するなどして多重の環境変数や補完も (やや難しい) ◦ 全部移行可能かと問われると微妙

    (zshの拡張使いたいとか ) • 起動時間問題 • Pythonが憎い ◦ わかる • vaaaanquishブログしか技術記事が出てこない ◦ わかる ◦ それな ◦ ごめんて
  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!!」って言ってくれる
  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言語版最近見てる
  15. おわりに • xonshはいいぞ • Tech Talk Shell Script会やりましょう! ◦ みんなの便利コマンド、シェル芸が見たい!聞きたい!