開発^3

Web開発、宇宙開発、ゲーム開発の3種類についてつらつらと

Ctrl + Shift + SpaceでScanSnap Managerのダイアログが開いてしまう場合の対策

2) PfuSsMon32.cfg ファイルを、メモ帳などで開き、以下の項目
 (IsRegist_HotKey=0)を追加してください。

 [CONFIG_C]
 IsRegist_HotKey=0

http://aide-memoire.seesaa.net/article/20699317.html


リンク先は2006年の記事なので、ScanSnap ManagerかSpanSnap本体のバージョンアップに伴って場所が変わっているようだ。
iX500に付属してきたScanSnap Managerの場合、同ディレクトリのSsCommon.cfgに同様の設定を書くことで抑止できた。

例で学ぶ所得税と年末調整(ついでに復興税)

会社によって時期は違うようですが、そろそろ年末調整の書類を提出した人が多いかと思います。でも、年末調整の仕組みや所得税の仕組みをちゃんと知っている人は少ないのではないでしょうか?会社務めをしていると会社側で計算してもらえるため、あまり関わることはありませんが「理由はわからないけど引かれてる」のは、なんとなく気持ち悪いものです。
ということで、とあるサラリーマン「Aさん」を仮定して所得税を計算してみたいと思います。


Aさんの例を使った計算は青文字で書くことにします。

なお、独学で調べただけなので勘違いしている箇所があるかもしれません。あしからず。
あと、全部の分野を1エントリで書くのは無理なので、ほどほどに一般的な「Aさん」を仮定します。

まずは「Aさん」の設定


年収:600万円
年齢:40歳
勤務先:東京都
健康保険組合全国健康保険協会協会けんぽ
家族構成:本人、妻(専業主婦)の2人
生命保険:月額6,000円の生命保険を支払中

そもそも年末調整って?

支払い済みの所得税と、実際の所得税を差し引きして調整するための仕組みです。
住民税は「昨年の収入」に対してかかる税金のため、既に金額が確定していますが、所得税は「今年の収入」に対してかかる税金のため、12月の給与明細が出てこないと税金の額が確定しません。*1

しかし、年末や年度末になってから一括で所得税を徴収すると、国としても収入が読みづらく不安定になりますし、徴収される側としても年末にいきなり大金が持っていかれるのは困ります。そのため、毎月の給料や賞与(ボーナス)の支給時に所得税を引いた額を支給しています。これが源泉徴収です。

では所得税って?

その名の通り「所得」に対してかかる税金です。分かりやすく言えば収入に対してかかる税金ですが、収入全額にかかるわけではなく、様々な「控除」が存在します。

所得税=(収入 − 控除) × 税率

収入の種類や、家族構成などによって控除の種類は異なりますが、大抵のサラリーマンは「給与収入」のみを考えれば良いでしょう。「給与収入」は普段目にする「給与」「賞与(ボーナス)」の合計額になります。(手取り額ではなく、色々引かれる前の金額)
この「給与収入」は幅広く、月の給料、ボーナス、住宅手当、食事手当、職能給などを全て含みます。ただし、通勤手当だけはちょっと取り扱いが特殊です。今回は概算ということでAさんは通勤手当なしで給与収入600万としておきます。


Aさんの場合:
給与収入 = 6,000,000円

それでは、様々な控除について一つずつ見ていきたいと思います。

給与所得控除

まずは給与所得控除です。
自営業者などであれば「収入−仕入原価−経費」で利益(所得)が求まりますが、サラリーマンの場合は「経費」というものがはっきりしません。そのため、給与収入を得ている人の場合は、以下の表に従って計算した金額を「給与所得控除」とすることになっています。

給与収入 給与所得控除額*2
〜1,800,000円 収入金額×40%(650,000円に満たない場合には650,000円)
1,800,000円〜3,600,000円以下 収入金額×30%+180,000円
3,600,000円〜6,600,000円以下 収入金額×20%+540,000円
6,600,000円〜10,000,000円以下 収入金額×10%+1,200,000円
10,000,000円〜 収入金額×5%+1,700,000円

180万や360万といった境目で40%から30%、20%へ一気に変化しますが、その分補正が入っているので下図の青線(給与所得控除額)、赤線(給与所得控除後の金額)共に滑らかに変化していきます。


