初めてこれがハッカーか、と感じたのは元同僚の @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 が関数名や型名に言及すると、ハイライトされたスタイルで表示される:

Screenshot 2026-02-08 at 18.28.14.png

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)を使って定義を見つけ、該当行でファイルを開く。

ターミナル出力からシンボルの定義に直接ジャンプするデモ:

エディタの拡張をダウンロード:

OSC8 への期待 見出しへのリンク

このようにカスタムスキーマを通してアプリケーションを開くことができる OSC8 にはとても期待している。

今はまるでブラウザに <a> タグがあるのに誰も使っていないみたいなものじゃないか?

また、任意のシンボルをエディタで開くためのカスタムスキーマができた、という意味で

cursor://maaashjp.symbol-opener?symbol={symbol}&cwd=/path/to/project&kind=Function

が他のリンク元からも使ってもらえるとおもしろいのではないか。 Github や Slack などいろんなところでコードについて議論していて、 関数名が話題に上がった時に、クリックしてエディタに飛べたら便利だよね?

おわりに 見出しへのリンク

20年後の今も、はやく目的のコードに辿り着こうとしている。