はじめに
こんにちは、エンジニアリングマネージャーの本田です。
今回は、2025年現在のモダンな開発用ターミナル環境のためのツールを紹介します。
想定読者は、イカしたターミナル環境で開発を行いたいエンジニアです。
操作をなるべくキーボードだけで完結させたいと考えている人には向いているかもしれません。
かっこいいターミナル環境はロマンですが、ただ単に見た目にこだわるというよりは、機能性や使い勝手を重視してカスタマイズした結果、見た目がかっこよくなってしまうのが理想です。
この記事には、筆者の価値観や好みが反映されている部分が多々あります。
そのため、読者の方が自分に合ったツールを見つけるための参考程度に読んでいただければ幸いです。
ターミナル環境
筆者のターミナル環境は Alacritty + tmux です。
バージョンを上げたり、設定をアップデートしたりしてますが、5年以上この構成で使っています(モダンとは... 🤔 )。
Alacritty
ターミナルに多くのことは求めません。速さとシンプルさが重要です。
そのため、筆者は Alacritty を使用しています。
ALacritty は GPU でレンダリングを行うRust製のターミナルエミュレータです。
GPU でレンダリングを行うことで高速な描画を強みとしています。
また、設定ファイルは Toml で記述することができ、設定が容易です。
MacOS, Windows, Linux 全てのOSに対応しているところも魅力です。
最近登場した ghostty も注目しており試してみたのですが、キーバインド周りの設定が思い通りにいかず、今の所移行には至っておりません。
tmux
tmux はターミナルマルチプレクサです。
ターミナルを分割して複数のウィンドウを開くことができたり、セッションを保存して再開することができます。
最近はターミナルエミュレータが高機能化してきているためターミナルマルチプレクサを使わない人も増えているかもしれませんが、リモートサーバー上で開発作業を行う機会が多かったり、複数の環境で開発環境を構築することもあるため、ターミナルエミュレータとターミナルマルチプレクサを責務を分けて使うことで開発環境のポータビリティを高め、より柔軟に開発環境を構築することができます。
ちなみにこの技術ブログ過去記事でtmux布教を目指したものがあったので関連事項として貼っておきます。
フォント
PlemolJP
Nerd Font に対応した日本語フォントです。
筆者は日本語フォントとしてPlemolJP Console NF
を使用しています。
Nerd Font に対応している等幅の日本語フォントであれば好みのものを使えばいいと思います。私はイタリック体が気に入ったのでこれを使っています。
コマンドラインツール
homebrew
お馴染みのパッケージマネージャーです。
MacOS であればほぼ全員使っていると思いますが、Linuxでも使えるので最新バージョンのパッケージをインストールしたい場合はLinuxでも homebrew を使うと便利です。
fzf
お馴染みGo製のあいまい検索インターフェースです。
fzf は様々なコマンドラインツールと組み合わせて使うことができ、検索結果をリアルタイムで絞り込むことができます。
ripgrep
お馴染みRust製の高速grepです。
grep や ag などの検索ツールよりも高速で、デフォルトで.gitignore
を無視するなどの便利な機能があります。
ghq
Go製のリポジトリ管理ツールです。
ghq get ${repository_url}
コマンドで管理下にリポジトリをクローンすることができます。fzfと組み合わせることでプロジェクトの切り替えを簡単に行うことができます。
lazygit
ターミナル上で動作するGo製のGitクライアントです。
ターミナル上でリッチなUIでGitの操作を行うことができます。行単位でのコミットも簡単にできたり、deltaと組み合わせて差分を見やすく表示するといったことも可能です。
starship
Rust製の軽量で高速なプロンプトです。
デフォルトでGitのブランチ名やNodeのバージョンなどの欲しい情報を表示してくれます。
自分で設定するのが面倒な人にはおすすめです。
mise
Rust製の開発ツールのバージョン管理ツールです。
asdfを使っていましたが、高速であることやコマンドの使いやすさを理由に乗り換えました。
mise use --global node@22
シェル
fish
fish はシンプルで使いやすいシェルです。
デフォルトの補完機能が強力で、設定をあまりいじらなくても快適に使うことができます。
個人的にはシェルスクリプトはあまり書きたくないので、設定をなるべく書かずにそこそこ使いやすいシェルであることが重要です。
bash互換ではないので、あくまでtmuxのデフォルトシェルとして使っています。
最近のツールはfish用のコマンド例を記載してくれているドキュメントが多いのでほとんど困りませんが、どうしてもbashを実行したいときは、bashコマンドで実行します。
おすすめのfishプラグインは以下です。
- jethrokuan/fzf: ctrl-rでコマンドの履歴検索できるようにします。
- decors/fish-ghq: ctrl-gでghqのリポジトリを検索&移動できるようにします。
エディタ
Neovim
Neovim は最高です。
プラグインの開発も盛んで、自分の好みに合わせてカスタマイズすることができます。
なるべくキーボードだけで操作を完結したい人はいますぐ Neovim を使い始めましょう(もちろんマウスでの操作も可能です)。
基本的には操作は体で覚えることが前提のエディタなので最初は大変かもしれませんが、自転車に乗れる時のように一度覚えてしまえば自然に操作できるようなり、他のエディタでは考えられないスピードでテキスト編集することができます。
また、設定ファイルはプログラミング言語なので、設定ファイルを書くこと自体が楽しいです。
プラグインに関しては下で紹介していきます。
以前はAstroNvimやNvChadを使っていましたが、必要な設定を最小限にして速度を担保したいので最近は自分で設定ファイルを書くようにしています。
余談ですが、筆者はBIM機能の開発チームを担当しているので、エンジニアから「ビムについて聞きたいことがあるのですが」と口頭で話しかけられた時は「どっちのビムですか?」と確認しておかないと混乱してしまうことが稀によくあります。
Neovimのおすすめ汎用プラグイン
folke/lazy.nvim
プラグインの遅延読み込みを行うプラグインです。
Neovimの起動時間を短縮することに貢献してくれます。
stevearc/oil.nvim
Neovim上で使える File Explorer です。
vim操作でファイル操作を行うことができます。
最初はどんなものかと思い使い始めましたが、使ってみるとVimmerにとってはかなり直感的で使いやすく、すぐにnvim-treeから乗り換えました。
nvim-telescope/telescope.nvim
Neovim上で使えるあいまい検索インターフェースです。
fzfのように検索結果をリアルタイムで絞り込むことができます。
プレビュー機能も便利。
sphamba/smear-cursor.nvim
カーソルを移動させる際に、カーソル軌道の残像を表示してくれるプラグインです。
最初はかっこよさだけで入れてみたのですが、移動後のカーソル位置が瞬時にわかるので実用性のあるツールとして重宝しています。
nvim-lualine/lualine.nvim
Neovimのstatuslineをカスタマイズするプラグインです。
動作が軽快で、カスタマイズが容易です。
shellRaining/hlchunk.nvim
Neovim上で使えるブロックのハイライトプラグインです。
今のカーソル位置のブロックをハイライトしてくれるので、ブロックの対応を見つけやすくなります。
アニメーションも気に入っています。
b0o/incline.nvim
window上にファイル名を表示するために使っています。
Neovim上で画面分割した際に、どのwindowがどのファイルなのかがわかりやすくなります。
folke/noice.nvim
Neovimのメッセージやcmdlineをポップアップで表示するために使っています。
cmdlineを非表示にしてエディタの画面を最大限に使えます。
また、メッセージの履歴も表示できるので、エラーメッセージなどの確認がしやすくなります。
MeanderingProgrammer/render-markdown.nvim
Neovim上でMarkdownをプレビューするために使っています。
WYSIWYGエディタのような体験ができるので、Markdownの編集が捗ります。
folke/which-key.nvim
キーバインドを画面上でガイドしてくれるやつです。
キーバインドを全部覚えてない間は特に便利。
pwntester/octo.nvim
Neovim上でGitHubの操作をするために使っています。
使用するにはghコマンドのインストールが必須です。
folke/snacks.nvim
Neovimでかゆいところに手が届く使い勝手を向上させるためのプラグインです。
今のところは、dashboard, lazygitなどでお世話になっています。
EdenEast/nightfox.nvim
カラーテーマは好みや各人の環境に合わせれば良いと思いますが、選ぶ際はTelescopeなどの有名プラグインに対応していることが重要です。
Neovimのおすすめプログラミング系プラグイン
neovim/nvim-lspconfig
LSPクライアントです。LSPに対応したプラグインを使う際には必須です。
以前はmasonでlanguage serverをインストールしていたのですが、実行コマンドの参照先が異なることによるトラブルを避けるため、今はmasonは使っていません。
nvim-treesitter/nvim-treesitter
コードを適切にハイライトしてくれるので、コードの可読性が向上します。 必須です。
nvim-treesitter/nvim-treesitter-context
カーソル位置のコードのコンテキストを表示してくれるプラグインです。
長いコードを読む時や、限られたスペースでエディタを表示している時にコードの文脈が把握しやすくなり便利です。
stevearc/conform.nvim
コードのフォーマット設定を行うプラグインです。
lspconfigだけで物足りない時に使います。
jsやtsはprettierよりもbiomeを使いたいので、お世話になっています。
lewis6991/gitsigns.nvim
Gitの差分やblameを表示してくれるプラグインです。
hrsh7th/nvim-cmp
補完プラグインです。LSPに対応していたり、補完ソースを簡単にカスタマイズできるので便利です。
- L3MON4D3/LuaSnipと組み合わせてスニペットの補完を出したりもしています。
- onsails/lspkind.nvimと組み合わせることで補完候補の種類をアイコンで表示したりできます。
windwp/nvim-autopairs
括弧など開始の文字列に対応する終了の文字列の自動補完を行ってくれるプラグインです。
folke/trouble.nvim
LSPのエラーや警告を一覧したり、コードジャンプしたりするのに便利なプラグインです。
rachartier/tiny-inline-diagnostic.nvim
エラーや警告を行の横に表示してくれるプラグインです。
デフォルトだとメッセージが見切れてしまうことが多発しますが、エラーの内容を折り返してコード内に表示できるのでメッセージをちゃんと読みたい時に便利です。
ray-x/lsp_signature.nvim
関数やメソッドのシグネチャを入力中に表示してくれるプラグインです。
引数の名前や型を確認しながらコードを書くことができて便利です。
j-hui/fidget.nvim
NeovimのメッセージやLSPのローディングをいい感じに表示してくれるプラグインです。
language server は基本的に遅延読み込みを行っているので、ローディング中に何も表示されないと不安になることがありますが、ローディング中でも何か表示されていると安心できます。
zbirenbaum/copilot.lua
CopilotによるAIコード補完を行うプラグインです。
yetone/avante.nvimなどでチャットも利用していますが、昨今のAIによるコーディング支援はCursorやRoo CodeなどAIエージェントが出てきており、Neovimは今一歩遅れている感じがしています。
ただ、必ずNeovimでも似たようなプラグインが出てくると思うので、ウォッチしておきたいと思います。
さいごに
本記事では、筆者のターミナル環境とNeovimのプラグインを紹介しました。
自分にとって何がベストか試行錯誤しながら探してみるのがいいと思います。
この記事が、読者の皆様にとって最高の開発環境を構築するための一助となれば幸いです。
それでは、よいターミナルライフを!
スパイダープラスではVimmer仲間を募集中です。
スパイダープラスにちょっと興味が出てきたなという方がいらっしゃったらお気軽にご連絡ください。