Aさんの場合:
給与所得控除額 = 6,000,000円 × 20% + 540,000円 = 1,740,000円
給与所得控除後の金額 = 6,000,000円 − 1,740,000円 = 4,260,000円

……と求めておいて何なのですが、660万以下の場合は早見表があります。
しかも、実際には4,000円単位で端数が切り捨てられたりするので、こっちの表の方が正確です。
http://www.nta.go.jp/shiraberu/ippanjoho/pamph/gensen/nencho2012/pdf/79-87.pdf

社会保険料控除

続いては社会保険料控除。月給や賞与からは様々な保険料が引かれていますが、この額は全額控除になります。主な項目は以下の通りです。

健康保険料

健康保険料、介護保険料、厚生年金保険料については、4月〜6月の収入に応じて金額が変わったり、4月と9月に金額の更新があったりとややこしく、これだけで1エントリ書けてしまうため、ここでは概算で求めてみたいと思います。

さて、まずは健康保険組合の話から。健康保険組合には、もともと国が運営していた「全国健康保険協会」通称「協会けんぽ」と、業界団体やグループ企業などが集まって運営する私設の健康保険組合、この二種類が存在します。
勤務先が参加している健康保険組合によって保険料率が異なり、協会けんぽの場合は勤務先の住所によって異なりますが9.85%〜10.16%(平成24年)、それ以外の健康保険組合の場合は協会けんぽより1〜2%程度安く設定されています。
また、大抵の保険組合では会社側と労働者側が半分ずつ払うことになっているため(労使折半)、労働者の負担額は給与の5%前後となります。


Aさんの場合(概算):
給与収入 = 6,000,000円
健康保険料率 = 9.97%(協会けんぽ、東京)、労使折半により4.985%
年間の健康保険料 = 給与収入 × 健康保険料率 = 6,000,000円 × 4.985% = 299,100円

介護保険

40歳以上の場合は介護保険料が発生します。
健康保険料率と同じく、所属している健康保険組合によって異なりますが、協会けんぽの場合は全国一律で1.55%(平成24年)となっています。


Aさんの場合(概算):
給与収入 = 6,000,000円
介護保険料率 = 1.55%(協会けんぽ)、労使折半により0.775%
年間の介護保険料 = 給与収入 × 介護保険料率 = 6,000,000円 × 0.775% = 46,500円

厚生年金保険料

サラリーマンの場合は第2号被保険者という区分になるため、厚生年金保険料の支払いが発生します。
平成24年の保険料率は16.766%ですが、毎年0.354%ずつ引き上げられ、平成29年に18.3%となることが既に決定されています。
これも労使折半のため、労働者の負担額は給与の8.383%となります(平成24年の場合)


Aさんの場合(概算):
給与収入 = 6,000,000円
厚生年金保険料率 = 16.766%、労使折半により8.383%
年間の厚生年金保険料 = 給与収入 × 厚生年金保険料率 = 6,000,000円 × 8.383% = 502,980円

雇用保険

4月に改定されて1.55%→1.35%になりましたが、今回は概算なので1.35%一律で計算してみます。労働者負担が0.5%、会社負担が0.85%と決められているので、労働者の負担額は給与の0.5%となります。少ないように見えますが一年分をまとめるとそれなりの額になります。


Aさんの場合:
給与収入 = 6,000,000円
雇用保険料率 = 0.5%
年間の雇用保険料 = 給与収入 × 雇用保険料率 = 6,000,000円 × 0.5% = 30,000円

生命保険料控除

今年から税制が変わりましたが、平成23年末より前に契約した保険の場合は、旧制度のまま変更無しです。
ここでは旧制度の計算式で行こうと思います。

年間の支払保険料等 控除額
〜25,000円 支払保険料等の全額
25,000円〜50,000円 支払保険料等×1/2 + 12,500円
50,000円〜100,000円 支払保険料等×1/4 + 25,000円
100,000円〜 一律50,000円


Aさんの場合:
月額保険料 = 6,000円
年間の保険料 = 6,000円 × 12ヶ月 = 72,000円
生命保険料控除額 = 72,000円 × 1/4 + 25,000円 = 43,000円

扶養控除

これはよく聞く控除項目だと思います。
生計を共にしている家族の中で収入が103万以下の人がいれば、一人につき38万円の控除が受けられます。
パートに出ている主婦が103万円以下に抑えようとするのは、これが理由ですね。


