世界を動かす技術を、日本語で。

私のターミナルの使い方

2025年6月24日原文(jyn.dev)

概要

  • tmux を活用したリモート開発環境の構築と、その驚きの操作フローを紹介
  • VSCode やZedへの不満から独自のワークフローを追求した経緯
  • tmux の設定や独自スクリプトによるファイル検索・編集の自動化
  • 他人にはおすすめしにくいが、 生産性と快適さ は大幅向上
  • 代替案や学び、ターミナルの本質的な強さについても解説

tmuxによるリモート開発ワークフローの全体像

  • Windows Terminal を開き、 Ctrl + Shift + 5 で新しいタブを開く操作
    • 新タブで自宅デスクトップに SSH接続 し、即座に tmux を起動
    • tmux 上でデフォルトシェルの zsh を起動
  • zsh プロンプト表示後、設定を非同期で読み込みつつ zoxide で最近使ったディレクトリをファジー検索
  • ripgrep コマンドを入力、 zsh のオートフィル機能で過去のコマンドを自動補完し Ctrl + f で確定
  • Ctrl + k f でtmuxのスクロールバック全体からファイル名を検索
    • ファイル名が青色でハイライトされ、 n キーで次々と選択
  • 目的のファイルを見つけたら o キーでデフォルトアプリ(この場合はnvim)で開く
    • tmux が新しいペインでnvimを起動し、リモート上でファイル編集
  • rust-analyzer で参照ジャンプを試みるが、一部マクロに対応できず失敗
    • 成功した箇所で参照先にジャンプ
  • Ctrl + k h でtmuxのペインフォーカスを左側に戻す
  • 再び n で次のファイルを選択、 o で同じnvimインスタンス内で別ファイルを開く
  • b キーで開いているバッファ一覧を表示し、ファイル間を素早く切り替え

なぜこのワークフローを作ったのか

  • VSCode の遅延やvimプラグインとのキーバインド競合に不満
  • Zed も未成熟かつキーバインド競合が多かった
  • ターミナル上の nvim 運用ではファイル名のコピペや整形が煩雑
  • VSCodeのCtrl+クリック のように、任意のパスを即座に開きたいニーズ
  • tmux を活用し、理想のワークフローを自作した経緯

tmuxの設定・スクリプト解説

  • スクロールバックからファイル名検索
    • 複雑な正規表現をtmuxのbind-keyで実現
    • 検索ロジックは search-regex.sh で管理
  • 選択ファイルを新しいペインでnvim起動
    • デフォルトアプリで開く場合は copy-pipe でパスをbash経由で展開しopen
    • 現ペインでエディタ起動も可能(ファイル種別によるアプリ選択)
  • nvim実行中のペインにファイルを送る
    • Perlスクリプトで tmux からnvimにコマンド送信
    • 既存nvimインスタンスへのファイル追加やペイン選択も自動化

この仕組みのメリットと注意点

  • ローカルには 高機能ターミナル不要、フォントが綺麗なら十分
  • tmux 経由の操作なので、Windows環境でも追加インストール不要
  • エディタがリモートスクリプト非対応でも運用可能(nvim/helix/kakoune等)
  • エディタ組み込みターミナルに依存せず、 柔軟性と拡張性 を確保
  • セッション永続化 が最大のメリットだったが、今後は kitty への移行も検討中
    • kittyはssh連携がシェル統合型で、リモートにインストール不要
    • weztermはサーバープロセス必須で、デフォルトで入っていない

使ってみてどうだったか

  • エディタのラグやキーバインド問題 から解放され、快適な編集環境を実現
  • デバッグも容易、vimプラグインのluaにprintを挿入するだけで挙動確認
  • エディタ・ターミナル間のスクリプト連携 が簡単
  • ただし、 他人にはおすすめしにくい
    • スクリプトが壊れやすく、自己管理できる人向け
    • デバッグや運用の知識が求められる

