TL;DR
- AI駆動開発で Claude Code + Neovim + Obsidian に集約した結果、作業の重心がターミナルに寄った
- そうなると「画面に何を並べるか・どう畳むか」のコントロールが生産性の核になる
- AeroSpace × WezTerm × Neovim(+ブラウザの Vim 拡張)で全層のキー操作を揃え、自宅3画面と出張先 MacBook 1画面を同じ手で動かしている、という話
目次
1. ターミナルに戻ってきた経緯と、画面の使い方が変わった話
2. 全体アーキテクチャ:4層でキー操作を揃える
3. AeroSpace層:物理モニターに縛られないワークスペース
ワークスペースを役割で命名する
モニター数に応じた自動縮退
移動とレイアウト切替
4. WezTerm層:ターミナル内の「もう一つの仮想デスクトップ」
5. Neovim層:Claude Code と並走する軽量エディタ
Cursor を nvim で完全に置き換えにいく
6. Obsidian層:md の置き場と Claude Code の餌場
7. 統合シナリオ:自宅・ゲーム時・出張先
8. 公開している設定
9. まとめ
10. おわりに:あなたの環境も教えてほしい
1. ターミナルに戻ってきた経緯と、画面の使い方が変わった話
僕は Unyte で AI プロダクト開発をやっているフルリモートエンジニアです。自宅で3画面を広げて朝から晩まで書く日が多く、出張のときだけ MacBook 1枚で書く、というハイブリッドな環境で動いています。
もともとは Cursor を主軸にしていました。AI の提案がエディタ内で完結するのは便利で、しばらくは「これがゴールかも」と思っていたくらいです。転機は Cursor の中から Claude Code を呼ぶようになった頃。最初は補助のつもりだったのが、徐々に「指示を投げて、結果を読んで、また投げる」ループのほうが主役になっていって、気づくと役割分担が次のように変わっていました。
- AI への指示と結果の往復: Claude Code(ターミナル)
- コード編集: Neovim(ターミナル)
- ドキュメント・知識の置き場: Obsidian(md)
Cursor 本体に触るのは「git 差分のビューア」と「Markdown プレビュー」くらいで、AI はほぼ Claude Code しか使っていません。作業の重心がターミナルに寄った わけです。
このシフトが、画面の使い方を変えました。Cursor 時代は「エディタ1枚 + ブラウザ」で足りていたのが、いまは Claude Code に指示を投げる pane、実行ログを流す pane、コードを読む Neovim、設計メモの Obsidian、動作確認のブラウザ、を 同時に並べておきたい んですよね。3画面ある環境ならいかに広げるか、1画面しかない環境ならいかに畳むか。「画面のコントロール」が前より大事な変数 になりました。ここから、3層 + ブラウザの設計に入ります。
2. 全体アーキテクチャ:4層でキー操作を揃える
設計方針はシンプルで、全層で hjkl で隣に移動 / leader + 英字 でジャンプ を揃える こと。物理キーが同じだと、層を跨いでも頭の切り替えが要りません。
![]()
縦に4層、横に2軸。hjkl 系の列を上から下に、leader + 英字 系の列も同じく上から下に追えば、同じキー体系が全層を貫いている のが見える形です。エディタからブラウザに視線を移してもホームポジションが動かない、というのが日々の効きどころ。
順に見ていきます。
3. AeroSpace層:物理モニターに縛られないワークスペース
AeroSpace は macOS 用のタイル型ウィンドウマネージャです。設定は ~/.config/aerospace/aerospace.toml 一発。
ワークスペースを役割で命名する
1-6 / A-G / S-V の3グループに分けて、それぞれ物理モニターと役割を固定しています。
A-G(中央のワイドモニター) … メイン作業面。プロジェクトごとに ws を当てて、A がこのプロジェクト、B が別案件、と切り替える1-6(左の Mac 本体画面) … 補助情報。1 検索ブラウザ、2 Docker、3 メモリのモニタリング、4 Obsidian、と用途を固定S-V(右の縦置きモニター) … コミュニケーション系。Discord、Notion
「視線を動かしたら何があるか」が物理位置と一致しているので、alt-a 系を押せば「いまプロジェクトを切り替えた」、alt-1 系を押せば「いま補助情報を見にいった」と頭の中で対応がつきます。
モニター数に応じた自動縮退
[workspace-to-monitor-force-assignment]
1 = ['Built-in Retina Display', 'main']
A = ['Mi monitor', 'secondary', 'main']
S = ['QG241Y E', 'secondary', 'main']
# ...
[workspace-to-monitor-force-assignment]
1 = ['Built-in Retina Display', 'main']
A = ['Mi monitor', 'secondary', 'main']
S = ['QG241Y E', 'secondary', 'main']
# ...
ポイントは右辺が 配列 なこと。最初に書いたモニター名が見つからなければ次、それも無ければさらに次、と順に試されます。同じ設定ファイルで、
- 3画面(通常の開発時):
1-6 は左の Mac 本体画面、A-G は中央、S-V は右 - 2画面(ゲーム中): 中央のワイドモニターをゲーム機側の入力に切り替えると、AeroSpace から見えるモニターが2台に減る。
A-G は次の候補で右の縦置きモニターに流れて、左右2画面に集約される - 1画面(出張先で MacBook のみ): 全部 Mac 本体画面に集約
と、物理環境に追従して 自動で縮退 します。以前は setup-workspaces.sh というシェルスクリプトでループ実行していたんですが、TOML で宣言的に書ける機能が入ったので捨てました。動的にやるより並べておくほうが事故が起きません。
移動とレイアウト切替
操作は完全に vim 寄り。
alt-h/j/k/l = 'focus left/down/up/right'
alt-shift-h/j/k/l = 'move ...' # ウィンドウごと運ぶ
alt-1 / alt-a = 'workspace 1 / A' # 数字も英字もワークスペース移動
alt-h/j/k/l = 'focus left/down/up/right'
alt-shift-h/j/k/l = 'move ...' # ウィンドウごと運ぶ
alt-1 / alt-a = 'workspace 1 / A' # 数字も英字もワークスペース移動
そして個人的にいちばん使うのが レイアウトの即時切替。
alt-slash = 'layout tiles horizontal vertical'
alt-comma = 'layout accordion horizontal vertical'
alt-slash = 'layout tiles horizontal vertical'
alt-comma = 'layout accordion horizontal vertical'
alt-/ でタイル(横並び ↔ 縦並びをトグル)alt-, でアコーディオン(複数ウィンドウを重ねて1枚ずつ前面に出す)
コードを左右で読み比べたい時はタイル、長文ドキュメントに集中したい時はアコーディオンで1枚を大きく、というように 「並べる」と「重ねる」を一発で切り替えられる。1画面しかない時にこそ効きます。

