5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

最近、Claude Codeで画像を生成する機会が増えてきました。
生成するたびにFinderで確認するのが地味に手間で、ターミナルから出たくないですよね。

WezTermには wezterm imgcat という画像をターミナルにインライン表示するコマンドがあります。
これをうまく使えば確認作業がターミナル完結になるはずなのですが、Claude Codeから直接呼ぼうとするとはまったので、この記事を残しておきます。

wezterm imgcat とは

wezterm imgcat は、iTerm2が策定した Inline Image Protocol をWezTermで使うためのコマンドです。
画像ファイルのパスを渡すだけで、ターミナルにインライン表示されます。

wezterm imgcat image.png

WezTermのターミナル上で直接実行する分には問題なく動きます。

まず直接実行してみる

Claude CodeのBashツール経由で wezterm imgcat を呼んでみると、こうなります。

! wezterm imgcat ~/Desktop/image.png
  ⎿  14:05:51.546  ERROR  wezterm > Device not configured (os error 6); terminating

WezTermのターミナル上では動くのに、Claude Codeから実行すると失敗します。

原因:Claude CodeはTTYを引き継がない

Claude Code のサブプロセスは TTY(端末デバイス)が正しく引き継がれない環境で動いています。
wezterm imgcat は実行時に端末デバイスを検出しようとしますが、TTYがないため Device not configured で終了してしまいます。

同様の問題は GitHub Issue #6389 でも報告されています。

解決策:wezterm cli 経由で別ペインに送る

wezterm cli はソケット通信でWezTermのGUIプロセスと直接やり取りするため、TTYの問題を回避できます。

アイデアはシンプルで、

  1. wezterm cli split-pane で下部に新しいペインを作る
  2. そのペインに wezterm cli send-textwezterm imgcat コマンドを送信する
PANE_ID=$(wezterm cli split-pane --bottom)
sleep 0.3
wezterm cli send-text --pane-id "$PANE_ID" --no-paste "wezterm imgcat 'image.png'"$'\n'

スキルに組み込む

僕は、プロンプトを渡すと、AIが生成しやすいプロンプトに成形し、OpenAI Images APIを使って、画像を生成する/openai-image-gen というスキルを作成しています。
/openai-image-gen スキルで、画像生成後に show_image.sh を呼び出して、ターミナルに画像を表示させています。

毎回新しいペインを作ると画面が増えてしまうので、ペインIDをファイルに保存して再利用するようにしています。

PANE_ID_FILE="${TMPDIR:-/tmp}/wezterm_image_preview_pane_id"

# 既存ペインへの送信を試みる
if [ -f "$PANE_ID_FILE" ]; then
    PANE_ID=$(cat "$PANE_ID_FILE")
    if wezterm cli send-text --pane-id "$PANE_ID" --no-paste "wezterm imgcat '${IMAGE_PATH}'"$'\n' 2>/dev/null; then
        exit 0
    fi
fi

# 新規ペインを作成して保存
PANE_ID=$(wezterm cli split-pane --bottom)
echo "$PANE_ID" > "$PANE_ID_FILE"
sleep 0.3
wezterm cli send-text --pane-id "$PANE_ID" --no-paste "wezterm imgcat '${IMAGE_PATH}'"$'\n'

初回はペインを新規作成し、2回目以降は同じペインを再利用します。プロンプトを修正して再生成しても、同じペインで画像が切り替わります。

まとめ

Claude Codeから wezterm imgcat を直接呼ぶとTTYの問題で失敗しますが、wezterm cli 経由で別ペインを作成しコマンドを送ることで回避できます。さらにペインIDを保存して再利用するようにしておくと、生成のたびにペインが増えることもありません。

WezTermをメインターミナルにしている人は試してみてください。


最後まで読んでくださってありがとうございます!

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?