はじめに:日本語入力勢を苦しめる「Enter即送信」問題
Google DeepMind製の次世代AI開発環境 「Antigravity IDE」。
VS Codeベースの洗練されたUIと強力なエージェント機能で非常に快適なのですが、使い始めてすぐに 最大の罠 に直面しました。
そう…… チャット入力欄のキーバインド です。
- Enter:即時送信
- Shift + Enter:改行
「IMEの変換確定で Enter 叩いた瞬間に未完成の指示が送信される!!」
「普段 Slack や Discord で Ctrl+Enter 送信に慣れてるから誤爆しまくる!!」
開発者なら一度は叫んだことがあるのではないでしょうか。
撃沈:設定ファイル(keybindings.json)が一切効かない
「VS Codeベースなら keybindings.json で workbench.action.chat.submit や chat.action.focus を弄れば余裕でしょ」
そう思って設定を書き換えてみたものの…… 1ミリも挙動が変わりません。
設定画面(Settings)を検索しても、チャット欄の送信キーを切り替えるオプションは見当たらず……。
ダメ元で Antigravity の AI 本人に相談してみた
八方塞がりになったので、画面右のチャット欄で AI(Gemini)自身 に聞いてみました。
ぼく: 「チャットの Enter 送信を Ctrl+Enter に変えて、改行を Enter にしたいんだけど設定変えられないの?」
すると、AI から驚きの回答が。
AI:
「あ、実はですね……Antigravity IDE のチャット欄は VS Code 標準のチャット機能ではなく、独自にバンドルされた React + Lexical エディタ で動いているんです。
そのエディタ内部の JavaScript に『Shift+Enter 以外は即時送信』というロジックが直接ハードコードされているため、keybindings.jsonでは届きません」
まさかの内部アーキテクチャの暴露。
さらに AI はこう続けました。
AI:
「よかったら、IDE 本体の JavaScript ファイルにパッチを当てて、Enter で改行 / Ctrl+Enter で送信に変えましょうか?」
えっ!? 本体ファイル書き換えてくれるの!?
半信半疑のまま「じゃあお願い」と頼んでみました。
そして本当に治った(しかも一瞬で)
AI が裏で Python スクリプトを走らせ、workbench.desktop.main.js 内の該当イベントハンドラを書き換え、念のため .bak のバックアップまで作成。
指示に従って Ctrl + Shift + P から Developer: Reload Window(ウィンドウの再読み込み) を実行すると……
- Enter 単体 押下 → 改行される!
- Ctrl + Enter 押下 → 送信される!!
本当に治った!! 誤爆ストレスが完全にゼロになりました。最高すぎる。
おまけ:起動時の「インストールが壊れています」警告もAIが撃退
パッチ適用後、IDE 起動時に右下にひとつだけ問題が発生しました。
「Antigravityのインストールが壊れている可能性があります。再インストールして下さい」
これは VS Code ベースのエディタ特有のセキュリティ機能(Integrity Service)で、本体 JS が改ざんされたことをハッシュ値の不一致から検知して警告してくる仕組みです。
これについても AI に「この警告消せる?」と聞いたところ、
AI:
「あ、VS Code のチェックサム検証ですね!product.jsonに登録されているハッシュ値を、パッチ適用後ファイルの新しい SHA-256 チェックサムに書き換えれば消えますよ。すぐ直しますね」
とサラッと product.json のチェックサムを再計算して更新してくれました。
再起動したところ、警告トーストも跡形もなく綺麗サッパリ消滅。完璧か……?
同じ悩みを持ってる人は、このプロンプトを AI に読ませてみて!
Antigravity IDE で同じストレスを抱えている方は、以下の指示テキストをチャット欄の AI にそのままコピペして投げてみてください。
AI が対象ファイルを自動特定し、バックアップ付きでパッチ適用&チェックサム更新まで全自動でやってくれます!
🤖 AIに投げる指示プロンプト(ここからコピー)
Antigravity IDE のチャット入力欄において、デフォルトの「Enterで送信 / Shift+Enterで改行」という挙動を「Enterで改行 / Ctrl+Enter (MacはCmd+Enter) で送信」に変更する本体パッチを適用してください。
【手順の概要】
1. 対象ファイル: `%LOCALAPPDATA%\Programs\Antigravity IDE\resources\app\out\vs\workbench\workbench.desktop.main.js` および `product.json`
2. 初回のみ両ファイルの `.bak` バックアップを作成すること。
3. `workbench.desktop.main.js` 内の Enter キー判定(Lexical エディタの KEY_ENTER_COMMAND)を正規表現で特定し、`ctrlKey || metaKey` が真の時だけ送信関数を実行、それ以外(単体EnterやShift+Enter)は改行(!1 を返却)に倒すように置換すること。
4. パッチ適用後、`product.json` の `checksums` にある `vs/workbench/workbench.desktop.main.js` の値を、新ファイルの SHA-256 (base64, 末尾 '=' 除去) に更新して起動時の「インストールが壊れている可能性があります」警告を抑制すること。
以下の Python スクリプトを実行して適用してください:
```python
import os
import re
import json
import hashlib
import base64
import shutil
import sys
app_dir = os.path.expandvars(r"%LOCALAPPDATA%\Programs\Antigravity IDE\resources\app")
js_path = os.path.join(app_dir, r"out\vs\workbench\workbench.desktop.main.js")
product_path = os.path.join(app_dir, "product.json")
js_bak = js_path + ".bak"
product_bak = product_path + ".bak"
if not os.path.exists(js_path):
print(f"Error: Target file not found: {js_path}", file=sys.stderr)
sys.exit(1)
# 1. バックアップ作成
if not os.path.exists(js_bak):
shutil.copyfile(js_path, js_bak)
if os.path.exists(product_path) and not os.path.exists(product_bak):
shutil.copyfile(product_path, product_bak)
# 2. JS 読み込みと置換
with open(js_path, "r", encoding="utf-8") as f:
content = f.read()
pattern = re.compile(
r'(registerCommand\([^,]+,\s*(\w+)\s*=>\s*\{\s*\2\.preventDefault\(\);)\s*'
r'let\s+(\w+)=\2\.shiftKey&&(?:\(\2\.metaKey\|\|\2\.ctrlKey\)|\(\2\.ctrlKey\|\|\2\.metaKey\));'
r'return\s+\2\.shiftKey&&!\3\?!1:\(([^,]+)\(\2,\s*([^)]+)\),!0\)'
)
match = pattern.search(content)
if not match:
already_patched_pattern = re.compile(
r'registerCommand\([^,]+,\s*(\w+)\s*=>\s*\{\s*\1\.preventDefault\(\);'
r'let\s+(\w+)=\1\.ctrlKey\|\|\1\.metaKey;return!\2\?!1:'
)
if already_patched_pattern.search(content):
print("INFO: JS file is ALREADY patched.")
else:
print("Error: Target pattern not found", file=sys.stderr)
sys.exit(1)
else:
replacement = r'\1let \3=\2.ctrlKey||\2.metaKey;return!\3?!1:(\4(\2,\5),!0)'
new_content = pattern.sub(replacement, content, count=1)
with open(js_path, "w", encoding="utf-8") as f:
f.write(new_content)
print("SUCCESS: Patched workbench.desktop.main.js!")
# 3. チェックサム更新(警告防止)
if os.path.exists(product_path):
with open(js_path, "rb") as f:
js_data = f.read()
new_checksum = base64.b64encode(hashlib.sha256(js_data).digest()).decode("utf-8").rstrip("=")
with open(product_path, "r", encoding="utf-8") as f:
prod = json.load(f)
if "checksums" in prod and "vs/workbench/workbench.desktop.main.js" in prod["checksums"]:
prod["checksums"]["vs/workbench/workbench.desktop.main.js"] = new_checksum
with open(product_path, "w", encoding="utf-8") as f:
json.dump(prod, f, indent=2, ensure_ascii=False)
print("SUCCESS: Updated product.json checksums!")
スクリプト実行後、Ctrl + Shift + P から Developer: Reload Window を実行して反映してください。
まとめ
まさか 「エディタの不満を、エディタに搭載されたAI自身に本体パッチを当てさせて解決する」 というSFみたいな解決法になるとは思いませんでした。ペアプログラミングのアシスタントどころか、開発環境の保守エンジニアとしても頼もしすぎます。
IDE のアップデートが入ると本体ファイルが上書きされて元に戻ることがありますが、その時も上記のプロンプトを投げるだけで一発で再適用できます。
Enter 送信の誤爆に悩まされている Antigravity ユーザーの皆さんは、ぜひお試しあれ!
この記事もAntigravityのGeminiが書きました。