「設計に答えはないから探してみよう 〜 iOSアーキテクチャ意見交換会」で登壇しました #cmdevio2017

Developers-IO-2017-400x400

はじめに

こんぬづは、東京に出て来てから髪を整えたり、コンタクトレンズにしたりなど、東京デビューしたために親族から顔認識されなくなってしまった田中です。

今年の Developers.IO 2017 F-1 13:00 〜 13:45 の枠で登壇させていただいた内容についてまとめます。

セッション内容

セッションの流れ

初めの15分は、私が設計に対してどんな考え方を持っているかなどの共有をしつつ、参加者間で認識の共有を持てるように話をしました。その後の30分では、前段である私の話で挙げたトピックなども踏まえつつ、フリートークをしてもらう形式をとりました。「設計についてどういうことで困っているか」、「どうやってメンバーの習熟度を高めているか」、「アーキテクチャはどう決めているか」などが中心的な内容です。

フリートークの内容は以下の通りです。

参加者の開発体制

  • 自社開発: 6人
  • 受託開発: 2人
  • どちらも: 2人
  • スクラム開発を取り入れている人が多い

参加者が今採用しているアーキテクチャ

  • これから学習する: 1人
  • MVVM: 2人
  • クリーンアーキテクチャ: 6人
  • その他: 1人

クリーンアーキテクチャを取り入れている人が多数で、意外に思いました。昨年はiOSの設計についての議論が活発な年でしたが、それも落ち着き、MVVMとクリーンアーキテクチャが広まったのかなと推測しました。

アーキテクチャ採用の流れ

  • 案件の始まりにチームで話し合って決める
  • プロジェクトの要件から、どういうアーキテクチャが合いそうかを調査する
  • アーキテクチャについて学習し、チーム内の理解・習熟度を高める

アーキテクチャの取り入れ方

そのプロジェクトで採用するアーキテクチャを決めた後は、チームのメンバーがそのアーキテクチャを理解する必要があります。アーキテクチャによっては理解の難しいものもありますが、どうやって取り入れていっているかを紹介しあいました。

紹介されたパターン、方法は以下の通りです。

・すでにそのアーキテクチャに理解のある人がいる場合

  • モブプログラミング(期間: 1日)
  • ペアプログラミング(期間: 1日)

・社内・チームでそのアーキテクチャに初めて触れていく場合

  • 徐々に理解しながら取り入れる(期間: 2週間から1ヶ月)

その他

データはPresenterに持たせる?

ViewController-Presenter間の役割分けの話です。データを持つのはViewControllerになるのか、またはPresenterになるのかという疑問が挙がりました。

描画に必要なロジックはPresenterが受け持つため、データはPresenterが保持するようにする。 必要になった時はViewControllerがPresenterにアクセスしてデータを取り出す、という話になりました。

EntityをPresentation層に渡したくないけれど...?

APIやDataBaseから取得するデータはアプリで利用するデータモデルとは異なる役割の、Entityの形をとります。(RealmObjectなど)それをアプリで利用するデータモデルに変換するのはどのタイミングか?という疑問が挙がりました。

これは決めの問題ではないか、という意見が挙がりました。プロジェクトによってさまざまだが、Entityの取得をする役割で変換するか、またはTranslatorなどの役割を設けても良いかもしれない、という話になりました。

「ちょうど良い」アーキテクチャはどれだろう?

スライドの中でも取り扱ったトピックにデリバリー・保守性・テスタビリティの話がありました。大きな設計になるほど、将来への投資として保守性やテスタビリティが向上するが、スピードのある開発は困難になります。反対に、小さな設計を採用してデリバリーの早さを優先すれば、保守のしやすさやテストのしやすさが失われてしまうというジレンマがあります。

この問題に対して、「最近はMVVMやMVPのアーキテクチャが、バランスが取れていてちょうど良いのではないだろうかと考えている」、という意見が挙がりました。

まとめ

私はこれまでも他のイベントで設計について発表させていただくことが多かったです。しかし、特定のアーキテクチャの概要については実際に触れてみないと実感が持てないのではないかという仮説から、今回のセッションではフリートーク形式を採用しました。

アーキテクチャについて考える困りごとにどんなことがあるか、どうやって解決するかという話から、取り入れられているアーキテクチャの傾向はどのようになっているかなどの話が取り上げられたので、個人的にはとても価値のある話ができたと思いました。

参加していただけた方がなんらかのヒントや解決を持って帰っていただけていれば幸いです。

  • mono0926

    > 保守のしやすさやテスのトしやすさが失われてしまうというジレンマがあります。

    誤植ありました👀

    • ktanaka117

      いつも見ていただいてありがとうございます。そしてご指摘ありがとうございます。
      修正しました!