自作日本語キーボードのススメ 4th key

## まえがき
本記事は[私の記事](https://red-full-moon.com/homemade-keyboard-4th-key/)の改変・転載になります。
少しでも多くの方に自作キーボードの素晴らしさを広めたいと思いこのような形となりました。
一人でも多く、キーボード自作erが増えてくれれば嬉しく思います。

最後に、次回のリンクがありますがQiitaへの転載は順次行います。
早く続きが読みたい方はリンクから飛んでみてくださいませ。

<!-- wp:heading -->
<h2>自作キーボードの日本語化</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><a href="https://red-full-moon.com/homemade-keyboard-3rd-key/">前回</a>まででようやく<span style="background-color: #ffff00" class="background-color">物理的には</span>JIS（日本語）配列のキーボードができました。<br>ただ、このままではもともと海外で生産されたPCBに無理やり日本語配列通りにキースイッチをくっつけて、キートップをつけただけです。<br>実際に打ってみるとわかりますが、<span style="background-color: #ffff00" class="background-color">思ったように文字が入力できません</span>。<br>そこで今回は、DZ60（今回使用したPCB）のファームウェアを書き換えて、真の意味での<span style="font-size: 16px" class="font-size"><span style="color: #000000" class="text-color">オリジナル自作日本語キーボード</span></span>を完成させましょう！！<br><br>そう「<span style="color: #ff0000" class="text-color"><span style="font-size: 20px" class="font-size"><strong>オリジナル自作日本語キーボード</strong></span></span>」を！！<br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"customBackgroundColor":"#f5f5f5"} -->
<p style="background-color:#f5f5f5" class="has-background">【以下余談】<br>なぜ２回言ったのかというと、会社の先輩方にも<br><span style="font-size: 16px" class="font-size">😤<span style="color: #008000" class="text-color">「日本語配列は情弱の極み、英語配列キーボードこそ最適化されたキーボードで仕事も捗る！！」</span></span><br>と煽られるですが、キーボードを自作するような
<span style="font-size: 13px" class="font-size">ちょっと変わった</span>
方々も同じなのか、情報が少量しかないんですよね。<br>それでも邪教（日本語配列）を崇拝する同志の手助けになるべく記録を残したいと思います。<br>おや…誰か来たようだ。誰だろう、こんな夜中なのに…</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>理想の配列を具現化しよう</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>キースイッチの配置が同じでも、<span style="background-color: #ffff00" class="background-color">各キースイッチに何を割り当てるか</span>は完全に個人の自由です！！<br>まず自分の理想とするキー配置を一旦整理しましょう。<br><br>そこでオススメのツールは<a href="http://www.keyboard-layout-editor.com/">keyboard-layout-editor.com</a><br>ここで自分の追い求める理想のキーマップを形にしていきましょう。<br><br>使い方は簡単<br>上のpresetからISO60%を読み込んで、DeleteKeyとAddKeyを駆使して形にしていくだけ！<br><br>今回、私が目指すキーマップはこんな感じ<br>（かの名機<a rel="noreferrer noopener" aria-label="BLACK PAWN (新しいタブで開く)" href="https://www.century.co.jp/pc_solution/special/black_pawn/" target="_blank">BLACK PAWN</a>を参考にした配列になってます）</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":171,"sizeSlug":"large"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://red-full-moon.com/wp-content/uploads/2020/03/Layer1.jpg" alt="" class="wp-image-171"/><figcaption>Layer 1</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:image {"align":"center","id":177,"sizeSlug":"large"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://red-full-moon.com/wp-content/uploads/2020/03/Layer2.jpg" alt="" class="wp-image-177"/><figcaption>Layer2</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>突然レイヤーという概念が出てきましたが、難しいことはなにもありません。<br>基本的にはLayer1はそのまま押したときの動作。<br>その他のレイヤーは指定したキーを押しながら入力した際の動作を示してます。<br>ちなみにShiftキーの機能（「Shiftキー+1キー」で「！」）はレイヤーではなく標準で決まっています。<br><br>今回はFnキーを押しながらの時の動作をLayer2にまとめてます。<br>ファンクションキーとプリントスクリーンキー、LEDの調光機能を実現しています。<br>RGB関係のキーは<a rel="noreferrer noopener" aria-label="こちら (新しいタブで開く)" href="https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgblight" target="_blank">こちら</a>を参照<br><br>Layerは<span style="background-color: #ffff00" class="background-color">いくつでも設定できます</span>のでここはお好みでどうぞ。<br><br>意外と書き出してみると、あーでもないこーでもないと思案しますが、それがいい…<br><span style="color: #008000" class="text-color">キーボードを作る時はね、誰にも邪魔されず 自由でなんというか救われてなきゃあダメなんだ 独りで静かで豊かで・・・</span></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>ファームウェアの書き換え</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>ではゴールが決まったので、早速設定を作り込んでいきましょう！！</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>環境構築</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>実際にキーボードへの書き込みには<a rel="noreferrer noopener" aria-label="qmk_firmware (新しいタブで開く)" href="https://github.com/qmk/qmk_firmware" target="_blank">qmk_firmware</a>というツールを使います。<br><br>私はMac OS Catalina で実施しました。<br>Windowsの方はWSLを利用すると同様の手順で実施できるかと思います。<br>（参考記事は<a rel="noreferrer noopener" aria-label="こちら (新しいタブで開く)" href="https://qiita.com/marksard/items/f381caf3ca981f307f64" target="_blank">こちら</a>）</p>
<!-- /wp:paragraph -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:sh decode:true " title="環境構築コマンド">cd WorkDir
git clone https://github.com/qmk/qmk_firmware
cd qmk_firmware
./util/qmk_install.sh
make git-submodule</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:paragraph -->
<p>それなりに時間がかかるので、終わるまでのんびり待ちましょう。<br>これで環境構築は終わりです。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>キーマップの定義ファイル</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>実行が終わると、様々なPCB用の定義ファイルなどがダウロードされています。<br>その中にあるDZ60用のプロファイルに、先程決めたキーマップを定義していきます。<br><br>今回はDZ60を使っているので<br><span style="color: #1e90ff" class="text-color">keyboards/dz60/dz60.h</span>の最終行の<br><span style="color: #ff0000" class="text-color">#endif</span><br>の手前に下記コードを追加してくだい。<br>これによって<span style="background-color: #ffff00" class="background-color">今回のキースイッチの配列をPCBに宣言</span>することができます。</p>
<!-- /wp:paragraph -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:c decode:true " title="keyboards/dz60/dz60.h">#define LAYOUT_65_yuzuki( \
    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, \
    k10,      k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d,      \
    k20,      k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
    k40, k41, k43,                k46,                k4a, k4b, k4c, k4d, k4e  \
) 
{ \
    { k00,  k01,   k02,   k03,  k04,   k05,   k06,  k07,   k08,   k09,   k0a,  k0b,  k0c,   k0e,   k0f   }, \
    { k10,  KC_NO, k12,   k13,  k14,   k15,   k16,  k17,   k18,   k19,   k1a,  k1b,  k1c,   k1d,   k1e   }, \
    { k20,  KC_NO, k22,   k23,  k24,   k25,   k26,  k27,   k28,   k29,   k2a,  k2b,  k2c,   k2d,   KC_NO }, \
    { k30,  KC_NO, k32,   k33,  k34,   k35,   k36,  k37,   k38,   k39,   k3a,  k3b,  k3c,   k3d,   k3e   }, \
    { k40,  k41,   KC_NO, k43,  KC_NO, KC_NO, k46,  KC_NO, KC_NO, KC_NO, k4a,  k4b,  k4c,   k4d,   k4e   }  \
}</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:paragraph -->
<p>（KC_NOはキースイッチが接続されていないことを意味します）</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>キーの役割を決める</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>前項でPCBに「どこに何という名前のキースイッチが接続されているか」を教えてあげたので<br>次はPCBに「<span style="background-color: #ffff00" class="background-color">各名前のキースイッチの役割</span>」を教えてあげます。<br>その定義ファイルは<span style="color: #1e90ff" class="text-color">qmk_firmware/keyboards/dz60/keymaps</span> 配下にあります。<br>過去の偉人達のテンプレートを見ることができます。<br>結構勉強になりますし、思わぬキーボードの使い方も発見できるので、一度見てみると楽しいです。<br><br>しかし、今回はこれらのテンプレートを使うことなく、新たに作っていきます。<br>まずは過去の偉人たちに仲間入りすべくディレクトリを作成。</p>
<!-- /wp:paragraph -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:sh decode:true " title="新規ディレクトリの作成">mkdir qmk_firmware/keyboards/dz60/keymaps/yuzuki-jis</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:paragraph -->
<p>その中に下記の2ファイルを追加していきます。</p>
<!-- /wp:paragraph -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:c decode:true " title="rules.mk">MOUSEKEY_ENABLE = no
CONSOLE_ENABLE = yes</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:c decode:true " title="keymap.c ">#include QMK_KEYBOARD_H