4. WezTerm層:ターミナル内の「もう一つの仮想デスクトップ」
WezTerm は GPU アクセラレートで Lua で設定できるターミナルエミュレータです。~/.config/wezterm/wezterm.lua と keybinds.lua の2ファイル構成。
以前は macOS 標準の Terminal.app を使っていたんですが、AI とのループ作業で並列に走らせたい pane / workspace / tab が増えてきて、もう少しちゃんとした道具に乗り換えました。WezTerm を選んだのは、pane 分割 / workspace / tab が 標準機能で揃っている(tmux のような中間レイヤーを挟まずに済む)、設定が Lua で書ける、GPU レンダリングで描画が軽い、あたりが噛み合ったから。レイヤーが減ると思考が減ります。
leader は Ctrl + q。誤爆を避ける位置に置きました。重要なのは2点です。
workspace でターミナル内に「仮想デスクトップ」を持つ
WezTerm には workspace の概念があって、1つのターミナルウィンドウの中に独立した作業空間を持てます。leader + w で一覧、leader + W で新規作成、leader + $ で名前変更。プロジェクトごとに workspace を切ると、同じウィンドウ内で複数案件が並列に走る。OS 層の AeroSpace workspace とターミナル層の WezTerm workspace で、二段の仮想デスクトップ を持っているわけです。
pane と copy_mode を vim 寄りに
pane 分割は leader + r/d で縦横、移動は leader + h/j/k/l。AeroSpace と同じ手の動きです。copy_mode も w, b, e, f, t のジャンプ、v, V, Ctrl-v の選択モードを vim 寄りに揃えていて、コピーするためにマウスへ手を伸ばさない状態を作っています。
5. Neovim層:Claude Code と並走する軽量エディタ
~/.config/nvim/init.lua はわずか2行。
require("junya.core")
require("junya.lazy")
junya/core/ に options と keymaps、junya/lazy.lua で lazy.nvim をブート、junya/plugins/ 以下にプラグイン1つ1ファイル、という構成です。プラグインは現状44個。telescope / which-key / flash / treesitter / nvim-cmp / conform / trouble / nvim-tree / lazygit と定番を一通り入れています。
主張に直結するのは auto-session で、nvim path/to/project で開けば前回のバッファ・ウィンドウ配置がそのまま戻ってくる。「画面が変わった」という事実をエディタの中で意識せずに済む のが、画面数の変動に対する保険として効いています。
Cursor を nvim で完全に置き換えにいく
冒頭で書いたとおり、Cursor を完全に手放せていない理由は「git 差分」と「Markdown プレビュー」の2つだけです。git 差分は lazygit.nvim でだいぶ寄せられていて、コミット粒度の操作はこちらのほうが速い。Markdown プレビューは markdown-preview.nvim 系や render-markdown.nvim で埋まる余地がある。ここを潰し切れたら nvim 完結になります。今ちょうどその移行の最中、というのが正直なところ。
6. Obsidian層:md の置き場と Claude Code の餌場
最後は Obsidian。これだけは GUI アプリで、ターミナルの外にあります。それでも僕の運用では主役の一角です。
vault は、
- 知識系のまとめ(技術メモ、調べ物の結論、設計の意思決定ログ)
- マルチデバイス参照: NAS 経由で iPhone / iPad と同期して移動中に読む
- アイデア出し: スクラッチ用のノート
として使っています。重要なのは、vault の中身は素の Markdown ファイルの集合 ということ。つまり Claude Code から普通に Read / Edit / Grep できます。
これがなぜ大事かと言うと、Obsidian を整理すればするほど、Claude Code に渡せる「自分専用の情報源」が育っていく から。過去の設計判断、自分の口癖や好みをまとめた CLAUDE.md、未整理のアイデア、仕事の進め方の指針、すべて vault に置いてあって、Claude Code がディレクトリ構造ごと参照できる。Obsidian は md ビューアであり、同時に Claude Code の餌場でもある。整理すればするほど AI が賢く動く、というインセンティブが効きます。これがドキュメントツールを Notion ではなく Obsidian にしている一番の理由です。