Aさんの場合:
専業主婦の妻:380,000円

医療費控除

医者にかかった際の費用や、入院費用、通院時の交通費、薬代などを合計して10万円を超えている場合、超えた部分が控除額となります。といっても、健康保険によって三割負担ですむため、大病しない限りはなかなか到達しません。
なお、年末調整の時点ではその年の医療費は確定していないため、翌年三月に確定申告を行うことになります。

基礎控除

みんな共通で38万円です。


Aさんの場合:
共通:380,000円

所得税の計算

他にも控除は存在しますが、サラリーマンに影響の大きい所はだいぶ出そろったので今回はこれぐらいにしておきましょう。さて、Aさんの所得税を計算してみたいと思います。

所得税 =(収入 − 控除) × 税率

まずは収入から控除を引いて「課税対象額」を求めるところまで。


Aさんの場合:
収入:
給与収入 = 6,000,000円

控除:
給与所得控除 = 1,740,000円
健康保険料控除 = 299,100円
介護保険料控除 = 46,500円
厚生年金保険料控除 = 502,980円
雇用保険料控除 = 30,000円
生命保険料控除 = 43,000円
扶養控除 = 380,000円
基礎控除 = 380,000円

                                        • -

控除合計 = 3,421,580円

課税対象額 = 6,000,000円 − 3,421,580円 = 2,578,420円

所得税

所得税累進課税制度になっているため、所得に応じて5%〜40%まで税率が上がる仕組みになっています。

課税対象額 所得税
〜195万円 5%
195万円〜330万円 10% − 97,500円
330万円〜695万円 20% − 427,500円
695万円〜900万円 23% − 636,000円
900万円〜1,800万円 33% − 1,536,000円
1,800万円〜 40% − 2,796,000円

195万円を超えた途端に2倍の税率になるように見えますが、実際には195万を超えた部分だけが10%の税率となるようになっています。


Aさんの場合:
課税対象額 = 2,578,420円
所得税 = 2,578,420円 × 10% − 97,500円 = 160,342円

というわけで、Aさんの所得税は160,342円となりました。100円未満は切り捨てられるので160,300円ですね。
所得税額が分かったので、年末調整で還付される金額も求められます。
還付額 = 源泉徴収で今まで払ってきた所得税額 − 所得税

今回の記事では健康保険料、厚生年金保険料などを概算で求めているため、多少の誤差がありますが、毎月の給与明細を元にじっくり計算すれば返ってくる金額を1円単位で当てることもできるようになります。

おまけ:復興税は幾ら?

平成25年から復興税が導入されます。いくつかの分野に分かれて増税されますが、個人の場合は所得税、住民税が主になるかと思います。

復興税(所得税部分)

所得税への増額分は以下のようになります。

復興特別所得税所得税 × 2.1%


Aさんの場合(平成25年も平成24年と同じ収入とします):
所得税 = 160,300円
復興特別所得税 = 160,300円 × 2.1% = 3366円

復興税(住民税部分)

収入に関係なく年1000円

合計すると、年収400万で年間3000円程度、年収600万で年間4500円程度の負担増となるようです。

復興税は期間が長く所得税は25年、住民税は10年に渡って負担が発生しますが、一年当たりの金額で見るとそう大きくは無いようです。

*1:12月の給与をもらった後に収入があったり、控除が発生したりすることもあるので、差が出た人は翌年3月に確定申告を行います

*2:平成25年からは上限が245万に制限

宇宙開発イベントスケジュール

世界中で打ち上げられるロケットの打ち上げ予定やISS関連のイベントを日本時間に変換して表示するサイトを作ってみました。
宇宙開発イベントスケジュール


大分前に話があって作ったんですが、ブログでは初お披露目。
思ったよりも頻繁に打ち上がっているでしょ?


中国の打ち上げは予定が載らないことも多いので、実際にはこれよりも多め。週あたり1〜2機は打ちあがってますね。
最近の打ち上げはネットでライブ中継されることが多いので、チャンスがあったら以下の中継サイトとかを見てみると面白いです。


以下、裏側でやっていること。

続きを読む

ruby 1.9.3 + libharu 2.1.0 + 手軽に高橋メソッドな PDF v2

高橋メソッドをやろうと思う

Google Docsのプレゼンテーションはフォントサイズに限界値があることを知る

