Portfolio::
- touri aida based in tokyo/chiba -

プライバシーポリシー (apps.aisaba.net / Aisaba アカウント)

2026.05.12
ContentHeader ContentHeader

apps.aisaba.net と、その配下で動かしているアプリ群、そこにログインするための Aisaba アカウント で何を取得して何を保存しているかを実装ベースで書き出す。テーブル定義とログ出力を見たままに整理した。規約の体裁よりも、何が起きているかを正確に伝えることを優先している。

最終更新: 2026.05.12

1. 対象範囲

  • https://apps.aisaba.net/ (アプリランチャ)
  • https://user.aisaba.net/ (アカウントページ・サインアップ / ログイン)
  • apps.aisaba.net 配下で公開している各アプリ
    • calender (ログインなしの共有カレンダー)
    • file_size_sense (絶対ファイルサイズ感)
    • permissions (権限管理。アカウント必須)
  • ファイルアップロード基盤 (uploader)

ポートフォリオ本体 (www.aisaba.net) は別扱い。アクセス解析の有無が異なるため、末尾の節で補足する。

2. Aisaba アカウント

入力する項目はこの3つだけ。

  • ユーザーID (英数字 + _ .)
  • 表示名 (30文字以内、< > " ' & を除く)
  • パスワード (英数字 8文字以上)

メールアドレス・電話番号・本名・年齢・住所は 一切取得していない。連絡が必要なときは末尾の窓口を使う。

サーバに保存しているもの

users テーブル - 内部UID - ユーザーID - 表示名 - パスワードの ハッシュ値 (PBKDF2-HMAC-SHA256、200,000回反復、ユーザーごとにランダムソルト) - 作成日時、有効フラグ

パスワードの平文は保存していない。

sessions テーブル (ログイン中の端末分) - セッションID - 紐づく内部UID - セッショントークンの SHA-256 ハッシュ (平文は保存しない) - 有効期限 (既定 7日) - 失効時刻 - ログイン時の User-Agent

セッショントークンの平文はサーバではなく、ブラウザの Cookie (_nxt) にだけある。ログアウトすると即座に sessions 側で失効される。

3. ランチャの個別データ

ログインするとアカウントごとに次の SQLite を持つ。

  • install_apps: 並べたアプリの app_id 一覧
  • shortcut_apps: 追加したショートカット (名前 / URL / アイコン)
  • profiles: アイコン画像参照 / 背景画像参照 / 内部識別子

アイコンや背景の実体は次のアップロード基盤に保存する。

4. アップロードファイル

アイコン・背景・各アプリ用にアップロードしたファイル。

parallel_storage テーブル - 内部用ID / 公開用ID - 種別 / サイズ / 紐づくアカウントの内部識別子 - ファイル名 / 拡張子 / ステータス - 作成日時 / 最終アクセス日時

実体ファイルはサーバ内 USER_CONTENTS ディレクトリ。5MB チャンクで受け取り、SHA-256 で完全性を検証する。

5. アクセスログ

リクエストごとに次を記録している。

  • IP アドレス (X-Forwarded-For 先頭、なければ REMOTE_ADDR)
  • HTTP メソッド / パス / ステータス / 応答時間 (ms)
  • User-Agent

出力先はサーバ内 data/log/<service>/{info,warning,error,access,auth}.log。 保存期間は障害調査ができる範囲で恣意的にローテーションしている (数か月程度)。

6. 各アプリで個別に持つデータ

calender (ログインなしの共有カレンダー)

アカウント不要で使える。

  • rooms: ルームID / ルーム名 / 公開ICSフィード用トークン / 作成日
  • events: イベントID / ルームID / 日付 / 開始・終了時刻 / タイトル / 詳細 / 投稿者ニックネーム / 繰り返し設定 / 作成日

ルーム名・ニックネームは任意入力。本名を入れるかは利用者の判断に委ねる。 公開ICSフィードはトークン (feed_token) を知る者だけが読み出せる。

Discord 連携 API を 利用した場合のみ、Discord 側のサーバID・チャンネルID・メンバーIDがリクエストとしてやり取りされる。使わなければ Discord 側に何も流れない。

file_size_sense (絶対ファイルサイズ感)

クイズデータの読み取りだけ。利用者からデータを取得・保存していない。

permissions

アカウント必須。アカウントと権限グループの紐付け (permission_groups / permission_group_members テーブル) を保存する。

7. Cookie

  • _nxt: セッショントークン本体。これが無いとログイン状態を保てない。

アクセス解析用 Cookie や広告 Cookie は使っていない。 ブラウザ側で Cookie を消せば、再ログインが必要になる。

8. 第三者への送信

  • Cloudflare (DNS / CDN / WAF): 通信経路として経由する。IP・User-Agent・リクエストヘッダ等は Cloudflare のインフラを通る。Cloudflare のプライバシーポリシー に従う
  • Discord: calender の Discord 連携 API を 利用した場合のみ やり取りが発生する
  • 外部解析サービス (Google Analytics、Facebook Pixel など) は apps.aisaba.net 配下では使っていない

9. 保存場所

すべて自分が管理する単一のオンプレ Ubuntu サーバ上の SQLite + ローカルファイルシステムに保存している。 外部の SaaS にユーザーデータを送信していない。

10. ユーザーの権利

以下は連絡先まで請求があれば対応する。

  • アカウント削除 (関連レコードの一括削除)
  • 保存データの開示
  • 訂正
  • 全セッション失効

将来的にはアカウントページから自分で行えるようにする予定。

11. 未成年の利用

18歳未満の利用者は、保護者の同意のもとで使用してください。

12. 改定

実装変更があれば本ページを更新する。Blogs として残しているので、過去版も追える。

13. 補足: 関連サイトでの解析利用

本ページの対象外だが、関連サイトの状況。

  • www.aisaba.net (ポートフォリオ本体): Google Analytics 4 (G-YHVGSJZTKS) を利用している
  • nexom.aisaba.net (Nexom ドキュメント): 同上

これらでは GA4 経由でアクセス情報 (Cookie / IP / 行動データ) が Google に送られる。apps.aisaba.net 範囲では同タグを入れていない。

連絡先