ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog

テクノロジー

Yahoo! JAPANを代表するiOSエンジニアが話す 開発手法や最新機能のTips Bonfire iOS #7

トップ画像

Bonfire iOS 運営の上原です。1月7日にオープンコラボレーションスペースLODGEにてBonfire iOS #7を開催しました。

Bonfireでは、AndroidやBackend、Designなどさまざまな専門領域にフォーカスを当てたイベントを開催しています。 その中でBonfire iOSはiOS・ Swiftや周辺技術について情報共有する会となっており、開発する上で浮かんでくる課題や進化を続ける環境、言語機能とどう向き合っているかについてを共有することで新しい知見、発見を得られたり、技術交流の輪を広げることができる場を目指しています。

今回のイベントについて

Bonfire iOS #7のテーマは、「ヤフーiOSオールスターズ」です。

ヤフーを代表するiOSエンジニアが2019年に取り組んだ新サービスの裏側やiOS 13での新機能(ダークモードなど)の実装のtipsを話してもらいました。

また、東京だけではなく名古屋・大阪を含めた3拠点で同時配信を行いました。

この記事では今回話されたトークの内容を簡単にご紹介したいと思います。

ヤフーアプリの品質向上戦略

登壇者の西

西 磨翁(@mao_nishi) ◆ ヤフー株式会社

発表者一人目は、黒帯iOSアプリ(第三〜五代)でヤフーのアプリ全体を統括している西より、ヤフーアプリの品質向上戦略についての話をしてもらいました。

品質向上を戦略的にやっていくには、現状把握が必須で把握するためにApp AnalyticsやOrganizerを利用しています。

また、Xcode 11からの新機能であるMetricsを見ると品質に関する項目(バッテリー消費量や起動時間、メモリ消費量など)が取得でき、それをAppleScriptで自動取得して一覧にして現状把握を行ってるそうです。これを行うことでアプリの品質について定期的にチェックができ問題が起きたときに、どこで問題が起きたかを把握しているそうです。

品質を可視化した後、実際に品質を上げていくためには多くのコーディング作業が必要になります。効率的にコーディングを実施するために、並行開発案件をやめブランチを廃止し、ペアプロで常時レビュー&コミットという手法を取り開発をしていったそうです。

並行開発案件の方がより早くさまざまな機能を導入していけそうですが、プルリクでのレビュー手戻りやブランチ管理コストが大きく、思ったように速度がでないそうです。 ブランチを廃止して並行開発をやめた方が、より早く開発できるケースがあるというのには驚きました。

PayPayフリマ iOS

登壇者の大西

大西 智也(@tomoya_onishi) ◆ ヤフー株式会社 PayPayフリマ iOSエンジニア

発表者二人目は、PayPayフリマを担当している大西です。

PayPayフリマでの開発手法や開発組織などについて話してもらいました。

PayPayフリマでは、XP(eXtreme Programming)を採用しペアプログラミングで開発が行われています。

XPの開発では、ストーリー制を用いてディレクションが「2つめのチュートリアルの『次へ』タップで3つめのチュートリアルが表示されること」のようなストーリーを作り、開発者がそれに沿って開発を進めて、開発を完了したらディレクションが受け入れテストをするといった流れになっています。こうすることで早いサイクルで確認することができ、バグが早期発見できるそうです。

ストーリー制を用いると仕様書としても扱え、不明な点はストーリーを見に行けば分かるし、ストーリー終わりに毎回確認が入るのでバグの早期発見もできそうで良い方法だなと感じました。

PayPayフリマでは、品質を担保するためにユニットテストやストーリーごとの受入テスト、UIテストの定期実行などを行っているようです。ユニットテストでは、gitのpre-pushを利用して、テストを走らせ成功ならばpushができるようにするなどテストを書かない、テストが落ちるようなコードはpushさせないなど品質を担保するためにさまざまな工夫をしているとのことでした。

Yahoo!乗換案内アプリのダークモード対応

