初めてこれがハッカーか、と感じたのは元同僚の @typester だった。 2006年頃、彼の肩越しに覗くと、なにかコードを書いていた。 キーを打つたびに、黒い背景が半分に割れ、テキストのリストが現れ、打鍵のたびにハイライトが移動し絞り込まれていく。 ファイルを飛び回り、一つのファイルに数秒、そしてまた別のファイルへ。
自分もそこそこの秀丸上級者だとは思っていたが、コードベースを駆け抜ける速さに圧倒された。
なぜか画面に反映されるよりもはるかに多くのキーを打っていないか?とは思ったが(Emacs を使っていた :p)
彼をフォローするように Mac を買い、 Emacs を使い始めた。
このエピソードをきっかけに、そしてその後の経験から、 ソフトウェアエンジニアはコードを書くよりもはるかに多くのコードを読むことに時間を割く、
書くはやさだけでなく
はやく目的のコードに辿り着くことも重要だと考えるようになった。
ターミナルとエディタの間の溝 見出しへのリンク
時は流れて2026年。Claude Code や Codex のような AI エージェントをターミナル上で使い、ターミナルとエディタを行き来する頻度が以前よりずっと増えた。
しかし、ターミナルからエディタへのリンクが存在しない。
ターミナルからエディタに切り替え、コピペしてもたもたしていると感じる。
OSC8: ターミナルのハイパーリンク 見出しへのリンク
OSC8 は、ターミナル出力にクリック可能なハイパーリンクを埋め込むための ANSI エスケープシーケンスだ。
ターミナルにおけるHTML の <a href="..."> と同じようなもの。
最近のターミナルの多くがサポートしている: iTerm2、Ghostty (最近乗り換えた) など。
OSC8 を知ってすぐ、ネイティブで OSC8 をサポートしているツールに切り替え始めた。例えば eza は ls の代替で、ファイルパスをハイパーリンクとして出力できる:
alias l="eza --hyperlink -la"
しかし、各ツールが個別に実装する必要があり、多くのツールは対応していない。
osc8wrap: あらゆる出力をリンク化する 見出しへのリンク
どのツールが出力したかに関係なく、ターミナル上のすべてのファイルパスをクリック可能にしたかった。
そこで osc8wrap を作った。
osc8wrap は Claude Code や Codex などのインタラクティブな CLI ツールのラッパーであり、パイプを通しても使える。
テキストからファイルパスや URL を検出し、OSC8 ハイパーリンクで囲む。
ANSI カラーを保持し、ラップしなかった場合と同じように使えることを目指している。
多くのファイルパスパターンに対応しているので、ファイルパスを出力するあらゆるツールで使える。
| パターン | 例 |
|---|---|
| 絶対パス | /path/to/file.go |
| ホームディレクトリパス | ~/src/project/main.go |
| 行番号付き | /path/to/file.go:42 |
| 行番号・列番号付き | /path/to/file.go:42:10 |
| 行範囲付き | /path/to/file.go:10-20 |
| 相対パス | ./src/main.go:10 |
| 拡張子なしパス | ./README, /path/to/LICENSE |
| *ファイル名 | Makefile, Dockerfile |
| Git diff パス | a/src/main.go, b/src/main.go |
osc8wrap は cwd 以下のファイルの存在確認も行ってパス展開を行うので、Claude Code が main.go とだけ言って途中のパスを省略しても、フルパスに展開する。
Claude Code はフルパスを必ずしても書いてくれないので、これは非常に便利だ。
.zshrc での設定:
alias g="git -c color.status=always status -sb | osc8wrap"
alias gd="git diff -w --color=always -M | osc8wrap | less"
alias gl="git log -b -M --stat --color=always --decorate=full | osc8wrap | less"
alias claude="osc8wrap claude"
alias codex="osc8wrap codex"
これでファイルパスがクリック可能になり、エディタで直接開ける。
symbol-opener: ターミナルから定義へジャンプ 見出しへのリンク
ファイルパスは良いスタートだったが、使っているともっと欲が出た。
Claude Code や Codex が関数名や型名に言及すると、ハイライトされたスタイルで表示される:

Symbol がハイライトされているのですでにリンクのようじゃないか。
クリックできるべきだろう。
osc8wrap はこれらの ANSI スタイル付きトークンを検出し、以下の形式の URI を生成する:
vscode://maaashjp.symbol-opener?symbol=NewAnsiTokenizer&cwd=/path/to/project&kind=Function
# or
cursor://maaashjp.symbol-opener?symbol=NewAnsiTokenizer&cwd=/path/to/project&kind=Function
この URI を処理するために、VS Code / Cursor 拡張機能の symbol-opener を作った。上記のようなリンクをクリックすると、LSP(Language Server Protocol)を使って定義を見つけ、該当行でファイルを開く。
ターミナル出力からシンボルの定義に直接ジャンプするデモ:
エディタの拡張をダウンロード:
- VS Code Marketplace
- Open VSX Registry (Cursor, Windsurf など)
OSC8 への期待 見出しへのリンク
このようにカスタムスキーマを通してアプリケーションを開くことができる OSC8 にはとても期待している。
今はまるでブラウザに <a> タグがあるのに誰も使っていないみたいなものじゃないか?
また、任意のシンボルをエディタで開くためのカスタムスキーマができた、という意味で
cursor://maaashjp.symbol-opener?symbol={symbol}&cwd=/path/to/project&kind=Function
が他のリンク元からも使ってもらえるとおもしろいのではないか。 Github や Slack などいろんなところでコードについて議論していて、 関数名が話題に上がった時に、クリックしてエディタに飛べたら便利だよね?
おわりに 見出しへのリンク
20年後の今も、はやく目的のコードに辿り着こうとしている。