「世界の多様なAndroid端末上で動くアプリ」を作る難しさ
──自己紹介をお願いします。
田邉:Androidエンジニアの田邉です。前職ではバックエンド開発、Webフロントエンド開発、Androidアプリの開発をしていました。前職の同僚とTimeTreeを創業し、初期にはWeb版の開発をしていた時期もありますが、メイン業務としては一貫してTimeTreeのAndroid版の基本機能開発を行っています。
和田:Androidエンジニアの和田です。Android登場から1年ほどでガラケーから乗り換え、当時はまだAndroid 2.3で発展途上だったのでアプリ開発を始めたら楽しく、そのままAndroidエンジニアとしてのキャリアをスタートさせました。Androidアプリ開発やWebシステム開発で数社を経てからTimeTreeに転職しました。現在は主に公開カレンダーの機能を担当しています。
──TimeTreeの特徴について教えてください。
田邉:カレンダーアプリですが、友達や家族と予定を共有できるのが最大の特徴です。ライブのスケジュールなど多くの人に告知するための公開カレンダー機能もあります。現在は世界で登録ユーザー数が5500万人を越えるなど、規模の大きなサービスに成長しました。
和田:半数以上が海外ユーザーで、アメリカ、ドイツ、台湾、韓国、イギリスなどを中心に多くのユーザーさんに使われています。技術的な面では、基本的には標準的でモダンな技術を採用しています。新しく入社した人が戸惑わないように、あまり独自の技術を使わないことも大切にしている点です。
──以前取材したiOSチームと同じ方針ですね。デザイン部分では独自実装もあるとか。
田邉:デザインの実装はどのアプリも試行錯誤しているところではないでしょうか。TimeTreeのレイヤーの表現はマテリアルデザイン2、3とも異なり、また配色の定義も独自です。ライトモード・ダークモードそれぞれの配色一覧をデザイナーと連携して作成し、色の定義が分散しないように注意しています。また、この一覧はiOSとも共有していてプラットフォーム間での差異が発生しないようにしています。
和田:ただ、マテリアルデザインの配色とは異なるため、色を表す名前(属性)に対応するカラーコードが分かりづらく、Sketchで作ったデザインを見ながら実装しにくい問題がありました。各テーマ・属性のカラーコードがわかるプレビューを作成して、Android Studio上ですぐ確認できるようにしています。
──機種の多さはAndroidの特徴ですね。技術的な困難などはありますか?
田邉:デバイス固有の問題など調査が難しい場合もあります。例えば、特定のメーカー端末で通知がでないことがあり、該当端末には「この設定をしてください」とお知らせを出したこともありました。問い合わせ対応チームと日々情報共有し、連携しています。
和田:標準に合わせて開発していれば基本的には大丈夫です。最近はタブレットや折りたたみスマホも増えてきていて対応が必要になっています。幅広いデバイスに合わせたUI改善も進めていきたいです。
──グローバルで使われているプロダクトですが、多言語対応はどのように?
和田:アプリは13言語に対応しています。翻訳サービスで文言を管理し、strings.xml を生成してアプリに反映する形で運用しています。社内の英語、フランス語、ドイツ語、中国語、韓国語が分かるメンバーがそれぞれ翻訳結果をチェックしてくれていて助かっています。
田邉:例えば、日本語で「破棄」は英語では文脈によっては「cancel」や「discard」に分かれますが、翻訳サービスでは「cancel」になっている場合でも、メンバーが「discard」の方が適切だと判断した場合はそちらを採用しています。また、「既読」は英語だと過去分詞形の「read」ですが、それだと現在形の「read(読む)」と区別がつかないので、翻訳サービスに頼むときに画面のスクショを添付したり、英語で補足説明したりするなど、翻訳のクオリティを上げるための工夫をしています。
──タイムゾーンは?
田邉:魔境ですね(笑)。基本的には端末のタイムゾーンで表示できるように実装していますが、たまにタイムゾーンの追加や変更があり、表示時刻がずれてしまうことがあります。サマータイムも鬼門で、切り替えの時期になると問い合わせが増えます。
和田:日本でテストしている分には何も問題ないことが多いので、問い合わせで気づくことが多いですね。ユニットテストを日本以外のタイムゾーンで実施するなどして早期発見に務めています。