python-prompt-toolkitをgolangに移植。kubernetesクライアント作った
Github Trendingに載ってから、予想以上に伸びました。ありがとうございます。
Wow... #githubhttps://t.co/ENQjRyqZmN pic.twitter.com/iqFx59ydcq
— c-bata (@c_bata_) 2017年8月17日
python-prompt-toolkitをgolangでも使いたいなと前から思い移植していたのですが、今日go-promptという名前で公開しました。
- GitHub - c-bata/go-prompt: Building a powerful interactive prompt in Go, inspired by python-prompt-toolkit.
- GitHub - c-bata/kube-prompt: An interactive kubernetes client featuring auto-complete using go-prompt.
kube-promptは実際にgo-promptを使って作成したインタラクティブなkubernetesクライアントです。
python-prompt-toolkit の移植
python-prompt-toolkitは簡単にいうとインタラクティブな補完ができるライブラリなのですが、これを使った便利なツールがたくさん登場していて、かなりのstarを集めています。
- http-prompt 6200stars: https://github.com/eliangcs/http-prompt
- gitsome 4900stars: https://github.com/donnemartin/gitsome
- aws-shell 2800stars: https://github.com/awslabs/aws-shell
- mycli 3700stars: https://github.com/dbcli/mycli
- pgcli 5400stars: https://github.com/dbcli/pgcli
自分はpython3を当然のようにインストールしているので、Pythonのツールを使うことが面倒には感じないのですが、普段pythonを使っていない人はpythonのインストールから始めないといけないので結構面倒そうです。
python-prompt-toolkitをGolangに移植する人が現れないかなと思っていたのですが、中々登場しませんでした。 ふと思い立って実装を読んでみると、テストコードなしの実装だけでも2万行以上とボリュームがあります。この強力な補完のために裏では結構面倒なことをしていて、実装もそれなりに複雑になっているので、なるほどこれは大変と思い挑戦してみました。
自分はこういう端末制御ゴリゴリのソフトウェアを作ったことなく、コードを読む上で必要な前提知識が色々と欠けていたので、いい勉強になりました。この記事では実装に関して書きませんが、需要がありそうなら記事書くかどこかで話すかしたいと思ってます。
詳しい使い方はREADMEに書いたので興味のある方は使ってみてください。比較的かんたんに使えるようになっているかなと思います。 オプションも色々用意してます。
今後追加予定の機能は
Windowsサポート- mattnさんがPRくれました。ありがとうございます。windows環境手元にないのでまだ試せないのですが、どうしようか
- vi modeのサポート
- multi line inputに対応
emacs キーバインドが本来と違う挙動をする箇所が見つかったので修正- Ctrl+Wの挙動だったのですが、b4b4r04さんが直してPRくれました。ありがとうございます。
- Fuzzy Searchingとかprompt作る上で便利なutility系の用意
あたりです。
kube-prompt
kubernetesクライアントも用意したので、kubernetes触ってる方はぜひ使ってみてください。 Github Releaseからバイナリ落とすか、Homebrewで入ります。