SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

開発現場インタビュー(AD)

日本発! 世界5500万ユーザーの「TimeTree」を支えるAndroidエンジニアが直面してきた技術的負債

  • X ポスト
  • このエントリーをはてなブックマークに追加

 登録ユーザー数が5500万を越えた、日本発の共有カレンダーサービス「TimeTree」。今回はAndroid版の開発に携わるエンジニア2人に、世界で使われているサービスならではの技術的な課題や新技術導入について話を訊いた。

  • X ポスト
  • このエントリーをはてなブックマークに追加
株式会社TimeTree Androidエンジニア 田邉広樹氏
株式会社TimeTree Androidエンジニア 田邉広樹氏

「世界の多様な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(読む)」と区別がつかないので、翻訳サービスに頼むときに画面のスクショを添付したり、英語で補足説明したりするなど、翻訳のクオリティを上げるための工夫をしています。

──タイムゾーンは?

田邉:魔境ですね(笑)。基本的には端末のタイムゾーンで表示できるように実装していますが、たまにタイムゾーンの追加や変更があり、表示時刻がずれてしまうことがあります。サマータイムも鬼門で、切り替えの時期になると問い合わせが増えます。

和田:日本でテストしている分には何も問題ないことが多いので、問い合わせで気づくことが多いですね。ユニットテストを日本以外のタイムゾーンで実施するなどして早期発見に務めています。

株式会社TimeTree Androidエンジニア 和田拓実氏
株式会社TimeTree Androidエンジニア 和田拓実氏

技術的負債解消のため、新技術をスムーズに導入するには?

──リリースから10年が過ぎているので、技術的負債の対応もあるのでは?

和田:ぼくは「技術的負債」ではなく「理想とのギャップ」ととらえています。次々出る新技術をキャッチアップしながら「理想」を思い描き、その理想へ徐々に近づける。またその中で、ユーザーさんにとっての価値とそれを提供する開発者体験を両立しながら進めることを心がけています。

──創業メンバーとして属人化はどう捉えていますか?

田邉:確かに課題ですが、コードレビューや担当変更を流動的にすることで、なるべく属人化を回避できるようにしています。あと自分1人で開発していたら、和田が言う「理想とのギャップ」は埋まらなかったと思います。和田や新しいメンバーが新技術導入をリードしてくれて、チームで協力できるような体制ができています。

和田:例えば、ぼくが入社したころはまだJavaが主流で、Kotlinはリリースされたばかりでしたのでプロダクションではまだ採用されていませんでした。そこでコードレビューなどを通じてKotlinの良いコードの書き方を共有するなど、みんなでキャッチアップしながら移行を進めました。あとJavaをKotlinに変換するプラグインも開発しました。手直しは必要ですが、ワンボタンで変換してPRを作成できるので生産性を高めることに繋がっています。

田邉:そのプラグインのおかげで、Kotlin変換前のコミットログを追跡しやすくなりました。

和田:単純に変換するだけだとJavaとKotlinの差分が大きすぎて、履歴をたどれなくなってしまいます。そこをうまいこと履歴をたどれるようにしました。

田邉:そのおかげで昔の仕様を探る時にすごく助かります!

和田:バグが見つかり「Kotlin化のせいなのか、元からなのか」が分からなくなると困るので、どういう意図で実装されていたのかを追跡できるようにしました。

──今やKotlinは当然ですが、登場したばかりの時に拒否反応はなかったですか?

田邉:新しいものに拒否反応があるメンバーはいないので「とりあえずやってみよう」と。実際に書いてみたら「もうJavaでは書けない」となりました。

和田:みんなが最初の一歩を踏み出しやすくなるようにがんばりました。

田邉:TimeTree Androidアプリ近代化の父!

──最近Kotlin 2.0がリリースされましたが、対応予定はありますか?

和田:移行するにはデータバインディングをビューバインディングに置換する必要があり、ただいま絶賛移行作業中です。10年以上開発しているので、対応が必要なファイルが300以上あります。とても1人ではできないので、リストアップしてみんなで協力して進めています。これもプラグインを導入して簡単に移行できるようにしました。

