💡 この記事の3行まとめ

  1. ターミナルの出力がコピーできないのは操作ミスではなく、ページャー・代替画面・権限ポリシー・描画という4つの構造的な原因のどれかに当たっています。
  2. 原因を10秒で判定し、「コピーを経由しない読み方」に切り替えれば、git の英語は同じ画面のまま読めます。
  3. Mac専用OCR翻訳『Zipp』なら ⌃S で囲んで 0.3秒。Apple Visionによる端末内処理で画面画像の外部保存ゼロ、無料でダウンロード(登録不要)、1日15回まで使えます。

📌 この記事の対象読者

  • ターミナルやGitHubのログをマウスでなぞっても選択できず、毎回そこで手が止まる方
  • git の英語エラーを翻訳サイトに貼ろうとして、貼り付けが空になり焦った経験のある方
  • 社内ポリシーでクリップボード経由の持ち出しを避けたい環境で、日常的にCLIを触っているエンジニア

「コピーできない」で止まるのは、原因が4種類あるから

ターミナルで git status を叩き、英語のエラーが出る。翻訳サイトに貼ろうとしてドラッグする。ところが選択できなかったり、選択はできても貼り付けが空だったりする。ここで多くの人が「自分の操作が悪い」と考えて、クリップボードの取り方やショートカットの設定を調べ始めます。しかし実際には、コピーできない原因は性質の違う4つに分かれていて、対処法がまったく異なります。原因を特定しないまま回避策を試すと、その場はしのげても次に別のツールを使った瞬間に同じ壁に当たります。

1つ目はページャーです。 git log や git diff、git branch -a は、既定でページャーに出力を渡します。画面の左下に出ている : や (END) がその印です。この状態の画面は「表示」であって「テキストの塊」ではないため、行頭のプロンプトやステータス行まで選択範囲に巻き込まれ、コピーした文字列がそのままでは使えません。q で閉じた瞬間に内容ごと消えるのも、ページャーが独自の画面を持っているからです。

2つ目は代替画面(alternate screen)です。 less や vim、man などが全画面を占有すると、ターミナルは元のスクロールバックを退避させます。閉じたあとに上へスクロールしても、さっき読んだ英語はもう戻ってきません。「コピーしようとしたら消えていた」という現象の多くはこれです。

3つ目は権限とポリシーです。 管理されたMacではクリップボードの利用が制限されていることがあります。SSH越しに開いたブラウザ上のターミナル、GitHub Codespaces、GitHub Actionsのログビューアも同様で、画面に見えている文字がOSのクリップボードに素直に渡らないことがあります。ログビューアは仮想スクロールで描画されるため、画面外の行はそもそもDOM上に存在しません。コピーしようとした範囲が途中で切れるのは、テキストがないからです。

4つ目は描画です。 ANSIカラー、全角スペース、絵文字、CJKの混在した行では、マウスの選択範囲と実際の文字の位置がずれます。見た目は1文字分ずれているのに、コピーすると別の文字が入る。これは操作の誤りではなく、文字幅の計算とグリッド描画の食い違いです。

4つに共通しているのは、「読めない」のではなく「運べない」という点です。文字はすでに画面に描かれていて、あなたの目には見えています。足りないのはクリップボードという運搬経路だけです。だとすれば、運搬を諦めて「画面に描かれているものをそのまま読む」方向に切り替えるほうが、原因ごとの回避策を4つ覚えるより速く、確実です。そして git の英語は、運ぼうとすると壊れ、画面のまま読むと壊れません。


解決策:コピーを経由せず、画面のまま読む3手順

手順1:4パターンを10秒で判定する

まず、目の前の「コピーできない」がどれなのかを判定します。判定は質問3つで足ります。

  • 質問A:左下に : や (END)、上部に : が出ていないか → 出ていればページャーです。q を押して閉じ、git --no-pager log のようにページャーを外して再実行すれば、出力はスクロールバックに残ります。
  • 質問B:閉じた瞬間に英語が消えたか → 消えたなら代替画面です。git log | cat や git diff --no-pager で、代替画面を使わずに流します。
  • 質問C:選択はできるのに貼り付けが空か、範囲が途中で切れるか → 権限ポリシーか描画の問題です。ここは設定変更では解決しません。次の手順に進みます。

この判定を持つ意味は、「コピーできるようにする」作業と「読む」作業を分けられることです。AとBは設定で解決できるので直せばいい。Cは直せないので、読む経路を変える。この切り分けができるだけで、エラー画面の前で固まる時間はほとんどなくなります。

手順2:コピーを捨てて、画面のまま訳す

判定がCだった場合、あるいはAとBを直す時間がもったいない場合は、コピーという工程自体を外します。⌃S(Control + S) を押し、訳したい範囲をドラッグして囲むだけです。囲み終えると 0.3秒 で訳が最前面に表示されます。

