1. TimeTreeラヂオ
  2. 「TimeTreeカレンダートーク」..
2022-10-11 40:30

「TimeTreeカレンダートーク」チャット開発についてiOSメンバーに聴いてみた #TimeTreeTechTalk

「TimeTreeラヂオ」はカレンダーシェアアプリTimeTreeを運営する私たちメンバーが、ふだんの仕事に関係することもそうでないことも、だいたい15分でひとつのテーマを話しきるインターネットラジオ番組です。

この放送はTimeTreeエンジニアによるテックなお話をお届けする #TimeTree Tech Talk です。

iOSエンジニアのTrevor(@pengtaros)とBaxを呼んで話しました! MCはいつも通りエンジニアのZeale(@____lazy_____)とブランドのSteve(@Shinyawatanabe_)でお送りします。

最近のiOS雑談会/チャット開発の役割分担/プロテイン/スクラム開発/予定・チャット開発の違い/WebSocket or プッシュ通知/ペイロード/バックエンドとクライアントの調整/タイムスタンプをベースにしたページング/ビルド時間の短縮/UI先行開発/たくさんの開発パターンを素早く検証/SwiftUI全面採用/DiffableDataSource/Swift Collections(OrderedSet)/Swift Algorithms/チャンク/ジョインター/子どもの声入ってるかも/パートナーの爪切り/

サマリー

タイムツリーカレンダートークの新機能であるカレンダートークの開発について、iOSメンバーが話し合っています。第1章では、iOSチームのメンバーとしての活動やiOS雑談会について話されています。第2章では、カレンダートークの概要と開発の経緯について話されています。第3章では、チャット開発におけるデータフロー設計やUI周りの苦労したポイントについて話されています。話題はWebSocketやプッシュ通知によるチャット機能の開発にまで及びます。開発にあたっては、実装の工夫や課題があり、タイムスタンプベースのページング処理や自動再送信の制御、UIの最適化などに取り組んでいます。また、SwiftUIやSwift Collectionsなどの新しい技術も活用されています。

