freeeの開発情報ポータルサイト

新アプリリリース!iOSエンジニアとWebエンジニアの融合

こんにちは、DevBrandingのellyです。9月3日に配信した「freee Tech Night 〜新アプリリリース!iOSエンジニアとWebエンジニアの融合」の様子をご紹介します。

freee では iOS エンジニアと Web エンジニアは基本的に別々のプロジェクトで業務を行うことが多いのですが、今回 freeeプロジェクト管理の iOS アプリの開発にあたり、2チームが密に連携を取ってプロジェクトを進めました。 今回は iOS エンジニアのiwadさんと Web エンジニアのtomozさんをゲストに招き、チーム融合でのプロジェクトの立ち上げからリリースまでの道のり、GraphQL・SwiftUI の採用などの技術的な新しいチャレンジについて話してもらいました。

登壇者集合写真
登壇者集合写真

iwad: 写真左上 2019年11月入社。制作会社や事業会社にてモバイルアプリ開発に従事。freeeではfreee会計やfreee人事労務のiOSアプリ開発を担当。

tomoz: 写真右上 2019年11月入社。freeeプロジェクト管理のWebエンジニア。Androidアプリ開発やFlutterを用いた開発も経験。

のぶじゃす (@noblejasper): 写真右下 ラジオパーソナリティ、2017年に中途入社mixi、ソーシャルゲーム企業でソフトウェアエンジニアを経験し freee に。入社後はエンジニア→エンジニア採用担当→エンジニアと DevBranding を担当。しゃべりたがり。声が大きい。

freeeプロジェクト管理のiOSアプリ開発は当初どのように進める予定だったのですか?

tomoz:最初はある程度きっかり役割分担するという方法を考えてました。どのようなWebサービスでもモバイルアプリを作りたいというニーズがある中で、モバイルチームのリソースにももちろん限りがあって作って欲しいとお願いすればできるものではないので、CI/CDのような共通でやっていかないといけない部分はお任せするけれども、それ以外の部分は自分たちで頑張って実装しようとしていました。

モバイルチームにはすでにリリースしているアプリケーションの機能開発もありますからね。モバイルチーム側はどのように受け止めていたんですか?

iwad:プロジェクト開始前は、モバイルチームが開発するというよりは Web開発チームが主体的に開発したいというお話だったので、どちらかというとサポート役に回る感じでしたね。どういった技術スタックで作るのか、GraphQLを使ってよいかといった大枠の方針について、聞かれたら答えるといった距離感でした。

tomoz:質問があれば答えてもらう、依頼があればやってもらうっていう関係性でしたね。

実際にスタートしてどうでしたか?

tomoz:やっぱりうまくいかなかったです。何がうまくいかなかったかというと、Web開発チーム側の僕たちは「モバイルチームには守って欲しいルールみたいなものがあるだろう」と思って、どうしてもお伺いをたてるような感じになってたんですよね。一方モバイルチームも、freeeプロジェクト管理というプロダクト自体を今まで触ったことがないので判断しかねるみたいなケースがいっぱいあって、お互いに気を使う状態に陥っていました。いろんなことを決めないといけない最初のフェーズで結構足踏みしてしまいました。

それだとスピードは遅くなりますよね。そこからどうやって変化させていったんですか?

tomoz:Web開発チームのほうからiwadさんに「一緒に開発してください、朝会もモブプロも一緒に動いてください」ってお願いして、生活を共にするぐらいの感覚で開発し始めたって感じですね。

iwad さんはお願いされてどう思いました?

iwad:そのほうがやりやすいという風に思ってましたし、自分のJM(ジャーマネ:freeeにおけるマネージャー)も同じ認識を持っていました。既存プロダクトのタスクも持ちながらサポートするような形でぬるっとスタートしたので、その話があってからは抱えていたモバイルチームの定例やタスクは一旦全部置いて、完全にfreeeプロジェクト管理の開発チームにジョインするイメージで取り組みました。

