新人エンジニア向けの学習ページ
メモが端末から端末へ届くしくみ
メモはまずスマホに保存され、次にサーバーが番号を振り、ほかの端末が新しい分を取りに行きます。
- メモは、送る前にスマホへ保存される
- サーバーが番号を振るので、順番は1つに決まる
- 端末は、前回の番号より後の分を取りに行く
メモが通る4つの層
やさしい順- スマホの中送る前に、まずスマホへ保存します。ローカルコピー送信トレイ
- 同期サーバーの中サーバーが、すべての変更を1つの順番に並べます。変更変更番号
- ほかの端末の中端末は、前回見た変更より新しい分を問い合わせます。カーソルプル
- 2台の内容が食い違うときあとの変更が勝ち、もう一方の文章は置き換わります。競合後勝ち
つまり:メモは4つの層を通り、層ごとに覚える言葉は少しだけです。小さなラベルが、その層で学ぶ言葉です。
- メモは最初どこにあるのかスマホの中。送る前に保存されます。
- サーバーは変更をどうするのか番号を振って、順番を決めます。
- ほかの端末はどう知るのかカーソルより後の分を、自分から取りに行きます。
- 同じメモを2台で編集したらどうなるのかあとの変更が勝ちます。
- どうすれば動きを確かめられるのかスマホとブラウザで試す5つの手順です。
第1章 / 全5章、約1分
メモは最初どこにあるのか
おさらい:メモはまずスマホに保存され、送られるのはそのあとでした。
メモを編集しても、アプリは通信を待ちません。編集内容は、まずローカルコピーに保存されます。画面はすぐ反応し、電波が切れても何も失われません。
続いてアプリは、その編集を送信トレイに入れます。オンラインのあいだは、バックグラウンドの処理が順番に送ります。エレベーターの中など圏外では、送らずに待ちます。
- ローカルコピー
- スマホ本体に保存されたメモ。アプリは、まずこのコピーを読み書きします。
- 送信トレイ
- 保存済みで、まだ送っていない編集。サーバーに受け取られると、1件ずつ消えます。
送信トレイの1行を見る
編集1件が1行になります。サーバーが受け取りを確認するまで、スマホが保管します。
outbox row 1
note id n_7f3a
text Milk, eggs
edited at 2026-10-16 09:12:04
tries 0
この章のポイント:メモはすぐスマホに保存され、編集は通信が戻るまで送信トレイで待ちます。
第2章 / 全5章、約1分
サーバーは変更をどうするのか
おさらい:編集は、スマホがオンラインになるまで送信トレイで待ちます。
スマホは、編集を1件ずつ同期サーバーに、変更として送ります。サーバーはそれを記録し、アカウントごとに次の変更番号を振ります。41、42、43と続きます。
- 同期サーバー
- こちらで運用している、すべての端末がつながる1つのプログラム。
- 変更
- 送る形にまとめた編集1件。メモの ID、新しい文章、編集した時刻が入っています。
- 変更番号
- アカウントごとにサーバーが数える、変更の通し番号。変更42は、必ず変更41のあとになります。
スマホ、タブレット、ブラウザ版は、どれも同じ一覧に変更を送ります。どの端末が先かを、サーバーは気にしません。届いた順が、そのまま順番です。
リクエストとレスポンスを見る
スマホが変更を1件送ると、サーバーが振った番号を返します。
POST /v1/changes
{ "note": "n_7f3a", "text": "Milk, eggs", "edited": "09:12:04" }
201 Created
{ "change": 41 }
この章のポイント:サーバーは変更に届いた順に番号を振り、その番号が順番を決めます。
第3章 / 全5章、約1分
ほかの端末はどう知るのか
おさらい:変更には番号があり、サーバーは変更を順番に保管しています。
パソコンは、知らせを待ちません。アプリを開いている間は10秒ごとに「前回の番号より新しい分は?」と聞きに行きます。この番号がカーソルです。この問い合わせがプルです。
- カーソル
- 端末が最後に反映した変更番号。端末が自分で覚えておきます。
- プル
- 端末が、サーバーに新しい分を問い合わせること。サーバーからは送りません。
サーバーは、その番号より後の変更をすべて順番に返します。端末は1件ずつ反映し、カーソルを最後に受け取った番号まで進めます。
問い合わせと返答を見る
カーソルは URL に入れて送ります。返答には、変更の一覧と最新の番号が入ります。
GET /v1/changes?after=41
200 OK
{ "latest": 43,
"changes": [
{ "change": 42, "note": "n_2c91", "text": "Trip ideas" },
{ "change": 43, "note": "n_7f3a", "text": "Milk, eggs" } ] }
この章のポイント:サーバーからは送らず、端末がカーソルより後の分をすべて取りに行きます。
第4章 / 全5章、約1分
同じメモを2台で編集したらどうなるのか
おさらい:端末はカーソルより後の変更を取りに行き、順番に反映します。
お互いの変更を知らないまま、2台が同じメモを変更することがあります。これが競合です。バージョン2.3は、変更番号が大きいほうが勝つ、という1つのルールで解決します。
- 競合
- 互いに知らないまま加えられた、同じメモへの2つの編集。
- 後勝ち
- 番号が大きい変更が、もう一方の変更の文章を置き換えるというルール。
「あと」は、入力の時刻ではなく、届いた順のことです。09:10に入力してオフラインだったパソコンは、09:12に入力したスマホよりあとに届きます。勝つのは、パソコンの文章です。
2.3では、置き換えられた文章は残りません。共有ノートでは、チームメイトの文章が消えるおそれがあります。2.4で両方を残すかは、マーラさんとテッドさんが検討中です。
この章のポイント:編集がぶつかると、サーバーに最後に届いたほうが勝ち、もう一方の文章は置き換わります。
第5章 / 全5章、約1分
どうすれば動きを確かめられるのか
おさらい:メモは保存され、送られ、番号を振られ、プルされ、競合すれば置き換わります。
用意するのは、スマホとブラウザです。どちらも同じテストアカウントでサインインしておきます。所要時間は5分です。
- ブラウザ版とスマホ版のアプリを開きます。どちらも同じテストアカウントでサインインします。
- スマホの機内モードをオンにします。アプリはそのまま動きます。
- 「買い物リスト」というメモを編集します。末尾に「卵」を足します。
- 「その他」から「同期の詳細」を開きます。送信待ちの編集が1件と表示されます。
- 機内モードをオフにします。 10秒以内に件数が0になり、ブラウザ版に「卵」が表示されます。
- 機内モード
- すべての通信を切るスマホの設定。アプリはオフラインになります。
- 同期の詳細
- 「その他」の中にある画面。送信トレイの件数と、スマホが最後に見た変更番号を表示します。
わざと競合させてみる
同じ手順を繰り返し、手順3だけ変えます。サーバーにはブラウザの編集が先に、スマホの編集があとに届きます。
- 機内モードをオンのままにします。スマホで「買い物リスト」を編集し、「卵」を足します。
- ブラウザで「買い物リスト」を編集します。「パン」を足し、保存されるのを待ちます。
- 機内モードをオフにします。スマホが最後に送るので、両方の画面でスマホの文章が勝ちます。
この章のポイント:「同期の詳細」画面で送信トレイの件数を見れば、編集がスマホを出たかどうか分かります。
まとめ
- メモはすぐスマホに保存され、編集は通信が戻るまで送信トレイで待ちます。
- サーバーは変更に届いた順に番号を振り、その番号が順番を決めます。
- サーバーからは送らず、端末がカーソルより後の分をすべて取りに行きます。
- 編集がぶつかると、サーバーに最後に届いたほうが勝ち、もう一方の文章は置き換わります。
- 「同期の詳細」画面で送信トレイの件数を見れば、編集がスマホを出たかどうか分かります。