──カレンダーアプリなのでユーザーは毎日使っていますから、影響を与えないようにする必要がありますね。

和田:不具合を起こさないことを重視しつつ、ユーザーさんに新しい価値を提供していきたいので、プロダクト開発の手を止めないように徐々に移行できるようにと心がけています。

田邉:例えば以前はgreenDAO(ORM)を使っていましたが、今はRoomが当たり前になってきたので移行を進めています。ただし一気に進めるとユーザーさんがアプリを起動できないなど致命的な問題を引き起こすリスクがあるので、新機能だけに使ったり、テーブルごとに移行したりなど、徐々に進めています。

和田:新しい技術が出ると「流行に乗ろう!」と完全に移行したくなるんですよね。でも移行作業や動作確認で莫大な工数がとられたり、不具合のリスクもありますので、やはりスモールステップで進めています。

変化の速いモバイルアプリ、技術選定のポイントは?

──iOSもAndroidも技術の変遷のスピードに追随し、正しく選び取るのが大事なのですね。何かポイントはありますか?

和田:基本的には開発のスピードアップが見込めること、標準的な技術でキャッチアップしやすいこと、保守性が上がることなどのメリットが見込める場合は採用するようにしています。逆に学習コストや書き換えコストに対して得られるメリットが少ない技術は採用しない場合もあります。

──情報収集のためにどのようなところにアンテナを張っていますか?

田邉:Android公式のAndroid Developersの技術記事ですね。「Now in Android」は最新のアップデートがまとめられてます。あと日本のAndroidエンジニア有志が週次で発信している「AndroidDagashi」があり、チームで共有しています。

──開発チームの体制はどのようになっているのでしょうか?

田邉:普段の開発はAndroidエンジニアチームではなく、プロジェクトチームにエンジニアが企画から参加して実装まで進めていきます。各プロジェクトに2〜3人ほどで相互にレビューを行います。10年以上開発経験があるシニアレベルのエンジニアが多く、阿吽の呼吸で開発しています。

和田:平均何歳くらいですかね?

田邉:全社的には35歳くらいで、Androidチームも平均すれば同じくらいでしょうか。最近は若いメンバーも入ってくれて嬉しい限りです。TimeTreeには古いコードもたくさんあるので、新しいコードを書くときに、どの書き方をしたらいいか迷う場面も多いと思います。メンバーも増えてきたので、コード規約やlintなどを整えていくのはチームの課題のひとつです。

──仕事を通じて成長できたと感じるところはありますか?

田邉:サービスの最初から関わり、ユーザーさんがどんどん増え、フィードバックも増え、サービスの成長を一緒に感じることができています。また、素晴らしいエンジニアが新しく入ってくれているおかげで多方面の技術を吸収できるなど、成長できる環境だなと感じます。

和田:ユーザー規模、コード、チーム、どれもこれまで自分が関わったなかで最大規模なので、技術に限らず多くのことを学べたと感じています。また、スクラムマスターという新しい役割にもチャレンジすることができ、成長できる環境だと感じています。

──最後に読者にメッセージをお願いします。

田邉:多くのユーザーさんが使うサービスなので、自分が開発した機能へのフィードバックもすぐにいただけます。そうした声を聞きながらサービスをよりよくして行きたい方、ぜひTimeTreeで一緒に働きましょう。

和田:TimeTreeで身近な人との予定や世の中の予定とユーザーさんをつなぐことで、ユーザーさんの豊かな時間を作りたいと思っています。そのためにやれることは多くあり、長い道のりであるため、「早く行きたければ、一人で進め。遠くまで行きたければ、みんなで進め」ということわざにあるように、仲間と一緒に進んでいきたいと思っています。ユーザーさんの豊かな時間を作りたい方、TimeTreeで豊かな経験を重ねながら、一緒に進んでいきましょう。

TimeTreeでは一緒に働く仲間を募集しています!

 Androidはもちろん、TimeTreeではBackendやiOSなど幅広くエンジニアを募集しています。本記事で興味を持たれた方はぜひTimeTree採用サイトからご応募ください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

提供:株式会社TimeTree

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19986 2024/09/10 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング