iOSアプリ開発のエコシステムを考えてみた

iOSアプリ開発のエコシステムを考えてみた

Table of Contents

iOSアプリ開発で開発の周辺環境いわゆるエコシステムについて、現状どうなってるか整理も踏まえて考えて見ました。

この記事では説明しない部分

  • アーキテクチャパターンやログ機能などアプリの骨組みデザイン
  • ニッチ過ぎるサービスやツール

エコシステムをなすツールやサービス一覧

ios-ecosystem-design

上図は今回構築に使ったツールとその関係を階層構造で表した図です。

Framework管理

frameworkの作成や管理をするツール群です。

説明は省きます。詳細は各リンク先を見てください。

タスク管理

ビルド、テスト、アーカイブなど開発における処理の作成・管理としてFastlaneを使います。

Fastlaneでタスク管理することで、細かな手続きを一塊にして呼び出しを簡略化します。
またコマンドラインで呼び出せることでCIに乗せれたりもできます。
そして、CIサービスの中でFastlaneのタスクを呼ぶことでCIの種類に依存せず処理を管理できます。

プロジェクト管理

Xcodeプロジェクトの管理としてXcodeGenを使います。
XcodeGenのメリットや使い方に関しては「XcodeGenを基本から理解する 」で説明してます。

静的解析ツール

機械的にコード品質チェックを行うツールとしてSwiftLintを使います。

管理ツール管理

FastlaneやCocoaPodsなどを管理ツールのバージョンを管理するツール群です。

  • rbenv
    Rubyのバージョン管理ツール。
    FastlaneやCocoaPods, bundlerなどRuby製ツールの言語バージョンを制御する。
    これがないとグルーバルのRubyバージョンを使うことになり、もし別都合でバージョンアップして、そのバージョンが下位互換だった場合に動かなくなる。
  • bundler
    gemの一元管理gem。
    FastlaneやCocoaPodsなどのRuby製ツールのツールバージョンを制御する。
    これがないとグローバルのFastlaneやCocoaPodsを使うことになり、他プロジェクト都合のバージョンアップに影響受ける。

パッケージ管理

SwiftLintやCarthageなどのバージョンを管理するツール類です。

Mintバージョンで問題が起きる場合

今回MintはHomebrewからインストールする構成です。
もし、プロジェクト毎にMintのバージョンを持つ必要がある場合は、インストールを自身でインストールする方法にすることで、Mintのバージョンを制御することが可能になります。

またSwiftバージョンにズレが起きてる場合は,SwiftEnvを使って.swift-versionファイルでSwiftバージョンを固定することもできます。

テスト環境

テストプロジェクトで使うテストフレームワーク・ツール群です。

  • Quick BDDフレームワークです。通常のXCTestを使うよりテストケース管理がしやすくなります。
  • Nimble Matcherです。XCTAssertを直接使うよりコードが読みやすく書きやすくなります。

CIサービス

モバイルに特化したBitriseを使います。
ここに関してはCircleCIなど他領域(backend, frontend)などの費用関係もあるのである程度ゆらぎはあると思います。

組み合わせてみる

実際に組み合わせたiOSプロジェクト雛形をGitHubに用意しました。
Homebrewなど一部はGitHubにアップしないので反映されないものもあります。

ビルド構成が複雑なら設定を外部ファイル化する

project.ymlの中身が複雑になるのは主にSettings周りなので、そうなってきた場合はsettingGroupsconfigFilesを使って
外部ファイルに抽出する必要が出てくると思います。
ここらへんはXcodeGenのSettings周りを整理する にやり方を書いてあります。

レイヤードアーキテクチャデザインによってEmbedded frameworkを増やす

レイヤードアーキテクチャはサンプルなので2層に留めてます。
実際のアプリ開発時ではアーキテクチャデザインに合わせます。

マーケティング領域

アプリ開発のエコシステムの遠い位置にはマーケティング領域が出てくると思います。
これらはビジネスサイドの領域ではありますが、データ集計フローは開発サイドの役割になります。
ただ、今回は本筋から離れてしまうので説明しません。

  • Firebase Analytics
  • BigQuery
  • Redash
  • Slack
  • Google Data Studio
このエントリーをはてなブックマークに追加