enum layer_names {
  _QW,
  _L1,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  /* 0: qwerty */
  /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
    │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ |BS │ 15
    ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
    │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ Ent │ 13
    ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
    │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │    │ 14
    ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
    │Shft   │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ _ | ↑ |Sft│ 14
    ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
    │Alt │Win │MHNK│         Space          |HNK│FN │ ← │ ↓ │ → │ 9
    └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
    FnキーをL1レイヤーへの切り替えキーに指定
    */
  [_QW] = LAYOUT_65_yuzuki( \
//  1        2        3        4        5        6        7        8        9        10       11       12       13       14       15
    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_JYEN, KC_BSLS,
    KC_TAB,           KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC,
    KC_LCTL,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
    KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RO,   KC_UP,   KC_RSFT,
    KC_LALT, KC_LGUI, KC_HANJ,                            KC_SPC,                             KC_HAEN, MO(_L1), KC_LEFT, KC_DOWN, KC_RIGHT
  ),

  /* 1: fn 1 */
  /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
    │   │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│   |Del│
    ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
    │     │   │   │   │   │   │   │   │   │   │Prn│   │   │     │
    ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
    │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
    ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
    │       │HUI│HUD│VAI│   │   │   │   │   │   │   │   |   |   │
    ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
    │    │    │    │                        |   │   │   │   │   │
    └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
    HUI…色相を変更
    HUD…色相を逆方向に変更
    VAI…光度をアップ、Shiftを押しながらでダウン
    */
  [_L1] = LAYOUT_65_yuzuki( \
//  1        2        3        4        5        6        7        8        9        10       11       12       13       14       15
    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______,
    _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______,
    _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    _______,          RGB_HUI, RGB_HUD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______
  ),
};</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:paragraph -->
<p>各コードの意味や役割は<a rel="noreferrer noopener" aria-label="こちら (新しいタブで開く)" href="https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md" target="_blank">こちらのドキュメント参照</a>してください。<br>また関数名やレイヤー名は自由に変更しても大丈夫です。<br>これで、<span style="background-color: #ffff00" class="background-color">準備は完了</span>です！</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>ファームウェアの書き込み</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>さぁいよいよ書き込みです。<br>キーボードをパソコンと接続して、下記コマンドを実行してください。</p>
<!-- /wp:paragraph -->