変換ツール手軽に高橋メソッドな PDF v2)を見つける

結構古いので動かすのに手間取る

動いた←いまここ

というわけで、忘れないうちにメモを残しておきます。

試した環境はさくらVPS、rvm使ってruby1.9.3をインストール済

続きを読む

Rubyで階層の深いHashを手軽に作成する

元ネタ
階層の深いHashを作成するときに知っておいたら便利なこと - (゚∀゚)o彡 sasata299's blog

#!/usr/bin/ruby
 
hash = Hash.new { |h,k| h[k] = {} }
 
hash["foo"]["bar"] = 1
p hash # {"foo"=>{"bar"=>1}}

元ネタで紹介されているのは上記の方法ですね。
2階層の場合はこれで問題ないんですが、三階層以上の場合にエラるんですよね。

#!/usr/bin/ruby

hash = Hash.new { |h,k| h[k] = {} }
hash["hoge"]["piyo"]["neko"] = 3 # base.rb:4:in `<main>': undefined method `[]=' for nil:NilClass (NoMethodError)

とうことで

何階層でも自動生成してくれる方法を考えてみました。
基本的な考え方は一緒で、生成部分をProcにすることで毎回呼ぶように変更した感じ。
proc_hashと変数を作らないといけないのがちょっと難点。変数なくせないかlambdaやら試してみましたが上手く行かなかったです。残念。

proc_hash = Proc.new { |h, k| h[k] = Hash.new &proc_hash; }
hash = Hash.new &proc_hash

hash["foo"]["bar"] = 1
p hash # {"foo"=>{"bar"=>1}}

hash["a"]["b"]["c"] = 5
p hash # append {"a"=>{"b"=>{"c"=>5}}}

hash["neko"]["inu"]["saru"]["kiji"] = "momotarou++"
p hash # append {"neko"=>{"inu"=>{"kiji"=>{"saru"=>"momotarou++"}}}}

caolan/asyncを使ったNode.jsのフロー制御

JavaScript Advent Calendar 2011 (Node.js/WebSocketsコース)の16日目です。

@koichikさんの13日目の記事にも書かれているように、Node.jsにて非同期処理を管理する方法には以下の2種類があります

  • 非同期処理の呼び出し時にコールバック関数を与える。処理が終わったらエラーの有無と、結果が通知される。
  • EventEmitterに対してon/onceでEventListenerをセットして非同期処理を実行する。非同期処理の実行によって発生したイベントやエラーはリスナーに通知される。

後者の説明はkoichikさんの記事にお任せして、この記事は前者を扱うライブラリcaolan/asyncについてみていきたいと思います。

caolan/asyncって?

https://github.com/caolan/async で公開されているフロー制御ライブラリです。
自分はNode.jsで使っていますが、ブラウザ上で動くJavaScriptを書く場合にも使用できるようです。

https://github.com/joyent/node/wiki/modules#wiki-async-flowに記載されているNode.js用フロー制御モジュールは既に50を超えていますが、試してみた中では一番使いやすいモジュールでした。
# さすがに50すべては試せていないです。githubのwatcher数1000オーバー、folk数62ということで少なくともフロー制御モジュールの最大手ではあるはず。

asyncが実現してくれるフロー制御の一部はまさに「非同期プログラミングの改善」のエッセンスの内容なので、先に読んでおくと理解が深まるかと思います。

何をしてくれる?

asyncがやってくれる処理には様々なものがありますが、まずはasync#seriesを例にして説明していきたいと思います。
hogeディレクトリを掘って、piyoディレクトリを掘って、その下にデータを書きだすコードをコールバックを使って書くと以下のようになります。
(ディレクトリ堀は再帰的にやってくれるモジュールがありますが見なかった方向で)

var fs = require('fs');
fs.mkdir('./hoge', function(err) {
  if(err) {
    // エラー処理
    return;
  }
  
  fs.mkdir('./hoge/piyo', function(err) {
    if(err) {
      // エラー処理
      return;
    }   

    fs.writeFile('./hoge/piyo/neko', 'Hello Node.js', function(err) {
      if(err) {
        // エラー処理
        return;
      }   
      console.log('success');
    }); 
  }); 
});

この例のように、非同期処理の終了を待ってから次の処理をさせる場合、ネストが深くなる、エラー処理があちこちに分散するといった問題点があります。
では、このコードをasyncを使った形で書き直してみましょう。

