読者です 読者をやめる 読者になる 読者になる

TechNote

とあるエンジニアのただのメモ

WindowsユーザがMacbookのキーボード配置を限りなくWindowsに近づけてみたメモ

以前から煩わしく思っていた「MacWindowsのキー配置の違い」の問題に対し、思い切ってMacキーバインドWindowsに限りなく近づける方針でチューニングしてみたのでメモを残します。
※ちなみにここではMacBookProのUSキーボード環境で話を進めていますが、日本語キーボードの場合でも設定の流れは同じです。

f:id:kojikoji75:20140525215912j:plain
photo credit: Robert S. Donovan via photopin cc

サマリー

1.背景的なおはなし
2.WindowsMacの配置の違いを再確認、
  やりたいことの洗い出し
3.KeyRemap4MacBookにて設定作業
4.まとめ


1.背景的なおはなし

WindowsユーザがMacを使い出すときにまず戸惑うのが、キーバインドの問題です。

誰もが一度は両者のキー配置や役割の違いを埋めるための定番ソフト「KeyRemap4macbook」や「PCKeyboardHack」の情報に行き着くかと思います。わたしもMacbook購入当初は、KeyRemap4macbookを使ったチューニング方法をいろいろ読んだりもしました。

ですが、どの記事も「部分的に」Windowsに近づけるという最低限の設定で終わっていました(例えばCommandキーとControlキーの交換、バックスラッシュキーを半角全角切り替えの役割にする...あたり)。また、わたしも「最終的にはMacキーバインドに慣れないと意味がない」という思いがあったので最低限の設定しかやっていませんでした。

そんななか今回は、「会社が全てWindowsマシン」という環境のわたしが、Macに慣れれば慣れるほど会社での作業に影響が出てきている現状に煩わしさを感じたため、「完全に」キー配置をWindowsにあわせるという少しナンセンスかもしれない行動に踏み切りました。(Macbookキートップに印字された文字は完全に無視する方向です。)

環境





2.WindowsMacの配置の違いを再確認、やりたいことの洗い出し

一般的なWindowsキーボードとMacのキーボードは下記のとおりです。

Windows
f:id:kojikoji75:20140525201217j:plain
Mac
f:id:kojikoji75:20140525201236j:plain


Mac側に対して以下のような変更を加えることで、Windowsと変わりなく使えるはずです(わたしの使用範囲内では)。
f:id:kojikoji75:20140525210836j:plain

  • Mac側がキーが少ないので、Windows側の全キーを割り当てられるものではないことは作業前から明らかですが、従来使用していないところをうまく使用することでこの問題を解消することができそうです。
  • 右shiftなんか普段絶対使わないので、ちょうどその辺にくるはずである「_(アンダースコア)」に割り当てることにします。
  • その他、Enter周辺も少し調整をしていますが、要は自分の操作に大きな違和感がでなければいいのです。

尚、この案は「Windowsキーボードなら全部カラダが覚えてる」「Macキートップの印字文字は気にしない」ということが前提なので、「'」や「(」など、一つ位置がずれているだけのものも漏れ無くremapすることにします。



3.KeyRemap4MacBookにて設定作業

(1)インストール

KeyRemap4MacBookはここからインストールできます。
Karabiner - OS X用のソフトウェア


(2)設定作業

通常であればこの設定画面で、用意された設定に対してON/OFFしていくだけです。
f:id:kojikoji75:20140525211358p:plain

ですが、ここに用意されている設定項目だけでは痒いところには手が届きません。
そこで、private.xmlという設定ファイルを編集することになります。

private.xmlは「Misc&Uninstall」タブから開くことができます。
f:id:kojikoji75:20140525211419p:plain

Finderやターミナルからprivate.xmlを開きたい場合は、library\Application Support\KeyRemap4MacBookの中にあります。(いつでも元に戻せるようにprivate_bk.xmlなどでバックアップをとっておくとよいかもしれません)

テキストエディタで開くと、下記のようにまだ何も書かれていない状態です。

<?xml version="1.0"?>
<root>
</root>


このrootタグの間にに、2で考えた「やりたいこと」を書いていきます。

例えばこんな感じです。

<!--左commandと左controlを交換する-->
<item>
  <name>Swap COMMAND_LEFT and CONTROL_LEFT</name>
  <identifier>private.swap_commandleft_and_controlleft</identifier>
  <autogen>__KeyToKey__ KeyCode::COMMAND_LEFT, KeyCode::CONTROL_LEFT</autogen>
  <autogen>__KeyToKey__ KeyCode::CONTROL_LEFT, KeyCode::COMMAND_LEFT</autogen>
</item>

<!--バッククォートキーに半角全角切り替え(Command+Space)を割り当てる-->
<item>
  <name>Change BackQuote Key to Command+Space</name>
  <identifier>private.backquote_to_CommandandSpace</identifier>
  <autogen>__KeyToKey__ KeyCode::BACKQUOTE, KeyCode::SPACE,ModifierFlag::COMMAND_LEFT</autogen>
