hoboNicolaのMacOS対応

概要

Apple社の Mac mini (Sonoma 14.3.1) をしばらく使う機会を得たので、hoboNicolaアダプターおよびキーボードを対応させた。

Mac mini (Apple M2)

当初は完全には動かなかったのだが、hoboNicolaプログラムのわずかな変更で利用できるようになった。MacOSユーザーにとっては当たり前の話だろうとは思うが、利用にいたるまでの手順や設定などをまとめた。

  • キーボードの認識
  • ライブラリに対する変更内容
  • MacOSでの日本語キーボードや入力のこと
  • hoboNicolaの設定について
  • Google日本語入力の設定方法など

Mac MiniにhoboNicolaのキーボードやアダプターを認識させる

MacOSでUSBキーボードを変更するには、あたり前だがまずケーブルをつなぐ。はじめて接続したキーボードならば、接続した時点でキーボード設定アシスタントが開始する。アシスタントが開始しないなら、Dock のアップルメニューから システム設定 をクリックしてメニューを展開する。

MacOS システム設定

システム設定の一覧の下の方にある キーボード を選択すると以下のようにキーボードに関する項目が表示される。

MacOS キーボードの種類を変更

右側に表示されたキーボード関連の項目の下の方にある キーボードの種類を変更… をクリックすると、キーボード設定アシスタント が開く。

MacOS キーボード設定アシスタント

ここで 続ける をクリックすると、以下のようにキーボードを識別するための操作ガイドが表示される。

MacOS キーボードを識別中

この画面が表示されたら、左Shiftキーの隣にある、Z キーを押す。ヨーロッパ向けのキーボードの場合、Z ではなく別のキーが配置されているから、それを検出できるのだろう。JISやANSIキーボードならば、Zである。

Z キーを押すと次の画面になる。

MacOS キーボードを識別中 その2

日本語(JIS)配列のキーボードならば、右Shiftキーの隣の _ (アンダーバー) キーを押す。ANSI (US)配列のキーボードの場合、  / (スラッシュ) キーを押すことになっているが、USレイアウトとしたhoboNicolaキーボードならば、Fn + 右Shiftキーを押す (1.7.5版以降) 。

1.7.4版までのhoboNicolaでは、ここで _ (アンダーバー) キーを押してもMacOSに認識されなかった。そのため画面が遷移せず、先に進むために  / (スラッシュ) キーを押さざるを得なかった。結果として後述する日本語USBキーボード用に拡張された複数のキーの入力ができなかった。

話を進めるため、すんなり認識された場合は次の キーボードの種類を選択 画面に遷移する。

MacOS キーボードの種類を選択

日本語キーボードならば JIS(日本)、USキーボードならば ANSI(米国) を選択する。ISO(国際規格) は試していない。

_ (アンダーバー) キーが認識されなかった理由

USB機器の機能や特性は、USB機器がホストに送る数種類のディスクリプター(記述子, descriptor) と呼ばれるデータによって決まる。hoboNicolaライブラリでの各種ディスクリプタは、AVR用ならばArduino標準ライブラリに、Atmel SAM、RP2040 およびnRF52用ならばTinyUSBライブラリにそれぞれ依存した実装としている。

ただ、HIDキーボードで入力できるキーコード範囲などをもつレポートディスクリプタ(Report Descriptor) については、プロセッサに依存しないようhoboNicolaライブラリ内にキーボード、メディア制御およびシステム制御用をまとめた形態で書いてある。今まで接続したWindows PCやAndroidスマホではすべてのキーを問題なく入力できていたのだが、MacOSでは一部のキーの入力ができないことが分かった。

Apple社の公式な資料である Appleデバイス用アクセサリのデザインガイドライン(R21)  のキーボード要件にある 14.2.1 HIDレポート記述子の例 を見ると、USAGE Page Keyboard(0x05, 0x07) に引き続く、LOGICAL MAXIMUM および USAGE MAXIMUM の値が16ビット表現になっていることが分かった。

HID Report Descriptor

これらの項目は、キーボードが出力できるUsage IDの値の範囲 を示している。hoboNicola 1.7.4版まではこの二つの項目を8ビット表現としていたため、MacOSに接続したときには 0x80以上の値をもつUsage が無視されたようである。

hoboNicolaLibraryに含まれている hid_wrap.cpp 内の該当項目を修正したところ、2枚目の キーボードを識別中 画面ですんなりと _ (アンダーバー) キー を検出してくれるようになった。

この修正後に hoboNicolaアダプター、キーボードをおのおのビルドして接続確認しMacOS用の基本的な対応ができたことを確認した。

USBキーボードの日本語用拡張キーとMacOS

