🍣

Warpの補完の弱さについて

2024/08/15に公開

Warpについて

https://www.warp.dev
Warp、便利ですよね。見た目もリッチになってテンションが上がりますし、AI系の機能も統合されて、タブ機能だったり "Modern Terminal" にふさわしい多機能性だとは思います。思うのですが...というお話です。


🔥ターミナルの補完機能、便利

こういったターミナルを拡張するプロダクトを利用する大きな動機として、リッチな補完機能があると思います。
https://fig.io/
旧Fig[1]はまさにその目的で導入されてる方も多いと思いますし、補完機能目当てにshellにfishなんかを利用したりされてる方も多いと思います。
自分はなかなかコマンドをよく使うもの以外覚えられないので、とても助けられます...--helpを経由せず、Tabでコマンドを選択できるというだけで本当に減る手間が大きいです。

Warpの場合

もちろん、Warpにもコマンドの補完機能はあります。
ありますが...Warpの場合は、独自のライブラリを参照して補完しています。
https://docs.warp.dev/features/command-completions/completions
以上はWarp側で対応しているコマンド補完の一覧。頑張ってはいるんだけど...
この仕組み、

  • カバー範囲の狭さ
    • 独自ライブラリでやってるにしては頑張ってはいるかも(二度目)
    • 補完を吸われることがある
      • issueで上がってた実例として、Taskwarrierの補完がwarpにある中で、タスクランナーのTaskがどちらもコマンドがtaskで始まるので、Taskのコマンドを打ってEnterしたら勝手にTaskwarrierの記法で補完されてエラーになる...など
        • 実際のユーザーの環境に即して無いのでこういう事も起きる
    • 新しめのツールだと対応してないことがかなり多い
      • Pythonで話題沸騰のrye, uv, ruffは軒並み補完できない。
        • なおこれら全て公式で補完スクリプトをbash, zsh, fish, PowerShell, Nushellまで対応しているので、ターミナルがWarpでさえなければ確実に簡単に補完できる
    • 独自だと当たり前に限界がある
  • メンテナンスが不確かな感じ
    • full supportとされているbrewコマンドで例にすると、未だにbrew caskコマンド(非推奨)が補完で表示される。
  • ユーザーのシェル側のカスタマイズを引き継げない
  • ユーザーが使いたいコマンドを補完できない

など、かなりの問題があるように見受けられます。

普通のターミナルであれば、補完機能は各シェル中で実装されたものが使われていて、また多くのコマンドではそれに対応した補完用スクリプトが用意されています。
あるいは、有志によるスクリプトを見つけることもできます。zsh-completionsなんかはzsh用でそれをまとめたものですね。
それを一切使えません。 シェル補完へのフォールバックもないです。

AIターミナルなのに、補完が弱いと本末転倒な気がするんですよね、、、

開発側がやる気ないっぽい...

https://github.com/warpdotdev/Warp/discussions/434

(本文抜粋)
英)I'd like to be able to deligate to the underlying shell to provide autocompletion.
日) 自動補完を提供をシェルに委任してほしい

というDiscussionが2021年7月には立っているのですが、最初のチームの返答によると、

Our current approach is to try move this logic into Warp by building out our own completion grammar and library, with the rationale being:

  1. Shell autocomplete is pretty hard to configure
  2. You lose most of your completions when you go to remote boxes unless you've also configured completions on them
  3. The current shell completion specs are (in our opinion) pretty hard to write new completions for

私たちの現在のアプローチは、独自の補完文法とライブラリを構築することでこのロジックを Warp に移行しようとするもので、その理由は

  1. シェルの自動補完の設定は大変である。
  2. リモート環境で補完を機能させようとすると、いちいちまたその環境での設定が必要になる。
  3. 現在のシェル補完の仕様では(私たちの意見では)新しい補完を書くのがかなり難しい。

また、別のissueでは、「独自のシェル用のラッパーを実装しているため、かなり難しい」のような返答があったようでした。(ただし、Figができていることを考えるとなぁ...という気持ちもある。)
「次四半期に真剣に検討を進める」などのような文言も見えたのですが、どうやらそれらからもかなり年月は経っているようです。(おそらくWindows版などへリソースを割いているからとのこと。)


代替案(なるべく同等以上の)

私個人的には補完機能>>>AIなどの他機能なので、代替となりうるターミナルアプリを探してみます。
(正直ある程度のエンジニアならターミナルでAI補完が欲しい場面限られると思うの...)

Amazon Q(Fig)との組み合わせ

https://aws.amazon.com/jp/q/
以下のターミナルとAmazon Q for command lineの組み合わせ。
私自身はFigがAmazon Qになってからちゃんと触れられていないが、Figはとてもいい感じに補完してくれたので好きです。
あるいはfishも補完が強いのでzshからfishに変えてもいいかも。

iTerm2

https://iterm2.com
WarpのリッチなUIを考えるとiTermももはやモダンとは言えないところまで来ている感じもする...

Kitty

https://sw.kovidgoyal.net/kitty/

Hyper

https://hyper.is

Wave Terminal

https://www.waveterm.dev
OSSかつAI統合のターミナル。使ってみた感じ、やや荒削りな感じは感じるものの、

  • Workspace+Tabで整理できる
  • Connectionsを設定できる
    • sudoをデフォルトにしたり、zsh/bashの設定、sshの設定をプロファイルみたいな感じで設定できる
    • 便利だった
  • VSCodeっぽいインラインエディタがある
    • かなりいいかも
  • fishは使えない(仕方ない)
脚注
  1. Amazon Qに吸収され、2024/9/1でShutdown予定 ↩︎

Discussion