ScrapboxでazooKeyの動作がおかしい問題を調査
ScrapboxでazooKeyの動作がおかしい。
- ライブ変換オフで入力して候補を選ぶと、1文字消えて残りが入力される。「あいうえお」で「アイウエオ」を選ぶと「あいうえアイウエオ」になる
- カーソル移動が全くできない。
- 「文頭まで削除」で1文字しか消せない
iOS標準のキーボードもだいぶ挙動が怪しい。
- 空白長押しによるカーソル移動が効かない
- 英語キーボードで入力後の修正候補が反映できない。
- カーソルが移動できない問題は全てのサードパーティ製キーボードで共通。おそらくカーソルの挙動に特殊な上書きが入っている。(こちら側では解決不可能)
- 唯一まともな入力が可能だったのはMarked Textを有効化したFlick。MarkedTextはScrapboxが上書きできない領域なので、キーボードアプリ側からの操作が通る。
ただしMarked Textの挙動はひどい。
なので、オプションとしてMarked Textをキーボード側から切り替え可能にして、「必要なときにだけオンに切り替えてください」とするのが良いか・・・。
実装上の問題は2点
- UITextDocumentProxyベースの実装との併用
- 機能デザイン (キーボードからどのように有効化するか、常時有効にはしないでほしいことをどう説明するか)
MarkedTextに関する現実的な不具合は以下の通り
- 普通のテキストフィールドでMarkedTextを使うと、テキスト部分をタップした瞬間に入力が消える
- ただし本当に消えたわけではなく、入力を再開すると復活する
- Scrapboxではこの問題は発生しない
- OSのバージョンによってはタップしても入力が消えないことがあり、その場合はカーソルを動かせる可能性がある
- そのカーソル移動はazooKey側からは検知できない
説明性と言う観点だと、機能のタイトルをどうするか、という問題がある。
機能の目的は「ある種のテキストフィールドにおける挙動の安定化」であるのに対して、ユーザ視点ではこれはほとんど「文字に色をつける機能」に見えるので、ここのギャップを埋める必要がある。
まず「機能のタイトル」の方向性をどちらに寄せるかで、目的ベースなら「入力中のテキストを保護」とか、挙動ベースだと「入力中のテキストをハイライト」とかになる。
OS由来の不安定な挙動のため、なるべく「入力中のテキストをハイライト」という機能としては売り出したくない。なので前者にしておくのが良さそう。
別の点として「OS由来の不安定な挙動」をどう説明するかという問題があり、これはもう割り切って「ベータ版」と書くのがスムーズになりそう。iOSのバージョンが上がって万が一挙動が安定したら正式リリースします。
キーボード上で切り替え、と書いたけど、まずはApp内設定として提供したうえで必要があればキーボード上に持ち込んでも良さそう。カーソル移動系の問題はライブ変換ユーザにはそこまで大きな問題ではなさそうだし、そういう場合は常時有効でも大差ない気が。
と思ったら、Marked TextだとSlackのテキストビューで不具合。(標準キーボードにも発生)
うーん、難しい・・・
LINEのスタンプサジェストもよくわからない挙動になる、テキストフィールドは魔境。
しばらく自分で使ってみていた感じ:
- Slackとの相性がめちゃくちゃ悪い
- 入力範囲外のテキストをダブルタップで選択→直接入力をかけて置換、という流れの入力を結構やるが、Marked Text APIの都合上入力範囲外のテキストをタップしても確定をトリガーできず、バグったみたいになる。実際バグっているけど、これはOS側の問題なのでどうしようもない。
やっぱりあんまり体験が良くなくて堂々と宣伝したい機能ではないけど、必要な場面はあるのでこっそり付けておこう。