<!-- wp:urvanov-syntax-highlighter/code-block -->
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:sh decode:true " title="ファームウェアの書き込み">make dz60:yuzuki-jis:dfu</pre></div>
<!-- /wp:urvanov-syntax-highlighter/code-block -->

<!-- wp:paragraph -->
<p>すると、<span style="background-color: #ffff00" class="background-color">実際にPCBに認識されているキースイッチの数と設定ファイルに書き込まれているキーの数に相違がなければ</span>、5回<span style="color: #008000" class="text-color">[OK]</span>という表記が出た後<br><span style="color: #ff0000" class="text-color">ERROR: Bootloader not found. Trying again in 5s.</span><br>というエラーが出ます。<br>このエラーが出たら、キーボードをひっくり返して…</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":178,"width":378,"height":359,"sizeSlug":"large"} -->
<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img src="https://red-full-moon.com/wp-content/uploads/2020/03/7af634a00762dc692e04a6a8b34e0d21.jpg" alt="" class="wp-image-178" width="378" height="359"/><figcaption>リセットボタン</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>このリセットボタンをポチッと押しましょう。<br>すると、キーボード内のメモリに残っていた設定が消され、今回の設定が記録されます！！</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>完成！！</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>最後に入力テストを行って、問題がなければ…<br>これで名実ともに邪教（日本語配列）の自作キーボードの<span style="background-color: #ffff00" class="background-color">完成</span>です！<br>お疲れ様でした！！<br><br>また、今更になりますが今回のコードはあくまでも一例です。<br>この通りにしなければいけないわけではなく、自由に書き換えて<span style="background-color: #ffff00" class="background-color">自分だけのキーマップ</span>を実現してください！<br><br>基本的にはこれが日本語キーボードの全てですが、実は細かい微調整もあるので次回（最終回予定）で解説したいと思います。<br><br>待て！次回！！</p>
<!-- /wp:paragraph -->