ブログ

2021年5月25日

技術負債解消プロジェクト「Rebuild PJ」についてiOSエンジニアに聴いてみた!

iOSメンバーインタビュー採用

TimeTreeもリリースされてはや6年。日々積み重なる技術的負債を本格的に解消するため、今年2月にiOSチームで発足したのが「Rebuild PJ(リビルドプロジェクト)」です。

今回はiOSチームの6人に、立ち上げの経緯やどのように技術的負債を解消していっているかを話してもらいました!

「作ったままなにもしないと、ソフトウェアは壊れてしまう」

ソフトウェアを取り巻く環境が日々変化していく中で、今このときにユーザーへ最高のサービスを届けるにはメンテナンスが欠かせません。今回の座談会に先駆けてTimeTreeラヂオで話してくれたSionの言葉を借りるならば「ソフトウェアって、何もしないと壊れるんです」。

関連記事

TimeTreeのiOSエンジニアチーム——TimeTreeラヂオ vol.013

メンバーもそれぞれ普段の業務を抱えているので、なかなか改善の時間が取れなかったといいます。そこでプロジェクトを立ち上げて「3カ月の中で約2週間は必ず負債解消の時間を取ろう」と決めて取り組んでいます。

話を聴いたiOSチームの6人

技術負債を解消して、これからの開発を進めやすくするプロジェクト

——では今日のテーマ「Rebuild PJ」について、まずはプロジェクト発足の経緯を教えてください。

Trevor Sionが今抱えている技術的負債をNotionにまとめてくれて、そこにみんなで「こういうこともやりたいね」って書き込んでいったのが最初のきっかけですよね。

Sion 元々エンジニアの間では、やらなきゃいけないけどできていないことや、日々積み重なっているバグの修正があるのは認識していて、雑談会とかでも話していたんです。

Trevor 書き込んでいったら思いのほか量が多くなって。これはプロジェクト化して時間をかけないとできないねということで「こういうプロジェクトをやります」っていう宣言を僕が(CEOの)Fredたちに伝えにいきました。

Sion 経営会議でTrevorが話してくれたんだけど、ほかの話で盛り上がってて言い出せずに帰ってきたこともあったよね(笑)。

Trevor そうですね。その回では話すことが出来ずに出直して、事前にFredに「こういうことやりたい」と伝えて、経営として判断が必要なところだけ当日の会議でコメントをもらいました。

コメントをもらったのは、具体的に言うとiPad向けデザインの対応です。以前から要望が多く、僕らとしてもやりたいと思っていました。ただ、今後ずっとiPadOSに対応していくとなるとやはりそこは経営判断が必要になりますよね。それ以外は結構色々あったんですけど、すっと通りましたね。

Sionがつくった社内資料のプロジェクト概要

——課題が積み上がっていく過程を一番長く見ているのは、きっと創業メンバーのStudだと思います。このPJが立ち上がったときどう感じました?

Stud ありがたかったですね。やりたいことはいっぱいあるし、増えていくGitHubのIssueを見るたびに心苦しかったんです。ついにそこに手を付けられるということで、気持ちが軽くなりました!

Bax バグや不具合はもちろんですが、創業当時に開発していた環境からiOSの技術も変化しています。言語自体が変わったり、仕組みが変わったり。そういうところもRebuild PJで解消していこうとしています。

開発言語がObjective-CからSwiftを使うようになり、さらに最近はSwiftUIを使うように変わってきました。僕は昔から開発していたので古い言語もわかりますが、最近iOSの開発を始めた人や新しく入ってくるメンバーはそうではないので、古い言語でできている箇所は新しい言語に置き換えていきたいと思っています。

Stud 新しく開発する部分にはSwiftを使っているんですけど、古い部分のコードは一度作ったら中々変わることはないんですよね。だからずっとObjective-Cのコードが残っていて、それがどんどん負債になっていくという。

そのせいで新規機能の開発がすごくめんどくさくなったり、できないことがあったりするので、それを解消するのも目的のひとつです。

Trevor StudやMeeが創業当初にObjective-Cで書いてくれた部分はTimeTreeの心臓部で、家屋でいうと土台の部分なんですよね。その上に色々なものが乗っているので、改修しようと思ったら時間やパワーが必要な大工事になります。プロジェクトとして時間をとって取り組めるようになったのは本当にありがたいですね。