</item>
タグ 説明
name GUIで機能ONにするときに出てくる表示名称を書きます。
identifer ユニーク値を書きます。ユーザ側での設定には「private.」をつけることが推奨されています
autogen ここに変更前のキーと変更後のキーを書きます。「shift押しながら」みたいなやつはModifierFlagとして書きます。


キーコードの名前などは以下を参考に。
https://github.com/tekezo/KeyRemap4MacBook/blob/version_9.3.0/src/bridge/generator/keycode/data/KeyCode.data/

設定を反映させるときは下記をクリックします。
f:id:kojikoji75:20140525211556p:plain



ちなみに良い書き方といえないかもしれませんが、わたしは今回の設定は一括りと捉え「Swap_for_WindowsUser」というnameで全て一つのitem内に書きました。(ON/OFFも一つで済みます)

以下、今回作成したprivate.xmlです。

<?xml version="1.0"?>
<root>
  <item>
    <name>Swap_for_WindowsUser</name>
    <identifier>private.swap_space_and_tab</identifier>

	<!--左CommandとControlを交換-->
    <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::CONTROL_L</autogen>	
    <autogen>__KeyToKey__ KeyCode::CONTROL_L, KeyCode::COMMAND_L</autogen>	

	<!--半角全角切り替え-->
    <autogen>__KeyToKey__ KeyCode::BACKQUOTE, KeyCode::SPACE,ModifierFlag::COMMAND_L</autogen>	

    <!--その他-->
	<autogen>__KeyToKey__ KeyCode::BRACKET_LEFT, KeyCode::KEY_2,ModifierFlag::SHIFT_L</autogen>
    <autogen>__KeyToKey__ KeyCode::SEMICOLON,ModifierFlag::SHIFT_L, KeyCode::KEYPAD_PLUS</autogen>
    <autogen>__KeyToKey__ KeyCode::QUOTE, KeyCode::SEMICOLON,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_2,ModifierFlag::SHIFT_L, KeyCode::QUOTE,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_6,ModifierFlag::SHIFT_L, KeyCode::KEY_7,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_7,ModifierFlag::SHIFT_L, KeyCode::QUOTE</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_8,ModifierFlag::SHIFT_L, KeyCode::KEY_9,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_9,ModifierFlag::SHIFT_L, KeyCode::KEY_0,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::KEY_0,ModifierFlag::SHIFT_L, KeyCode::BACKQUOTE,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::MINUS,ModifierFlag::SHIFT_L, KeyCode::EQUAL</autogen>
	<autogen>__KeyToKey__ KeyCode::EQUAL, KeyCode::BACKSLASH</autogen>
	<autogen>__KeyToKey__ KeyCode::SHIFT_R, KeyCode::MINUS,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::BRACKET_RIGHT, KeyCode::BRACKET_LEFT</autogen>
	<autogen>__KeyToKey__ KeyCode::BACKSLASH, KeyCode::BRACKET_RIGHT</autogen>
	
	<!--この2つだけ設定が効かない、なぜ?-->
    <autogen>__KeyToKey__ KeyCode::QUOTE,ModifierFlag::SHIFT_L, KeyCode::KEY_8,ModifierFlag::SHIFT_L</autogen>
	<autogen>__KeyToKey__ KeyCode::BRACKET_LEFT,ModifierFlag::SHIFT_L, KeyCode::BACKQUOTE</autogen>

  </item>
</root>

追記

設定が効かなかった原因がわかったので追記しておきます。
「シフト押しながら●●キー 押下時は ▲▲キーの役割とする」という記述は、●●キー単体(シフト押さない)に対する設定より前に記述するときちんと作用します。



4.まとめ

上記のコメント部分に記しているとおり一部設定が効いていないものもあるため、その部分に関しては原因調査中です。わかる方がいらしたら教えてください。(解決済みです、"追記"参照)

とりあえずは問題なくWindowsライクなキーバインドを実現できることがわかりました。

個人的には「自宅ではMac使いだけど会社がWindowsなので、キーバインドがどっちつかずになって困る」という人にはオススメできる設定だと思います。



あわせて読みたい

macのネット環境を爆速化したメモ - TechNotemacのネット環境を爆速化したメモ - TechNote

タイトルに「爆速」と書きましたが、これは今まで遅い状態のままで使用してきた時期が長かったので、普通の速度になっただけで「爆速」に感じてしまった結果です。phot...

VirtualBoxを使ってMac上でWindows8を動かしてみた - TechNoteVirtualBoxを使ってMac上でWindows8を動かしてみた - TechNote

今年はiPhone/Androidアプリ作成に着手しようと、Macの使用環境を整え中です。そんな中、やはりMacを使いながら、同じ画面でWindowsが使える環...

Macで上手にスクリーンキャプチャをする方法 まとめ - TechNoteMacで上手にスクリーンキャプチャをする方法 まとめ - TechNote

WindowsではもっぱらAlt+PrintSreenなどでクリップボードへ保存されたイメージをペイントツールに貼付けて名前を付けて保存していたが、Macに変え...


Mac最強バイブル (100%ムックシリーズ)

Mac最強バイブル (100%ムックシリーズ)