受託でお手伝いしているサイトの運用手順を、画面録画にして先方へお渡しすることになりました。ターミナルを開いて agy を起動し、一連の流れをそのまま撮るだけのはずでした。
撮り終えて再生してみましたら、冒頭にロゴアートが大きく居座っていて、その脇に私のメールアドレスとプランの表示が並んでおりました。受け取る方にとっては、どちらも要らないものです。
最初のうち、私は端末の側を動かしておりました。ウィンドウを広げ、フォントを上げ、ロゴが画面の外へ出るまでスクロールしてから録画を始めておりました。撮り直しは三度に及びました。結果は芳しくありませんでした。翌日に別の手順を撮るとき、同じ調整をまた最初からやり直すことになったからです。
撮り方を工夫するのではなく、出す側の形を先に決めておく。 いまはそう切り替えて、シェルの設定に数行を置いております。Antigravity CLI には見た目を抑えるための環境変数と設定がいくつも用意されていて——ロゴ、アカウント表示、出力の高さ、コピーの挙動まで——狭い端末でも、スクリーンリーダーでも、録画でも、同じ一式で足ります。
ここでは、それらを場面ごとに並べてお伝えします。
ロゴとアカウント表示を、起動の時点で落とす
AGY_CLI_HIDE_LOGO を立てると、起動バナーのロゴアートが出なくなります。版とアカウントの情報は残りますので、「どの版で撮った手順なのか」が後から分かる状態は保てます。狭い端末、スクリーンリーダー、そして録画——この三つのために用意された環境変数です。
アカウント表示のほうは別の変数です。AGY_CLI_HIDE_ACCOUNT_INFO を立てると、ヘッダからメールアドレスとプラン種別の表示が消えます。1.0.2 から入っている古い変数で、私はこれを知らないまま、長いあいだ撮り直しを重ねておりました。いま思えば、環境変数の一覧に一度目を通しておけば済んだ話でした。
| 環境変数 | 効果 | 入った版 |
|---|---|---|
AGY_CLI_HIDE_LOGO | 起動バナーのロゴアートを抑止(版とアカウントの表示は残る) | 1.1.19 系 |
AGY_CLI_HIDE_ACCOUNT_INFO | ヘッダからメールアドレスとプラン種別を隠す | 1.0.2 |
この二つは目的が少しずつ違います。ロゴは幅と高さを食いますので、狭い端末のため。アカウント表示は、人に渡す素材から個人の情報を落とすため。録画のときは両方を立てます。
常に立てっぱなしにはしておりません。ロゴが出ることは「起動し直した」という目印にもなりますので、普段の作業では残したままにして、人へ渡すときだけ関数を通すようにしております。
# ~/.zshrc など。用途ごとに関数で包んでおくと切り替えが一手で済みます
agy-record() {
AGY_CLI_HIDE_LOGO=1 \
AGY_CLI_HIDE_ACCOUNT_INFO=1 \
agy "$@"
}環境変数を export で常時有効にせず関数の中に閉じ込めているのは、サポートへ状況を伝えるときに版とアカウントの表示が要るからです。消すのは渡す瞬間だけで足ります。
狭い端末で溢れるのは、ロゴだけではありません
自宅の iMac では画面を左右に割って作業しておりますので、端末のペインはかなり狭くなります。そこへ npm run build のような長い出力が返ると、それまでのやり取りが一度に上へ流れていきます。
AGY_CLI_CMD_OUTPUT_PERCENTAGE は、TUI に表示するコマンド出力の最大の高さを、端末の高さに対する割合で決められる環境変数です。1.0.11 で入りました。40 と置けば、どれだけ長い出力が返っても端末の四割までに収まりますので、直前のやり取りが画面から消えなくなります。
数式の描画も止められます。AGY_CLI_DISABLE_LATEX は LaTeX のレンダリングを全体で切る変数で、1.0.4 からあります。数式を扱わない仕事では、描画に回る処理と崩れ方の両方を減らせます。
設定パネルそのものも改善されています。/settings(/config)は 1.1.5 で高さの上限を持つスクロール可能な一覧になり、背の低い端末でも溢れずに収まるようになりました。同じ版で、ドロップダウンを開閉したときのちらつきも止まっています。
| 変数・設定 | 何を抑えるか | 入った版 |
|---|---|---|
AGY_CLI_CMD_OUTPUT_PERCENTAGE | コマンド出力の高さを端末比の割合で上限設定 | 1.0.11 |
AGY_CLI_DISABLE_LATEX | LaTeX 数式レンダリングを全体で無効化 | 1.0.4 |
/settings パネル | 短い端末での溢れとちらつき(自動で改善済み) | 1.1.5 |
割合の指定は、端末の幅や高さを変えても効き方が変わらないところが助かります。固定の行数で切る設定でしたら、画面を割り直すたびに見直すことになっていました。
見えている文字と、貼り付いた文字が違うとき
無人で走らせている処理のログを翌朝に読み返す、という運用を続けております。壁紙アプリの素材を並べ替える処理などがそれで、画面で見えている文字とコピーした文字が一致しないと、そこから先の確認がすべて遠回りになります。
1.1.3 で、ちらつき抑制モードのコピー・オン・セレクトが入りました。ドラッグで範囲を選び、マウスを離すと、ANSI を取り除いた状態でクリップボードへ入ります。あわせて仮想スクロールバーが隠れるようになり、複数行の出力をコピーするときに割り込まなくなっています。
1.1.8 では copyOnSelect という設定が加わりました。既定は有効で、/settings から切り替えられます。オルトスクリーンの描画モードで、マウスの選択を離した瞬間にシステムのクリップボードへ自動でコピーする挙動です。
便利な一方で、自動コピーが邪魔になる場面や、特定のペイロードを壊してしまう場面があります。私は貼り付けた内容が微妙に違うという症状を、しばらく自分の手の滑りだと思い込んでおりました。同じように操作の側を疑っている方も、いらっしゃるかもしれません。原因が設定の側にあると分かってからは、疑う順番を入れ替えております。見えているものと取れるものが食い違ったら、手元ではなく描画モードのほうを先に見ます。
リンクの扱いも同じ章に属します。1.0.12 で OSC8 のターミナルハイパーリンクに対応し、対応していない端末では自動で外れるようになりました。1.1.12 では SSH 越しと、ハイパーリンクに対応した tmux でもリンクが押せるようになり、折り返した URL が二行目以降も押せる状態を保つようになっています。リンクを含む行の横スクロールと範囲選択の不具合も、同じ版で直っています。
端末が「描けます」と名乗って、描けないとき
いちばん厄介なのは、端末が自分の能力を偽るときです。
1.1.6 で直った不具合が、その性質をよく表しています。アーティファクトビューアを画像モードへ切り替えたとき、Kitty graphics を描けると検出されたのに実際には描けない端末——iTerm2 が例として挙げられています——で、エスケープのゴミがそのまま出ておりました。同じ版では、Kitty 系ではない端末で最初のアーティファクトを開いたときに、最初のキー入力(Esc など)が落ちる不具合も直っています。
1.1.13 では、Cloud Shell の起動バナーが崩れる問題が直りました。ウェブ端末の側が、レンダラの出すカーソル最適化のエスケープシーケンスを扱いきれないことが原因で、いまは Cloud Shell では保守的な描画モードが自動で有効になります。
この保守的な描画を手で選べるようにしたのが AGY_CLI_DISABLE_ESCAPE_SEQUENCE_OPTIMIZATIONS です。レンダラの差分更新の最適化をバイパスします。自動判定に載っていない端末や、録画ソフト側の取り込みがおかしくなるときの逃げ道として覚えておくと役に立ちます。
版番号について一つ申し添えます。Antigravity には IDE(2.x 系)と CLI(1.x 系)の二つの系統があり、ここで挙げている版はすべて CLI のほうです。手元で確かめるときは Antigravity の公式チェンジログ の CLI タブで突き合わせてください。二次のまとめ記事は版がずれていることがあります。
非 TTY の話も添えておきます。1.0.15 で、Windows のパイプやサブプロセスの中でプリントモードや TUI 以外の出力が黙って捨てられる不具合が直りました。出力が空で返ったときに自分のスクリプトから疑うのは自然な順番ですが、版そのものが理由だったという例です。呼び出し側の書き方で結果を取りこぼす話は、Antigravity CLI の失敗を握りつぶしていたのは呼び出し側のパイプでしたにも書き残しております。
場面ごとに、一式をまとめておく
私は用途を三つに分けて、それぞれに関数を置いております。毎回思い出して変数を打つやり方は、忙しい日にいちばん先に抜け落ちるからです。
| 場面 | 立てる環境変数 | ねらい |
|---|---|---|
| 狭い端末での日常作業 | AGY_CLI_CMD_OUTPUT_PERCENTAGE=40 | 長い出力で直前のやり取りを流さない |
| スクリーンリーダー | AGY_CLI_HIDE_LOGO + AGY_CLI_DISABLE_LATEX | 読み上げに乗らない装飾を減らす |
| 画面録画・画面共有 | AGY_CLI_HIDE_LOGO + AGY_CLI_HIDE_ACCOUNT_INFO | 個人の情報と余白を素材から外す |
| 描画が崩れる端末 | AGY_CLI_DISABLE_ESCAPE_SEQUENCE_OPTIMIZATIONS | 差分更新の最適化を避けて素直に描かせる |
# 用途ごとにプロファイルを分けておく(~/.zshrc 等)
agy-record() { # 人へ渡す録画・画面共有
AGY_CLI_HIDE_LOGO=1 AGY_CLI_HIDE_ACCOUNT_INFO=1 \
AGY_CLI_CMD_OUTPUT_PERCENTAGE=40 agy "$@"
}
agy-a11y() { # スクリーンリーダーでの利用
AGY_CLI_HIDE_LOGO=1 AGY_CLI_DISABLE_LATEX=1 \
AGY_CLI_DISABLE_ESCAPE_SEQUENCE_OPTIMIZATIONS=1 agy "$@"
}
# 普段の作業は素の agy のまま。ロゴは「起動し直した」という目印として残す関数を分けておくと、切り替えは名前の入れ替えだけで済みます。私はこの三つ目——素のまま使う線——を残しておくことが、意外と効いていると感じております。全部を消してしまうと、どの状態で作業しているのかが自分でも分からなくなるのです。
表示そのものを作り込む側の話、つまりセッションのコストをステータスラインへ出すまでに私がつまずいた箇所については、ステータスラインでコストを追えるようにするまでに、3か所でつまずきましたにまとめております。
今日はまず AGY_CLI_HIDE_ACCOUNT_INFO の一行だけをシェルの設定へ足して、次に人へお渡しする録画のヘッダに何が残るかをご覧ください。それだけで、撮り直しが一度減ります。
端末の見た目は後回しにされやすい領域ですけれども、人に渡す段になってから必ず効いてきます。お読みいただきありがとうございました。