今期のラスボスはRestKitからの脱却

——今はどんな改修に取り組んでいるんですか?

Sion 直近では「RestKit脱却」がラスボスみたいに大きいので、今期は主にこれをやっていこうとしています。アプリのベースになっている部分をRestKitというオープンソースのObjective-Cライブラリに依存しているので、これを自前のフレームワークに置き換えていく計画です。

Studがやることを細かいタスクにブレイクダウンしてくれたので、これを手分けしてひたすらつぶしていく作業ですね。Rebuild PJの案件整理みたいなのを期に1回やることになっているので、担当はそこでざっくり決めています。

Funny やっぱり優先度が高いところとか、早く脱却したい部分は優先的にやっていきたいですね。

Sion Funnyは今期、アプリ起動時にデータベースがリセットされてしまう問題の調査を引き受けてくれたんです。再現させるのが本当に大変だったんですけど粘ってくれて、重要な問題をひとつ解消することができました。

Funny あれは手強かったですね……! Baxも調査に入ってくれて、コードレビューで丁寧にテストしてくれたりして。不具合を直すためにもかなり時間を割いてくれたので、おかげさまで直りました。

Bax 二人でやるつもりだったんですけど、ほとんどFunnyがやってくれて。

最重要課題は「RestKit脱却」

Trevor 僕は今期、iOS12のサポート終了対応をやりました。iOS13から使える技術を早く使いたかったという個人的な意向もありますし、iOS13がかなり世界中で浸透したというのもあって、その2つが良いタイミングだったので。

Funny 古いOSのサポートをやるのも実はかなり手間がかかっていたので、TrevorがiOS12の終了対応をやってくれたおかげで開発スピードもかなり上がりましたね。

Sion エンジニアみんなテンション上がりますよね。「あれが使えるようになる! やった!」みたいな感じで。

Stud 「この分岐、消せる!」みたいな(笑)。

Trevor 以前はコードからみんなの苦労の跡が見えましたよね。iOS12以下のときはこっちを動かし、13以上のときはこっちを動かす、みたいなのがたくさんあって。

Mee 僕は広告事業との両立もあって、Rebuild PJでまだそれほどタスクを担えていないんですよね。みんなのRestKit脱却が進んでいく中、良い感じにプレッシャーを感じながらやっていこうかなという気持ちがあります(笑)。

Trevor Meeは広告チームの方でアドネットワークを利用するコードの負債に対応してくれています。Rebuild PJのIssueに挙がる前にMeeが動いてくれているのでありがたいです!

Mee そう言ってもらえるとありがたい! 広告もiOSと同じ課題を持っています。日頃から細かいチューニングが必要ですし、アドテクノロジーも日進月歩です。最近だとiOSのIDFA情報の取り扱いについて大きなアップデートがあって、広告チームはその対応に追われていたりしましたね。

Rebuild PJは終わらないプロジェクト!?

——こうした大きな課題を解決していくために、プロジェクトの方針や今後どうしていきたいとかはありますか?

Stud 四半期ごとに1〜2週間相当の時間をRebuild PJに充てますっていうのは経営会議でもオーサライズしてます。ひとまずは、それに沿って時間を捻出して改善を進めていく想定です。ただし各々で抱えているプロジェクトのスケジュールもあるので、どうやって合間を縫って取り組んでいくかは、もうちょっとちゃんとした仕組みを作らないといけない気はしていますね。

Sion 次のプロジェクトの仕様が固まる前にうまく時間を作れないかなと。

Trevor プロジェクトとプロジェクトの間がチャンスですね。それぞれ所属しているプロジェクトや〆切が違うので、みんなでせーのでやるのではなく各自で時間を捻出しましょう、っていう体制なんですよね。

Bax TimeTreeには集中的にバグ修正をする「Bug Fix Week」っていうのがあって、もう何回もやっているので「この1週間はバグ修正に工数を充てますよ」と周囲に理解してもらっているんですよね。Rebuild PJはまだそこまでではないので、Bug Fix Weekみたいに必ず時間を作る仕組みを作ることが大事だと思っています。

