公式ドキュメント
詳細や最新情報は、公式ドキュメントを確認: https://docs.ditto.live
Ditto企業サイトはこちら: https://www.ditto.com
Dittoとは
- 米国Ditto社のソフトウェア
- 中央サーバー・DB無し
- サーバー依存なしの分散型DBがモバイルで!
- 端末間でデータ自動同期
- 端末のアプリに入れるSDK + クラウドプラットフォーム(認証、長期データ保存など)
- アプリをLAN、Wi-Fi Aware、Bluetooth LEなどでP2P接続
- 接続経路を自動切り替え
- Bluetooth LEだと障害物がなければ80mぐらい届く
- データをリレーできるので、端末が多ければ距離は無限
- データ衝突しないデータ方式(CRDT)
- 直接繋がってなくてもデータを 中継(リレー) できる
- 誰とも繋がってなくてもローカルに保持 → 再接続で自動同期
- マルチプラットフォーム(それぞれに自動対応)
- iOS、Android、Windows、Mac、Linux、Raspberry Pi...などなど
何が嬉しいの?
どんな感じの使い方?
基本的な流れは以下の通り (詳細は公式ドキュメント参照)
初期化
ditto = Ditto(<認証情報>)
// メッシュに参加 + データ同期開始
try ditto.startSync()
受信したいデータのクエリを登録(配布)
// 他の端末に対してクエリを配布し、受け取りたいデータの種類を伝えておく。
// 更新があったら自動的に受信し、ローカルDBが更新される(ポーリングとか更新とかのコードは不要)
ditto.sync.registerSubscription(
"SELECT * FROM cars WHERE color = :color",
[ "color": "blue" ]
)
ローカルDBの変更をリアルタイム検知
observer = ditto.store.registerObserver(
query: "SELECT * FROM cars WHERE color = :color",
argumets: [ "color": "blue" ]) { result in
/* `result` にデータ(JSON)が入ってるので、UI更新などに利用 */
};
ローカルDBの更新
// ローカルDBにDocument追加
// 他の端末に送信するなどは不要で、データを必要としている端末があればバックグラウンドで自動で送信
await ditto.store.execute(
query: "INSERT INTO cars DOCUMENTS (:newCar)",
arguments: ["newCar": ["color": "blue"]]);
Dittoの面白さ
- SDKをインストールするだけで、メッシュ構築!(めっちゃ楽しい)
- 勝手に通信経路(LAN、Wi-Fi Aware、Bluetooth LE)が切り替わるのが凄い
- ネットが切れやすい場所など、今までアプリが使いづらかった場所でアプリが使える(チャットとか)
- 人が多い会場、船、飛行機、工場、、、
- ネットが切れたり、サーバー障害があるとダメージがでかい場所で万が一に備えて入れたい
- 災害、病院、飲食店(ランチ時にサーバーとの通信に遅延があるとやばい)
- セキュリティ考慮済み(暗号化(TLS1.3))
- 自動同期のためサーバーサイドAPIとかも無くて良い
- モバイルアプリエンジニアだけでサービス実装可能
Why Ditto?
- 自前でメッシュ + 自動同期を作るのは難しすぎる
- ネットが安定してない or 切れるとやばい場所を考えると唯一の選択肢
対応言語・プラットフォーム
- Swift
- Flutter
- React Native
- Kotlin
- Java
- JavaScript Web (ブラウザではBluetooth等は利用不可なのでサーバーとのみ通信可)
- Node.js
- C#
- C++
- Rust
など
利用ケース
- 飲食店・小売の店舗システム
- サーバーの障害、Wi-Fiが不安定になると売上ダメージがでかい
- 人が多く4G/5Gが安定しない場所
- 会場、災害時、遊園地
- ネットがそもそも繋がりにくい場所
- 金属に囲まれた工場
- 船
- 飛行機
- 工事現場
- 地下
利用企業 (一部)
クラウド
- 長期間・大容量のデータ保管
- 既存クラウドDBとも同期可能
- HTTP API
- Webhook
- Apache Kafka
- コネクター(他社DBと自動同期)
- ネットが復旧したり、1台でもメッシュ内で繋がってる端末があれば、データ中継で全端末がサーバーと同期
- 認証やデバイス管理
- データ、デバイス状況の可視化
など
デモアプリ (ソースコードあり)
チュートリアル
技術問い合わせ (日本語可)