var fs = require('fs');
var async = require('async');

var tasks = []; 
tasks.push(function(next) { fs.mkdir('./hoge', next); }); 
tasks.push(function(next) { fs.mkdir('./hoge/piyo', next); }); 
tasks.push(function(next) { fs.writeFile('./hoge/piyo/neko', 'Hello Node.js', next); }); 

async.series(tasks, function(err, results) {
  if(err) {
    // エラー処理
    return;
  }
  console.log('success');
  console.log(results);     //  [undefined, undefined, undefined]
});

はい、エラー処理が一カ所にまとまりました。
ネストが深くなることもなく、処理もtasksにまとまっていて良い感じです。

async#seriesは第一引数で与えられたtasksの処理を順番に実行してくれるメソッドです。
tasksに格納された各処理は、自分の処理が終わった時点でnext()を呼び出し、「エラーの有無」と「自分の処理結果」を通知します。
エラーが発生しなかった場合には自動的に次の処理が呼び出され、 エラーが発生した場合には、それより先の処理は実行されずにasync.seriesの第二引数に渡された関数が呼び出されます。
errには発生したエラー(エラーなしの場合はnull)が入り、resultsには各処理の処理結果がまとめて入ります。
今回使ったfs#mkdirやfs#writeFileはエラーの有無のみを通知する為、resultsに関しては次項の例を見てもらった方が分かりやすいかと思います。*1

async#series, async#parallel

asyncモジュールにはseries以外にも様々なメソッドが用意されています。
ここからは、それらの処理の流れを図で表しながら簡単に説明していきたいと思います。

まずはasync#seriesです。
先ほど説明した通り、一つの処理が終わってから次の処理が行われ、それぞれの処理結果がendに集約されています。


凡例:
・青い四角:処理
・赤い四角:データ
・青線:処理の流れ
・赤線:データの流れ
・finish:async#****を呼び出すときに与えられるcallback関数
(エラー発生時か、全部の処理が終わった後に呼ばれる関数)

# 図はCacooにて作成。Excelは図を描くツールではないのです。

つづいて、async#parallel。こちらは全部の処理が同時に実行され、すべてが終わった時点でendが呼ばれます。
この場合もseriesと同じく、それぞれの処理結果はendに集約されています。

async#seriesとasync#parallelの違いを見るために「delayミリ秒待ってからtextの内容を出力し、処理結果としてresultを返す関数」を作って試してみます。

function delayedPrint(delay, text, result) {
  return function(next) {
    setTimeout(function() {
      util.log(text);
      next(null, result);
    }, delay);
  }
}

var tasks = []; 
tasks.push(delayedPrint(3000, 'test1', 'result1'));
tasks.push(delayedPrint(2000, 'test2', 'result2'));
tasks.push(delayedPrint(1000, 'test3', 'result3'));
async#seriesの場合
util.log('start');
async.series(tasks, function(err, results) {
  util.log('true end');
  console.log(results);
});

util.log('end?  ... NO. while processing.');

実行結果:

16 Dec 01:39:13 - start
16 Dec 01:39:13 - end?  ... NO. while processing.
16 Dec 01:39:16 - test1
16 Dec 01:39:18 - test2
16 Dec 01:39:19 - test3
16 Dec 01:39:19 - true end
[ 'result1', 'result2', 'result3' ]
async#parallelの場合
util.log('start');
async.series(tasks, function(err, results) {
  util.log('true end');
  console.log(results);
});

util.log('end?  ... NO. while processing.');

実行結果:

16 Dec 01:40:15 - start
16 Dec 01:40:15 - end?  ... NO. while processing.
16 Dec 01:40:16 - test3
16 Dec 01:40:17 - test2
16 Dec 01:40:18 - test1
16 Dec 01:40:18 - true end
[ 'result1', 'result2', 'result3' ]

これらの結果から以下のことが分かります。

  • end?の時点ではまだ処理が終わっていない。全部の処理が終了したのはtrue endの時点。
  • startからendまでの時間がseriesでは直列実行の為、3 + 2 + 1 = 6秒
  • startからendまでの時間がparallelでは並列実行の為で、max(3, 2, 1) = 3秒
  • parallelの例を見るとわかるようにresultsに入ってくるのは処理の完了順ではなくtasksの順

async#waterfall