似たことをやりたい人向けの代替案

  • fish + zoxide + fzf :ディレクトリ移動やファイル検索の効率化
  • エディタ標準の ファジーファインドや全文検索、タブ・ウィンドウ管理
  • qf :ターミナル出力からファイル選択(ただしvi系CLI前提、カスタム要)
  • e :file:line構文変換ツール(同名自作ツールと偶然被ったエピソードも)
  • vim --remote filename, code filename, emacsclient filename :既存エディタのリモートファイルオープン
    • file:line未対応やエディタ切替時の手間が課題

学びとまとめ

  • ターミナルは想像以上に強力、スクリプト化次第で多彩な機能を実現可能
  • エディタに縛られず、 自由なワークフロー構築 が可能
  • 既存ツールでもある程度再現できるが、 本質的な柔軟性はターミナルスクリプトに軍配
  • 他の人のツール構成や工夫にも興味あり、情報交換歓迎

Hackerたちの意見

記事のタイトルは実際には「どうやってターミナルを使っているか」だよ。

これ、最初は「There Will Be Blood」のパロディかと思った。 (今のタイトルが「I use my terminal」ってのは分かるよね)

自分も投稿をざっと見たときに気づいたけど、完全なタイトルは「I use my terminal (and so should you)」って感じだね。プロターミナル投稿にプラス1! Chromebook使ってるけど、必要なのはターミナルとブラウザだけだって気づいた。Mac OSに切り替えるのはちょっと過剰な気がするし、ターミナルと、まあ、他のブラウザ以外はあんまり使わないな。

HNはタイトルの提出時に、一般的な接頭辞や接尾辞を自動で削除するよ。

これはHNの「機能」で、タイトルの最初の単語が「How」の場合はそれを削除するんだ。混乱を生む以外に何の目的もないけど、モデレーターはこれがクリックベイトを防ぐって言ってる。どうやって? 誰も知らない。

誰かが自分で書いたターミナルエミュレーターを使っているブログ記事かと思った。

こんな巨大なregexを自分で書きたくないなら、コピー・モードにこんな機能を追加する既製のtmuxプラグインがいくつかあるよ。 https://github.com/tmux-plugins/tmux-fpp https://github.com/tmux-plugins/tmux-copycat https://github.com/Morantron/tmux-fingers https://github.com/tmux-plugins/tmux-urlview ビルトインに依存する設定やプラグインはたぶん速いから、tmux-copycatについてはそれを考慮してね。あと、セッションを保存・復元してくれるtmux-resurrectも好きだし、自動でそれを実行してくれるtmux-continuum、Oh-My-Fish用のtmux-zenプラグインもいいよ! https://github.com/tmux-plugins/tmux-resurrect https://github.com/tmux-plugins/tmux-continuum https://github.com/sagebind/tmux-zen/tree/master すごくいいtmuxのセットアップが簡単にできるよ!

そうそう、元の正規表現はtmux-copycatから取ったんだ。でも、a) その正規表現は : を扱えなくて、b) copycatはペインの状態を保存・復元する上に独自の「ビューア」抽象を構築してるから、検索ごとに1つのアクションしかできないんだ。私のやり方は、通常のtmuxの設定構文を使って、ハイライトされたファイルにアクションをバインドできるようにしてる。tmuxの組み込み検索を再利用してるからね。これらのプラグインは、コピー/ペーストをサポートするか、独自の「モード」を構築するものばかりで、tmuxは組み込み検索を使わないとハイライトの制御がほとんどできないのが注意点だよ。

ブログ全体が小文字だったのが思ったより気 distracting だった。

著者自身が大文字を使いたいという本能と戦っているのが面白いね。「この動画で何が起こるか」というリストの最初の2つの項目は大文字を使ってるし。

へぇ、面白いね。全然気づかなかったわ。

これはスタイルの選択で、時々人々がこだわることだね。ポーターロビンソン(DJ)も同じことをしてて、ちょっと贅沢に感じるんだよね。

Hacker Newsで議論の続きを見る