iOSチームの活動
どうも、VAXです。
どうも、トレバーです。
どうも、ジールです。
どうも、スティーブです。
テックトークの、これは何回目かな?
3回目とか4回目になるんですけど、始まりました。
イエーイ。
イエーイ。
お願いします。
お願いします。
4人で、今日話していきたいと思います。
VAX、トレバーは、おそらく初登場なんですけど、
iOSチームのお二人。
よろしくお願いします。
iOSチーム、前回シオンとニーガンに出ていただいたんですけど、
その時にiOS雑談会の話を話題に上がりまして、
ニーガンが入社してむしばらく経ってるんですけど、
未だにiOS雑談会の立て付けがよくわからないという話で盛り上がったんですけど。
はいはい。
最近のあの雑談会でどんな話してるんですか?
最近は、そうですね。何話してるかな。
つい先日やった時には、
自分の母親がNintendo Switchのプロコンの偽物を買っちゃった話っていうのをしました。
VAXはどんな話をしたんですか?
僕はゲームの話なんですけど、
かなり釣りを入れたタイトルになってしまいました。
釣りを入れたタイトル。
最近見てもらえてないのか、聞いてもらえてないのかなっていうのがあって、
ちょっと聞いてもらえるような。
釣りタイトルで?
釣りタイトルで。
なんだったっけな、VAXからの発表みたいな感じでしたっけ?
あ、そうですね。
お知らせしたいことがありますみたいな。
そうですね。
大体みんなあれでね、
重大な報告、結婚とかの報告をしてるんですけど。
なるほどね。
前回、前の回を見てない、聞いてない方に向けてちょっと軽く説明すると、
雑談会のその雑談はまとめて社内で配信してるんですよね。
そうですね。
で、それを最近聞いてもらえてるかわからないというのも、
そういうタイトルにしたってことで。
そうですね。
iOS雑談会って、もともとチームビルディングで始めた雑談を、
それを録音して社内で配信するっていうのをiOSは結構面白くやっていて、
メンバーの近況を知るとかで、今のトレバーのお母さんの話とかね、
何気ないその近況を知れるっていうので、結構いいチャンネルなんですけど。
そうなんですよ。
もちろんね、仕事の話もしてるんですよ。
本当か?
今週1週間どんなことやって、何か面白い発見あったとか、
逆にここ困ってるからちょっと知恵くれみたいな話もちゃんとしてて、
お客さん、ユーザーさんからこういうオーバーあったけどどうするみたいな話もしつつ、
最近どんな感じっていう、困ったことを役に立ったことを共有する場、
かつみんながもっと仲良くなるための場として、
1週間に一度そういう雑談会。
そういうニュアンスも含めて会議とかっていう名前じゃなくて、
カレンダートークの概要と開発経緯
雑談会っていう名前にしてるんですけど。
でも皆さんに公開してる。
今のは表バージョンの説明ですよね。
本当は仕事の話なんかしてないですよね。
社内に向けて公開してるのは、仕事の話とかは全部公開してもっていうのはあるので、
仲良くなる部分のところだけですね。
近況報告の部分だけ社内には公開してるっていう感じですね。
さて、今日はトレバーとVAXお二人をお呼びして、
どんなテーマで話すかというと、
一応テーマは初めてのチャット開発ということで、
実はタイムツリー最近カレンダートーク、
タイムツリーカレンダートークと呼んでいる新しい機能が追加されました。
この開発について詳しく話していきたいと思っています。
カレンダートークっていうのは何なのかというとですね、
タイムツリー昔から予定の詳細画面から、
その予定にコメントを付けられるっていうコメント機能っていうのはあったんですけど、
カレンダー全体でチャット会話をする、
共有相手と会話をするっていう機能は長らくなくて、
それが最近実装されました、新機能として。
カレンダーの共有相手とLINEとかみたいなノリで、
気軽にメッセージのやり取りができる機能ですね。
一応狙いとしてはタイムツリー上でのコミュニケーションの質の変化っていうのを狙ったりとかしていて、
今まだ基本的な機能を実装していろいろ調整しているっていう段階なんですけど、
ちょっと前置きが長くなったんですが、
そのカレンダートーク機能の開発に携わっているiOSメンバーということで、
トレバーとワークスにお呼びしております。
ここからはもう2人の雑談会で培った、
類まれなるトーク技術を駆使していただいて、
開発費用を。
めちゃめちゃハードル上がったんで、
その下をくぐり抜けていくみたいな話をしていきたいですね。
実は事前に僕ら4人でどういう話しようというので、
いろいろ2人から詳しく話を聞いていたんですけど、
結構エンジニアでない僕が聞いても面白い話がいろいろあったので、
今日は3つぐらいトピックを絞って話していければと思っています。
まず最初にトレバーから、
開発の全体の概要みたいなところを、
簡単に紹介してもらおうかなと思っていて、
かつ、そもそも2人初登場なので、
簡単な自己紹介を含めてお願いしたいと思っています。
自分はトレバーです。
入社したのは2018年の11月で、
もうすぐで5年目になるのかな。
5年目か、確かに。
もう長いですね。あっという間でしたね。
長いですね。
開発は主にタイムツリーのiOSアプリの開発を担当しています。
趣味って書いてあるんで、
趣味は大人になってピアノを始めました。
2年弱ぐらい。
そうなんだ。
タイムツリーカレンダートークなんですけど、
6月ぐらいから開発を始めて、
大体3ヶ月でリリース。
9月半ばにリリースされたんで、
データフロー設計とUI周りの苦労ポイント
それぐらいですね。
バックスと2人で、この後紹介してくれるバックスと2人で開発してて、
僕は主に開発基盤周りとUI周りを担当してました。
バックスです。iOSの開発を担当しております。
入社した年はトレバーの1年前なので、
2017年10月とか。
なので、もう6年目なんですけど、
もうそんなに経ったんだなっていう感じです。
趣味なんですけど、
入社してから続けていることとして、
ジムに通ってまして、
それは今でも何とか続いているっていうような感じです。
社内ではおすすめのプロテインとか、
そういったものをアドバイスとかをしたりしています。
アドバイスをくれるタイプのキャラクターなんでしょうね。
そうですね。スラックのプロテインっていう用語を通知セットにしています。
そうなんですね。
プロテインって叫べば飛んでくるんですか?
そうですね。
そうなんだ。
いちいちちょっと遊ばれてたんですけど、
日本時代にプロテインって言われて。
呼んだみたいな。
でもちゃんとおすすめのプロテイン聞かれたら対応してますんで。
対応する。すごい。責任感がすごい。
通知きましたね。誰か送りました?
いやいや。スティーブ悪い顔してるからスティーブが送ってる可能性あるな。
やりたかった。放送中にプロテインって送りたかった。
ありがとうございます。そんなVAXが。
今回のPGAでの担当としてはどんなところなんですか?
そうですね。僕は2人で開発を基本的にしていて、
なかなか担当をどう分けるかみたいなのがあったんですけど、
一応僕はバックエンドとのやり取りとか、
あと入力回りとか、
あとチャットのどういった技術を採用するかっていうところの
技術選定とかを担当していました。
なるほどね。後でもちょっと話が出てくるかもしれないですけど、
VAXの方が1年ぐらい早くタイムスリーにいたので、
そのあたり裏側の仕組みとのつなげ込みとかが
トレバーよりも知見があるから、
こういうちょっと役割分担に最初してたっていうところもあるんですよね。
はい、その通りです。
プロジェクトの中ではもちろん、
iOSチームとはまた別の会議体とか、
何か開発の流れってあったと思うんですけど、
どういうルーティーンで進んでたとかってありますか?
そうですね、いろんなプロジェクトがあって、
最初はそのプロジェクトと同じように夕会ですね。
夕方にやる会という感じで毎日報告するっていうのがあったり、
あとは企画内容が出てきたときに
みんなで集まるっていうことでやってたんですけども、
そうすると進捗管理がなかなか難しいみたいなことが出てきて、
途中からスクラム開発を導入して、
スプリント計画をして、
そこでうまく回るようになったみたいなこともあったりして、
今はそのような感じでやっております。
そうですね。
進捗の管理とかが基本的に各プラットフォームに閉じてて、
一つの仕様書をもとにiOSはiOSでタスクを切って進める、
AndroidはAndroid、バックエンドはバックエンドみたいな風にやってたんですけど、
それぞれ足並み揃えて一つ一つ機能を作っていって、
早めにみんなが触れる状態にしてフィードバックをもらうっていうのを、
各プラットフォームを横断した形で進捗の管理をしたいねって話になって、
今の体制になったっていう感じですね。
なるほどね。
事前にバックスとトレバーの話を聞いていって、
3つぐらいトピックをお二人からいただいていて、
その話に入っていきたいなと思っております。
それぞれのトピックの詳しい話は若干僕はついていけないところがあるので、
GLにもバトンタッチをしつつ、
そもそもこのラジオを撮ろうってなったきっかけがあって、
トレバーが結構Twitterで発信してくれているんですけど、
ご自身もTwitterで。
そうですね。
ラジオの概要欄にもアカウント載せていこうかなと思う。
ペンギンのペンから飛んでるんで、
Gは発音しないやつです。
ペンタロスね。
はい、そうです。
ペンタロス。
昨日リリースしたときに、
こういう技術使ってますよとか、
こういう工夫してますよというツイートをしてくれて、
それを見て今回詳しく話を聞いてみようとなりました。
事前に出てきたテーマとしては、
データフロー設計の話その1、
あとはUI周りの話ですね。
がその2。
あとはそれぞれ分担とか領域がちょっと違っていたので、
それぞれが見るそれぞれの頑張ったポイント、苦労したポイントみたいなところで、
面白い話があったので聞いてみたいと思っています。
データフローの話については、
先ほどもあった通り裏側とのつなぎ込みとかっていうのは、
VAXがメインで見てたっていうこともあったので、
VAXにちょっと紹介してもらおうかなと思っていて、
UIは取れたんですね。
じゃあ、ジールにバトンタッチ。
そうですね。データフローの話ってことで、
この事前にちょっと話をしたときに、
このチャット開発がそもそもどういうところが難しかったとか、
そういうところ苦労したポイントみたいなのを聞くときに、
やっぱり今までの予定の取り扱いと、
そのチャットの取り扱いっていうところで、
ちょっと違いがある部分があったとか、
そのあたりが結構苦労したみたいなポイントがあったので、
どういうところが難しかったみたいなところを、
VAXとかのほうからお話しいただければなと思いますが、いかがですか。
そうですね。まずそのチャットを開発する場合に、
どういったことを考えないといけないかっていうと、
WebSocketっていうリアルタイムで通信するための規約があるんですけど、
それを使うか否かっていうところなんですけど、
これまでTimeTreeはWebSocketを使ったっていうこともなくて、
WebSocketとプッシュ通知によるチャット機能の開発
あとは予定が基本的にはプッシュ通知へ飛んできてっていう流れになるので、
今回開発期間とかっていうのもあって、
そのWebSocketをいきなり使うっていうのは難しいだろうっていう判断になり、
今回はプッシュ通知によって、
相手のメッセージを受け取ったり、
こちらのメッセージを送信して、
それがトリガーになってっていうところを考えたという感じです。
そうですね。WebSocketはWebSocketなりに苦労があると思うんですけども、
プッシュ通知もなかなかいろんな課題があって、
例えばプッシュ通知ってベストエフォートのサービスになってて、
プッシュ通知が届かないっていうケースがあったり、
あとはエイロードっていう形でプッシュ通知が届いたときにデータが一緒に送られてくるんですけども、
そちらが制約のある中で作るという感じになっていて、
その制約の中でチャットっていうものを実現するのにはどうしたらいいかっていうのを考えていかないといけないっていうのがありました。
そこら辺のメッセージ送受信の規約みたいなのも最初にみんなで相談して決めて、
それに沿ってバックエンドがまず決めてくれて、それに沿ってクライアントが実装していったっていうのがあります。
でもやっていくうちにやっぱりこれ違うなみたいなのがあったりして、
そこから早い調整みたいなのがやっぱりありましたね。
結構クライアント側で気づいてみたいのが結構多かったってことなのかな。
そうですね。当然バックエンド側もやっぱりこういう仕様にしたいみたいなのがあったんですけど、
実装してみて分かることみたいなのが結構…
そうですよね、確かに。
そうなんですよ。やってみて、やっぱこれの方がいいなとか、ここ違うなみたいなのを気づくっていうのはありましたね。
具体的にどんなところとかって今思い出せる範囲でありますか?
そうですね。結構あったと思うんですけど。
メッセージの取り方とか、例えばメッセージを最初に表示するときに、
ここからここまで取るみたいなのがあると思うんですけど、
例えば過去の案件を取るとかっていうのがあると思うんですけども、
そこの取り方をどうするかとかっていうのがあったり、
あとはそのプッシュ通知が飛んできたときに、
クライアント側が適切にメッセージを同期するっていう形をしないといけないんですけど、
そこら辺がうまく動いてないんじゃないかなとか、そういった気づきがありましたね。
結構、タイムスタンプをベースとしたページング処理っていうのが個人的には初めて触ったというか、
いろいろ考えてある部分だったので、その辺もタイムツリーの中では新しい部分だったなと記憶してますね。
割とスラックとかのスラックAPIとかを見ると、
スラックが採用している手段なんですけど、タイムスタンプベースでやるっていうのは、
そこら辺はもうインターフェースはこういう仕様だってことはわかるんですけど、
中でどう動いているかっていうところまでは判断がつかないので、
そこはタイムツリー側でいろいろ調整していこうという流れでした。
マイクロビューまで見てIDにしてるっていう。
そうですね、マイクロビューまで見てます。
それはマイクロビューはかぶらないっていうことが設定の条件としてなってます。
そうすることで、送信環境とかの問題で後から差し込まれたメッセージとかがあったとしても、
タイムスタンプをベースにバックエンドとやり取りすることで、
適切な範囲の中で適切な量のメッセージを受け取れる。
現在時刻から何分前まで20件くださいみたいな問い合わせができるみたいな感じですね。
プッシュ通知の課題とメッセージ受信の制御
予定の話とどう違うかみたいな話もしましたけど、
さっきWAXデータフォローとか入力周りとかもやってるみたいな話もありましたけど、
送ってうまくいかなかったときの取扱いとか、そういうところにも違い出ますか?
基本的にはタイムツリーで予定を登録して、
もし通信状況が悪かったりするってこともあるので、
その場合は自動で再送信という形を取ってるんですが、
チャットの場合は自動再送信というより、
失敗したことがユーザーさんの目から見て分かって、
再送信できるっていう形が最適かなということで、
そこは予定と違ってるんですよね。
なるほど。
1時間前に自分が送ったって思ったメッセージが送られてなくて、実は。
次タイムツリー開いたときに自動で再送信しちゃうと、
1時間前に送るはずだったメッセージが今届いちゃうっていう、
よく分かんないことが発生しちゃうので、それを防ぐためって感じですかね。
なるほど。
そのバグがあると途端に夫婦仲が悪くなったりしちゃいますね。
予定は確かにいつ入れるかっていう部分だけの違いが、
そんなにインパクトがないってことなんですよね、きっと。
だけどチャットの場合はいつ届くかっていうところに結構重要なポイントがあるから、
そこは失敗に倒した方がいいよねみたいな話なんですね。
この辺りどうやって決めていったんですか。
他のメッセージアプリとか。
そうですね。結構世の中にいろんなメッセージアプリがあるので、
こちらの動きとかも参考にさせていただいて、実装っていうことも言いましたし、
もちろんタイムツリーではこっちの方がいいよねみたいなのもあって、
そちら側に倒したみたいなのもあると思います。
なるほど。
次そしたらあれですかね、今度UIの最適化とかっていうあたりも結構頑張ったポイントみたいなのがあったので、
UI周りにちょっと聞いていこうかなと思うんですけど、
結構UI周りで工夫した点とか苦労した点とかそのあたりちょっとお聞きできればなと思います。
いかがでしょうか。
そうですね。最初開発基盤担当したって言ったんですけど、
これは主にUI周りのことなんですけど、
3つ課題があって、
1つはタイムツリーのアプリにそのまま開発、そのチャットの機能を組み込んだまま開発しちゃうと、
毎回ビルドに時間がかかっちゃう。動作を確かめるのに時間がかかっちゃうっていうやつと、
あとはバックエンドと用を挑んで開発を始めたので、
実際のデータを受け取りながら開発するというのができない。
UI先行でどんどん作っていかなきゃいけないっていうのを何とかしないといけなかったっていうのが2つ目。
3つ目がすごいパターンが多かったんですよね。
一番作らなきゃいけないテキストメッセージ、自分のと相手のがあったり、
URLが含んであったらOGPを出してあげなきゃいけなかったりとか、
今の一例ですけど、さっきの送信ステータスとかがあったり、送信完了、送信している失敗とかですね。
いろいろパターンが多かったので、たくさんのパターンをできるだけ早く検証しなきゃいけないっていうこの3つの課題がありましたね。
ビルド時間と同時並行で開発しなきゃいけないのと、たくさんのパターンを網羅的に出さなきゃいけない、確かめなきゃいけない。
それぞれ対応するために最初のビルド時間に関しては、完全にタイムツリーと分けたアプリを最初は作りました。
チャットの機能だけを出すアプリを作って、そこでビルドをして確かめられるようなミニアプリを作りました。
2つ目のバックエンドと同時並行で開発しないといけない、UIをどんどん先行で作っていけないというものに対しては、これもミニアプリと綴る部分があるんですけど、
UI部分だけ別のフレームワーク、モジュールとして切り出して、そこでテストデータを自分で用意して、
それもバックエンドから取ってくるとかじゃなくてアプリの中で完結するようなテストデータを用意して、
そこで動作、見た目をバックエンドなしで出せるようにするということをしました。
3つ目のたくさんのパターンを網羅しないといけないというものは、UIの開発部分にSwiftUIを全面的に採用するということで、
少ないサブビルドでたくさんのパターンを出せるようにする、一度に確認できるようにするという工夫をしました。
なるほど、すごい盛りだくさん。
基本的にデータフロー周りとかAPI周りをしっかり考えてくれる、あとは技術選定、そのやり取りをするためのデータフローを整えるための技術選定とかをしっかりやってくれてたので、
その辺何も気にせず、自分はデータを受け取って出すというインターフェースだけしっかり作れば、あとは好き勝手にやっていいという状態だったので、すごい動きやすかったですね。
UIの最適化と新しい技術の活用
今回のUIの周りの開発については、新しい技術とかそういうのをうまく使いながらやってたみたいなイメージがあるんですけど、
その辺りについてはどんなものを使ったとか、この辺もしかしたらデータの話も入ってくるかもしれないんですけど、その辺も教えてもらっていいですか。
タイムツリーではもう1年前ぐらいからかな、本格的に本番環境でSwiftUIを使い始めて、
別の機能だとタイムツリーTodayっていう機能があるんですけど、そこでもほぼほぼSwiftUIが使われてるんですよね、その機能単位では。
そこの知見を生かして、チャット側でもSwiftUIを作るという決定をしました。
ただそのTodayもそうなんですけど、SwiftUIちょっと画面遷移周りとかが結構扱いが難しくて、その辺の知見はUIキットっていう動かしながらのフレームワークの方が我々も対応できることが多い。
っていうのがそのTodayの開発で分かっていたので、その知見をそのまま生かして、画面遷移とデータフロー周りとのやり取りですね。
その辺のUIキットでコントローラー部分を作って、実際にデータを表示させる部分、ビュー一つ一つに関してはSwiftUIで実装するっていう形に落ち着いてます。
それ以外の部分、UI周りで言うと、これも去年あたりから全面的に新しく作る部分は採用してるんですけど、
そのUIキットの中でもデータの差分更新を得意としているディファブルデータソースっていうデータソースを使ったり、
あとはセルの登録のところにレジスターっていうのを使ったりしてますね。
チャットのデータ整形ですね。バックエンドから受け取ったデータをそのまま表示するっていうわけではなくて、
クライアント側で表示したいようにデータを整形する必要があるんですけど、
その整形部分にはSwift Collectionsのオーダーセットっていうものを使ったりとか、
整形するアルゴリズム部分ですね。これまんまなんですけど、にSwift Algorithmっていうライブラリを使ったりしてます。
このSwift AlgorithmとかSwift Collectionみたいなやつとかは初採用って感じなんですか?
そうですね。Swift Collectionsはちょっと自分が知らないところでチームメンバーがもしかしたら使ってるかもしれないんです。
あ、違うわ。チャットからそういえばライブラリインポートしましたね。
なるほど。じゃあ初採用。
そうですね。この辺もバックスがこれ使うといいんじゃないかなっていうのを選んでくれて。
技術選定で。
Swift Collectionsとアルゴリズム、それぞれAppleの紹介動画ではチャットが例でこういうふうに使えばいいよっていうふうに出てるんですよ。
Swift AlgorithmもSwift Collectionsも。
コレアみたいな。
そうですね。見た瞬間コレアってなって、ユースケースドンピシャーのものを見つけられたので。
すごいですね。なんか自分たちのために作られた動画かと思いました。
そうですね。
僕たちのために言ってくれてるみたいな、Apple側みたいな。
それがあれか。事前に聞いた去年、前回のWWDCの発表があったやつ。
昨年。
バックスがこの動画使いそうじゃないみたいなふうにスラックで給付してくれてたんですけど、本当にやりたかったことがそのまま紹介されてたんですよ。
なるほど。
具体的に言うと、みなさん他のメッセージングアプリとかでも日付ごとにラベル入ってるじゃないですか。何月何日はここから、何月何日はここからみたいな。
セクションみたいなやつ。
話の分類
セクションみたいに分かれてるじゃないですか。
あれって受け取ったメッセージの情報の配列の中身を見て日付ごとにまとめるっていう処理をしなきゃいけないんですけど。
そうですよね。普通は。
まんまその機能がその配列にそのマッピングの処理というかオペレーションを生やすっていう機能がSwiftアルゴリズムの中にあるんですよね。
すごいチャンクっていうメソッドなんですけど、すごい楽でした。そのチャンクとジョインカーを使って簡単にできるっていうやつだったんですけど。
なるほど。
ドンピシャでした。
なるほど。
アップルパイセンアザースっていう感じですね。
そうですね。ゴリゴリ自分で書けば多分できなくもないと思うんですけど、でもその辺って世界中の頭のいい人たちが最適化とかをしっかりしてくれてると思うんで、自分でそのアルゴリズムを書くよりかは。
この辺りは結構データの表示の仕方っていうか表示の最適化とかにも結構関与しますかね。
そうですね。特にリファブルデータソース部分は上手い具合に最適化してもらえてるっていうのは使ってて思いますね。
そうだ、そのオーダーセットっていうSwiftコレクションズのやつはすごいリファブルデータソースとも相性が良かったですね。
いいですね。前の紹介のiOSチーム紹介のときとかにも結構新しい技術割といけそうなときにはどんどん入れていくというか、新しい機能を作るときとか特に割と積極的に考えていくみたいな話もあったんで、今回のトークに関してもこの1年前に発表された機能がバストハマって入ってたってことなんですね。
ちょっと外すごい声入ってないですか?大丈夫ですか?僕んちの家の声入ってないですか?
全然入ってないです。
今自分もパートナーが爪切ってるんですけど大丈夫ですか?
これは聞こえるかも。
大丈夫大丈夫大丈夫。
全然問題ないです。そういうラジオなんで大丈夫です。
今チラってこの話してる姿を見せたらすっごい申し訳なさそうな目に見えてました。
大丈夫大丈夫。
昨日は猫の声とか全然入ってたんで大丈夫です。
いいですね。安いですね。
それぞれお互いにやってて、例えばバックスから見てトレバーここすごい頑張ってたなみたいな話とか、トレバーから見てバックスここすごい頑張ってたなみたいな話とかもしあればそのあたりも教えていただけますか。
iOSチームの役割
バックスから教えてもらっていいですか。
そうですね。トレバー先ほどフレームワークを分けてくれたっていう話をしたんですけど、そこが割と本当にチャットの開発を本当にうまくできるポイントだったと思います。
最初の方にやっていたので、
結構ビルドとかにも時間がかかったりっていうことがあったんですけども、そこをうまくフレームワーク分けることでそのテストができたり、
Swift UIのプレビューとかも割と細かく作られてたので、そこが開発速度の高速化とかあと効率化みたいなところにつながったのかなと思います。
UIのところを切り出して開発するみたいなところとかをしてたから、そこが動きやすかったりとか。
そうですね。まだ開発を始めたときはAPIとかも用意されていない状態だったので、
どうしてもスタブっていうものが必要になってきて、スタブ仮想データを作って表示してみることが必要で、
そこを最初からやってたっていうことが多かったかなと思います。
トレーバーから見てバックスクロール頑張ってたポイントはどこですか?
かなり複雑なことをやっていて、
WebSocketとかだったら一箇所監視しとけばいいみたいな感じで終わるんですけど、
プッシュ通知でやり取りしてるんで、いろいろな部分、ところでデータの動機の鑑賞しなきゃいけないっていうのがすごい大変そうだったっていうのと、
大変そうだったんですけど、バックス全然その苦労を見せないんですよね。そこがすごいなっていつも思うんですけど。
動画閉じた後に泣いてました。
すごい大変そうだなっていうのが、プリリックとか見てて、よくこれこの時間で仕上げたなみたいなものをしっしと感じてたんですよね。
その中ですごい、これ頭いいなみたいな方法を毎回思いついてやってくれてたので、そこがすごいなって思ったのと、
あとはバックエンド側も多分このさっき言ってたリアルタイム系のものを作るのっていうのはタイムツリーの中では初めて。
最初のやり取りの中ではちょこちょこバグというかお互いバグもあったし、
バックエンドの苦労
あとはお互いの仕様の認識違いとかがあったりしたんですよ、クライアントとサーバーの。
その辺ちゃんとクライアントデータフローの設計とかやってくれてる時にバックスが気づいて、バックエンドとやり取りして仕様を固めていってくれたっていうのもバックスなんで、
その辺はすごい自分もこれね、バシバシやっていかないとなって思いながらやってました。
なるほどなるほど。
なんか想定しているデータが返ってこなかったりっていうのはバックスがいち早く気づいてバックエンドにバグというかレポート上げてたりとかしてるのを覚えました。
これは載せられるかわかんないですけど、開発の終盤ですね、リリース1週間前ぐらいにバックスが霊の風邪を引いてしまって。
霊の風邪、霊の流行ってるやつ。
それで世間的に流行ってる霊の風邪が引いてしまって、その時はすごい心細かったんでね、改めて存在の大きさ、でかさを感じたところです。
そうかそうか、結構離脱しますもんね、あれになると。
なんでこのタイミングなのかなっていう。
これまでいっぱい流行ってきたのに、そこまで何もなかったのにね。
自分がかかったぐらいの時にだいたい収まり始めたんですよね。
じゃあ最後、それぞれ15秒間のPR枠があるので採用アピールをお願いします。
じゃあバックスからいきますか。
そうですね、もしタイムツリーって言うとカレンダーっていうイメージがあると思うんですけども、実際にはいろんなことをやっていて、その一つがカレンダー統計っていうのもあると思います。
特にカレンダーに興味がないとかっていう方もぜひタイムツリーの開発に興味を持っていただけたらなと思っております。
ありがとうございます。
Appleが発表したりとか、スイストの最新機能とか、こういった最新のものを触れる環境があるので、そういうの興味ある方はどんどん来ていただいて、一緒にタイムツリーの中身を進化させていけたらなと思ってます。
あとは雑談会も最初話したんですけど、すごいiOSチーム仲良いので、その仲の良さを感じに一回雑談会に参加してみるとかでもいいんですけど。
ゲスト参加できるんですか?
ゲスト参加できますよ。
新メンバーのシングとかニーガンとかは、iOS毎日朝会やってるんですけど、採用前にその朝会に参加してもらったりとかしてましたね。
本当にカジュアルにいろんな話できると思うんで、興味がある方連絡いただけたらなと思います。
はい。放送の概要欄にもカフェミーティング、みんなと気軽にお話しできるような面談のフォームとかも貼っておくので、興味がある方ぜひ。
はい。
はい、じゃあここまでいろいろ詳しく聞いてきましたチャット開発の話なんですけど、
多分ですね、これあと5回、6回ぐらい放送続けられるぐらいバックとかトラブルの話とかいっぱいあると思うんですけどね。
またおいおいちょっとずつネタが出てきたらこざしにしていければなと思って。
そうですね。
僕が聞いても結構面白かったんで、お二人様ありがとうございます今日は。
ありがとうございました。
また機会があったらぜひよろしくお願いします。
ぜひぜひお願いします。
40:30

コメント

スクロール