SlideShare a Scribd company logo
1 of 14
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

What's hot

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

What's hot (8)

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

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

Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担Kenichi Inoue
 
GPSなしで位置情報をGETした結果・・・
GPSなしで位置情報をGETした結果・・・GPSなしで位置情報をGETした結果・・・
GPSなしで位置情報をGETした結果・・・Koyo Takenoshita
 
IoT勉強会in岡山#2 M5StickCで遊んでみた!
IoT勉強会in岡山#2 M5StickCで遊んでみた!IoT勉強会in岡山#2 M5StickCで遊んでみた!
IoT勉強会in岡山#2 M5StickCで遊んでみた!Shinya Suefusa
 
Data-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組みData-Centric AI開発における データ生成の取り組み
Data-Centric AI開発における データ生成の取り組みTakeshi Suzuki
 
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまでMasafumi Konishi
 
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるiOSアプリで気になった動きや表現を上手にアレンジして活用してみる
iOSアプリで気になった動きや表現を上手にアレンジして活用してみるFumiya Sakai
 
新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】
新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】
新しい働き方アワード【新しい働き方LAB empowered by ランサーズ/研究員制度3期】muratananae
 
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてiOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分についてFumiya Sakai
 
フレームワークに頼らないweb開発
フレームワークに頼らないweb開発フレームワークに頼らないweb開発
フレームワークに頼らないweb開発新介 川井田
 
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐLINE WORKSを活用したチャットボットが現場とkintoneを繋ぐ
LINE WORKSを活用したチャットボットが現場とkintoneを繋ぐTomohisa Hoshino
 
今すぐはじめるIoT_配布用
今すぐはじめるIoT_配布用今すぐはじめるIoT_配布用
今すぐはじめるIoT_配布用Mana Nakano
 
マイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できること
マイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できることマイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できること
マイクロソフトにおけるオープンソース戦略 ソフトウェア開発者が実現できることDaisuke Masubuchi
 
データ活用をするための組織
データ活用をするための組織データ活用をするための組織
データ活用をするための組織Kon Yuichi
 
エンタープライズソーシャルに必要な協力のためのインセンティブ
エンタープライズソーシャルに必要な協力のためのインセンティブエンタープライズソーシャルに必要な協力のためのインセンティブ
エンタープライズソーシャルに必要な協力のためのインセンティブNaohiko Maeda
 
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだこと
障害のない社会を作るためのアプリづくりとは? - 発達障害の方向けアプリ開発から学んだことTakashi Kishida
 
CBCV媒体資料_.pdf
CBCV媒体資料_.pdfCBCV媒体資料_.pdf
CBCV媒体資料_.pdfssuser157c23
 
jbug#10(ジョイゾー星野)
jbug#10(ジョイゾー星野)jbug#10(ジョイゾー星野)
jbug#10(ジョイゾー星野)Tomohisa Hoshino
 
Webrtc-ORTC-JapanSharePointGroup
Webrtc-ORTC-JapanSharePointGroupWebrtc-ORTC-JapanSharePointGroup
Webrtc-ORTC-JapanSharePointGroupadachiyosuke
 
新世代の価値観へ越境せよ
新世代の価値観へ越境せよ新世代の価値観へ越境せよ
新世代の価値観へ越境せよHiromasa Oka
 

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

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

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