Windows PCでのLinux（WSL）開発環境のおすすめセットアップ

# はじめに

筆者は新人プログラマさんに対して，Windows PC上でのLinux開発環境の構築をサポートする機会がよくあります．その際，最初に最低限の環境だけを整えた結果，しばらくの間，あまり快適とは言えない環境で開発やプログラミングを続けている様子をよく見かけます．

この記事では，新人プログラマさんが快適に，そして楽しく開発に取り組めるよう，おすすめの開発環境セットアップについてまとめていこうと思います．

## 前提の環境

今回まとめる開発環境はWindows Subsystem for Linux（WSL）を前提としています．使用するディストリビューションはDebianです．ただし，WSL以外の環境（例：VMware上のLinux）や，Debian以外のディストリビューションでも参考になる内容が多いと思います．

この記事を書いている時点での筆者の環境は以下の通りです．

- ホストOS
  Windows 11 Pro（24H2）
- WSL
  - WSL バージョン: 2.3.26.0
  - カーネル バージョン: 5.15.167.4-1
  - WSLg バージョン: 1.0.65
- WSLディストリビューション
  Debian 12 bookworm

# 開発環境のおすすめポイント

今回ご紹介する開発環境のポイントは以下の通りです：

- 見た目がかっこいい／かわいい
- 入力補完やサジェストがしっかり効く
- キーボード操作で使いやすい

筆者は比較的「形から入る」タイプなので，見た目の良さはとても重要だと感じています．地味な環境で開発していても楽しくないですよね？
また，見づらい配色のターミナルを使うのは，作業効率にも悪影響を与えます．まずは見た目にこだわるところから始めていきましょう．

次に，ターミナルやエディタでは多くの文字を入力することになりますが，補完やサジェストが弱いと特に新人の方には厳しいです．楽しくコードやコマンドが入力できるよう，補完機能も重視していきます．

さらに，表示の切り替えや出力のコピー・ペーストなども，できるだけキーボードだけで操作できるようにすると，作業効率が格段に上がります．この点についても工夫していきます．

# ターミナルエミュレータ

WSLの環境を操作するには，ターミナルエミュレータが必要です．候補としては以下のようなものがあります：

