ここまでの道のり
Copaky の機能一覧は、ホワイトボードの思いつきから生まれたものではありません。何をどう決めてきたか、大きく3段階に分けて説明します:ユーザーが教えてくれたこと、試して見送ったこと、そして最終的に作ったもの。
ユーザーが教えてくれたこと
新しいコードを書き始める前に、私たちはしばらくの間、ひたすら読むことに時間を使いました。頭の中でユーザーストーリーをひねり出すのではなく、英語・日本語・イタリア語で、実際に使われているキーボードアプリのレビュー、フォーラムのスレッド、公開されている課題(issue)を読み込みました。目的は一つ、「今のキーボードに何が足りていないか」を知ることで、「自分たちが作りたいもの」を探すことではありませんでした。
どの言語でも共通して繰り返し出てきたのが、クラウドアカウントなしで、端末に残り、再インストールしても消えないクリップボード履歴への要望です。多くの人にとって、これこそがサードパーティ製キーボードを探す一番の理由でした。ただ同じスレッドの中には、もう一つ慎重な声も並んでいました。クリップボード管理系の機能は機密データの流出事例が実際にあり、キーボードに「フルアクセス」を許可すること自体への不安です。これは根拠のない不安ではなく、実際にフルアクセスを使って好ましくない挙動をしていたキーボードアプリも存在しました。
3つ目のパターンは、イタリア語入力者、あるいは Android から乗り換えてきた人たちに特有のものでした。イタリア語ユーザーが実際に不満に感じていたのは、キー配列そのものというより、順序と安定性の問題でした。長押しで最初に出てくるアクセント付き母音が、実際によく使われるものと一致していないこと、そして素早く入力すると文字が抜けたり、オートコレクトによって意図しない形に書き換えられてしまうことです。一方 Android からの乗り換え組は、これとは別に、ごく具体的な要望を繰り返し口にしていました — 文字キーボードから離れなくても、最上段に数字が見えていてほしい、というものです。
試して見送ったこと
いくつかのアイデアは、iOS というプラットフォームの制約、あるいは私たち自身が「これは出さない」と決めたルールのどちらかに引っかかり、採用に至りませんでした。
クリップボードタブを開いた瞬間に、タップなしでその時点の内容を自動的に取得する案も検討しました。しかし iOS の仕組み自体がそれを許しません。ユーザーの明確な操作なしにシステムのクリップボードを読み取ると、システムレベルの「ペーストを許可」ダイアログが表示されてしまい、それを隠すような設計にはしたくありませんでした。そこで、取得は明示的なタップの後ろに置くことにしました。キーボードは、あなたが求めたときだけ値を読み取り、それ以外の時間は「何かが変化したこと」しか把握しません。
azooKey が既に備えているかな漢字変換エンジンを超えた、より高度な端末内変換支援についても検討しました。最初のリリースではこれを見送りました。他アプリのプロセス内で動くキーボード拡張には、実際にかなり厳しいメモリ制約があり、まだ基本機能を固めている段階の v0.1 に、より重いモデルを持ち込むべきではないと判断したためです。
カスタムタブについて、azooKey 本家にはコミュニティライブラリからネットワーク経由で既製のレイアウトを取得できる仕組みがあります。私たちはこの経路を完全に取り除きました。多くの人にとって本当に便利な機能ではありますが、それはキーボード拡張がネットワークリクエストを行うことを意味します。「拡張は一切通信しない」という主張は、私たちが利便性のために緩めたくなかった数少ない約束のひとつです。カスタムタブ自体は今も完全にサポートしていますが、その場でダウンロードするのではなく、すでに端末にあるファイルからインポートする形にしています。
実際に作ったもの、その理由
最終的に作ったものは、最初のセクションで書いた内容と意図的につながっています。クリップボード履歴は端末内にとどまり、アカウントを必要とせず、ピン留めしていない項目は1週間で自動的に消え、セキュア入力欄は完全に対象外です — 取得はタップしたときにしか起こりません。フルアクセスは任意のままで、既定はオフです。基本的な文字入力・日本語変換・テーマは、いずれもフルアクセスなしで動作し、使っていない権限をキーボードが求めることはありません。
イタリア語については、キーボードレイアウトをまるごと新しく作るのではなく、「壊れている」と報告された具体的な部分だけを直しました。長押しで出てくるアクセント付き文字の順番は、今は é より先に è が来るようになっており、他の母音についても同じ考え方で並べています。別途用意した「イタリア語を使う」という設定(システムの第一優先言語がイタリア語の端末では既定オン、それ以外はオフ)は、言語切替キーの巡回にイタリア語を加え、イタリア語辞書からの予測変換を始めます。キー配列自体は変えていません。そもそも要望はキー配列についてのものではなかったからです。
任意の数字表示機能は、言葉どおりのことをするだけです。文字キーの上に小さく数字を表示し、長押しで入力でき、オンにするまでは何も変わりません。そして、フォークプロジェクトの信頼は機能の多さよりもプライバシーの姿勢で決まると考えているため、キーボード拡張が持つ権限はただ一つ、本体アプリと通信するための App Group だけで、通信を行うコードは一切ありません。これは宣伝文句ではなく、他のすべてをその制約の上に設計してきた、という話です。