azooKeyでは絵文字と顔文字の分離を行っています。「絵文字をもっぱら用いる人」「顔文字をもっぱら用いる人」「区別なく用いる人」がいるためです。
上記の分離を実現するため、絵文字と顔文字は本体辞書としてはバンドルされず、ユーザ辞書と共にビルドされ、キーボード上で用いられています。
絵文字変換は絵文字データに基づいて実施します。内部的にはユーザ辞書と統合された機能です。
絵文字データはUnicodeが公式に提供しているデータなど、複数のソースをもとに、ビルド時に自動で生成しています。
絵文字変換のデータの更新は、生成元となるファイルを変更することによって行います。Unicodeバージョンが上がった場合は新たに生成ターゲットを追加する必要があります。詳しくはGen/Data/README.md
などをご覧ください。
また、表示可能な絵文字はOSバージョンに依存するため、関連するコードを変更する必要があります。
iOS / iPadOSの更新直後すぐに新しい絵文字が使えるようにはならず、一度本体アプリを開いて辞書ファイルの再ビルドを行う必要があります。これを促すため、絵文字の更新と共にMessageViewをキーボード上に表示します。
Version 2.1で絵文字タブを実装しました。これはiOS標準の絵文字キーボードを概ね模したものであり、キーボード内でシームレスに利用できる点が利点となっています。
独自の機能としては、絵文字の倍率変更が可能です。これは小さな文字が見づらい人向けの機能で、キーの表示がより大きくなるため、快適に絵文字を探せるようになります。
絵文字タブでは、ユーザの履歴に基づいて3つの最適化が実施されます。
- 肌の色バリエーションの記憶
Skin Tone Modifierによって複数のバリエーションが存在する絵文字があります。例えば👍👍🏻👍🏼👍🏽👍🏾👍🏿のようなものです。これらはデフォルトの状態ではModifierのつかないバージョンを表示しますが、一度Modifierがついたバージョンを選ぶとそれ以降はそれをキーに表示します。
- よく使う絵文字
絵文字の入力履歴に基づき、「よく使う絵文字」の記録を保存します。これは単なる「最近使った絵文字」ではなく、使用頻度に基づいてある程度のランキングを行っています。
- 倍率の記録
ユーザが画面右下のキーで倍率を変更すると、変更した倍率が記録され、次回開いたときもその倍率が維持されます。
なお、これらの最適化はすべてキーボードの内部領域に保存され、コンテナアプリケーションからは不可視になっています。
- 「肌の色のデフォルト設定」のような機能を作ることができます。
- 「よく使う絵文字」をピン留めしておくことができます。これによって、好みの絵文字の入力が簡単になります。
- 倍率を縦持ち・横持ちで別々に設定できるようになると便利になるかもしれません。
絵文字タブで表示する絵文字のデータは、Gen/scripts/emoji.py
によってUnicodeバージョンごとにビルド時に自動生成されています。元にするデータはUnicode / CLDRのデータとMozcの絵文字辞書データと独自に追加したエントリです。
TextReplacer
は絵文字タブのバリエーションを表示したり、検索を行ったりするためのAPIです。
現在、絵文字タブはSwiftUIによって実装されていて、CustardKitのAPIを利用していません。このため、ユーザが絵文字タブのような新しいタブを自作することはできません。
- 適切に規格を定めることで、絵文字タブに近いカスタムタブを作ることができるようになるかもしれません。現在実装の予定はありませんが、需要がありそうならば検討していきます。