Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
react-nativeで無理やりsequelize(ORM)を使った話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
S-cubism
October 20, 2017
Technology
760
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
react-nativeで無理やりsequelize(ORM)を使った話
S-cubism
October 20, 2017
More Decks by S-cubism
See All by S-cubism
WSLでreactの開発環境作った話
scubism
0
740
未経験者がAndroidアプリをリリースするまで
scubism
0
160
scubism_LT_20180223_細田謙二_イベントソーシング
scubism
0
170
REVEAL.JSをちょっとだけ使ってみた
scubism
0
290
忙しい人のための仮想通貨
scubism
0
140
サーバ作業の注意コマンド
scubism
0
160
最近勉強してること、次にやりたいこと
scubism
0
130
FOOD TECH
scubism
0
81
Firebase(Realtime Database)について
scubism
0
140
Other Decks in Technology
See All in Technology
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
150
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
150
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
430
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
260
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
320
ファミコンでPHPを動かす / PHP on the Famicom side b
tomzoh
0
140
AIアプリを使い分けるための共通ツール基盤を考えてみる#devio2026
osawa
0
260
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
160
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
150
The seven pitfalls of AI (revised version)
ufried
0
270
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
500
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
3
360
Featured
See All Featured
How to Ace a Technical Interview
jacobian
280
24k
We Have a Design System, Now What?
morganepeng
55
8.4k
Believing is Seeing
oripsolob
1
240
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
720
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Un-Boring Meetings
codingconduct
0
440
Become a Pro
speakerdeck
PRO
31
6.3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
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 に移行することも容易