ここで重要なのは、原文が隠れないことです。訳は画面の上に重なって出るだけで、下のターミナルはそのまま残ります。つまり、訳で意味を掴んでから、同じ画面の原文で fatal: や error: の正確な綴り、終了コード、hint: の行を確認できます。コピーして翻訳サイトに移る動きは、原文を見失う動きでもありました。画面のまま訳せば、原文は常に視界に残ります。

処理はApple Visionによる端末内処理で、画面画像の外部保存ゼロです。ターミナルの出力には、リポジトリ名、ブランチ名、社内ホスト名、ときにはトークンらしき文字列が混ざります。それらをクリップボード経由で外部に貼らない運用にできることは、コピーできない環境では制約であると同時に利点でもあります。

手順3:囲む範囲を「結論行+直前のコマンド」に固定する

コピーできない画面では、囲む範囲がつい広がりがちです。全部読まないと不安だからです。しかし範囲を広げるほど、訳文に無関係な行が混ざり、結論の位置がぼやけます。固定するのは「結論行1行と、その直前のコマンド1行」です。

たとえば fatal: unable to access 'https://...': Could not resolve host なら、この行と、その上にある実行したコマンドの行を囲みます。結論行だけを囲むと「何をしたときの失敗か」が落ち、画面全体を囲むと無関係な hint: が混ざります。2行に固定すると、訳文は短く、判断に必要な情報だけを含みます。

同じ要領で、error: 行、warning: 行、hint: 行を1つずつ囲んでいきます。1画面に3つあったとしても、3回の囲みで足ります。1回の囲みを小さくするほうが、1回の囲みを大きくするより速い。これがコピーできない画面での基本的なリズムです。


コピーできない場面での対処を比べる

【原因の切り分け】
従来:4種類を区別せず、設定変更から試し始める
Zipp:不要。画面のまま読むため原因に依存しない

【必要な事前設定】
従来:core.pager、`
Zipp:pbcopy`、ターミナル設定など複数

【クリップボード依存】
従来:完全に依存する
Zipp:経由しない

【権限ポリシーの影響】
従来:制限があると手段ごと使えなくなる
Zipp:OSのクリップボードを使わないため影響を受けない

【原文の可視性】
従来:翻訳サイトへ移動する間、原文が見えない
Zipp:訳が重なるだけで原文は隠れない

【試しやすさ】
従来:環境ごとに設定と検証が必要
Zipp:無料でダウンロード(登録不要)/1日15回まで


よくある質問(FAQ)

Q. git config --global core.pager cat を設定すれば解決しませんか? A. ページャーが原因の場合は解決します。ただし代替画面、クリップボード制限、描画ずれには効きません。まず手順1で原因を判定し、ページャーだと分かったときだけ設定を変えるのが無駄がありません。設定はグローバルに効くので、他のツールの見え方も変わります。

Q. 画面を翻訳すると、OCRの誤認識でコマンド名が崩れませんか? A. 崩れることはあります。だからこそ原文を隠さない使い方が効きます。訳で行の意味を掴み、コマンド名やパスは下の原文で読む。この分担なら、誤認識は判断の妨げになりません。逆に、コピーした文字列だけを翻訳サイトに貼る運用では、崩れた箇所に気づけないまま検索してしまいます。

Q. CodespacesやActionsのログでも同じやり方で読めますか? A. 画面に描かれている範囲であれば同じです。仮想スクロールで画面外にある行は、スクロールして表示させてから囲んでください。表示されていない行は存在しないのと同じなので、先に画面に出してから読む順序になります。

Q. 1日15回で、エラー対応は足りますか? A. 1回の囲みを「結論行+直前のコマンド」に絞れば、1つのエラーは2〜3回で読み切れます。回数が限られているほうが範囲を絞る習慣が付き、結果として1画面あたりの読解は速くなります。まず今日出たエラーを1つ、この手順で読んでみてください。


運べないなら、運ばなくていい

ターミナルの英語がコピーできないとき、私たちはコピーの仕方を調べます。しかし本当に必要なのは、コピーという工程を経由せずに読む道筋です。原因を4つに切り分け、設定で直せるものは直し、直せないものは画面のまま読む。囲む範囲は「結論行+直前のコマンド」の2行に固定する。この3つを決めておけば、次に fatal: が出たときも、画面の前で止まりません。

今日の作業で一度だけ、git のエラー行と直前のコマンドを ⌃S で囲んでみてください。原文が消えずに残っていることを確かめながら読む。その手触りが、コピー設定を10個覚えるより先に効きます。

▼ 無料でダウンロード(登録不要・1日15回まで)
zipp-mac.surge.sh