iOSアプリ開発のエコシステムを考えてみた
Table of Contents
iOSアプリ開発で開発の周辺環境いわゆるエコシステムについて、現状どうなってるか整理も踏まえて考えて見ました。
この記事では説明しない部分
- アーキテクチャパターンやログ機能などアプリの骨組みデザイン
- ニッチ過ぎるサービスやツール
エコシステムをなすツールやサービス一覧
上図は今回構築に使ったツールとその関係を階層構造で表した図です。
Framework管理
frameworkの作成や管理をするツール群です。
- CocoaPods
- Carthage
説明は省きます。詳細は各リンク先を見てください。
タスク管理
ビルド、テスト、アーカイブなど開発における処理の作成・管理として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などのバージョンを管理するツール類です。
-
Homebrew
MacのHomebrewとは?仕組み・使い方と用語整理 -
Mint Mintを使うことでプロジェクト間のツールバージョンを疎結合にできます。
iOS開発環境には重要エコシステムとなるMintの理解と利用
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周りなので、そうなってきた場合はsettingGroups
とconfigFiles
を使って
外部ファイルに抽出する必要が出てくると思います。
ここらへんはXcodeGenのSettings周りを整理する
にやり方を書いてあります。
レイヤードアーキテクチャデザインによってEmbedded frameworkを増やす
レイヤードアーキテクチャはサンプルなので2層に留めてます。
実際のアプリ開発時ではアーキテクチャデザインに合わせます。
マーケティング領域
アプリ開発のエコシステムの遠い位置にはマーケティング領域が出てくると思います。
これらはビジネスサイドの領域ではありますが、データ集計フローは開発サイドの役割になります。
ただ、今回は本筋から離れてしまうので説明しません。
- Firebase Analytics
- BigQuery
- Redash
- Slack
- Google Data Studio