DOS/Vに由来するWindows用日本語USBキーボードに特有のキーのHID  Usage Name/ID は以下のとおり。hoboNicolaは基本的にWindows用の日本語USBキーボードとして作っているので、そのあたりがMacOSではどうなるのか。

  •  無変換
    Keyboard International 5 (0x8b)
  •  変換
    Keyboard International 4 (0x8a)
  • ひらがな
    Keyboard International 2 (0x88)
  •  ¥  |  (BackSpaceの左隣のキー)
    Keyboard International 3 (0x89)
  •  \  _ (右Shiftの隣のアンダーバー)
    Keyboard International 1 (0x87)

半角/全角キーや(Windowsの)英数キーは、それぞれUSキーボードのバッククォートキー、CapsLockキーと同じコード (UsageID)を発生するキーで、日本語キーボードに特有というわけではない。なお、Windowsの英数キーとMacOS(JISキーボード)の英数キーが出力するコードは異なっている。

これら日本語用拡張キーのうち、MacOSが認識するのはKeyboard International1( _ )とKeyboard International3 ( ¥ ) の2つだけで、キーボードから、Windowsでの変換、無変換、ひらがなに相当するコードを送っても無視される。

ただ、Windowsの ハードウェアキーボードレイアウト を英語キーボードとしている場合、ここに挙げた5つのキーはすべて無視されるのに対し、MacOSでは2つは入力に使える。

また、MacOSではキーボードの種類をANSI(米国)とした場合でも、¥ キーや _ キーの入力ができる。USレイアウトでこれらの記号を入力するための本来のキーは別にあるので、日本語用拡張キーがなくても困らないのだが。

IME開閉用の かなキー と 英数キー

MacOSのJISキーボードにはIMEを開閉するためのキーとして、空白キーの左右に英数キーかなキーが用意されている。これらのキーは以下のようなコードを出力する。

  • かなキー
    Keyboard LANG1 (0x90)、ImeOn
  • 英数キー
    Keyboard LANG2 (0x91)、ImeOff

hoboNicolaの1.7.4までは、当然ながらこれらのキーも無視されていた。

Windows10/11においても、キーボードから同じコードを送ってやれば、MS-IMEやGoogle日本語入力でIMEの開閉などに利用できる。これらのキーは、ハードウェアレイアウトが日本語キーボードでも英語キーボードでも利用できる。WindowsでのImeOn, ImeOffについては、MS-IMEにおけるImeOn/ImeOffキーの解説 を参照。

MacOSでは、かなキーと英数キーを使ってIMEを開閉することが決まっているので、hoboNicolaライブラリを使ったアダプターやキーボードの実装では、既存の以下のような機能で対応すればよい。

  • かなキー
    内部NICOLAモードをオンにしてからImeOnコードを送信
  • 英数キー
    内部NICOLAモードをオフにしてからImeOffコードを送信

このようにしておけば、キーボードだけでIMEの開閉操作をしている限り、本体側からキーボードに状態を通知する必要はない。

キーボードの種類がANSI(米国) でも 英数キーとかなキーは使える

Windowsのハードウェアキーボードレイアウトからの連想で、MacOSでもキーボードの種類を ANSI(米国) としているときは、英数キーやかなキーは使えないと思っていたのだが、キーボードを識別中 画面において _ (アンダーバー) キーを押しておけば、英数キーとかなキーは有効で、IMEの開閉に使えることも分かった。

つまり、英字側記号はUSレイアウトで入力できるし、かなキーをおせば日本語入力に切り替えてNICOLA入力できる、ということ。

ふつうのUSレイアウトのキーボードには、アンダーバーを入力するためのキーも無いし、英数キーやかなキーも配置されていないのだが、hoboNicolaキーボード (nk60 PCB, xd64 PCBなど) ならばUSレイアウト用にスイッチを配置した場合でも、それらのキーを入力できるようにしている。

自作キーボード用のUSレイアウトのキーキャップは豊富な種類のものを安価に入手できるし、_ (アンダーバー)、ImeOn、 ImeOffを出力する仕組みさえ用意すればいいので、MacOSとほぼNICOLA配列のキーボードは案外と相性がよい。

MacOS記念のhoboNicolaキーボード

nk60 USレイアウト

MacOSを使い始めた記念にnk60 PCBにUSレイアウトでスイッチを配置し、Apple キーボードのようなロープロファイルのキーキャップをはめたキーボードを作った。

2つの親指キーの左にあるMenuキーを英数キー、右にあるAppleマークキーをかなキーとしている。このブログ投稿もMac miniでChromeブラウザを動かして書いている。

hoboNicolaキーボードのレイアウトと設定

nk60 rev.3 PCB を使ったhoboNicolaキーボードのレイアウトと、MacOS向けの設定例を示す。