登壇者の田中

田中 達也(@tanakasan2525) ◆ ヤフー株式会社 iOSエンジニア

発表者三人目は、Yahoo!乗換案内を担当している田中です。

iOS 13から追加されたダークモードの対応の仕方や苦労した点を話してもらいました。

ダークモード対応にどれぐらいの工数が必要か不明だったので、工数を見積もるためにいくつかの画面の仮デザインを作り、それを実装し計測して、画面数×平均作業数+α(色微調整時間等)のような計算式で工数を算出したそうです。

ダークモード対応は工数が不明なところが多く、暫定的に工数を出して「今対応をするか」、「次に見送るか」の対応を見極める必要がありそうだと感じました。

また、ダークモード設定してうまく動いてるなと思ってiOS 12で確認するとラベルが真っ黒で表示されていたり、色設定が反映されていなかったりなどiOS 13のSDKからの仕様変更の対応に苦労したようです。不具合の発見を素早くできたのは、ドッグフーディング環境の整備が十分になされていたからできたようです。

乗換案内アプリでは、AppFeedbackを利用しアプリの不具合などをフィードバックし開発に取り組んでいます。気軽に不具合の発見や気になったところなどをフィードバックできるのでAppFeedbackを見ていただけると幸いです。

コードを書きながら同時に設計していくためのiOSアプリ開発方針

登壇者の林

林 和弘 (@kazuhiro4949) ◆ ヤフー株式会社 iOSエンジニア

最後の発表者は、黒帯iOSアプリ(第七〜九代)である林です。

この発表は年末に書かれたTechBlogの記事が元になっています。 クラス設計をテーマに、

  • システムフレームワークを中心に必要に応じて設計していく
  • ユニットテストを設計の良し悪しの評価とする
  • レイヤードアーキテクチャパターンは使わない

という3つの考え方について記事の内容を補足してもらいました。

この設計方針の背景については、

  • iOS SDKのライフサイクルが複雑でロジック・クラスをライフサイクルから切り離していくと、それに応じたイベント処理の管理を自前の仕組みで行う必要が出てくる
  • iOSアプリでは良いテストケースを作って維持することが難しい

などの課題を挙げています。 そしてその解決策として、

  • ViewとViewControllerでクラス分割
  • DIによる集約
  • Embeded Frameworkによるモジュール管理

といった、現在の主流な考え方に比べて、よりシンプルな方針による解決を提案しています。

Embeded Frameworkによるモジュール化では、

  • クラス間の依存や循環的な依存を減らす
  • 継承はできるだけ使わず集約でコードを使い回す
  • 発生する依存はプロトコル経由にする

といった方針で取り組んでいるようです。

「心地よく動くアプリを作って維持し続けること」「ユニットテストも必要十分に作って維持し続けること」は難しいので、必要以上に複雑化させずにベースの仕組みに乗って心地よいUXの提供に集中することが大事ということでした。

まとめ

今回は、ヤフーを代表するiOSエンジニアの四名に集まって話してもらいました。

参加者からのアンケートでは、「ペアプログラミングやXPのストーリー制などの開発手法の話が興味深かった」や「ダークモードの対応について参考になった」、「iOS 13リリースと同時にリリースはかなりチャレンジングですごい」など好意的な意見がたくさんあり、大変うれしく思いました。

ヤフーではこれからもiOSに関する技術共有の場を提供していきます。 この記事を読んでご興味を持ってくださった方はぜひ足を運んでみてください!

下記に登録いただければヤフーで開催するイベントの案内をお届けいたします。ぜひご登録おねがいします。

https://yj-meetup.connpass.com/

こちらの記事のご感想を聞かせください。

  • 学びがある
  • わかりやすい
  • 新しい視点

ご感想ありがとうございました


上原 和輝

Yahoo!乗換案内エンジニア

Yahoo!乗換案内のiOS版アプリを開発しています。

このページの先頭へ