9月15日〜17日にiOSDC Japan 2017が開催されました。最終日の本編2日目も様々なテーマのもとに,
結婚式を支えた技術 Firebaseを活用したサーバレスiOSアプリケーション開発
ベストトーク賞10位に入賞したトーク
motokiee氏は結婚式において
アプリ開発の目的
しかしそう決めた時には結婚式まで1ヶ月を切っていた上に非常に多忙な時期と重なっていました。そこで結婚式に間に合わせるために課題を整理し,
今回要件として挙げたことはFirebaseでほぼすべて実現可能でした。写真のタイムライン機能を実装するにあたってはDatabaseとStorageを,
Firebaseを使ったアプリ実装
プロジェクトの進め方としては,
結果的に開発は間に合い,
コード生成による静的なDependency Injection
ベストトーク賞の8位に入賞したトーク
最初はDIの基礎の説明から始まりました。DIは
ImageDowonloader
上記のコードは画像ダウンローダとしての要件は満たしています。しかしURLSession.
DIを実現したImageDowonloader
initializerでURLSessionを外部から渡すことでDIを実現できました。これにより以下の効能が得られました。
- dependencyの切り替えが可能になり,
その切替に際しImageDownloaderのコード変更は不要になった - dependencyの詳細を必要以上に決めなくてよく,
ImageDownloaderの責務を小さくできた
一方,
複雑になるdependency
この例の場合,
インスタンスを自動で取得する方法は以下の2つの方法が考えられます。
- DI用のinitializerを登録する
- DI用のprovider methodを用意する
概要はAndroidのDaggerを例にして説明しました。SwiftではAndroidのDaggerのようにアノテーションを使うことができません。そこで代わりに,
プロトコルにした意味は以下の2つの理由が挙げています。
- provider methodの実装なしでこの構造が組める
- テストなどで便利
- 利用時に必要なものが揃っていることが保証される
- 提供不足であればコンパイルエラーになる
自動的に取得できない際にdependencyになる場合はresolveメソッドのパラメータで渡すことによって解決できるとしています。
なお,