開発記録

TODO共有アプリ開発記録|登録なし・合言葉方式から公開までに決めたこと

AppliParkのTODO共有アプリ「share&do」で、登録なしの入口、名前を持たない共有、1時間限定の合言葉、同期と競合対策をどう決めたか。公開版へ至るまでの実装判断を振り返ります。

CONTENTSこの記事の目次3項目

AppliParkで最初のアプリを作るとき、題材に選んだのは家族や仲間と使える共有TODOでした。ただし、よくあるTODOアプリの機能を一通り並べるのではなく、「その場で相手を誘えて、登録なしでも始められる」体験を中心に置きました。現在公開している「share&do」が、最初の構想からどのように変わったのかを実装内容と一緒に振り返ります。

最初に決めたのは「登録なし」と「名前を持たない」こと

  • ゲストのままリストを作成し、共有リンクまたは16文字のリストIDと、1時間だけ有効な合言葉で参加できる
  • 参加者名やニックネームは入力させず、画面には人数だけを表示する
  • TODO側にはメールアドレスやGoogleの識別子を保存しない
  • 初めてAppli Parkの会員になる場合:利用中のブラウザでGoogleログインすると、現在のゲストIDのまま作成・参加済みリストを引き継ぐ
  • すでにAppli Parkの会員である場合:会員側のデータを使い、現在のゲストデータは自動で統合しない

画面では参加者名やニックネームを扱わず、共有相手には人数だけを表示します。内部ではゲストも会員も共通のユーザーIDで扱い、TODOのデータにメールアドレスやGoogleの識別子を保存しません。 初めてAppli Parkへ会員登録するGoogleアカウントなら、ゲストで利用していたブラウザからログインすると、そのゲストの内部ユーザーIDに認証情報を結び付けます。作成・参加済みリストの持ち主を書き換えず、同じIDのまま引き継ぐ仕組みです。 一方、そのGoogleアカウントですでにAppli Parkの会員になっている場合は、既存の会員としてログインします。ログイン直前に使っていたゲストのリストが、会員側へ自動で追加されるわけではありません。初回登録と既存会員へのログインを分けることで、別々に作られたデータを意図せず混ぜないようにしています。 ここでいう「初回」は、その端末で初めてログインすることではなく、GoogleアカウントがAppli Parkの会員へ初めて結び付くことです。仕様確認日:2026年9月19日。

共有リンクだけでは参加させない

リストを作ると、推測されにくい16文字のリストIDが発行されます。作成直後は本人だけが利用でき、オーナーが「共有する」を開いたときに共有URLと16文字の合言葉が表示されます。合言葉は1時間だけ有効で、期限内に開き直すと同じ値を再表示し、その時点から1時間へ延長します。期限切れ後は新しい合言葉へ切り替わります。 合言葉は共有URLへ含めません。参加照合用にはハッシュ、オーナーへの再表示用には暗号文を保存し、復号鍵はデータベースと分離しています。参加失敗時は「IDが違う」「合言葉が違う」「期限切れ」を分けて表示せず、同じリストに対する試行回数にも制限を設けました。

IDと合言葉で共有リストへ参加する実画面です。参加者名の入力欄は設けていません。

操作を増やしても、一覧のボタンは増やしすぎない

  • TODOの追加、タイトル・備考の編集、削除
  • 完了・未完了の切り替えと完了時の移動アニメーション
  • マウス、タッチ、Alt+上下矢印に対応した並べ替え
  • オーナーによる1時間限定の共有合言葉の自動発行・再表示とリスト全体の削除
  • 完了済みTODOの一括削除

TODOを短く押すと詳細、長押しすると並べ替え、左のチェックで完了という役割分担にしました。スマートフォンの縦スクロールと長押しがぶつからないよう、長押し成立後だけ画面位置を固定しています。共有中の変更は操作後、15秒間隔、画面へ戻ったときに再取得します。最初からWebSocketを導入せず通常のAPI取得で体験を確かめる一方、同時編集による上書きを避けるためリストとTODOにバージョンを持たせ、古い状態からの更新は保存しない仕組みにしました。

READ MORE公開版の詳しい使い方を見るリスト作成から共有、編集、完了、並べ替えまでを画面付きで解説しています。