SlideShare a Scribd company logo
Realtime Database、Clean Architecture、
を組み合わせた導入事例
フェンリル×モンスター・ラボ×チームラボ勉強会
2017/8/28
Monstar Lab, Inc.
菊池 達也(Tatsuya Kikuchi)
自己紹介
菊池 達也(きくち たつや)
生年月日 : 1987/10/9
日本大学 理工学部 精密機械工学科 卒業
■SNS
Facebook :菊池 達也
Github : tatsuyak9
Instagram : tatsuyak9
■経歴
受託開発の企業にてAndroid,iOS,Web向けのアプリケーション開発を行ってきました。
2015年にMonstar Lab, Inc.に入社し、入社してすぐ2年間客先に常駐していました。
そこではiOSのSDK、iOS、tvOSのアプリ開発のリードエンジニアとして携わりました。
今年2月に自社に戻り現在はiOS、Unityの受託開発の案件をメインに携わっています。
■具体例
・iOSのみのネイティブアプリ開発を依頼したい。
・短い工数で。
・アプリに表示するコンテンツを追加したり変更したい。
・ユーザーのログイン、ログアウトをしたい。
・サーバー維持費とかサーバーアサインすると予算増えるからサーバーサイド
不要でどうにかならないか
→仕様のスコープ調整でカバーをする。
→FirebaseのRealtime Database, Auth, Storageを利用して対応
できそう。
案件依頼内容
ところで、FirebaseのRealtime
Databaseってなに?
Firebase Realtime Databaseとは
■ざっくりと概要
・Googleで用意しているFirebaseの機能のうちのNoSQLのクラウドでホスティングす
るデータベースのこと。
・データはJSON形式でインポート、エクスポートはできるが厳密にはJSONではない。
・モバイル向けのアプリではSDKを導入することでクラウド上のDBとアクセス可能に。
・特徴はデータ更新時にリアルタイムにイベント通知を行える。
(チャットみたいな仕組みも実装可能に。)
■引用元
https://firebase.google.com/docs/database/?hl=ja
構成
■Firebase
・Realtime Database
・Storage
・Authentication
■Application Architectureに関して
・Clean Architectureを利用する。
・1VC = 1Storyboard構成
■Library
・RxSwiftを利用する。
→ユーザーやコンテンツのテーブル管理
→画像や動画ファイルなどのコンテンツ格納先
→ユーザー管理をこの機能で管理できる。Userのuniqueのidを発行など
→当初は長期的なプロジェクトになりそうだったので1つ1つの
役割分担を明確化したアーキテクチャにしてメンバーがのちに
ジョインしても属人化せず迷わない作りにしたいと思い採用した。
→Storyboard Referenceを活用して疎結合にし工数を抑えるのを狙いで採用した。
ところで、Clean Architecture
とは?
Clean Architectureとは
■ざっくりと概要
・ビジネスロジックをUIやFrameworkか
ら引き離し、それぞれの層毎に役割と責任
を分離したArchitectureである。
→このArchitectureを採用することでどの
処理がどこで行われているか分かるため実
装で迷うことは少ない。
■引用元
http://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
構成
Presenter
View
UseCase
Translator
Model
Repository DataStore
Entity
■引用元
http://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc
Architectureの構成は基本は以下の通り。
Presentation Layer Domain Layer Data Layer
今回採用した構成
Presenter
View
UseCase
Translator
Model
ApiClient
Entity
ただ、そのまま使うと工数も増えるのと管理がしづらいので案件に合わせて以下のArchitectureに構成をカスタマイズした。
モバイルDBを使用しないという仕様が確定していれば状況によってはUseCaseを削除してもそのままApiClientを実行する作りに
しても良いかと思う。
(実装工数が増えるため)
Presentation Layer Domain Layer Data Layer
Common
Common Layer
今回採用した構成
Presenter
View
UseCase
Translator
Model
ApiClient
Entity
ただ、そのまま使うと工数も増えるのと管理がしづらいので案件に合わせて以下のArchitectureに構成をカスタマイズした。
モバイルDBを使用しないという仕様が確定していれば状況によってはUseCaseを削除してもそのままApiClientを実行する作りに
しても良いかと思う。
(実装工数が増えるため)
Presentation Layer Domain Layer Data Layer
Common
Common Layer
Realtime Databaseでイベント更新を監視
実際案件で採用してみてどうだったか。
■Firebase
□良かったところ
・そんなに複雑な処理をいらないアプリであればサーバーサイドの細かいことを知らなくても一人で作りきることができる。
・RealtimeDatabaseの実装が簡単。
・DBの更新イベントをアプリ内で受け取れるのでリアルタイムに画面を更新することができる。(API叩き直すとかはしなくて良
い)
□つらかったところ
・NoSQLの設計ノウハウがなかったので最初はNodeの階層を深くまでつくってしまったために、必要となるデータを取り出し
づらかった。
ex) imgを取り出すのにこういうことが起きる。手間がかかるので浅くDBの設計を作ると良いかと。
NodeA→NodeB→NodeC→img
■Clean Architecture
□良かったところ
・仕様変更には対応しやすい。EntityとModelが分かれているので実際に値を使うときはTranslatorに救われたことは何回か
あった。
□つらかったところ
・仕様変更は対応しやすいがクラスを多く作成するので仕様変更対応のインパクトが大きい。今回の案件では実装工数は増えた
がRxSwiftなどライブラリを利用すること工数を減らしトータル的に工数は抑えられたかと思う。
サンプル
■環境
Xcode : 8.3以降
iOS :10以降
■GitHub
https://github.com/tatsuyak9/CleanArchitectureRDBSample
ご清聴ありがとうございました。

