Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
react-nativeで無理やりsequelize(ORM)を使った話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
S-cubism
October 20, 2017
Technology
2
740
react-nativeで無理やりsequelize(ORM)を使った話
S-cubism
October 20, 2017
Tweet
Share
More Decks by S-cubism
See All by S-cubism
WSLでreactの開発環境作った話
scubism
0
710
未経験者がAndroidアプリをリリースするまで
scubism
0
140
scubism_LT_20180223_細田謙二_イベントソーシング
scubism
0
160
REVEAL.JSをちょっとだけ使ってみた
scubism
0
270
忙しい人のための仮想通貨
scubism
0
120
サーバ作業の注意コマンド
scubism
0
140
最近勉強してること、次にやりたいこと
scubism
0
110
FOOD TECH
scubism
0
70
Firebase(Realtime Database)について
scubism
0
130
Other Decks in Technology
See All in Technology
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
17k
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
160
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
120
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.5k
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
Tebiki Engineering Team Deck
tebiki
0
24k
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
680
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
670
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
14k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
What's in a price? How to price your products and services
michaelherold
247
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Context Engineering - Making Every Token Count
addyosmani
9
660
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Transcript
react-nativeで 無理やりsequelize(ORM)を使った話 2017/10/20 エスキュービズム社内技術LT 久米 諒
はじめに • ReactNativeを使って新しいプロダクトを開発中 • ターゲットのプラットフォームは以下の2つ – iOS – Windows (UWP)
• そのプロダクトにはDBが必要 – サーバにある情報をローカルにキャッシュ – 作成したデータをサーバに送る前に保存しておく、など • 今日はDBに何を採用したかのお話
採用するDB • 旧プロダクトでは、下記を使っていた – iOS : CoreData (SQLiteバックエンド) – Windows(StoreApp)
: SQLite • ReactNativeでは、以下の点で考慮が必要 – 複数のプラットフォームで動かす必要がある – JavaScriptから利用する – 数万件のレコードを扱うため、パフォーマンスが重要 • 検索処理は必ずDBエンジン側で行う必要がある(全件取得してからjsで 絞り込むのはNG) • DB以外にも永続化の手段はあるが、大体この制約に引っかかる
ReactNativeで採用するDB • ReactNativeでは、nodejs向けのパッケージマネージャーで あるnpmをそのまま利用できる • ファイル読み込みやDBアクセスなど、IOを伴うnodejs用の ライブラリはほとんど使えないが、react-native向けのライ ブラリが多数公開されている • 今回はreact-native-sqlite-2を使うことに
– https://www.npmjs.com/package/react-native-sqlite-2 • (RealmはUWP × ReactNativeの組み合わせで使えないので断念)
ORMの利用検討 • react-native-sqlite-2はSQLiteをJSから使えるようにしただけ のライブラリ • 基本的にSQLを書いて利用する想定のモノ • 生SQLを書きたくない! • 通常npmで提供されているライブラリはnodejs用
• react-native対応を謳った実用レベルのORMはまだ無い • nodejs用のライブラリをreact-nativeで無理やり使えない か?
補足 : ReactNativeでのjsトランスパイル • ReactNativeは書いたjsを直接実行するのではなく、一旦 babelというツールで変換(トランスパイル)する • 最新のEcmaScript(JavaScript)仕様で書いたコードが、既存 の環境で実行できる様に古いjs形式に変換される •
ソースコードは複数のjsファイルに分割され、importや requireで参照しているが、トランスパイル時にはこれは1つ のjsbundleファイルにまとめられる main.jsbundle xxx.js yyy.js zzz.js aaaa.js import import require
ORMの選定 • npmのsqlite3パッケージは当然使えないが、react-native- sqlite-2に差し替えれば良いのでは? • module-resolverというbabelプラグインがあった! – 設定ファイルでrequire/importの参照を置換できる – https://github.com/tleunen/babel-plugin-module-resolver
ORMの選定 • 候補は2つ • Bookshelf – http://bookshelfjs.org/ – 動的なrequireがあったので、Babelが対応できず… •
Sequelize – http://docs.sequelizejs.com/ – mysqlなど他のDBへの参照も大量にあったが、全部ダミーに差し 替えれば動いた!
参考 : module-resolverの設定 • babelrc
Sequelize導入のメリット • クエリがjsonで表現できる • マイグレーションシステムを導入できた • 簡単にDB処理をユニットテストできるようになった
react-nativeでsequelizeを使うリスク • 通常、ライブラリを公開されていない手段で利用するのは 悪手 • 以下の理由から、今回は使っても良いと判断 – 仮にsequelizeの仕様が変更されても、module-resolverの設定を 書き換えれば大体追従できるはず –
module-resolverのコード量が少なく、いざとなれば自分で作れそ う – DBアクセスをリポジトリクラスに限定しているので、最悪他のDB に移行することも容易