朝会やモブプロ、様々なMTGにどんどん入っていくようになって、良い成果は出始めましたか?

tomoz:そうですね、決めないといけないことが多くある中で、モバイルチームだけでやってたら、Web 開発チームだけでやってたらとなると、お互いの領域に対してある程度キャッチアップコストがかかっちゃうと思うんですよね。そうするとリリースの目標とそのコストを天秤にかけて、どうしても最低限動くようなものに落ち着いてしまいがちだと思うんですよ。今回モブプロとかであーだこーだ言いながら一緒にやることによって、モバイル開発の知識とのドメイン知識をその場で共有できてキャッチアップコストがかなり削られたと思います。それぞれ単体で動いていたらできなかっただろうなというプラスアルファの上積みもたくさんできて非常に良かったです。

登壇者写真
滑舌が良いtomozさん

スキルセットが違う人たちがお互いの知識を共有しながら進められたというのはモブプロの本質ですね。ビフォーアフターで明らかに良くなったものってありますか?

tomoz:明らかにというのは難しいですが、毎週スプリントレビューみたいな形でデモをしていたんですが、融合してからは1回動くものを作っちゃおうという感じで、決めることは決めながらも作れるものはどんどん作り切って、プロジェクトチーム全体の温度感・テンションを上げていくことができたと思います。

返事待ち、確認待ちがなくガンガン進められるのは本質的ですよね。融合によってプラスアルファでできたというのはどういうものですか?

tomoz: Web開発チーム側でいうと、社内的には一般的ではないんですがfreeeプロジェクト管理でGraphQLを使っている部分があって、今回モバイルチームでも使ってみようよということでラフに導入することができました。もうひとつは、アプリケーションアーキテクチャをちゃんと設計するのって慣れない人がやるとなかなかできないことだと思うんですが、今回iwadさんに入ってもらったことで、しっかり最初からMVVMのアーキテクチャを採用して設計することができました。一画面サンプルを用意して、Webエンジニアもそれに則ったものを作ればいいということが分かったので、統制が取れた状態で同じような形で実装ができたというのは大きかったです。

モバイルチーム側はどうですか?

iwad:社内アプリの共通基盤をfreeeプロジェクト管理にも同様に導入できたのは良かったです。あと、この開発と並行して、freeeのサービス の認証関連の機能をモジュール化して他のアプリにも導入できるような取り組みを行いました。昨今freeeの社内ではfreeeプロジェクト管理と同様にモバイルアプリのニーズが高まっていて、各モバイルアプリのUIや品質に一貫性を持たせることやレギュレーションの整備が喫緊の課題になっていて、今回その機能を共通化できたのは大きな一歩だったと思います。

登壇者写真
少し緊張気味のiwadさん

freeeプロジェクト管理のモバイルアプリ開発と同時に、既存の共通化の課題を一緒に片づけたんですね、すごい!技術的なチャレンジができたのには融合したこと以外にも何か理由はありますか?

tomoz:freeeプロジェクト管理が比較的新しいプロダクトだったことと、Web エンジニアが実装したという二点です。今回SwiftUIとCombineという iOS 標準のライブラリをフルに使って実装していて、対応OSも限られている状況で、それを仮にfreee会計でやろうとすると現状サポートしているものを切らないといけないみたいな議論になっちゃうと思うんですよね。ただ、今回は新しいものを作ろうとしていて本当にターゲットに届くのであればiOS 〇〇以降に限定していいよねと判断できました。もちろん投げやりな意思決定ではなくてちゃんとした根拠をもとに意思決定をしているわけですけれども、そういう技術的なチャレンジも含めた意思決定ができる状態だったというのはあります。もうひとつはWeb エンジニアだったからこそ、SwiftUIだろうがCombineだろうが、もともと知らないのでキャッチアップコストが変わらないんですよ。だからある意味踏ん切りがついたというのもあると思います。

iwadさんはどうですか?

