1
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?

AIにターミナルでのやりとりをコピペできる.zshrcの作り方

1
Posted at

.zshrcに『AIへ貼るためのコピペ機能』を搭載した
ターミナルでエラーや診断結果が出たとき、ChatGPTやClaudeに相談するために、毎回マウスで範囲選択してコピーするのは面倒である。
そこで、コマンドの先頭に ai を付けるだけで、
実行したコマンド
実行結果
Markdownのコードブロック
を自動的にクリップボードへコピーする仕組みを、macOSの .zshrc に追加した。
たとえば、次のように実行する。
ai networkQuality
コマンドは通常どおり実行され、結果がターミナルに表示される。同時に、クリップボードには次の形式で保存される。

Machine : pk_mini
Folder  : ~/dev/AI_corp/knn-funda

pk_mini % networkQuality

==== SUMMARY ====
Uplink capacity: 17.597 Mbps
Downlink capacity: 140.434 Mbps

あとはChatGPTやClaudeの入力欄で ⌘V を押すだけである。
なぜ、この機能を作ったのか
生成AIは、こちらのターミナル画面を見ることができない。
そのため、トラブルシューティングでは、ユーザーがコマンドと実行結果を正確にコピーして渡す必要がある。
ところが、実際には次のような問題が起きる。
コマンド部分をコピーし忘れる
実行結果の途中までしかコピーできない
過去の不要なログまで大量に貼ってしまう
コードブロックを手動で付けるのが面倒
ローカルのユーザー名やPATHをそのまま公開してしまう
そこで、『実行と同時にAI向けの文章を作る』ことにした。
.zshrcとは
.zshrc は、zshを起動するときに読み込まれる設定ファイルである。
macOSでは、ホームディレクトリに保存されている。
~/.zshrc
~ はホームディレクトリを意味する。
たとえば実際のPATHが、
/Users/paulkanda/.zshrc
であっても、一般的には次のように表記する。
~/.zshrc
編集には、macOS標準のテキストエディットを利用できる。
open -e ~/.zshrc
ターミナル上のエディタである nano でも編集できるが、慣れていない場合はテキストエディットの方が安全である。
完成した.zshrcのコード
既存のPATH設定などは残し、次のコードを .zshrc の末尾に追加する。

=========================

AI clipboard functions

=========================

