この記事はUzabase Advent Calendar 2025の9日目の記事です。
はじめに
私はUzabaseに2022年6月に入社して以来、常時ペアプログラミングの環境で開発を行ってきました。
そのような環境でVimキーバインドを使って感じたことや考えていることは他の人がみたら面白いのでは?と思い書いてみます。
前提: ざっくりこんな環境で開発をしています。
エクストリームプログラミングを実践している弊社の大きな特徴を共有します。
- 常時ペアプログラミング/TDDを実施している
- ユーザーストーリーを実現するために必要な開発は全て行うため、インフラ(k8s,Docker) ~ バックエンド ~ フロントエンドまで触る
- ペアプロではコンテキストの偏りが生まれないよう定期的にペアを交代する
- マイクロサービスアーキテクチャ
- チームごとに開発に使用する言語などを決める
- 開発に使うtoolとして、IntellijIDEA,VSCode/Cursor,Claude,GeminiCLI...など
他にも面白いところはありますが、一旦今回大きく関係があるのはこのくらいかなと思います。
なんか言葉にするとすごいことをやっていそうですが、実際はそれぞれ強みを持ったエンジニアの力を活かし合いながらできる限り小さく開発を進めています。
前提2: Vimの特徴
Vim自体については素晴らしい記事がたくさんあるので、ぜひそちらを見てください。
例えばこちらが簡潔でわかりやすいのでぜひご覧ください。
もしくは自分のterminalでvimtutorと打てばサクッとVimを体感することができます。
開くのが面倒な方のための雑な共有
- テキストエディットに特化している
- モーダルがある
- キーバインドが豊富でキーボードから手を離さなくていい。指の移動距離を最短にする。
- プラグインで拡張が容易である
そもそも私がどこでVimを使うか
- terminal(tmux)
- Cursor
- IntellijIDEA
Vimを起動するシーンは1ファイルを純粋に編集したい時にシュッと使うことが多いです。
開発に入る前にライブラリのバージョンアップをよくやるのですが、その際はできるだけterminalから出たくないのでよく使います。
必然とpackage.jsonを修正したり、pom.xmlを編集したり、.zshrc、YAMLなどの設定ファイルを修正したいときに書くことが多いです。
それ以外の場合は、tmuxやIntelijIdea、CursorにVimキーバインドを設定して使っています。
特にtmuxのCopyModeをVi Likeに使えるのはとても便利でお気に入りの機能です。
今回の記事ではこれらのVimエミュレータを使うときもVimを使うと表現させてください。
Pluginを使いたくなったらプライベートでNeovimを使うというのが私のtoolの棲み分けです。
私のVim Philosophy
- プラグインを使わない
- 特化したtoolと組み合わせる
プラグインを使わない
プラグインを使わない一番大きな理由は、35年以上続くプロダクトの洗練されたVimによって大体の課題は解決されているという理由からです。
(プラグインを入れてカスタマイズをするのは好きですしその拡張性がVimの大きな魅力の一つだと思っています。)
体感としても、Vimでは自分が不便だと思うことは35年以上の歴史の中で改善されています。
大体はツールを自分が使いこなしていないだけか解決したい課題が違うことが多いです。
標準キーバインドを使いこなすだけでVimを使っている恩恵は十分享受していると感じます。
ただ、Vimのキーバインドは基本的にオペレーターとモーションの組み合わせで成り立っていてわかりやすいとはいえ、そこの基本を知る前に離脱してしまう人が大多数だと周りを見ていて感じます。
常時ペアプログラミングを実践するさいにVimキーバインドを好きになってもらうためには、俺の最強のVimよりももとより最高なVimの方がとっつきやすいだろうと考えているので、プラグインを使わないことは、私の普段の開発環境からするとメリットが大きく、そこは運が良かったと思います。
特化したtool/ソリューションと組み合わせる
shell芸とか言われたりしますが、シンプルなコマンドを組み合わせて操作するのかっこいいし気持ち良くないですか?というのに共感してもらえる前提で書きます。笑
Vimもテキスト編集に特化しています。ただ、標準ではあくまでbufferに載せたファイル群のみに対してであって、よりスコープを絞ると1ファイルの編集に特化していると表現するのが適切だと思います。
その1ファイルの編集に特化しているVimをどう活かしているかを簡単に紹介します。
tmuxとVim
tmuxではcopy-modeというterminalをテキストlikeに操作して任意の文字列を検索したりコピーしたりできる機能があります。
ここでcopy-modeをviキーバインドに設定するとvimライクな操作でterminalの操作ができます。
tmuxのsession上でテストを実行すると純粋にterminalから画面をsplitしてアプリケーションのログを見ながら動作確認できたり、cursorのterminalからattachしてエラーの情報をAIに読ませることができるのでとてもおすすめです。
TDDとVim
TDDをやっていると往々にしてテストと実行を行ったりきたりしたり、似たようなテストを書くケースがあります。感覚としては仕様をテストとして書いてレッドにして、とりあえず通すとこのみが新規で、その後リファクタリングで編集したりテストを追加する編集が8割程度の体感です。
この8割の時間に特化しているのがVimのモーダルです。
CursorとVim
最近ではNeovim拡張を使っている方が多いと思いますが、私はVSCodeVimを使っています。
理由としては単純に相手のマシンでペアプロをするときにNeovimが入っていなくても動くことと、VSCodeVimのカバーしている機能群でも十分に感じているからです。
また、CodingAgentがバンバンコードを書いてくるようになったので、Vimのnormalモードで読んだりテキストブロックの編集が得意なVimとの相性は抜群だと個人的には感じています。
もちろんVimでもPluginをいれてカスタマイズすればCursorと似たような体験を作ることはできますが、それであればチームでメインで使っているエディターの機能を活かしつつVimキーバインドを使うスタンスです。
特に常時ペアプロをしていると.vimrcやinit.luaをいじる時間は(あんまり)ありません。純粋に時間的都合もあり今はこれが最適解だと感じていますし、自分の好きなものを使いつつCursorの進化もキャッチアップしなければいけない環境に身をおけるので気に入っています。
~/.vimrcを読ませることができるので設定はvimと同じ設定だけ噛ませています。
IntellijIDEAとVim
弊社ではIntellijIDEAをとくにE2Eを書くのに使用しています。
CursorとIntellijの両方のキーバインドを覚えなければいけないです。単純にこれを解消したく、ideaVimでキーバインドを設定しています。
~/.ideavimrcを読ませることができるので設定は~/.vimrcのシンボリックリンクを貼っています。
IntellijClasicのキーバインドを使用することでVimのキーバインドとほぼ競合せずに使えるのでとてもおすすめです。
とにかく迷わない/脳のスイッチの負荷が減る/キーボードから手が離れない!
Vimのキーバインドを覚えるだけで、Vimだけじゃなくあらゆるエディタの開発体験をそれぞれのツールの良さを活かしつつ寄せることができます。
慣れると本当にキーボードから手が離れません。
脳のリソースを節約して本当に向き合いたい課題と向き合うことができる + かっこいいVimキーバインドをあなたも試してみるのはいかがでしょうか?
おまけ: 一緒にペアプロをしたメンバーからの声
1日だけやってみた人(vim経験なし)
Aさん
プロが隣にいないとハードルが高そう
楽な方に人は流れる
正味一人だと使う範囲が狭まる
マウス極力使わないとやってもついつい手が伸びるし固まったときのリカバリがめんどくさい(すぐ正解がほしい)
癖の矯正が必要、ペアプロはそういう意味で相性が良い
プログラミングに対して違うベクトルでの楽しさを与えられる
思想は面白いし共感はする
基本readベースになってるとか
結局覚えるまでが辛い
マウスでできちゃう分なおさら
後でpayできるまでの速度を出すまではめちゃくちゃ遅くなるイメージ
1ヶ月弱やってみた人(vim経験なし)
Bさん
よいところ
慣れるとマウスや矢印キーを使う場合よりも、操作速度はかなり速くなりそうな感覚はある
コードリーディングの場合は、今の時点で、速く操作することができているし、マウス使っているときよりも速い感覚がある
強い人になっている気になれそう
うーんなところ
マウスと比べて操作速度がかなり速くなるまでに、かなりの時間は要しそう
編集の場合は、操作に詰まりやすい感覚がある
インサートモードでbackspace使うや、矢印キー使う、みたいなハイブリッドな状態だとなんかあんまり良くない気がしている
ペアプロをする場合、チームメンバーのモチベは揃える必要はありそう
操作が速い人がペアだと、手を止めてしまいがち
入社して1ヶ月ペアプロして違うチームになり、8ヶ月後くらいにまたペアプロしている人
脳みそがvimになってvimを失った時に困る
"正しさ"を感じる
vimなしは雰囲気で書けるけどvimで書くとレールに乗ってる感覚がある
山越えるまでが大変でvim便利だな〜って思うまでに時間と労力がかかるが、
そこからは新しいコマンドを学ぶはちょっとずつでいいので快適
全員Vimのチームをやってた時に半年間一緒に開発した人(元々Vimmer)
ポジ
文字長とかに依存しないので、編集速度のムラが減って思考のリズムを妨げない感じがする
個人的には編集以上にジャンプが便利
ネガ
チーム状況でVim失ったときちょっとつらい
E2Eとかの編集作業に近いものは特につらい
Clojure書くときはCalva覚える方が速度のポテンシャル高い
p.s
ギリギリに書きすぎて全然読み返せていません。ご指摘等あればビジバシお願いします。直します。