More Related Content

PDF
OSC京都 東海道らぐLT iOSのIn-Houseアプリの配布まで(概要)
PDF
WebXR TechTokyo #0 in Cluster発表資料
PPTX
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
PPTX
IoTあるじゃん北海道#1 by poggimo
PPTX
AIoT カメラを使って ピープルカウントしてみた
PPTX
リーガルテックへ凸って見えた楽しい踊り方
PDF
【Unity道場 建築スペシャル2】BIMの“I”の使い方
PPTX
現実世界コンピューティング RealSense とロボットと HoloLens (2019/04/24 Intel RealSense Japan Mee...
OSC京都 東海道らぐLT iOSのIn-Houseアプリの配布まで(概要)
WebXR TechTokyo #0 in Cluster発表資料
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
IoTあるじゃん北海道#1 by poggimo
AIoT カメラを使って ピープルカウントしてみた
リーガルテックへ凸って見えた楽しい踊り方
【Unity道場 建築スペシャル2】BIMの“I”の使い方
現実世界コンピューティング RealSense とロボットと HoloLens (2019/04/24 Intel RealSense Japan Mee...

What's hot (8)

PDF
Unity道場 ロボティクス 秋のLT祭り 2021
PDF
はじめてのAzure Sphere
PDF
機械学習と Azure ML Studio の基本
PDF
IoT あるじゃん北海道支部勉強会
PPTX
エンジニアのキャリアのその先を考える
PDF
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
PDF
[Gree] DataEngConf NYC’18 セッションサマリー #1
PDF
モノグサ万歳!Webデザイナーがesa→GitHub→Travis CI→Hexoで、ポートフォリオのビルドを自動化した話 #ltlovers
Unity道場 ロボティクス 秋のLT祭り 2021
はじめてのAzure Sphere
機械学習と Azure ML Studio の基本
IoT あるじゃん北海道支部勉強会
エンジニアのキャリアのその先を考える
建設シミュレータOCSの開発 / OCS・VTC on Unity におけるROS対応機能について
[Gree] DataEngConf NYC’18 セッションサマリー #1
モノグサ万歳!Webデザイナーがesa→GitHub→Travis CI→Hexoで、ポートフォリオのビルドを自動化した話 #ltlovers
Ad

Similar to Realtime database、Clean Architectureを組み合わせた導入事例 (20)

PPTX
Watson IoTとIBM DSXでWatsonと役割分担
PDF
GPSなしで位置情報をGETした結果・・・
PDF
IoT勉強会in岡山#2 M5StickCで遊んでみた!
PDF
Data-Centric AI開発における データ生成の取り組み
PDF
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
PDF
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
PDF
新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】
PDF
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
PPTX
フレームワークに頼らないweb開発
PDF
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
PDF
Stargazer Meetup #1
PDF
今すぐはじめるIoT_配布用
PPTX
マイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できること
PDF
データ活用をするための組織
PDF
エンタープライズソーシャルに必要な協力のためのインセンティブ
PPTX
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
PPTX
jbug#10(ジョイゾー星野)
PDF
Webrtc-ORTC-JapanSharePointGroup
PDF
新世代の価値観へ越境せよ
PDF
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Watson IoTとIBM DSXでWatsonと役割分担
GPSなしで位置情報をGETした結果・・・
IoT勉強会in岡山#2 M5StickCで遊んでみた!
Data-Centric AI開発における データ生成の取り組み
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
フレームワークに頼らないweb開発
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
Stargazer Meetup #1
今すぐはじめるIoT_配布用
マイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できること
データ活用をするための組織
エンタープライズソーシャルに必要な協力のためのインセンティブ
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
jbug#10(ジョイゾー星野)
Webrtc-ORTC-JapanSharePointGroup
新世代の価値観へ越境せよ
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
Ad

Realtime database、Clean Architectureを組み合わせた導入事例