関連記事

Bug Fix Weekってなに?

Sion プロジェクトの朝会では「今週はリビルドやります」で通じるようになってきているので、だいぶやりやすくなりました。必ずやるものだという文化が広まってくれば達成できるんじゃないかと。

Trevor 他のチームにも倒せていないボスみたいなやつらがいると思うんですよね。もしiOSで上手くいったら他のチームにも広げて、TimeTreeのエンジニア全員が「自分今週リビルドなんで」みたいに言えるようになったらいいですね。そのためにもまずiOSチームがボスを倒さないと。

——ちなみにこれはいつまでのプロジェクトなんでしょう?

Bax 負債がすべて解消できるまでじゃないですか?

Sion 負債は増え続けるので、終わらないですね。

Trevor 序盤でStudも言っていましたが、ずっと気がかりだったことに取り組む時間を公式に取れるようになったのが本当にありがたいです。ユーザーさんからの声で気になっていたけどやれるタイミングがなかったことも結構あるので。

——技術的負債の解消って、新機能でもないし表立って目に見えるところでもないけど、一番大変で重要なプロジェクトですね。引き続き進捗を追っていきたいと思いますー!

話を聴いたメンバー

荒木 秀太 iOSエンジニア

TimeTreeでのニックネームはBax(バックス)。新卒でヤフー株式会社に入社。フリーランスや開発会社を経て、2017年10月株式会社JUBILEE WORKS(現 株式会社TimeTree)に入社。iOSエンジニアとしてアプリ開発に携わる。

西村 龍亮 iOSエンジニア

TimeTreeでのニックネームはFunny(ファニー)。ヤフー株式会社にエンジニアとして新卒入社。PC版のYahoo! Japanのトップページの開発に従事した後、iOS版のYahoo!ニュースアプリの開発を担当。2020年7月に株式会社TimeTreeにiOSエンジニアとして入社。最近はユニットテストを書くのにハマっている。

新保 周 iOSエンジニア

TimeTreeでのニックネームはMee(ミー)。ヤフー株式会社、KAKAO JAPAN(ヤフーから出向)を経て、 2015年7月株式会社JUBILEE WORKS(現 株式会社TimeTree)に入社。 前職ではWeb、iOSのエンジニアを経てエンジニアチームをまとめるリーダー職についていた。 ものづくりが好きで、休みの日でもアプリを作ったりハックデイ(ヤフーの開発コンテスト)に参加したりしている。

佐藤 新悟  iOSエンジニア

1980年生まれ。TimeTreeでのニックネームはSion(シオン)。東京大学大学院工学系研究科卒業。2006年ヤフー株式会社にエンジニアとして入社。iPhone登場初期からアプリ開発に携わり、メッセンジャー、オークション、ショッピング、ニュースなど数多くのサービスを担当。2016年10月株式会社JUBILEE WORKS(現 株式会社TimeTree)に入社。

藤木 裕介 Webフロントエンドエンジニア / iOSエンジニア

1984年生まれ。TimeTreeでのニックネームはStud(スタッド)。ヤフー株式会社にデザイナーとして新卒入社して、主にモバイル向けのサービスに携わる。独学でプログラミングを学び、デザイナーとしてのバックグランドを持ちながらWebフロントエンド / iOSのエンジニアへ転身。2012年にヤフー株式会社と株式会社カカオジャパンのジョイントベンチャーへ出向後、2014年に株式会社JUBILEE WORKS(現 株式会社TimeTree)を共同設立。

坂口 勇汰郎 iOSエンジニア

TimeTreeでのニックネームはTrevor(トレバー)。株式会社フルスピードにエンジニアとして新卒入社。広告配信管理システム開発に従事した後、社内ベンチャー企画に応募して新規サービス(iOSアプリケーション)の企画開発、チームビルディングを経験。2018年11月に 株式会社JUBILEE WORKS(現 株式会社TimeTree)にiOSエンジニアとして入社。

TimeTreeを一緒につくりませんか?

TimeTreeのミッションは「世の中の時間をつなげて、世界中の人々がよりよい明日を選択できるようにする。」こと。予定管理の概念を変えるために、一緒に挑戦してくれる仲間をさがしています!

募集職種一覧はこちら