Slide 1

Slide 1 text

xonshとかいうshellの話 @vaaaaanquish

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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