基本的な配列 (ほぼNICOLA配列) は、MacOSもWindowsも共通で以下のようになっている。英数字入力時の記号は、キーキャップとの整合性のため、日本語キーボード(JIS)と英語キーボード(ANSI)の記号配置に準じている。NICOLAモード時の かな配列はJIS/ANSIとも共通。

hoboNicola レイアウト基本形(1.7)

日本語(JIS)キーボード

基本レイアウト

日本語キーボード用にスイッチとキーキャップを配置した場合のhoboNicolaの基本レイアウト(設定オプションをすべて無効している場合のレイアウト)は、Windowsの日本語キーボードに倣って以下のようになっている。

nk60基本レイアウト(JP) 赤字はFnキーオンのとき。

先に書いたように、無変換、変換、ひらがな といったキーは、MacOSではすべて無視されてしまう。

MacOSでの日本語レイアウト

MacOSでキーボードの種類をJIS(日本)としているとき、いくつかの設定オプションにより、以下のようなレイアウトとした。

nk60 MacOS用レイアウト(JP)

各種オプションにより、基本レイアウトからの以下のように変更している。

  • 無変換キーを(MacOSの)英数キー(ImeOff)
  • 空白キーをF14キー
  • 変換キーを空白キー
  • ひらがなキーを(MacOSの)かなキー(ImeOn)
  • CapsLockの位置の(Windowsの)英数キーを(MacOSの)英数キー(ImeOff)
  • CapsLockは、Fn + 英数キーでオンオフする。

設定オプションの内容についてはUS版とほとんど同じなのでまとめて後述する。

USレイアウト(ANSI)キーボード

基本レイアウト

PCBにUSレイアウト用のスイッチを配置し、hoboNicolaの設定オプションで USレイアウトを有効としている場合の基本レイアウトは以下のとおり。

nk60基本レイアウト(US 1.7.5版)

USレイアウトオプションを有効にすると、hoboNicolaの内部で以下のような置き換えが行われる。

  • 無変換キーはF14
  • 変換キーはF15
  • ひらがなキーはImeOn (Keyboard LANG1)
  • (Windowsの)英数キーはImeOff
  • CapsLockのオンオフは、Fn + ImeOffで。

MacOSでのUSレイアウト

MacOSでのキーボードの種類はANSI(米国) とし、hoboNicolaのUSレイアウトオプションを有効としているときは以下のようなレイアウトが使いやすいかった。

nk60 MacOS用レイアウト(US)

基本レイアウトからの以下のように変更している。

  • F14キーを(MacOSの)英数キー(ImeOff)
  • 空白キーをF14キー
  • F15キーを空白キー
  • ひらがなキーを(MacOSの)かなキー(ImeOn)
  • CapsLockの位置の(Windowsの)英数キーを(MacOSの)英数キー(ImeOn)
  • CapsLockは、Fn + 英数キーでオンオフする。

キーボードの識別時に Fn + 右Shift  (アンダーバー) を入力していることが前提。そうでなければ、MacOSは英数キーやかなキーを無視する。

設定オプションの内容

MacOSでの利用に合わせた設定オプションは以下のようにしている。設定U 以外は日本語レイアウト、USレイアウトともに共通。

各設定オプションの意味合いについては、hoboNicolaの設定モードの説明 を参照のこと。

いずれのレイアウトでも、同時打鍵に使う左右の親指キーの左右にIMEを開閉するためのキー(英数、かな) を配置し、左親指キー単独打鍵では、F14キーのコードを出力するようにしている。

CapsLockキーの位置にもIMEを閉じるための英数キーを配置しているが、これはWindowsで長年そうしてきたクセである。CapsLockをオンにすることは滅多にないので。いちおう、Fnキー修飾でCapsLockをオンオフできるようにはした。

修飾キーのこと

MacOS用のキーボードでは、以下のように一部の修飾キーが異なっている。

MacOS用キー配置

WindowsでのGUI(Windows)キーの位置がCmdキー、Altキーの位置がOptionキーとなっている。ただ、キーボードから出力するコードは同じなので、ソフトウェア的な対応は何もない。

MacOS初心者のせいではあるのだが、クリップボードを利用したコピー/ペーストなどのときにCtrlキーを押してしまうことが多いから、CtrlとCmdを入れ替えた方が使いやすいかもしれない。

MacOSのIMEについて

MacOS付属のIMEと、Google日本語入力の2種類を使ってみたが、個人的には後者を使うようになった。その理由はIME操作のカスタマイズが可能だから。

Windowsで日本語を入力ときは、右親指キー単独打鍵で変換操作を、左親指キー単独打鍵で半確定操作や、かな変換(ひらがな→カタカナ… )操作をしている。同じような操作を実現しようとすると、標準のIMEではだめで、Google日本語入力 (GoogleJapaneseInput-2.29.5330.1+24.11.9) を導入し、若干カスタマイズする必要があった。

