DroidKaigi2019にUnicode Emojiをテーマに登壇した話 (あるいはAndroidのテキストスタックについて)

2019/2/7 ~ 2/8で開催されたDroidKaigi2019に参加・登壇してきたのでそのお話を書きます。

経緯

所属している株式会社ノハナのフォトブックアプリで、入稿画像を生成するためのバックグラウンドジョブを実行するサーバーがあって、しばらくはそのテキスト周りをいじっていてオープンソースのテキストスタック周りに詳しくなってたんですね。(PangoとかCairoとかFreeTypeとかHarfBuzzとか、そのへんのライブラリです。)

で、なんとなくコミットログ漁ってたらPango / Cairoがどうやらカラー絵文字(Unicode Emoji)の描画に対応してることがわかったんで、いろいろ試行錯誤したのち、最終的にプロダクトに入れました。(その時の試行錯誤の一部は http://foobar.hatenablog.com/entry/2017/12/24/183707 この辺にまとまっています。)

で、サーバー側はTwemojiフォントで描画できるようになったんですが、アプリはOS側の絵文字フォントが表示されるので、印刷物とUIとで見た目が変わるじゃんどうすんのよ、って話になったわけです。Androidのテキスト周りは基本的にオープンソースのライブラリに依存しているので(FreeTypeとかHarfBuzzとか)、絵文字フォントファイルの形式(CBDT/CBLC)とか描画ロジックも基本的なところはサーバーと一緒なんですよ。なので、これ頑張ればAndroidでも独自の絵文字フォントでUnicode Emoji描画いけるんじゃね?ってことで試行錯誤したら、いけちゃったんですよね。(ちなみにiOSはemojicaってライブラリを使ってます。)

でいろいろ知見が溜まったところに @seto_hi にDroidKaig2019のCfPにUnicode Emojiで出さないかと勧められて、せっかく知見が溜まったし自分自身の整理も兼ねて吐き出す場を作るかと思い、応募してみました。正直かなりマニアックな内容だったので、まぁ通ればラッキーかな...ぐらいに思っていたのですが、ありがたいことに採択頂いたのでこのような発表の場が実現したわけです。

発表

こちらが当日のスライドです。

speakerdeck.com

動画はこちら。

youtu.be

本当はもっといろいろ実装周りとか紹介したかったんですが30分短すぎて無理ゲーと思いながら発表原稿作ってました。発表の前々日にスライドの完成を祝うかのようにUnicode Emoji 12.0がリリースされました。スライドは修正を余儀なくされました。

直前にRoom 4からRoom 1へと大きな部屋に変更となり、さらにセッション枠は @mhidaka さんの裏番組だったので、どうかなーと思ってたんですが、部屋半分ぐらい埋まってたので良かったです。

発表直前にEmojiCompatを使ってる人に手を挙げてもらったら、数人だったので意外でした。

出会い

GoogleAndroidなどのtext周りをやっているnonaさん(@ttuusskk)やTATEditorの作者の六々さん(@496_)にお会いしてお話することができました。

テキスト周りやっている人周りにあまりいないため、マニアックな話で盛り上がれて楽しかったなと。実装者としてコードに触れているからこそ出てくる話題は生々しくていいですね。リアリティのある話は面白いし説得力がありました。

お2人の発表、必見です。

nonaさんはAndroidのtext周りのパフォーマンスチューニングなので、Androidのtext周りの実装にdeep dive出来ます。Android OS開発者だからこそ出来る話に説得力がありました。

[DroidKaigi 2019] The best practice for Android Text - Speaker Deck

DroidKaigi 2019 - Best practice for text on Android and its internals. / Seigo Nonaka [JA] - YouTube

六々さんの話はテキストエディタを自作する=テキストスタック全てが関わる話なので、テキスト周りの全体像を把握するのに丁度いいかなと。一般論から実装まで丁寧に説明されていた印象です。

ゼロから実装する縦書きTextViewとその周辺技術 / Vertical TextView from Scratch and Related Technologies - Speaker Deck

DroidKaigi 2019 - ゼロから実装する縦書き TextView とその周辺技術 / 六々 (@496_) [JA] - YouTube

お二人の発表を聞いたりオフィスアワーでお話して思ったこととしては、Internationalizationは辛いけど、ここ数年でものすごい勢いで整備されて来てるなと。長らく実装が仕様に先行している領域でしたが、文字文化の進化スピードにUnicodeや各OSの実装は十分追いついていると思いました。増殖し続ける絵文字やスタンプを除いて...

最後に

自分の発表を聞きに来て頂いた皆様、ありがとうございました。気になる点があればこのブログのコメントやtwitterなどで是非。ノハナ社のAndroidエンジニアの皆様、スライドや発表のレビューありがとうございました。また、DroidKaigi2019スタッフの皆様お疲れ様でした。素敵な発表の場をいただきありがとうございました。