iwad:似てると思いますが、新規開発というところ、既存のコードベースがないという状態だったのがチャレンジングに開発できた要因かと思います。新しいものだからこそ実際に実践で使えるかという観点も重要だと思いますし。

tomoz:もちろん同じアプリでチャレンジを続けていくことも必要だと思うんですけど、たまにまっさらな環境でやりたいってこともあると思うんですよね、人は(笑)

分かる(笑)それが既存のアプリとかにも還元されていくといいですね。逆に融合してイマイチだった、大変だったことってありますか?

tomoz:正直、融合してからはないです。ただ、今回運が良くて、実はWeb開発チームの中でiOSにかなり慣れている人がいたというのもあって、スムーズに進んだ部分はあると思います。なので雑にWebエンジニアをアサインしたらなんとかなるかっていうとそんなことはないんだろうなと思います。プロジェクトの進捗が想定通りに進まない可能性もあるので、PMやBizの関係者とも共有しながら合意を作るといったように、ちゃんとケアしてコミュニケーションをとるというのは注意点として必要だと思います。

そういう意味でも、がっつり入ってもらうところが大事になってくると思います。「サンプルだけ作ったのであとはこれ見ながらやればできると思います」みたいなことではなくて、一緒にやって不明点を随時聞きながら開発するという環境を用意すれば十分やっていけると思います。

今後のリリース以降の予定や課題はありますか?

tomoz:すでに微修正レベルでは小さいアップデートをしています。基本はWeb開発チームで完結する形で修正や機能追加をしていますが、もちろんモバイルチーム側から「こういう大規模な機能追加しませんか?」みたいな提案をもらうのも全然アリだと思うんですよね。だから今回どちらにも口を出せる関係性が築けたというのが大きいと思っています。モバイルチームはfreeeのアプリを横断で見てるので、全体のUI/UXとかを理解してるのってやっぱりモバイルチームだと思うんですよ。だからそういう人から意見を聞ける環境があるのはとてもいいですし、今後とも協力しながらやっていきたいなと思っています。

iwad:Web開発チームがアプリ開発できるようになって、ちょっと修正したいなという時にモバイルチーム待ちにならずに素早く対応できるようになったのは良かったと思います。一方で技術的な仕様の変更だったりAppleのレギュレーション・規約の改訂など開発を取り巻く外部要因が影響を及ぼすようなことも結構あると思うんですけど、そこはモバイルチーム発信でハンドリングして主体性持ってやっていきたいと思っています。

関係性が築けているのは理想的ですね。今後のさらなる進化も楽しみです!

イベントの本編はここまでです。この後は「アフタートーク」でより深い技術談議が繰り広げられました。

最後に

freeeではAndroid/iOSエンジニアを絶賛募集中です。 モバイルチームでは既存の大規模なプロジェクトの改善・グロースだけではなく、多様な事業領域からモバイルアプリの開発ニーズが高まっており、様々なフェーズの開発に取り組むことができます。プロジェクトの現状課題や事業価値を総合的に判断して開発していけるような方、技術的なトレンドを追いかけるだけでなく現状と照らし合わせて最適解を見つけ改善していける方を募集していますので、気になった方はぜひこちらからエントリーください。お待ちしております!

エンジニア採用 | freee株式会社 採用情報

▶次回freee Tech Night

10/1(金)「安定した開発を続けるサイトビジットのRails活用術」というテーマでお送りします。 サイトビジット社は2021年4月にfreeeにグループジョインしました。『資格スクエア』や『NINJA SIGN by freee』を開発しており、サーバーサイドのフレームワークにRuby on Railsを採用しています。 テストカバレッジ96%・ほぼ毎日各ライブラリのupdateを実施・専業のデザイナーなしでのUI構築など、限られたエンジニアの中でどのようにして高速にかつ安全に開発を進めているのか、開発の組織や文化について話を聞いていきます。 freee-tech-night.connpass.com

▶今回のイベントのアーカイブ(録画)


www.youtube.com