半確定操作について

無変換キー(左親指ー)を使った半確定操作というのは以下のような操作。

  1. ひらがな で書きたい文節、文字列を入力する。
  2. 左親指で無変換キーを押すことで、入力した文字列をひらがなに変換する(見た目は変わらない)。
  3. 入力した文字列をカタカナに変換するならば、無変換キーをもう一度押す。
  4. 次の文節の入力を開始する。これにより、無変換キーを押したところまでの文字列が確定しIMEからフラッシュされる。

IMEの状態的には、以下のように遷移している。

  1. 入力文字列無し → 変換前入力中
  2. 変換前入力中 → 変換中
  3. 変換中 → 変換中 (状態遷移無し)
  4. 変換中 → 入力文字列無し ~ 変換前入力中

無変換キー相当の機能をもつキーがない場合、(2) の時点でEnter(Return)キーを押すなどして入力した文字列を確定させる必要がある。あるいは、IMEの自動変換や自動確定を使う。カタカナへの変換はファンクションキーでも使う?

MacOS標準のIME

MacOS標準のIMEには、無変換という概念がない(?)。そもそも、そういうキーがないのだから当たり前だろうし、半確定操作という概念もないのだろうと解釈した。まだMacOSについての経験が浅いので、実は何かやり方があるのかもしれないし、半確定だの無変換だのは時代じゃないですよ、ということかもしれない。

Google日本語入力のカスタマイズ

MacOS用のhoboNicolaの設定では、F14キーを利用するようにしたのだが、Mac miniでF14キーを使うためには簡単な設定変更が必要だった。

F14キーを使えるようにする手順

システム設定/キーボード/キーボードショートカット… を開き、ディスプレイ を選択すると、以下のようになっている。

MacOSディスプレイ設定

F14,F15キーは、ディスプレイの輝度の調整用にシステムで利用されていて、このままでは入力には利用できない。hoboNicolaでの利用には必須なので、F14側のチェックを外して 完了 することで、F14キーが入力に使えるようになる。

なお、左親指キー単独による無変換や半確定操作は使わない、ひらがなの確定はEnterで行うということならば、F14キーが使える必要はないので、この操作は不要で以下のGoogle日本語のカスタマイズも不要になる。

Google日本語のキー設定のカスタマイズ

Google日本語に対して、F14キーをWindowsにおける無変換キーのように機能させるための設定を行った。

MacOS Google日本語の設定

Google日本語入力 Preferences (ConfigDialog) を開き、一般タブの キー設定の選択MS-IMEとし、編集をクリックしてカスタマイズを開始する。以下のキー設定ダイアログ が開く。

MacOS Google日本語の設定

そして、入力キーカラムをクリックしてソートしてやると、Muhenkan キーに関してコマンドが設定されていることが分かる。

MacOS Google日本語の設定

Muhenkanだけではなく存在しない Katakana キーについての項目も見える。

Muhenkanキーに割り当てられている3つのコマンドを、以下のようにF14キーに割り当ててやれば左親指キー単独打鍵時で半確定やかな変換といった機能が実現できる。

MacOS Google日本語の設定

Muhenkan項目の入力キーを変更してもいいし、F14キー用の項目を追加してもよい。

残念ながら、「入力文字なし」のときにF14キーを押しても、何もおきなかった。

項目の追加は、編集ボタンをクリックしてエントリーを追加 を選択して行う。入力キーは、実際に対象とするキーを叩いてやる必要があるので、存在しないキーは設定できない。

きょうのまとめ

nk60 USレイアウト

まだ Mac mini を使い始めてから半月ほどなのでよくわからないことも多いのだが、日本語入力についてはWindowsと遜色のないレベルになった。おおむねNICOLA配列のキーボードがあって、日本語と英語の切替えをトグル操作ではなく一方通行にできればそれでよし、というところか。

自作のnk60キーボードのほか以下の実装で動作を確認した。

日本語入力やIME操作の確認には、おもにGoogle Chromeブラウザで Google ドキュメントを開いて使った。MacOSに付属のメモ帳や Pages というエディタでも使えることは確認した。いろいろなデバイスとの連携性を考えると、Googleドキュメントやブログ(WordPress) のエディタを使うケースが一番多いかもしれない。

日本語入力しているときの印象としては、ふだん使っているWindows PC (Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz ) よりもちょっと遅い感じで、hoboNicolaが送信しているローマ字が瞬間的に見えることがある。ただ、文字の取りこぼしは一切発生しなかった。マシンパワーなのかグラフィックスの能力なのか、アプリの性能なのか、ちょっとわからないが、実用性には問題ないと感じている。