7. 統合シナリオ:自宅・ゲーム時・出張先
僕は1日のうちで作業場所をコロコロ変えるタイプではなく、自宅で3画面を広げて朝から晩まで、が定常運転です。それでも出張で MacBook 1枚になる日が月に何度かある。その「何度か」のために脳内のキーマップを別系統で持ちたくない ので、両方を同じ操作体系で回せるようにしてあります。
自宅・3画面(ふだん)
- 中央・ワイドモニター(ws
A-G): メイン作業面。A のプロジェクト、B の別案件、と alt-a, alt-b で切り替える - 左・Mac 本体画面(ws
1-6): 補助情報。1 検索ブラウザ、2 Docker、3 モニタリング、4 Obsidian - 右・縦置きモニター(ws
S-V): Discord、Notion
alt-a/b/... でプロジェクト、alt-1/2/... で補助、alt-s/t/... でコミュニケーション。レイアウトはタイル基本、長文を読むときだけ alt-, でアコーディオンに切り替えて1枚を大きく。
夜・ゲーム前後(左右2画面)
中央のワイドモニターをゲーム機側に切り替えると、AeroSpace から見えるモニターが2台に減って、メイン作業面の A-G が右の縦置きモニターにフォールバックします。もともと右に居た S-V と同居する形になり、右モニター上で alt-a ↔ alt-s で切り替えながら作業。左の補助情報(1-6)はそのまま動きます。キーバインドは何も変えずに、開発を続けるかゲームを始めるかを切り替えられる。
出張先・MacBook 1画面
外部モニターを抜くと AeroSpace が自動でフォールバック。A も S も Mac 本体画面に流れてきて、「画面切替」が「ワークスペース切替」に置き換わるだけで alt-1, alt-a, alt-s のキー操作はそのまま使えます。Neovim は auto-session で前のレイアウトのまま開くし、WezTerm workspace も生きているので、プロジェクト単位の作業空間が維持されます。
操作のキーバインドは1つも変わっていません。 物理環境だけが変わる。慣れてくると「どのワークスペースに何が入っているか」が頭の中の地図として定着して、3画面のほうが視線移動だけで済むぶん物理的には速いんですが、1画面に縮退しても 同じキーで同じ場所に飛べる ことは変わりません。画面数の差が単なる効率の差になって、作業の流れそのものを中断しなくなる。これが個人的にいちばん効いている実感です。
ちなみに、ここまで揃ってくると 開発中はほぼマウスを触らなくなりました。手元にマウスは置いていなくて、Magic Trackpad を macOS のジェスチャーが要るときにたまに使う程度。キーが手元から動かない設計の副次効果として、こういう変化が起きたのは個人的に面白いポイントでした。
![]()
8. 公開している設定
9. まとめ
設計の核は3つ。
- 全層(OS / ターミナル / エディタ / ブラウザ)で
hjkl と leader + 英字 を揃える - AeroSpace の 配列フォールバック で物理環境の揺れを吸収する
- WezTerm workspace と Neovim auto-session で 状態の連続性 を担保する
物理環境が揺らいでも、設計が揺らがなければ、手の動きは変わりません。地味ですが、ここが一番楽しいところだったりします。
10. おわりに:あなたの環境も教えてほしい
ここまで僕の環境を一通り並べてきましたが、こういう設計の話は 他のエンジニアの工夫を覗くのが一番楽しい んですよね。「うちはこうしてる」「この拡張入れると更に楽」「その層なら別ツールがある」など、何でも知りたいです。コメントでも X でも、気軽に投げてもらえるとうれしいです。
この記事を書いた背景として、Unyte ではいま AI プロダクト開発のエンジニアを募集中 です。AI と一緒に書く時間が長くなる中で、「設計と道具で生産性をどこまで押し上げられるか」を真面目に考えている人と働けるとうれしいので、興味があればぜひ以下からカジュアル面談を申し込んでいただきたいです。
記事は継続して書いていく予定です。手を動かして見つかった技術的な知見や、社内で開いている勉強会で扱ったトピックを順に出していきます。