技術的負債解消のため、新技術をスムーズに導入するには?
──リリースから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が当たり前になってきたので移行を進めています。ただし一気に進めるとユーザーさんがアプリを起動できないなど致命的な問題を引き起こすリスクがあるので、新機能だけに使ったり、テーブルごとに移行したりなど、徐々に進めています。
和田:新しい技術が出ると「流行に乗ろう!」と完全に移行したくなるんですよね。でも移行作業や動作確認で莫大な工数がとられたり、不具合のリスクもありますので、やはりスモールステップで進めています。