async#waterfallを図に表すと以下のようになります。

処理の流れ自体はseriesと同等ですが、seriesと違い、処理結果が次の処理に与えられます。
便利なメソッドであることは確かなのですが、このメソッドに関しては気になっていることがある為、後日改めてエントリを起こそうと思います。

async#forEach, async#forEachSeries

前項で紹介したseries, parallel, waterfallは複数の処理の流れを制御する形でしたが、配列の各要素に対して同じ処理を実行することも良くあります。
同期処理であればArray#forEachを使えばよいのですが、その中に非同期処理が含まれている場合、Array#forEachから処理が返った時点では配列の各要素に対する処理が終わっていません。
asyncではこういった場合に使えるメソッドとしてforEach, forEachSeriesというメソッドを用意しています。

名前からもわかるようにforEachは並列処理を行い、forEachSeriesは直列に処理を行います。



async#map, async#mapSeries

forEachやforEachSeriesは配列の各要素に対して処理を行いますが、処理結果を返す機能は持っていません。
配列の要素を変換したい場合などにはArray#mapと同じく、async#mapを用います。
これもforEachと同じくasync#mapとasync#mapSeriesの二つが用意されているため、変換ロジックの重さに応じて好きな方を選ぶことができます。



ほかの関数

今回は紹介しきれませんでしたが、caolan/asyncには他にも以下のようなメソッドを提供しています。

  • makeファイルのように各タスクに前提条件を指定すると、自動的に順番を組み立ててくれるauto
  • forEach/mapのようにArrayが提供していた処理をやってくれるfilter, filterSeries, reject, rejectSeries, reduce, reduceRight, concat, concatSeries, some, any, every, all
  • 条件を満たす間 or 満たすまで処理を続けるwhilst, until
  • 並列で実行する最大数を指定して大量のタスクを処理させられるqueue
  • 重い処理の処理結果を自動的にキャッシュして二回目以降の呼び出しを軽くするmemoize

これらのメソッドとEventEmitterをうまく使うことで処理の流れを整理し、処理の流れが分かりやすいコードを目指しましょう!

明日は@n_matsuiさんです。

*1:例選びに失敗した感がひしひしと

MacBookAirでWindowsを使う場合のキー設定

MacBookAirにBootCampでWindowsを入れて使っていますが109キーボードとは形状がことなる為、特殊キーの入力方法がややこしかったり、違和感があったりします。
自分が設定した内容をまとめてみました。

特殊キーの入力方法

まずは押し方次第で入力できる特殊キーの一覧。
Pause, Insert, PrintScreen, ScrollLockあたりは一風変わったキー入力ですね。

Windows環境のキー(仮想キーコード)MBAのキー入力
Backspace (0x08)delete
Pause (0x13)fn + esc
無変換 (0x1D)英数
ひらがなかな
Insert (0x2D)fn + enter
Delete (0x2E)fn + delete
左Win (0x5B)左command
右Win (0x5C)右command
IME ON/OFFcaps
PageUp (0x21)fn + ↑
PageDown (0x22)fn + ↓
Home (0x24)fn + ←
End (0x23)fn + →
PrintScreen (0x2C)fn + 左shift + F11
ScrollLock (0x91)fn + 左shift + F12
Ctrl + Alt + Deletefn + control + alt + delete

キーレイアウトの変更

Windows環境の場合、以下のレジストリを変更することである程度キーレイアウトを変更することができます。

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\Scancode Map

ChangeKeyというフリーソフトでも変更可能です。このアプリが中でやっていることはレジストリの変更なので「管理者として実行」で起動する必要あり。

自分の場合、普段使っているのが91キーボードなので、こんな風にレイアウトしてみました。

  • 「Altキー」 → 「左Winキー」(交換)
  • 「左Winキー」 → 「Altキー」(交換)
    • キートップの表示とはずれますが、Altの位置が違うとアクセラレータの入力に戸惑うので位置を交換
  • 「右Winキー」 → 「アプリケーションキー
    • アプリケーションキー(右クリック同等)を入力する方法がShift + F10*1しかなかったので、使わない右Winキーを潰して割り当て

IMEの設定変更

Macでは標準になっている「かな」/「英数」でIMEのON/OFFが切り替わるのが好きなのでMicrosoft IMEも設定変更

*1:あまり使われていなそうだが、これはWindowsの標準機能