iPadでScratch使用時にスペースキーのイベント処理がうまく動作しない

Noteでは書いていたんだけど、長く残すためにこちらにも転記しました。内容は変更はありません。

note.com

note.com

2022年3月の年度末にiPadScratchのワークショップを計画していました。扱うワークをどうするか検討中に不思議な事象が発生してしまったの、調査を解決策をメモっておきます。

iPadでScratchを動かす

Scratchはいわずと知れた無料の教育プログラミング言語及びその開発環境でですが、iPadに関していうとブラウザ経由でしようすることになるかと思います。オフラインのアプリがダウンロードできるといいのですが、ストアにはScratch.Jrあるのですが、iPad用にはみあたりません。

f:id:ueponx:20220330235642p:plain

iPadでブラウザとなるとSafariを利用するか、別途ダウンロードしたGoogle Chromeを使用するかどちらかになるのかなと思いましたが、何台もiPadを準備する必要があったので、Safariで行う方向で検討しました。

以下のようにブラウザでアクセスしても問題なくエディタを開くことはできます。

f:id:ueponx:20220330235722p:plain

もちろんGoogle Chromeでも同様にScratchを動作させることはできます。ただ、画面上部にアドレスバーなどがあるので、ちょっと画面が狭いですがPCのように最大化することもできます。Safariではアドレスバー左側のあたりをタッチするとメニューが表示されて最大化をすることができるようです。

f:id:ueponx:20220330235857p:plain

不思議な現象が発生

そんな中、PCでワークショップ用の授業の内容を作っていて、iPadでも動作するかを確かめることになりましたが、現象はそこで発生しました。

想定の環境ではiPadに物理的にUSB経由でキーボードとマウスを接続してPCとほぼ同じ環境にしようとしていました。そのため、以下の変換コネクタを使用しています。これ2ポート接続できるので他のものより少し便利です。

f:id:ueponx:20220331000049p:plain

行っていたのはキーボード入力を受け付けて猫のスプライトを動かすというもので、少し簡素化すると以下のようになります。

f:id:ueponx:20220331000116p:plain

このコードではキーボードの【スペースキー】と【右向き矢印】のどちらを動かしても10歩動かすようになっているのですが、動作させると【右向き矢印】では意図通り動作しますが、【スペースキー】では動作しません。

もしかしてSafari側特有の問題なのかなと思って、Google Chromeでも試してみたのですが、やはりうまく動作しません。【矢印キー】が動作するので他のキー試してみたのですが、やはり【スペースキー】ではうまく動作してくれません。

いろいろと調査

ネットで同じような情報がないかと検索すると、うまくいかないこともあるという非常にあいまいな情報が多かったです。その時の打ち合わせでは時間がなかったこともあり、使用するキーを変更しましょうという話で決着がついたのですが、やはりもやもやしてしまいます。

iPadを家に持ち帰り、同様にやってみたのですが、うまく動作しました。あれ?

環境は変わっていません、接続するUSBキーボードが違うといったことはありますが、USBキーボードは特殊なデバイスでない一般的なものです。先ほどネット検索したときになんとなく引っかかった表現「うまくいかないこともある」というのはこういうところからきてるのかも?と思いました。

なにが違うのか考えてみたのですが、Scratch側のアプリには関係のない処理に原因があるのではないかと予想しました。そして、【スペースキー】のみ発生している事象なのでこのあたりに何があるのではと思って調べてみます。

原因は・・・?

いろいろと実験をすることで原因がわかりました。iPadに日本語キーボードを導入していて、操作時の入力モードが日本語入力になっているとスペースキーの動作が変換などに割当られ、【スペースキー】を押しても、スペース文字が入力されない状態になっていました。

授業デモのときには、日本語変換のままでScratchを操作していて、調査時は英数入力でScratchを操作していたという違いになります。

ようやく原因がわかりました。が、これ現在の入力モードがどちらなのかは実はScratch上では簡単にはわからないようです。また、物理キーボードの変換ボタンを押しても入力モードは変化しません(ここも厄介)。

キーボードを強制的に表示するのもできないようで、数値入力可能なのブロックなどにしてもこの日本語入力モードなのかどうかはわかりません(数値しか入力できないので)、最終的に行き着いたのは見た目のグループにある【話すブロック】を1つ取り出して、そこで文字を入力することで日本語入力モードか否かを判定する方法を思いつきました。

f:id:ueponx:20220331000307p:plain

変数やはなす言葉を日本語で入力することは多いので、変換の戻し忘れで容易にこのような動作になることは多いのかなと思いました。

この事象は日本でしか発生しない可能性があるので修正には結構時間がかかりそうですね。

日本語入力モード英数入力モードとを切り替える方法

先程はScratchを動作させているブラウザ(SafariChromeなど)で入力できる箇所で、日本語入力モードから英数入力モードに変更して、使用するというような回避をするとしていましたが、ちゃんと解決手段がわかりました。

対応方法について

ではどうやったらキーボードの操作によって、英数入力モードに変更できるかというと、

【Controlキー + スペースキー】を押下する

iPadに接続したキーボードでは【Controlキー + スペースキー】を押すことで言語を切り替えが可能になります。

f:id:ueponx:20220331000705p:plain

【Caps Lockキー】を押下する

iPad側の設定【Caps Lockキー】を押すことで切り替えることも可能です。

設定方法は以下で行います。デフォルトではオンになっているかもしれませんが念の為設定を確認しましょう。

【Caps Lockキー】を使っての切り替えは、iPadの【設定】から【一般】を選択して【キーボード】を選びます。【ハードウェアキーボード】()内の【Caps Lockを押して言語を切り替え】をオンにすることで、 【Caps Lockキー】を押して言語の切り替え(日本語入力モード⇔英数入力モード)が可能になります(切替えはこの2つに限られるようです)

(※)【ハードウエアキーボード】の設定はUSBキーボードを接続しないと表示されません。

f:id:ueponx:20220331000806p:plain

f:id:ueponx:20220331000822p:plain

f:id:ueponx:20220331000834p:plain

実際に入力時に【Casps Lockキー】を押下すると切り替えメニューが表示されるようになります。

f:id:ueponx:20220331000907p:plain

おわりに

iPadでScratchを動作させたときの不思議な挙動とその対応策についてのメモでした。iPadなどのタブレットでは日本語入力モードで変わった挙動をすることもあるので、キーボード周りの動作がおかしい場合には一度疑ってみてもいいでしょう。

ただ、【半角/全角キー】でできないのかは納得してない感じです😥

あと、【マイナス(-)記号】を入力すると、日本語変換候補ではほとんど違いの判別のつかない【マイナス記号】が出てくるのも辛いところです😥

【結論】スペースキーが動作しない場合には日本語入力モードを疑え

蛇足

日本語変換に関する動作で変わった挙動を示すのはScratchだけには限りません、以前Makecodeでも変わった動作が発生しました。それは日本語入力モードで数値【0】を入力すると【0】が2つ入力されてしまうというものでした。

日本語入力モードの入力と入力ボックスでのキーイベントの文字入力の2つが動作しているのは?という予想です。このときは入力値がおかしいのがすぐにわかる状況なので問題はないのですが、今回の実行時に発生する事象に関しては原因の特定が難しいですね。とくに、ある時は正常に動き、とあるときには全く動作しないというのが厄介です。