React testing libraryでテストを書いていた時に、userEvent.keyboardでスペースキーを押したい場面がありました。
エンターキーは
await userEvent.keyboard('{enter}')
と押せますので、スペースキーも
- await userEvent.keyboard('{space}')
だなと思ったんですけど、実際は
- await userEvent.keyboard('{ }')
でした。
英語圏だと単語の区切りに入力する「文字」ですので、これは特殊キーではないということ?!
スペースキーに「特殊キーみ」を感じているのは自分だけではないのでは?と思ってちょっと調べてみました。
調査
whitespace character
空白"文字"、つまり空白は文字。
event.key
例のところを見ると特殊キーたちに混ざってスペースキーがいる。スペースキーは特殊キーなのかと思わせる例文!でもevent.keyもスペースだけは文字としての" "が入ってくるんだなあ
switch (event.key) {
case "ArrowDown":
// Do something for "down arrow" key press.
break;
case "ArrowUp":
// Do something for "up arrow" key press.
break;
case "ArrowLeft":
// Do something for "left arrow" key press.
break;
case "ArrowRight":
// Do something for "right arrow" key press.
break;
case "Enter":
// Do something for "enter" or "return" key press.
break;
case " ":
// Do something for "space" key press.
break;
case "Escape":
// Do something for "esc" key press.
break;
default:
return; // Quit when this doesn't handle the key event.
}
userEvent.keyboard
keyMapというファイルにも、スペースキーは記号たち()!@#$%^&*(
)の中にはいなくて、特殊キーの中にある。
大体結論
英語圏の感覚としては多分文字。だけどCUIの時代から要素をToggleしたり機能を持っていることもある。さらに日本語ではそもそもスペースを文字として打つことはあまりなくて、変換キーのように使っているからか、特殊キーみが強いのかもしれない。さらに"space key"ではなく" key"と言われても何のことかわからない、という問題もある。
他にも文字なのか特殊キーなのかわかりにくいやつがいるのかと思って考えてみましたがたぶんスペースだけっぽいですね。