_ai_core() {
if [ $# -eq 0 ]; then
echo "使い方: ai "
return 1
fi

local cmd="$*"
local tmp
tmp=$(mktemp)

# コマンドを実行し、画面表示と一時保存を同時に行う
"$@" 2>&1 | tee "$tmp"
local exit_status=${pipestatus[1]}

# ホームディレクトリを「~」に置き換える
local cwd="${PWD/#$HOME/~}"

# Markdown形式でクリップボードへコピー
{
    echo '```terminal'
    echo "Machine : pk_mini"
    echo "Folder  : $cwd"
    echo
    echo "pk_mini % $cmd"
    echo
    cat "$tmp"
    echo '```'
} | pbcopy

rm -f "$tmp"

echo "📋 Copied"
return "$exit_status"

}

公開用の基本コマンド

ai() {
_ai_core "$@"
}

個人用の隠しショートカット

a() {
_ai_core "$@"
}

詳細情報付きのフォーマット

af() {
if [ $# -eq 0 ]; then
echo "使い方: af "
return 1
fi

local cmd="$*"
local tmp
tmp=$(mktemp)

"$@" 2>&1 | tee "$tmp"
local exit_status=${pipestatus[1]}
local cwd="${PWD/#$HOME/~}"

{
    echo '```terminal'
    echo "Machine : pk_mini"
    echo "Folder  : $cwd"
    echo "Time    : $(date '+%Y-%m-%d %H:%M %Z')"
    echo "OS      : macOS"
    echo "Shell   : zsh"
    echo
    echo "pk_mini % $cmd"
    echo
    cat "$tmp"
    echo '```'
} | pbcopy

rm -f "$tmp"

echo "📋 Copied (formatted)"
return "$exit_status"

}

直近のコマンド履歴をコピー

as() {
local count="${1:-3}"
local cwd="${PWD/#$HOME/~}"

{
    echo '```terminal'
    echo "Machine : pk_mini"
    echo "Folder  : $cwd"
    echo
    echo "History (last $count)"
    echo
    fc -ln "-$count"
    echo '```'
} | pbcopy

echo "📋 Copied history ($count)"

}

左手だけで入力しやすいショートカット

as4() { as 4 }
as5() { as 5 }
as6() { as 6 }
as7() { as 7 }
as8() { as 8 }
as9() { as 9 }

直近200件から単純なノイズを除去してコピー

ash() {
local cwd="${PWD/#$HOME/~}"

{
    echo '```terminal'
    echo "Machine : pk_mini"
    echo "Folder  : $cwd"
    echo
    echo "History (cleaned, last 200)"
    echo

    fc -ln 1 \
        | tail -n 200 \
        | grep -vE '^[[:space:]]*$' \
        | grep -vE '^(ls|pwd|clear)$' \
        | awk 'NR == 1 || $0 != previous { print } { previous = $0 }'

    echo '```'
} | pbcopy

echo "📋 Copied history (cleaned)"

}
設定を反映する
.zshrc を保存しただけでは、現在開いているターミナルには反映されない。
次のコマンドを実行する。
source ~/.zshrc
設定が複雑に重複している場合は、zsh自体を再起動する方法もある。
exec zsh
基本的な使い方
単発のコマンドと結果をコピー
ai pwd
短縮版の a も同じ動作をする。
a pwd
a は一文字コマンドに抵抗がある利用者もいるため、公開マニュアルでは ai を正式コマンドとし、a は隠しショートカットとしている。
詳細情報を付けてコピー
af networkQuality
af は『Ask Format』の意味である。
クリップボードには、日時、OS、シェル情報も追加される。

Machine : pk_mini
Folder  : ~/dev/AI_corp/knn-funda
Time    : 2026-07-31 04:01 JST
OS      : macOS
Shell   : zsh

pk_mini % networkQuality

...

Qiitaやnoteの記事へ、そのまま貼り付けやすい形式である。
直近3件の履歴をコピー
as
as は『Ask Shell』または『Ask Session』という意味で付けた。
デフォルトでは、直近3件をコピーする。
History (last 3)

ai pwd
a pwd
af pwd
履歴件数を指定
as4
as5
as6
as7
as8
as9
左手側のキーだけで入力を完結できるようにしている。
整理した履歴をコピー
ash
ash は、直近200件から空行や単独の ls、pwd、clear などを除き、連続した重複行も削除してコピーする。
ただし、zshの履歴には、過去に貼り付けた長文や秘密情報が含まれる可能性がある。ash の内容を外部へ公開する前には、必ず目視確認が必要である。
PATHを~に置き換える理由
実際のPATHをそのままコピーすると、次のようなユーザー名が外部へ出る。
/Users/paulkanda/dev/AI_corp/knn-funda
これだけでMacへ侵入されるわけではないが、公開記事では不要な個人情報を出さない方がよい。
そこで、ホームディレクトリ部分を ~ に置換する。
~/dev/AI_corp/knn-funda
AIにはプロジェクトの位置関係が伝わり、外部にはmacOSのログイン名が見えない。
"$"と"$@"の役割
この関数では、表示用と実行用を分けている。
local cmd="$
"
"$*" は、渡された引数をひとつの文字列としてまとめる。AI向けに『どのコマンドを実行したか』を表示する用途である。
一方、実際の実行には次を使う。
"$@"
"$@" は、各引数を分離した状態でコマンドへ渡す。そのため、スペースを含む引数なども比較的安全に扱える。
安易に eval を使わないことも重要である。eval は文字列を再解釈して実行するため、意図しないコマンド実行や引用符の問題を起こしやすい。
teeとpbcopyが中心
この仕組みの中心は、macOS標準の2つのコマンドである。
tee
"$@" 2>&1 | tee "$tmp"
tee は、実行結果をターミナルへ表示しながら、同じ内容を一時ファイルにも保存する。
2>&1 により、通常出力だけでなくエラー出力もまとめて取得している。
pbcopy
... | pbcopy
pbcopy は、標準入力で受け取ったテキストをmacOSのクリップボードへ保存する。
このため、実行後は ⌘V だけでAIへ貼り付けられる。
注意点
この仕組みは、コマンドを通常どおり実行する。
したがって、次のような破壊的なコマンドへ ai を付けても、安全になるわけではない。
ai rm -rf important-folder
また、次の情報が出力に含まれていないか確認する必要がある。
APIキー
パスワード
アクセストークン
Cookie
SSH秘密鍵
個人名を含むPATH
IPアドレスやMACアドレス
顧客情報
.env の内容
『AIへコピーする』ことと、『インターネットへ公開する』ことは同じではない。Qiitaやnoteへ掲載するときは、さらに慎重な確認が必要である。
まとめ
今回作ったのは、大規模なアプリではない。
.zshrc に数十行の関数を追加しただけである。
しかし、
ai
と入力するだけで、
ターミナル実行

結果取得

Markdown整形

クリップボード保存

AIへ貼り付け
までが一度に完了する。
生成AI時代には、AIそのものの性能だけでなく、『人間側がどれだけ正確なコンテキストを渡せるか』が重要になる。
この小さなCLIは、ターミナルとAIの間にあるコピー&ペーストの摩擦を、かなり減らしてくれる。i2026-07-314.25.39.png

1
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
1
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?