- [Windows Terminal（標準）](https://github.com/microsoft/terminal)
- [Hyper](https://github.com/vercel/hyper)
- [Tabby](https://github.com/Eugeny/tabby)

標準のWindows Terminalでも十分使いやすいと思います．筆者自身もWindows Terminalを使っていて，大きな不満はありません．

他の二つ（HyperとTabby）については筆者は使用していませんが，どちらもモダンなデザインでWSLにも対応しており，カスタマイズ性も高いようです．気になる方はぜひ調べてみてください．

:::note info
筆者はこれらのターミナルエミュレータの操作（例えば画面分割やキーボード操作からのテキストの選択やコピー＆ペーストなど）はそれほど使いこなしていません．これは後述の[Tmux（端末多重化ツール）](#tmux端末多重化ツール)を使用しているためです．ぜひそちらも参考に確認してください．
:::

## カラーテーマ

Windows Terminalのカラーテーマは，標準でもいくつか用意されていますが，以下のサイトからさらに多くのテーマを簡単に導入できます．お気に入りのテーマが見つかるかもしれません．

[Windows Terminal Themes](https://windowsterminalthemes.dev)

筆者はAyu Mirageを使用しています．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/801a98ec-23d1-4b69-88df-194403166724.png)

## フォント

フォントにもこだわると，見やすさや気分が大きく変わります．筆者はWindows Terminalに付属しているCascadia Monoを気に入ってそのまま使用しています．

後述しますが，エディタにはリガチャ対応版のCascadia Codeを使用しています．さらに，Cascadia Code（Mono）はNerd Fonts（開発者向けのアイコンや記号を含んだフォント）にも対応しています．

[GitHub - Cascadia Code](https://github.com/microsoft/cascadia-code)

# シェル（Shell）

ターミナル環境が整ったら，次はシェルを便利に使えるようセットアップしていきましょう．Linuxで使えるシェルとしては，次のような選択肢があります．

- [Bash](https://www.gnu.org/software/bash/)
  多くのLinuxディストリビューションでデフォルトのシェルとして採用されています．  
- [Z Shell（Zsh）](https://www.zsh.org)
  高機能な補完やカスタマイズ性に優れています．  
- [Fish Shell](https://fishshell.com)
  初期設定のままで補完機能がとても強力に動作します．  

Bashはもっとも一般的なシェルですが，補完機能の使いやすさを考えるとZshの方がおすすめです．筆者もZshを使用しています．ただし，便利に使うにはある程度のカスタマイズが必要です．

一方，Fishは初期状態でも強力な補完が使えて手軽ですが，BashやZshとのスクリプト互換性が低い点には注意が必要です．たとえば，Bash用に書かれたスクリプトはZshでもそのまま動くことが多いですが，Fishではエラーになることがよくあります．

ここでは筆者も使用しているZshについて紹介します．

## Zshのカスタマイズ

前述のとおり，Zshは補完機能が強力でとても便利ですが，そのためにはある程度のカスタマイズが必要です．

Zshを手軽にカスタマイズするには，[Oh My Zsh](https://ohmyz.sh)を導入するのがおすすめです．Oh My ZshはZshの設定を管理するフレームワークで，インストールするだけで補完機能が扱いやすくなり，Tabキーで候補を選択できるようになります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/ceede9e9-ff5a-4805-ac79-5cf9e3ec4b43.png)

また，Oh My Zshをインストールするとプロンプトのデザインも変更されます．デフォルトでは「robbyrussell」というテーマが使われますが，他にも多くのテーマが用意されているので，好みに合わせて選ぶと良いでしょう．

[Oh My Zsh - Themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)

さらに，Oh My Zshにはプラグインを追加でインストールすることができ，Zshをさらに便利に使えるようになります．ここでは筆者が実際に使っているおすすめプラグインをいくつか紹介します．

### zsh-autosuggestions

[GitHub - zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)
過去のコマンド履歴から入力中のコマンドを自動サジェストしてくれます．インクリメンタルサーチのように，入力に応じて直近の一致するコマンドが即座に表示されて非常に便利です．最後まで入力しなくても，サジェストされたコマンドをそのまま実行できます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/8fb25cfa-26ba-4144-bf95-6bc5d0472bea.png)

### zaw（zsh anything.el-like widget）

[GitHub - zaw](https://github.com/zsh-users/zaw)
過去のコマンド履歴をインクリメンタルサーチで絞り込み・実行できます．zsh-autosuggestionsとは異なり，入力がコマンドの先頭と一致していなくても検索対象として候補に表示されます．よく使うディレクトリへの移動にも使えて便利です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/0d057b40-b659-4955-9823-7888e9bf48aa.png)

### zsh-syntax-highlighting

[GitHub - zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting)
コマンド入力にシンタックスハイライトを効かせることができます．コマンド名を間違って入力した場合なども，色で間違いに気づけるため安心です．

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/e3cb6dbd-0aab-4124-9e75-880d37c14c6d.png)

:::note info
こういった拡張機能やテーマを使うことで，作業効率が大幅に向上し，ターミナル作業が楽しくなります．Zshは多少の手間をかけてでも，快適な操作性を得たい人にとって非常におすすめのシェルです．
:::

## Starshipによるプロンプトのカスタマイズ

シェルのプロンプトをより見やすく機能的にしたい場合は，[Starship](https://starship.rs/ja-JP/)というツールの導入がおすすめです．StarshipはRustで実装された超高速かつクロスシェル対応のプロンプトツールで，Zsh，Fish，Bash，Cmder（Clink），PowerShellなど多くのシェルで動作します．

筆者はWindowsでは[Cmder](https://cmder.app)を使っていますが，Starshipを入れているおかげで，LinuxのZshと同じプロンプトになっていてとても快適です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/12ba40ea-a384-429a-a757-9b2e9ab22226.png)

Starship の主な特徴は以下の通りです：

- 高速起動：Rust製ならではの起動速度で，重くなりがちなプロンプト表示を軽快に
- 豊富な情報表示：Gitのブランチやステータス，現在のディレクトリ，実行中の仮想環境（Python，Node.jsなど）など，多彩な情報を表示可能
- 統一された見た目：どのシェルでも同じ見た目で使えるため，複数環境で作業する人に便利
- 簡単な設定：設定ファイル（~/.config/starship.toml）で柔軟かつ直感的にカスタマイズできる
- アイコンや色の表示：絵文字や記号，カラフルな配色で視認性が非常に高い

導入も簡単で，インストールしたあとシェルの初期化ファイルに1行追記するだけで使い始められます．

Starshipを使えば，見た目も整ったプロンプトで作業効率が上がるだけでなく，ちょっとしたモチベーションアップにもつながります．

# Tmux（端末多重化ツール）

ターミナルとシェルの環境を整えたら，次にぜひ導入しておきたいのが Tmux（Terminal Multiplexer） です．個人的には，これは「標準で使うべきツール」だと考えています．特にサーバー作業やリモート開発を行う人には，もはや必須と言っても過言ではありません．

Tmuxを使うと，ひとつのターミナルウィンドウの中で複数のセッションやウィンドウ，ペイン（分割画面）を管理することができます．たとえば以下のようなことが可能になります：

- ターミナルを縦や横に分割して，複数の作業を同時に並行して進める
- リモート接続中に接続が切れても，セッションを保持して作業を再開できる
- 特定の作業環境をセッションとして保存し，再ログイン後もそのまま作業に戻れる

これらの機能により，作業効率が大きく向上します．また，ZshやFishと組み合わせることで，より快適なターミナル作業環境を構築できます．

## Tmuxの基本的な操作

Tmuxでは，以下のような操作をすべてキーボードから素早く行うことができます．

- ウィンドウの作成・削除・切り替え
  複数のウィンドウを作成し，切り替えながら作業できます．下図では，画面上部に「1」と「2」の2つのウィンドウが表示されています．  
- ペインの分割・移動・削除
  画面を上下・左右に分割し，複数のペインで作業を同時に行えます．下図では3つのペインが表示され，キーボード操作で瞬時に移動できます．レイアウトの変更も自在です．  
- 表示位置のスクロール
  Tmux上で作業を続けていると，ログがどんどん流れて見切れていきますが，copy-mode を使うことでキーボード操作からスクロールし，過去の出力を確認できます．  
- セッションからの一時離脱と再接続
  セッションの状態を保持したまま一時的に離脱し，再度接続して作業を再開できます．特にSSH接続中にネットワークが切れた場合でも，セッションが破棄されず作業を継続できるのはTmuxの大きな利点です．  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/a1f08a38-df83-4e74-be87-a374e21a37ff.png)

## Tmuxのカスタマイズ

Tmuxは柔軟にカスタマイズが可能で，自分の作業スタイルに合わせて最適化できます．特に以下の点を見直すのがおすすめです：

- プレフィックスキーの変更
  デフォルトでは`Ctrl + b`がプレフィックスですが，使いやすい`Ctrl + a`に変更する人も多いです．加えて，自分好みにキーバインドをカスタマイズすることで操作性が向上します．  
- バッファサイズの調整
  デフォルトではスクロールバッファが小さめなので，ログがすぐに消えてしまいます．必要に応じてバッファサイズを増やすと便利です．  
- ステータスバーのカスタマイズ
  配色や表示内容（ホスト名・時刻・バッテリーなど）を変更することで，視認性や情報量をコントロールできます．後述のプラグインを使ってテーマを導入するのも良い方法です．  
- コピーモードの設定
  マウスを使わずにキーボードだけで範囲選択・コピーができるように設定できます．Vim風の操作を好む人には特に有効です．  
- マウス操作の設定
  ペインやウィンドウの切り替えをマウスで行えるようにすることで，GUIライクな操作も可能になります．

## Tmux Plugin Manager（TPM）の導入

Tmuxには[Tmux Plugin Manager（TPM）](https://github.com/tmux-plugins/tpm)というプラグイン管理ツールがあります．TPMを使えば，Tmuxの機能を簡単に拡張できます．

筆者は多くのプラグインは使っていませんが，特に便利だと感じているものを2つ紹介します．

### Tmux sensible（基本設定の改善）

[GitHub - tmux-sensible](https://github.com/tmux-plugins/tmux-sensible)
Tmux sensibleは，「Tmuxを使うならほとんどの人が最初に設定するであろう内容」を自動的に反映してくれるプラグインです．
初心者が細かな設定を書くことなく，すぐに実用的な環境を整えることができるため，導入のハードルを大きく下げてくれます．

具体的には以下のような設定が自動で有効になります：

- プレフィックスキーの二重押しでの挙動改善
- ペイン移動キーの改善
- 履歴バッファの拡大
- コピーモードに関する設定の合理化

設定ファイルを細かく書くのが面倒な人，まずは実用的な環境で始めたい人には非常におすすめです．

### Nord tmux

[GitHub - nord-tmux](https://github.com/nordtheme/tmux)
Nord tmuxは，人気のある「Nord」カラースキームに基づいたTmux用のテーマです．
ステータスバーの配色が落ち着いた色合いになり，視認性が向上するだけでなく，全体の雰囲気が柔らかくなります．
デフォルトの無機質な配色に飽きた人や，デザインの統一感を求める人におすすめです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/0d4a36dc-68c9-4720-b7bd-016c10a1a658.png)

# テキストエディタ（コードエディタ）

プログラマにとって，コードを書くためのテキストエディタは最も重要なソフトウェアのひとつです．エディタにはぜひこだわりたいところで，IDEを含めると選択肢は非常に多岐にわたります．

この記事では筆者も愛用している[Visual Studio Code（VS Code）](https://code.visualstudio.com)について紹介します．VS Codeは柔軟性に優れ，拡張機能を導入することでIDEのように高度な機能も利用できます．初心者からベテランまで幅広く使える，優れたテキストエディタです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/eeb1b83a-8dcc-4b71-8dd4-a06f1d6a1e5f.png)

## カラーテーマ・フォント

これまで見た目にこだわることの大切さについて触れてきましたが，テキストエディタでももちろん重要なポイントです．VS Codeは人気の高いエディタだけあり，カラーテーマも非常に豊富です．筆者はターミナルと同じく[Ayu Mirage](https://github.com/ayu-theme/vscode-ayu)を使用しています．

コマンドパレットから`Preferences: Color Theme`を選び，「その他の色のテーマを参照」をクリックすると，さまざまなカラーテーマをインストールせずに試すことができます．ぜひ，自分好みのテーマを探してみてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/0eedfe17-ae17-4827-9c0b-58dce37d85b7.png)

また当然フォントも自由に設定ができます．ターミナルと同様にフォントにもこだわりましょう．
筆者はCascadia Codeを使用しています．好みによるところですが[リガチャ](https://github.com/microsoft/cascadia-code?tab=readme-ov-file#font-features)が面白くて好きです．気になる方はぜひ試してみてください．

```cpp
if (a <= b || a != b)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/6ebeb88c-06a4-4f52-8267-624628a1eceb.png)

## WSL環境への対応

VS CodeはWSLでのプログラミングにも適しています．「Remote Development」という拡張機能を使うことで，WindowsにインストールしたVS CodeからWSLをはじめ，SSHサーバやDockerコンテナなど，さまざまなリモート環境に接続して開発を行うことができます．ローカル環境で作業するのとほとんど変わらない感覚で利用できるのが特長です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/343e1980-a1cc-45b3-b3c9-f4f523ad4af3.png)

## テキストエディタを使いこなすには

テキストエディタの習熟度には個人差が出ますが，エディタを自分の手足のように自在に使いこなせることは，プログラマにとって重要なスキルのひとつと言えるでしょう．

VS Codeはマウス・キーボードのどちらでも操作しやすいエディタですが，キーボード操作を覚えることで，より効率的に開発を進めることができます．以下の記事では，筆者がまとめた便利なキーボード操作について紹介していますので，ぜひ参考にしてみてください．

https://qiita.com/y-tsutsu/items/cfe89c0168f40a8fb353

https://qiita.com/y-tsutsu/items/337aa2ef4fec160a23b4

とくに以下の操作は，キーボードから素早く行えるようにしておくと非常に便利です．ぜひチェックしてみてください．

- 過去に開いたディレクトリをVS Codeで開く
- ディレクトリ内のファイルをファジー検索して素早く開く
  - 開いているファイルの中からアクティブなものを選ぶ
- ファイルを左右に分割して表示する
  - 左右のエリア間でファイルを移動する
  - アクティブなファイルを左右のペインで入れ替える
- 関数や変数などの定義・参照先へジャンプする
  - ジャンプ先から元の場所に戻る
- サイドバーやターミナルなどの表示／非表示を切り替える
  - カーソルをエディタ／ターミナル間で移動する
- ビルドやリンターのエラー一覧を表示し，該当箇所へジャンプする

## VS CodeからのGit操作

VS Codeを使うと，Gitの操作も簡単に行うことができます．こちらも，以前に筆者がまとめた記事がありますので，参考にしてください．


https://qiita.com/y-tsutsu/items/2ba96b16b220fb5913be

現在筆者が使用しているGit関連の拡張機能は以下のとおりです：

- [Git Graph](https://github.com/mhutchie/vscode-git-graph)
  リポジトリのGitグラフを表示し，グラフから簡単にGit操作を実行できます
- [GitLens](https://github.com/gitkraken/vscode-gitlens)  
  Git Blameの表示や，Rebase用のエディタとして使用しています
- [gitignore](https://github.com/CodeZombieCH/vscode-gitignore)  
  さまざまな開発環境に合わせた.gitignoreが提供されます
- [Lazygit for VSCode](https://github.com/Chaitanya-Shahare/lazygit-for-vscode)
  VS Code上でLazygitを起動できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/fb92bbc6-de7f-4b20-8188-af81b4340010.png)

## Vimについて

ここまでプログラミング向けのテキストエディタとしてVS Codeを紹介しましたが，それとは別にVimについても紹介します．

Vimもプログラミング用途のテキストエディタとして人気のエディタで，多くのプログラマが愛用しています．ただしその高機能さやカスタマイズ性の高さから使いこなすにはそれなりに時間がかかります．新人プログラマがまず扱うエディタとしては敷居が高めなところもあると思いますが，興味がある人はぜひ使ってみてください．

ただしコードエディタという視点とは別に，サーバ上や組み込み機器上の設定ファイルなどを編集したりするときに，Vim（vi）を使用しなければいけないシチュエーションがあります．そのときのため最低限の操作は覚えておくとよいでしょう．

一通りの操作についてはこのあたりを参考にするといいと思います．

https://mstn2050.github.io/blogs/contents/vim-basic-oparation.html

また，カーソルの移動まわりについてはこちらの記事が大変参考になります．

https://qiita.com/fasahina/items/2767891134028648f288

ちなみにですが筆者はVimを最低限でしか使っていないのですが，やっぱり見た目にはこだわっています．カラーテーマは[Tender](https://github.com/jacoborus/tender.vim)を使っています．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45310/aa1239be-0ba4-46d8-835f-386a34ace9f0.png)

# おわりに

ここまで，WSL環境下で快適に開発を行うためのターミナル，シェル，そしてテキストエディタのセットアップ方法について紹介してきました．見た目の美しさ，入力補完の充実，キーボード操作の効率化といった観点から，開発環境を自分好みに整えることは，モチベーションや生産性の向上に直結します．

特に新人プログラマの方にとって，開発環境は「学習のしやすさ」にも大きく関わってきます．初めのうちは小さな工夫でも，日々の作業の中でその効果を実感できるはずです．

ぜひ本記事を参考に，自分なりに楽しく，使いやすい環境を作ってみてください．そうすることで，プログラミングそのものも，より前向きに楽しく取り組めるようになるでしょう．