リリースから12年目の「Chatwork」のモバイルアプリ。その開発現場に迫ります。
皆さん、こんにちは!Chatwork採用広報の安田です。
今回は2023年10月13日に開催された「モバイルアプリ部を徹底解剖!DAU100万の『Chatwork』を支えるモバイルチームの現場とは?」のイベントレポートをお届けします✨
「Chatwork」のiOS/Android版アプリはリリースから12年を迎えますが、エンドユーザーにプロダクトの価値を届けるために進化し続けています。
本イベントでは、前半にLTを二本、後半に「開発環境やビジネスチャットならではの面白さ」などのパネルディスカッション、という内容でお話ししました!
※こちらの記事ではパネルディスカッションについてまとめています。
LTの資料はこちら
メンバー紹介
Chatworkの開発環境ってどんな感じ?
福井:こちらがChatworkの組織図で、5つの本部で構成されています。「Chatwork」のアプリを作っているのはプロダクト本部です。
ご覧の通りプロダクト本部内には、「プロダクト開発ユニット」と「モバイルアプリケーション開発部」などの部署があります。ユニットは機能開発を行う複数の職能横断型のフィーチャーチームで構成、部は職能別のプラットフォームチームで構成されているという違いがあります。このような体制で現在の開発を進めています。
またプロダクト開発ユニット(以下、フィーチャーチーム)とモバイルアプリケーション開発部(以下、プラットフォームチーム)は、果たす役割にも違いがあります。
前者はユーザーに対して価値の提供を行い、後者はフィーチャーチームに対して価値の提供を行っています。
本日登壇の3人はモバイルアプリケーション開発部のiOSプラットフォームチームとAndroidプラットフォームチームに在籍しており、フィーチャーチームにおいてユーザー価値の提供スピードを上げていくために、日々頑張っています。
例としてあげると、あるフィーチャーチームでは名刺の読み取り機能や、プロフィールのQRコード対応などの機能開発を行っています。開発体制についてはこんなところでしょうか。
奥澤さん、普段の業務内容を教えてもらえますか?
奥澤:われわれのAndroidプラットフォームチームは、フィーチャーチームが快適にAndroidアプリを開発できるように、開発生産性を上げることをミッションにしたチームです。例えば、Android版アプリのアーキテクチャや、技術負債の解消、コードベースの整備、あるいはCI/CDの改善を通じてより快適に開発できる環境を整えるといったことをやっています。
他にもLTで発表したSonarCloudの活用なども行っています。今後はコードメトリクスを活用し、開発のボトルネックを発見して、技術負債を解消していきたいと考えています。
福井:アーキテクチャの改修では、具体的にどんなことをしているのしょうか。
奥澤:「Chatwork」のAndroid版アプリは歴史が長くて、混沌としたところが多いんです。例えばインフラ層を整備するとか、ビジネス層を整備するとか、レイヤーごとにモジュールを分けていくみたいなことを丁寧に進めるのが中心ですね。
なので、UIを改修するときに、インフラを意識しなくていいとか、そういった関心の分離をしています。
福井:iOSの方はどうですか?
中山:リアーキテクチャを進めてるのですが、その際にアーキテクチャの選定をしたりで、独自のアーキテクチャを考案したりといった活動もありますし、SwiftUI化も進めている最中です。
あとはプラットフォームチームとしてCI/CD回りの保守や、移行作業のようなことも行っていたり、アプリのリリース作業もしていますね。先ほどプラットフォームチームとフィーチャーチームといった分かれ方をしているという話があったかと思いますが、iOS開発者が集まるiOSギルドという集まりがありまして、そこで新機能の開発に対してアドバイスを行ったり、そこの統制を取ったりといった活動もしています。
福井:リアーキテクチャについては、以前一緒にiOSDCでも話しましたよね。
中山:SVVSアーキテクチャの導入ですね。SwiftUIの導入に向けて、より最適なアーキテクチャを考えた際に、チームで出した案がSVVSアーキテクチャでした。現状の「Chatwork」アプリは奥澤さんの言うように複雑な部分も多いので、よりシンプルに、より変更が可能になるようにといった狙いで選んだアーキテクチャです。
福井:そのあたりは私も合宿で一緒に考えて、SVVS化までの流れを見てきました。単一方向のアーキテクチャで、データフローがシンプルになっているので、さまざまな課題が解消できればいいなと思っています。
奥澤さんはCI/CD周りを担当していると先ほどお話しいただきましたが、その辺りの最近の取り組みはどうでしょう?
奥澤:そうですね。半年前まで、「Chatwork」のAndroid版アプリはBitriseというCIサービスを使っていたのですが、それをGitHub Actionsに置き換えて、より柔軟な形でCIを回せるようにしました。
並列で複数のワークフローが動くようにして、より短い時間でCIが完了するようになりましたね。今はこれまでのリリースフローをGitHub Actionsに移し替えて、より効率的にリリースしていくことができるように取り組んでいるところです。
福井:実際、GitHub Actionsに変えてみてどうでしたか?
奥澤:これまでは権限的な問題で、フィーチャーチームがCIを修正しにくかったという課題がありました。しかしGitHub Actionsだとワークフローが全部公開されており、フィーチャーチームもどこで失敗してるかが分かるため、そういったメリットもあるかなと思ってます。
福井:iOS側でもSonarCloudを使っていると思うのですが、実際どのような使い方をしてますか?
中山:そうですね、iOS側だと、チケットで作業をして、プルリクエストを出したときに、Code Smellsを指摘してもらうなど、さまざまな指摘事項を見て、レビュアーの負荷を下げるところに貢献してると思います。
福井:SonarCloudで問題があったら、そこを修正する文化ができていますね。
例えばGraphQL化も最近始まっているかと思いますが、どんなところに課題があるか、またどういったところがメリットだという肌感は既に出てきていますか?
奥澤:メリットとしては、無駄なデータを取らなくて済むのでユーザーフレンドリーというか、無駄な通信を抑えるという意味で、見えないけれども重要な改善ができると感じています。一方でGraphQL導入に向けて、コードベースを変えていかなければいけないわけなんですが、現状のコードベースが歴史の長いコードベースで、単純にGraphQLに置き換えることがなかなか難しい状況です。そこをプラットフォームチームでどう置き換えていくかを検討しているところですね。
福井:奥澤さんからiOSチームに質問はありますか?
奥澤:最近Swiftが100%になったというのを聞いていて、どうやってSwift100%に持っていったのかが気になっています。
中山:これに関しては、僕より福井さんに聞いたほうがいいかもしれません(笑)。
福井:そうですね(笑)。
Swift化は2017年ぐらいからずっと取り組んでいて、5年〜6年かかってやっと完了したところです。多くの人に使っていただいてる中で、機能開発と、ユーザーには見えないObjective-CからSwiftの移行との両方を並行して進めていたので、どちらを優先するのかという悩みも、技術的な課題もありました。5年の中には歴史や物語がたくさんあります。
詳しい話は10月26日のChatwork Product Dayでお話したいと思っています。皆さんの中でも、Swift化に取り組まれているところもあると思いますが、課題で詰まってる方は特に、聞いているだけで面白い話だと思うのでぜひ参加いただければ嬉しいです。
奥澤:ネタバレみたいな質問をしてしまってすみません(笑)。
福井:宣伝できたので良かったです(笑)。
Chatworkでモバイルアプリを作る面白さとは?
司会:チャットツールを作ることだからこその面白さがあると思うんですが、Chatworkに入社を決めた理由って何でしたか?何に興味を持ってとか、ここ面白そうだなとか。
奥澤:スカウトがきっかけだったんですけど、「Chatwork」のAndroid版アプリの開発を加速させていく中で、アーキテクチャの改善をリードできるポジションへ誘ってもらいました。
元々アーキテクチャに興味があって、個人的に勉強したり試したりしていました。でも前職のクライアントワークでは試せることに限界があったんですよね。でも自社サービスの「Chatwork」でアーキテクチャの改善の仕事をするということで、溜めていたアイディアの活用ができるかなと思い、興味を持ちました。
あと、今までどちらかというと小規模なアプリの開発に携わることが多かったんですが、「Chatwork」のAndroid版アプリはもう少し規模が大きいんですよね。今までよりも大きな規模のアプリのアーキテクチャ改善をすることで、たくさん学びが得られるかなとも思っていました。
司会:アーキテクチャの改善と、大きめのサービスに興味があったみたいなところの二つで、Chatworkは面白そうだなと思われた感じですかね。
奥澤:そうですね。
司会:ちなみに中山くんは新卒でChatworkを選んでいただいたわけですが、面白そうだと感じた部分はどのあたりでしたか?
中山:僕はどうせ1日8時間働くなら、やりがいを感じて楽しく働きたいなと思って就職活動をしていました。
それができそうだと感じたのがChatworkだったので、入社したというのが一番大きいです。採用フローの中には体験入社もあって会社の雰囲気が感じられましたし、変化が早くて柔軟な会社で、チャレンジングなことができる環境も魅力でした。あと一番は、「働くをもっと楽しく、創造的に」という会社のミッションで、楽しく働きたい自分にはとても刺さりました。
司会:楽しく働けていますか?
中山:働けていますね。
司会:福井さんはお二人の面接をしたときにChatworkにそれぞれのこういう面が活かせそうだなと思った部分というか、エピソードはありますか?
福井:奥澤さんはAndroidに強くて、本も書いていて、Androidチームをリードしてもらえそうだったので、ぜひ入ってもらいたいと思っていました。
中山くんの場合は元々ずっとFlutterを使っていて、Swiftの経験はなかったようなのですが、体験入社などを通じてSwiftも使えるようになって、成長スピードも速いところがすごかったですね。
司会:入社してから技術が身に付いたとか、こういう体験ができたというようなお話はありますか。
福井:私が入社したのがもう10年ほど前になるので、さまざまな部分が変わってきてはいます。元々iOSエンジニアとして入社をし、一緒に働いてたメンバーがプロダクトマネージャーになったり、セールスの方に行ったりなど、チャレンジしたいところをやらせてもらってる印象がありますね。私の場合もiOSエンジニアとして入社をして現在はマネージャーをしているので、やりたいことがあればチャレンジをさせてもらえる会社かなと思います。
司会:奥澤さんはチャットツールを開発するようになってから、新しく身に付いたといえるスキルはありますか。
奥澤:私の場合、前職でAndroidのテックリードのようなことをやっていて、Androidについては正直これ以上成長を求めなくてもいいかなと思いながら入社をしました。でも実際に入ってみると、めちゃくちゃ学ぶことがあるんですよね。
もう38とか39歳になるんですけど、この年齢でもまだまだ成長できるなっていうのを実感した1年でした。
司会:一番印象に残った学びはなんでしょうか。
奥澤:冒頭で福井さんが話していたのですが、Chatworkはチームトポロジーという考え方でチームを分割して、開発を進めています。最初は、究極的には自分が全部コードレビューしてコード品質を向上していけばいいと思ってたんです。でも全然考え方が違うことに入社してから気付きました。
というのも私がコードレビューに入ってしまうと、フィーチャーチームの開発をブロックしてしまうので、組織の目的であるユーザーへの価値提供を素早く行うことが実現できないんですよね。われわれプラットフォームチームがフィーチャーチームの開発をブロックしない方法でコード品質を上げていかなければいけないという考え方に、この1年で変わりました。
司会:チームトポロジーの記事について、福井さんが昔記事を書いていたような気がします。
福井:書いてからだいぶ時間が経って、状況も変わっているんですけどね。チームトポロジーに沿ったチーム分けをしてもやっぱり課題はあるので、そこをどう改善するかみたいなところは、今までもずっと考えているところです。
奥澤:フィーチャーチームのエンジニアの方とオンラインで雑談することがあるんですけど、そこでチームトポロジー的にはこういう動き方の方がいいよねとか、今こういう動きだけどこう変えていきたいよねみたいなことをよく話しています。チームの動き方も改善していけるんじゃないかなと思います。
司会:中山くんは新卒として入社しているので、体制の話を振られるとちょっと困るかもしれないんですけども、今の開発体制に対して思うところはありますか?
中山:課題を見つけて改善していく姿勢が、組織としていいなと思っています。従来のやり方だからとか、長いものに巻かれろ的な感じではなくて、本当に直したいところは直していったり、チームで毎週振り返りをしたりして、課題はネクストアクションで直していこうというマインドが、組織全体にありますね。
奥澤:失敗から学ぼうという姿勢がありますね。
司会:ちなみに最近解決した課題は、どんなものがありますか?
奥澤:Androidのチームで言うと、ちょっとした改善ではありますが、レビューのフローに関するものがあります。今までコードレビューが終わって、レビュアーがアプルーブをつけた後、レビューを受ける方がマージをしていたんです。でもその流れだとアプルーブからマージまでにタイムラグがあるよねということで、レビュアーがアプルーブをつけたらそのままマージするっていうように、やり方を変えたというものです。これも振り返りから生まれたアイディアです。
中山:iOSで言うと、元々は不具合報告があったときに誰が対応するかというのが曖昧になっていましたが、先月か先々月あたりに不具合の報告があったら全員で一度集まることに決まりました。それ以降集まって、担当を決めたり、コミュニケーションは誰が取るみたいな話をしたりして、迅速な不具合対応ができるようになったと感じています。
福井:私もiOSのインシデント対応を見て、チームメンバーが一丸となって取り組んでいるなと感じていました。インシデント対応はすごく大切なので、不具合はすぐ直せるような体制にしていきたいと思っています。
終わりに
いかかでしたでしょうか?「Chatwork」のモバイルアプリ部について少しでも持ち帰れるものがあれば嬉しいです。
さてここからは宣伝です!
今回登壇してくれた中山くんが、12/19(火)に「学生&若手 モバイルエンジニア活動報告会2023」を開催します🎉今年の振り返りをしたい!みんなの取り組みを聞いてみたい!という方はぜひご参加お待ちしています。登壇者は新卒3年目までの社会人と学生限定ですが、視聴はどなたでも可能です。
We’re hiring!!
Chatworkではモバイルアプリ開発部で一緒に働いてくれるメンバーを募集しています。少しでもご興味を持ってくれた方は、ぜひご応募ください。