【環境改善】NumLock・Insert・CapsLockの誤爆とはおさらば！Windowsキーボードカスタマイズ入門💻 

# Windows ノートPCとデスクトップPCのキー配置を改善！レジストリエディタでキーボードをカスタマイズ

私は`Next.Js`と`tailwindcss`を使用し、フロントエンド開発を行っている初心者です。現在、Windowsのパソコンを2台使用し、職場の昼休みはデスクトップpc、自宅では、ノートPCと使い分けております。
開発作業中、ノートpc、デスクトップPC、それぞれのキーボードの配置に関する問題に悩まされていました。ノートPCでは`Backspace`キーの右隣にある`NumLock`キー、デスクトップPCでは`Backspace`キーの右隣にある`Insert`キー、そして両方に共通して`A`キーの隣にある`CapsLock`キーが問題でした。
タイピング中の誤操作でテンキーモードが切り替わったり、文字入力モードが切り替わったりと、作業の中断を余儀なくされていました。この問題を解決するため、レジストリエディタでキーボード配列をカスタマイズする方法を見つけ出しました。

## 目次
1. [はじめに](#はじめに)
1. [レジストリエディタとは](#レジストリエディタとは)
1. [キー配列変更の仕組み](#キー配列変更の仕組み)
1. [スキャンコード一覧](#スキャンコード一覧)
1. [キーボードカスタマイズの目的](#キーボードカスタマイズの目的)
1. [カスタマイズ例](#カスタマイズ例)
1. [トラブルシューティング](#トラブルシューティング)
1. [まとめ](#まとめ)

## はじめに

PCのキーボード配置は機種によって異なり、特にノートPCとデスクトップPCでは大きな違いがあります。ノートPCでは省スペース設計のため`NumLock`キーが`Backspace`キーの近くに配置され、デスクトップPCでは`Insert`キーが同じ位置に配置されています。また、両方に共通して`CapsLock`キーが`A`キーの隣にあり、これらの配置は開発作業中の誤操作を引き起こしやすい状態となっています。
Windowsのレジストリエディタを使用すれば、これらの問題のあるキーの機能を変更し、より使いやすいキーボード配置を実現できます。本記事では、具体的な問題と解決方法について、実際のレジストリ設定を交えながら解説していきます。


## レジストリエディタとは

### 基本説明
レジストリエディタ（regedit）は、Windowsに標準で搭載されている設定データベースを編集するためのツールです。システムやアプリケーションの設定情報が階層構造で保存されており、この中にキーボードの設定も含まれています。

### 注意事項
レジストリエディタの使用には以下の点に注意が必要です。

- 管理者権限が必要
- 誤った編集はシステムに重大な影響を与える可能性がある
- 変更前にバックアップを取ることを推奨

### 起動方法

1. Windowsキー + R を押して「ファイル名を指定して実行」を開く
2. 「regedit」と入力
    ```plaintext
    regedit
    ```
3. 「はい」をクリックして管理者権限を許可

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818373/9999da78-f279-30dd-4c5a-ef86324aeb76.png)


### キーボード設定の場所
キーボードの設定は以下の場所にあります。
```plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818373/f765989d-c76c-02f6-86c4-13c1c70162d9.png)


この場所にある`Scancode Map`という値を編集することで、キーボードの配列をカスタマイズできます。

### バックアップの取り方
1. レジストリエディタのメニューから「ファイル」→「エクスポート」を選択
2. 保存場所とファイル名を指定
3. 「保存」を選んで保存

このバックアップファイルをダブルクリックすることで、設定を元に戻すことができます。

## キー配列変更の仕組み

キー配列変更の仕組みを理解することで、より柔軟なカスタマイズや設定の安全性確認が可能になります。基本的な仕組みを見ていきましょう。

### レジストリとキーマッピング

Windowsのレジストリには、OSの重要な設定が保存されています。キーボードの設定もその一つで、特に`Scancode Map`というレコードが重要な役割を果たします。

### Scancode Mapの構造
Windowsでは、`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout`にある`Scancode Map`という値を編集することで、キーボードの配列をカスタマイズできます。この値は、キーのスキャンコードをマッピングするためのバイナリデータです。

`Scancode Map`が存在しない場合、右クリック⇒「新規」⇒「バイナリ値」から「Scancode Map」という名前で新規作成します。

Scancode Mapは以下の4つの部分で構成されています。

```plaintext
00 00 00 00 00 00 00 00  # 開始宣言（固定値：8バイト）
01 00 00 00              # 変更するキーの数を指定（ヘッダー、終了マーカーは含めない）
1D 00 3A 00              # キーマッピングの設定（リトルエンディアンで記入）
00 00 00 00              # 終了宣言（固定値：4バイト）
```

各部分の詳細を見ていきましょう。

1. **開始宣言**
    ```plaintext
    00 00 00 00 00 00 00 00  # すべてのScancode Map設定で固定
    ```

2. **キーの数指定**
    ```plaintext
    01 00 00 00  # 例：1個のキーを変更する場合
    # 16進数で指定（リトルエンディアン形式）
    # 10個の場合：0A 00 00 00
    # 20個の場合：14 00 00 00
    ```

3. **キーマッピングの設定**
    変更したい数だけ4バイトのデータが増えます。
    ```plaintext
    1D 00 3A 00  # 例：CapsLock → 左Ctrl
    # 前半2バイト：変更後のキーのコード
    # 後半2バイト：変更前のキーのコード
    ```

4. **終了宣言**
    ```plaintext
    00 00 00 00  # すべてのScancode Map設定で固定
    ```

## スキャンコード一覧
キーボードカスタマイズで使用するスキャンコードを表形式でまとめました。設定時にはリトルエンディアンの値を使用します。

### 英数字キー

| キー名 | リトルエンディアン |
|--------|-------------------|
| 0 | 0B 00 |
| 1 | 02 00 |
| 2 | 03 00 |
| 3 | 04 00 |
| 4 | 05 00 |
| 5 | 06 00 |
| 6 | 07 00 |
| 7 | 08 00 |
| 8 | 09 00 |
| 9 | 0A 00 |
| A | 1E 00 |
| B | 30 00 |
| C | 2E 00 |
| D | 20 00 |
| E | 12 00 |
| F | 21 00 |
| G | 22 00 |
| H | 23 00 |
| I | 17 00 |
| J | 24 00 |
| K | 25 00 |
| L | 26 00 |
| M | 32 00 |
| N | 31 00 |
| O | 18 00 |
| P | 19 00 |
| Q | 10 00 |
| R | 13 00 |
| S | 1F 00 |
| T | 14 00 |
| U | 16 00 |
| V | 2F 00 |
| W | 11 00 |
| X | 2D 00 |
| Y | 15 00 |
| Z | 2C 00 |

### ファンクションキー

| キー名 | リトルエンディアン |
|--------|-------------------|
| F1 | 3B 00 |
| F2 | 3C 00 |
| F3 | 3D 00 |
| F4 | 3E 00 |
| F5 | 3F 00 |
| F6 | 40 00 |
| F7 | 41 00 |
| F8 | 42 00 |
| F9 | 43 00 |
| F10 | 44 00 |
| F11 | 57 00 |
| F12 | 58 00 |
| F13 | 64 00 |
| F14 | 65 00 |
| F15 | 66 00 |
| F16 | 67 00 |
| F17 | 68 00 |
| F18 | 69 00 |
| F19 | 6A 00 |
| F20 | 6B 00 |
| F21 | 6C 00 |
| F22 | 6D 00 |
| F23 | 6E 00 |
| F24 | 76 00 |

### 制御キー

| キー名 | リトルエンディアン |
|--------|-------------------|
| Backspace | 0E 00 |
| CapsLock | 3A 00 |
| Enter | 1C 00 |
| Left Alt | 38 00 |
| Left Ctrl | 1D 00 |
| Left Shift | 2A 00 |
| Left Windows | 5B E0 |
| Right Alt | 38 E0 |
| Right Ctrl | 1D E0 |
| Right Shift | 36 00 |
| Right Windows | 5C E0 |
| Space | 39 00 |
| Tab | 0F 00 |

### 特殊キー

| キー名 | リトルエンディアン |
|--------|-------------------|
| Delete | 53 E0 |
| End | 4F E0 |
| Home | 47 E0 |
| Insert | 52 E0 |
| NumLock | 45 00 |
| PageDown | 51 E0 |
| PageUp | 49 E0 |
| PrintScreen | 37 E0 |
| ScrollLock | 46 00 |

### 日本語入力キー

| キー名 | リトルエンディアン |
|--------|-------------------|
| かな/カナ | 70 00 |
| 変換 | 79 00 |
| 無変換 | 7B 00 |
| 全角/半角 | 29 00 |

### 注意点

- スキャンコードは16進数で表されています
- `E0`がついているキーは拡張キーを表します
- キーマッピング時は必ずリトルエンディアンの値を使用してください
- 重要なシステムキーの変更は避けることを推奨します

## キーボードカスタマイズの目的
実際に変更する前に、再度キーボードカスタマイズの目的をまとめます。

### 解決したい問題点
1. `CapsLock`キーの位置
    - タイピング中に誤って`CapsLock`を押してしまう
    - 意図せず文字入力モードが切り替わり、コードの入力に支障が出る

2. 機種別の問題
    - ノートPC：バックスペース右隣の`NumLock`キーの誤操作
    - デスクトップPC：バックスペース右隣の`Insert`キーの誤操作


### 改善方針
1. 共通の改善
    - `CapsLock`キーを`Right Ctrl`キーとして使用
（誤操作しても、何も入力されない）
    - `無変換`キーを`CapsLock`キーとして使用
（左親指で入力モードを切り替えられるため、便利）
    - `Right Ctr`lキーをWindowsの`無変換`キーとして使用
（残りのキーを割り当て）

2. 機種別の改善
    - ノートPC：`NumLock`キーを`Backspace`として使用
（誤操作でも文字削除ができる）
    - デスクトップPC：`Insert`キーを`Backspace`として使用
    （誤操作でも文字削除ができる）
## カスタマイズ例

### デスクトップPCの場合

```plaintext
00 00 00 00 00 00 00 00  # ヘッダー（固定値）
04 00 00 00              # マッピング数：4つ（ヘッダー、終了マーカーは含めない）
1D E0 3A 00              # CapsLockキー（3A 00）をRight Ctrlキー（1D E0）に変更
7B 00 1D E0              # Right Ctrlキー（1D E0）を無変換キー（7B 00）に変更
3A 00 7B 00              # 無変換キー（7B 00）をCapsLockキー（3A 00）に変更
0E 00 52 E0              # Insertキー（52 E0）をBackspaceキー（0E 00）に変更
00 00 00 00              # 終了マーカー（固定値）
```

#### 実際の入力画面

上記では、説明のために改行していますが、実際には改行せずに続けて入力します。
スペースも不要で小文字で入力して構いません。自動で大文字に変換されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818373/b9503b11-a260-4aea-65b8-ed207cecb30d.png)

### ノートPCの場合
```plaintext
00 00 00 00 00 00 00 00  # ヘッダー（固定値）
04 00 00 00              # マッピング数：4つ（ヘッダー、終了マーカーは含めない）
1D E0 3A 00              # CapsLockキー（3A 00）をRight Ctrlキー（1D E0）に変更
7B 00 1D E0              # Right Ctrlキー（1D E0）を無変換キー（7B 00）に変更
3A 00 7B 00              # 無変換キー（7B 00）をCapsLockキー（3A 00）に変更
0E 00 45 00              # NumLockキー（45 00）をBackspaceキー（0E 00）に変更
00 00 00 00              # 終了マーカー（固定値）
```

#### 実際の入力画面

上記では、説明のために改行していますが、実際には改行せずに続けて入力します。
スペースも不要で小文字で入力して構いません。自動で大文字に変換されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818373/d753ae3c-7480-f05d-1d41-d1b0378acaaa.png)


## トラブルシューティング

### 一般的な問題と解決方法

1. 変更が反映されない場合
   - PCを再起動する（上記変更後、必ず再起動が必要です）
   - レジストリエディタを管理者権限で実行する

2. キーが意図しない動作をする場合
   - スキャンコードが正しいか確認する
   - 既存のマッピングとの競合がないか確認する

3. システムに問題が発生した場合
   - セーフモードで起動する
   - `Scancode Map`を削除して元の設定に戻す

## まとめ

レジストリエディタを使用したキーボードカスタマイズは、開発効率を向上させる強力なツールです。スキャンコードを適切に設定することで、`CapsLock`の入れ替えや、`NumLock`を`Backspace`として使用するなど、自分の作業スタイルに合わせた最適な配置を実現できます。これらの変更は、システム全体に適用されるため、特別なソフトウェアを必要とせず、安定した環境を維持できます。

もし記事の内容に間違いがあれば、コメントでご指摘いただけますと幸いです。また、より良い方法や代替手段をご存知の方がいらっしゃいましたら、ぜひ共有していただければと存じます。例えば、他のキー配置のカスタマイズ例や、キーボード設定を管理する別のツールの使用経験など、皆様の知見をお聞かせいただければ幸いです。