概要
Instagram・LINE・X(旧Twitter)の主要機能を統合したスーパーSNSアプリ。1対1/グループチャット、写真・動画フィード投稿、ストーリーズ (24時間自動消去)、ショート動画リール、いいね・コメント・リポスト、公開/非公開アカウント設定など、自社運用できる統合型SNSプラットフォームです。
主な機能
- メールアドレス + パスワードによるユーザー登録/ログイン
- プロフィール (アバター・自己紹介・公開/非公開設定)
- フィード投稿 (テキスト + 画像/動画、画像最大4枚 + 動画1本)
- 画像はグリッド、動画はインライン再生プレイヤーで表示
- いいね・コメント・リポスト機能
- 1対1チャット・グループチャット (既読表示)
- チャットへの画像/動画送信 (ライトボックス表示)
- 1対1の音声通話・ビデオ通話 (WebRTC, Google STUN サーバー使用)
- 絵文字スタンプリアクション
- ハッシュタグ抽出と検索
- フォロー / フォロワー機能
- ダーク/ライトモード切替
- スマホ・PC両対応のレスポンシブUI
- 全ページ共通の着信通知 (リングトーン + ブラウザ通知 + モーダル表示)
- 通知センター (いいね・コメント・フォロー・リポスト) と未読バッジ
- 投稿ブックマーク機能 (保存済み一覧)
- メッセージ取り消し (チャット)
- メッセージ引用返信 (チャット)
- チャット一覧ピン留め (チャット)
- グループチャット退出 (チャット)
- 引用リポスト (元投稿を引用してコメント付きで投稿)
- 投稿編集 (編集済みマーカー表示)
- 投稿プロフィールピン留め (1ユーザー1件まで)
- ストーリーズ (画像/動画/テキスト、24時間自動消去、テキスト・絵文字オーバーレイ)
- アンケート・質問スタンプ (ストーリーズ内インタラクション)
- ストーリーズの閲覧者一覧確認
- ハイライト (ストーリーをプロフィールに永久保存)
- 親しい友達リスト (ストーリーズの限定公開)
- リール (縦型ショート動画フィード、上下スワイプ、自動再生)
- リール BGM 選択 (運営側ライブラリから選択)
- リール再生速度切替 (0.5x / 1x / 1.5x / 2x)
- リール デュエット機能 (他ユーザーの動画と並べて投稿)
- リール 視聴回数表示
- リールへのテキスト・スタンプ重ね合わせ
- チャット非同期送信 (送信時にページ再読込なし・最新へ自動スクロール・新着ポーリング)
- チャット通話ボタンの常時表示 (ヘッダー固定で常に見える)
- リール フルスクリーン表示の安定化 (モバイルアドレスバー伸縮対応)
- 自分の投稿/リール削除 (確認ダイアログ + いいね/コメント等も一括削除)
- メール通知 (チャット新着・着信) - 受信者がアプリを開いていないときのみ送信、5分以内のまとめ送信
- ログイン維持 (Remember-me) - 30日間自動ログイン、セレクタ+検証子のセキュアトークン、ローテーション付き
- すべてのデバイスでログアウト - 全 remember-me トークン一括破棄
- 通知種別ごとの ON/OFF (いいね/コメント/フォロー/リポスト/メンション/チャット/着信/システム)
- メール通知の全体 ON/OFF
- 通知一覧の種別フィルタリング
- アクティビティページ (自分宛て + フォロー中のアクションまとめ)
- 発見タブ強化 (おすすめユーザー + トレンドハッシュタグ)
- 総合検索の改善 (検索履歴の保存 + 最近の検索からの再検索)
- ブラウザのプッシュ通知許可リクエスト (許可時のみ着信時にデスクトップ通知)
- スマホ対応 Web Push 通知 (Service Worker + VAPID) - アプリを閉じていても通知が届く
- プッシュ通知は通知種別ごとの ON/OFF を尊重 (いいね/コメント/フォロー/リポスト/メンション/チャット/着信/システム)
- プッシュ通知のデバイス単位の許可/無効化トグル (設定画面 - 一度拒否後の再許可手順ヘルプ付き)
- プッシュ通知タップでアプリの該当ページにフォーカス/起動 (通知センター/投稿/プロフィール/チャット)
- プッシュ通知のサブスクリプション期限切れ自動掃除 (410/404 応答時に登録削除)
- 管理者ページ (v1.6 / ?page=admin) - 管理者フラグ必須・一般ユーザーはトップへリダイレクト
- 管理ダッシュボード - KPIカード (ユーザー/投稿/チャット/通報/凍結等) + 7日間グラフ (Chart.js) + リアルタイムアクティビティ
- ユーザー管理 - 検索/凍結(BAN)/凍結解除/管理者権限付与・剥奪/削除/詳細ページ (投稿/ログイン履歴/通報履歴)
- 投稿管理 - 検索/非表示化/再表示/削除
- 通報管理 - 投稿/コメント/ユーザー/メッセージへの通報 + 処理/無視/多通報ユーザー上位表示
- お知らせ配信 - 作成/編集/削除 + フィード上部に公開中お知らせをレベル別表示
- アプリ設定 - アプリ名・説明・ロゴURL・新規登録ON/OFF・メンテナンスモード・NGワード・1日投稿上限
- グループ管理 - グループチャット一覧/メンバー数/メッセージ数/削除
- 監査ログ - 管理者操作の履歴を自動記録 (ban/hide/delete/設定変更等)
- 凍結ユーザーはログイン不可 + ログイン履歴を IP/User-Agent 付きで記録
- v1.7 (#52): UX アニメーション - いいね時のハートポップ・通知ベル揺れ・チャット吹き出しアニメーション・ページフェードイン
- v1.7 (#52): デザイン強化 - ボタン/フォームのホバー・フォーカススタイル、投稿カードの陰影アップ、空状態 UI 整備
- v1.7 (#52): スケルトンローディング用ユーティリティクラス (.fuse-skel)
- v1.7 (#52): 外部リンクの確認ダイアログ (Fuse 外サイトへ遷移する前に表示)
- v1.7 (#52): ログイン失敗 5 回 / 30 分でアカウント一時ロック (login_log ベース)
- v1.7 (#52): アクセシビリティ - prefers-reduced-motion を尊重 (動きを抑えたいユーザーには全アニメーションを無効化)
- v1.8 (#59): 動画タブ - YouTube Data API v3 でキーワード検索・おすすめ表示、アプリ内 iframe プレイヤーで再生 (再生速度 0.5x/0.75x/1x/1.25x/1.5x/2x)
- v1.8 (#59): 動画タブ - 「後で見る」リスト (動画詳細から追加/削除、動画タブの「後で見る」サブタブで一覧)
- v1.8 (#59): 動画タブ - YouTube動画をフィードに共有 (ひとことコメント付き)
- v1.8 (#59): 投稿/チャットへの YouTube URL 自動プレビュー - 投稿本文・コメント・チャットメッセージに含まれる YouTube URL を検出してサムネイル付きカードを表示 (タップで動画詳細ページへ)
- v1.8 (#59): ライブ配信 - WebRTC (Google STUN) でリアルタイム動画配信 (P2P、視聴者数の目安は最大10名程度)
- v1.8 (#59): ライブ配信 - 視聴者がコメントを送信可能 (500文字まで)
- v1.8 (#59): ライブ配信 - 配信中ユーザーのアイコンに「LIVE」バッジ (パルスアニメーション、prefers-reduced-motion 尊重)
- v1.8 (#59): ライブ配信 - ナビゲーションに「🔴 ライブ」ボタンを追加 (一覧 + 自分の配信開始)
- v1.8 (#59): ライブ配信 - 配信者側コントロール (マイクON/OFF・カメラON/OFF・配信終了ボタン・経過時間表示・視聴者数表示)
- v1.8 (#59): ライブ配信 - 90秒間 heartbeat が無い配信は自動 ended (異常終了の救済)
- v1.8 (#59): ライブ配信 - 過去の配信アーカイブ一覧 (配信者ページに表示、視聴ピーク数記録)
- v1.8 (#59): プロフィール Instagram風レイアウト - ヘッダー画像 + アバター + 投稿数/フォロワー/フォロー中の3カウンタ
- v1.8 (#59): プロフィール 投稿一覧グリッド表示 (3列、画像/動画サムネ、リスト表示と切替可)
- v1.8 (#59): プロフィール拡張項目 - ヘッダー画像URL・職業・居住地・誕生日 (公開範囲: 全員/フォロワー/非公開)・外部リンク (最大10件、ラベル任意)
- v1.8 (#59): プロフィール バッジ表示 - 認証済み (verified) / 古参ユーザー (og) / PRO / スタッフ など、user_badges テーブルで管理
- v1.9 (#65): 初期管理者の自動任命 - schema.sql 適用時に kando.diary@gmail.com のユーザーに is_admin=1 を付与 (該当ユーザーが居なければ 0 行影響で安全)
- v1.10 (#66): 管理者ページのアプリ設定に外部 API キー入力欄を追加 - YouTube Data API キーをマスク表示で保存・表示/非表示トグル・削除ボタン付き (既存設定は維持、保存後すぐに動画タブで反映)
- v1.11 (#68): ニュース機能 (ニュースタブ・NewsAPI 連携・newsapi_key 設定欄) を完全に削除 - ナビゲーション・ページ・ライブラリ関数すべて撤去 (DBテーブルは互換性のため温存)
- v1.11 (#68): Fuse AI チャット機能を追加 - ナビゲーションに「🤖 AI」タブ、Gemini を使ったアプリ内 AI 相談相手 (v1.12.2 / #74: gemini-2.0-flash モデルを使用)
- v1.11 (#68): Fuse AI - 会話履歴を DB に保存し次回ログインでも継続、「会話をリセット」ボタンで履歴クリア
- v1.11 (#68): Fuse AI - 応答はストリーミング表示 (SSE 経由で streamGenerateContent をリアルタイム描画。v1.12.2 / #74: gemini-2.0-flash モデルを使用)
- v1.11 (#68): Fuse AI - ショートカットボタン (✍️ 投稿文を作って / 🌍 翻訳して / 💡 アイデアを出して / 😊 雑談しよう)
- v1.11 (#68): Fuse AI - キャラクター設定: フレンドリーで親しみやすい性格、絵文字を適度に使うカジュアル口調、Fuse の使い方も案内
- v1.11 (#68): Fuse AI - パープル→ブルーのグラデーション ✨ アイコン、AI 返答バブルもグラデ背景でユーザー発話と区別、ダーク/ライト両対応
- v1.11 (#68): Fuse AI - 管理者ページのアプリ設定に Gemini API キー入力欄を追加 (キー名 gemini_api_key, マスク表示/トグル/削除ボタン付き)
- v1.11 (#68): Fuse AI - 投稿作成画面に「✨ AI で文章を生成」ボタンを追加し、キーワード/テーマを入れると AI が投稿文を自動生成して本文に反映
- v1.11 (#68): Fuse AI - API キー未設定時は「AI 機能は現在準備中です」と表示する空状態 UI
- v1.12 (#67): スマホ版ボトムナビゲーションを刷新 - position:fixed + safe-area-inset-bottom 対応、スクロール時に絶対にずれない
- v1.12 (#67): スマホ版ボトムナビ - 中央に大きめの丸い「投稿作成」FAB ボタン (画面端 4 タブ + 中央 FAB + 「その他」ボタンの 6 スロット構成)
- v1.12 (#67): スマホ版ボトムナビ - 「その他」タブで下から半透明オーバーレイ付きボトムシートがスライドアップ、3列グリッドで未配置のメニュー (リール/動画/ライブ/アクティビティ/通知/検索/プロフィール/AI/保存/設定/ログアウト) を表示
- v1.12 (#67): ナビゲーションをカスタマイズ画面 - 設定から開ける専用ページでメインタブ 4 個をドラッグ&ドロップで並び替え (タッチデバイスは長押し+クローン移動でフォールバック)
- v1.12 (#67): ナビ設定はデータベース (fuse_nav_prefs テーブル) に保存され、ログインしているどのデバイスでも同じ設定が反映
- v1.12 (#67): 「デフォルトに戻す」ボタンでナビ設定をワンタップで初期化
- v1.12 (#67): 現在表示中のページのタブを accent カラーで強調、ダーク/ライト両対応、prefers-reduced-motion 尊重
- v1.12 (#67): PC版 (.topnav) のナビゲーションは一切変更していません
- v1.12.1 (#71): インストール失敗の修正 - fuse_ai_messages / fuse_nav_prefs の user_id 列を users.id (INT UNSIGNED) と型を揃え、新規環境での FOREIGN KEY 制約エラー (Cannot add foreign key constraint) を解消
- v1.12.2 (#74): Fuse AI チャットの HTTP 400 エラー修正 - Gemini API モデルを gemini-1.5-flash から gemini-2.0-flash に更新 (generateContent / streamGenerateContent の両方)。API エンドポイント形式 (v1beta/models/<model>:generateContent) およびリクエスト仕様 (contents/systemInstruction/generationConfig) は最新仕様に準拠しているため変更なし。既存の API キー設定・会話履歴・UI は一切変更なし
- v1.13 (#73): デザイン全面リニューアル - シネマティック × ミニマル × おしゃれ (Instagram / VSCO / BeReal 風) のニュートラル配色 / 余白を活かしたレイアウト / フラットボタン / 細い1pxボーダー / シャドウ撤廃。CSS 変数 (--bg / --fg / --accent / --link (#0095f6) / --heart (#ed4956) / --story-grad) を刷新し、ダーク (背景 #0e0e0e / カード #1a1a1a) ・ライト (背景 #fafafa / カード #ffffff) 両モード対応。タイポは Inter + Noto Sans JP (Google Fonts) を head から読み込み
- v1.13 (#73): デザイン刷新 - 既存クラス名・ID・PHP ロジック・データ・スキーマは一切変更なし (assets/style.css の上書きと lib.php の head への font 読み込みのみ)。AI バブル・プロフィールヘッダー・ライブ/YouTube カード等の派手なグラデーションを撤廃しニュートラル配色へ統一。.btn / .btn-secondary / .action / .topnav / .bottomnav / .msg / .fuse-profile-* / .fuse-ai-* など主要 UI を Instagram DM 風のミニマル UI に統一
- v1.14 (#72): 👥 グループ機能 - テーマ別のグループを作成 (公開 / 非公開承認制 / オープンチャットから選択)、カバー画像と説明文を設定、グループ内で投稿・コメント・いいね、参加/脱退、オーナーによる承認、メンバー一覧、ナビに「👥 グループ」を追加
- v1.14 (#72): 📅 イベント機能 - イベントを作成 (タイトル / 日時 / 場所 / 説明 / カバー画像、公開 / 非公開を選択)、参加 / 未定 / 不参加の RSVP、参加者一覧、イベント前日と 1 時間前のリマインダー通知 (fuse_events_send_reminders を cron 等で叩く前提)、フィードへシェアするテキストの表示、ナビに「📅 イベント」を追加
- v1.14 (#72): 🛍 マーケットプレイス機能 - ユーザー同士でモノを売買できる掲示板 (フリマ形式)、商品名 / 価格 / 説明 / カテゴリ (10 種) / 画像 URL を登録して出品、キーワードとカテゴリで検索、出品者にコメントで問い合わせ、取引完了でステータスを「売り切れ」に変更、自分の出品一覧を管理 (マイ取引)、ナビに「🛍 マーケット」を追加
- v1.14 (#72): ✨ 思い出機能 - 1 年前・2 年前など過去の同日の自分の投稿を「思い出」として表示、年数バッジ付きで一覧、元の投稿に飛んで再シェア可能、cron から fuse_memories_notify_today を呼べば自動通知 (1 日 1 回まで重複防止)、ナビに「✨ 思い出」を追加
- v1.14 (#72): 既存機能・既存スキーマには一切変更なし - すべて新規テーブル (fuse_groups / fuse_group_members / fuse_group_posts / fuse_group_post_comments / fuse_group_post_likes / fuse_group_invites / fuse_events / fuse_event_attendees / fuse_event_reminder_log / fuse_market_items / fuse_market_inquiries / fuse_market_purchase_intents / fuse_memory_notify_log) と新規ページ (groups / group_view / group_create / action_group_join / events / event_view / event_create / action_event_rsvp / market / market_item / market_create / market_mine / action_market_status / memories) として追加。既存の theme-light/theme-dark にも対応
- v1.14.1 (#72 / 2nd opinion): グループ投稿通知を 'group_post' 種別へ - 設定 → 通知設定で OFF にでき、大規模グループでの一括ファンアウト負荷を軽減
- v1.14.1 (#72 / 2nd opinion): cron 不要の遅延ジョブ起動 - 認証済みページアクセス時に fuse_events_send_reminders (5 分毎) と fuse_memories_notify_today (24 時間毎) をレート制限つきで自動起動 (実行時刻は app_settings に保存)
- v1.14.1 (#72 / 2nd opinion): 購入希望機能の UI - マーケット詳細から「購入希望を送る」(任意メモ付き) を送信できるようになり、マイ取引ページで自分の購入希望一覧表示・クローズ操作が可能
- v1.14.1 (#72 / 2nd opinion): グループ招待 UI - グループ詳細でメンバーがハンドル指定で他ユーザーを招待、招待された側は「マイ招待」 (group_invites) ページから承諾/辞退可能 (fuse_group_invites テーブルを利用)
- v1.14.1 (#72 / 2nd opinion): イベントのワンクリック・フィードシェア - イベント詳細から ?body=... プリフィル付きで投稿作成画面に直接遷移可能
- v1.14.1 (#72 / 2nd opinion): group_view.php の冗長な open_chat 判定を整理 (動作変更なし)
- 📞 通話履歴ページ (発信・着信・不在着信を一覧表示、不在着信は赤強調、ワンタップで折り返し)
- 📣 グループチャットのお知らせ (チャット参加者へ固定表示、設定者かグループ作成者のみ解除可)
- 🖼 グループチャット アルバム (これまでに送られた画像・動画をまとめてタブ表示)
- 📊 グループチャット 投票 (アンケート/日程調整 - 単一・複数選択対応、リアルタイム結果バー)
- ✅ グループチャット 共有To-Do (進捗バー付き、メンバー全員でチェック可)
- v1.16 (#79): チャットのミュート機能 - 1時間 / 8時間 / 24時間 / ずっと の期間を選んで通知を停止 (チャット一覧 + チャット内ヘッダーに🔕アイコン)。メール通知のみ抑制し、アプリ内通知は受信する
- v1.16 (#79): オンラインステータス - 自分のステータスを「オンライン / 取り込み中 / 離席中 / オフライン」から手動選択 (チャット一覧から切替)。1対1チャットのヘッダーに相手のステータスドットを表示
- v1.16 (#79): メッセージにスター (ブックマーク) を付けて後からまとめて確認 - スター付きメッセージ一覧ページ (★ スター)
- v1.16 (#79): メッセージ転送 - 任意のメッセージを他のチャットへワンクリックで転送 (直近 20 チャットから選択)
- v1.16 (#79): チャット内キーワード検索 - チャットヘッダーの🔍ボタンから、表示中のメッセージを送信者名やテキストで即時フィルタ
- v1.16 (#79): グループチャットの既読者一覧 - 自分のメッセージの「既読 N」をタップして誰が読んだかを確認できるモーダル
- v1.16 (#79): +メニュー (LINE 風ボトムシート) - チャット入力欄左の「+」から画像 / カメラ / ファイル / 位置情報 (Google Maps URL) / 投票 / 日程調整 / To-Do / メモ / 連絡先 にワンタップアクセス。あみだくじ / ギフト / 動画・BGM はフェーズ2で実装予定 (「準備中」表示)
- v1.17 (#86): チャット + メニュー Phase 2 - 「準備中」だった 4 機能を実装。あみだくじ / ギフト (マーケット出品シェア) / YouTube 動画シェア / BGM シェア。すべて新規テーブル (fuse_chat_share_cards / fuse_chat_amidakuji 系) で実装し、既存スキーマ・既存メッセージは一切変更なし
- v1.17 (#86): あみだくじ - タイトルと結果ラベル (2〜12 件) をモーダルで入力 → チャットにカード送信、参加者は「引く」ボタンで残っている結果からランダムに 1 つ割り当てられる (1 ユーザー 1 ピックの UNIQUE 制約)。結果はカード内に即時反映、参加履歴を折りたたみ表示
- v1.17 (#86): ギフトシェア - チャット内モーダルからマーケット出品をキーワード検索 → 選択した出品をサムネ・タイトル・価格・出品者のカードとしてチャット送信。タップで商品詳細 (market_item) へ遷移。チャット内検索 (fuse_chat_market_search) を追加
- v1.17 (#86): YouTube シェア - チャット内モーダルから YouTube を検索 (既存 fuse_youtube_search 再利用) → 選択動画をサムネ・タイトル・チャンネル名のカードとして送信。タップでアプリ内 video_watch プレイヤーへ遷移。サムネ URL は ytimg.com のみ許容
- v1.17 (#86): BGM シェア - 既存 reel_bgm ライブラリを再利用してアクティブな BGM 一覧をモーダル表示、選択した BGM を曲名・アーティスト・<audio> プレイヤーのカードとして送信
- v1.17 (#86): シェアカード描画は汎用テーブル fuse_chat_share_cards (message_id PK, card_type ENUM, payload_json) に snapshot を保存し、元の出品/動画/BGM が削除されてもチャット表示は崩れない設計。N+1 を避けるため fuse_chat_cards_preload() で一括 prefetch。フィーチャーフラグ fuse_v17_*_supported() でスキーマ未適用時もアプリ全体は動作
- v1.18 (#87) Phase 1: ポイントシステム - ユーザーの行動に応じて累計ポイントが貯まる (デイリーログイン +10 / 投稿作成 +20 / いいね受領 +5 / リポスト受領 +15 / フォロー受領 +10)。減点はしない。新規 fuse_user_points (1 ユーザー 1 行) + fuse_point_log (監査用) テーブル
- v1.18 (#87) Phase 1: レベルシステム - ポイントから Lv1〜Lv100 を計算 (Lv2 で 50pt、Lv50 で 24,450pt、Lv100 で約 59,450pt の累積カーブ)。プロフィールヘッダーに「🎖 Lv.N / ⭐ XX pt / 次のレベルまで Y pt」を表示
- v1.18 (#87) Phase 1: 実績バッジ - 投稿数 (1/10/100)、フォロワー数 (10/100/1000)、累計いいね受領数 (100/1000) の 8 種を自動付与。獲得バッジはプロフィールに緑バッジで一覧表示。新規 fuse_user_badges テーブル (1 ユーザー 1 バッジまで UNIQUE)
- v1.18 (#87) Phase 1: ポイント・バッジ機能はすべて新規テーブル (fuse_user_points / fuse_point_log / fuse_user_badges) で実装し、既存スキーマ・既存ロジック・既存 UI は一切変更なし。フィーチャーフラグ fuse_v118_points_supported() でスキーマ未適用環境でもアプリ全体は動作。post #87 の残機能 (デイリーミッション / ランキング / 友達招待 / AI ハッシュタグ / 投稿インサイト / 予約投稿) は Phase 2 以降で別 PR にて追加
- v1.19 (#88): PWA 対応 - Web App Manifest を pages/pwa_manifest.php で配信、theme-color / favicon / 192px / 512px の SVG アイコンを追加。Service Worker (sw.js) に静的アセット (style.css / anim.js / アイコン) の軽量オフラインキャッシュ (cache-first + background refresh) を追加。push 通知の主目的は壊さない
- v1.19 (#88): インストール促進バナー - beforeinstallprompt イベントをキャッチして画面下部にインストール案内バナーを表示。「後で」を選ぶと 7 日間は再表示しない (localStorage)
- v1.19 (#88): OGP / Twitter Cards - layout_head に $opts 引数を追加し、ページごとに og:title / og:description / og:image / canonical / robots / json_ld を上書き可能に。post_view / profile / welcome に OGP 設定を追加。投稿には SocialMediaPosting、プロフィールには ProfilePage の JSON-LD 構造化データを出力
- v1.19 (#88): SEO - すべてのページに meta description / canonical / robots index,follow を出力 (非公開アカウントの post_view / profile は noindex)。新規 pages/robots.php (robots.txt) と pages/sitemap.php (sitemap.xml) を追加。sitemap は公開アカウントのプロフィール + 最近の公開投稿 500 件までを列挙
- v1.19 (#88): オンボーディング - 新規ユーザー向け 4 ステップ (プロフィール / 初投稿 / フォロー / ストーリーズ・リール) のガイドを pages/onboarding.php で実装。フィード上部に未完了ユーザー向けのバナーを表示。完了で 50pt のボーナス (v1.18 ポイントシステムが有効な環境のみ実加算)。新規テーブル fuse_v119_onboarding で進捗管理、フィーチャーフラグ fuse_v119_onboarding_supported() でガード
- v1.19 (#88): Welcome ページ (welcome.php) を現在の全機能 (ストーリーズ / リール / AI チャット / ライブ配信 / グループ / イベント / マーケット / ポイント・バッジ) に合わせて全面リニューアル。ファーストビューに大きな CTA、機能紹介セクション、安心ポイント、再 CTA の構成
- v1.20 (#158) Phase 1: 着信時バイブレーション - 音声/ビデオ通話の着信時に Vibration API で端末を振動 (対応端末のみ・着信音と同時)。グローバル着信ポーラーの startRing/stopRing に統合し、応答/拒否/相手切断でバイブも停止。既存のリングトーン (WebAudio) は変更なし
- v1.20 (#158) Phase 1: 着信音の設定 - 設定画面に「📞 着信音・バイブレーション」セクションを追加。着信音 ON/OFF・バイブレーション ON/OFF・音量 (0〜100%) を端末ごとに localStorage で保存し、着信ポーラーが反映。テスト再生ボタンで現在の音量を確認可能。デフォルトは着信音 ON / バイブ ON / 音量 70% で従来と同等の鳴動を維持。DB スキーマ・既存ロジックの変更なし
- v1.21 (#158) Phase 2: 読み込み速度の最適化 - フィード/プロフィール/チャット/グループ/イベント/マーケット等のすべての画像に loading="lazy" と decoding="async" を付与し、初回表示と長いフィードのスクロールを高速化 (画像は表示領域に近づいてから読み込み)。HTML 構造・既存ロジックの変更なし
- v1.21 (#158) Phase 2: 静的アセットの配信最適化 - .htaccess に gzip 圧縮 (mod_deflate: HTML/CSS/JS/JSON/SVG) とブラウザキャッシュ (mod_expires: CSS/JS 7日・画像/アイコン 30日) を追加。いずれも IfModule でガードし、未対応サーバーでも安全に無視。再訪問時の転送量・読み込み時間を削減
- v1.24 (#158) Phase 5: 画像の WebP 自動変換 - 投稿/ストーリー/チャット等でアップロードされた JPEG・PNG 画像を、対応サーバー (GD+WebP) では自動的に WebP へ変換して保存し転送量を削減。PNG の透過は保持、GIF (アニメーション) と既存 WebP は対象外。GD 非対応・巨大画像・変換失敗時は元画像をそのまま保存 (後方互換)。既存の画像 URL・DB スキーマの変更なし
- v1.24 (#158) Phase 5: CSS/JS のミニファイ配信 - style.css・anim.js を asset.php 経由でミニファイ (コメント/空白除去) して配信。長期ブラウザキャッシュ (max-age 7日) + ETag による 304、Service Worker のオフラインキャッシュにも対応。ミニファイ結果が不正/縮まない場合は元ファイルをそのまま配信するフォールバックで安全。CSS は文字列リテラルを保護し JS は行を結合しない保守的方式
- v1.25 (#159) Phase 1: チャット一覧からのユーザー検索・新規チャット開始 - チャット一覧画面の上部に検索ボックスを追加。ハンドル (@) ・表示名で Fuse ユーザーを検索し、アイコン・名前・自己紹介を表示。タップで chat_start 経由の 1対1 チャットへ遷移 (未チャットのユーザーへも新規 DM 可)。同じ検索ボックスで既存チャットを相手名で絞り込みも兼用。DB スキーマ・既存ロジックの変更なし (lib.php に fuse_search_users_for_dm を追加)
- v1.27 (#171) Phase 1: PWA 品質改善 - ホーム画面アプリ化の安定化。(1) viewport に viewport-fit=cover を追加しセーフエリア (ノッチ/ホームバー) を有効化、(2) iOS Safari のアドレスバー伸縮で画面サイズがガタつく問題を 100dvh (Dynamic Viewport Height) 対応で解消 (リール/チャットのフルスクリーン表示)、(3) iOS/iPad のホーム画面アイコンが正しく表示されない不具合を修正 - apple-touch-icon を PNG (iOS は SVG 非対応) で iPhone/iPad サイズ別 (120/152/167/180) に配信し、manifest にも 152/167/180/192/512 の PNG アイコンを追加、(4) mobile-web-app-capable メタタグを追加。display:standalone / theme_color は従来どおり維持。既存機能・DB スキーマの変更なし。iOS スプラッシュスクリーンは Phase 2 で対応予定
- v1.29 (#173): スマートフォンの不具合修正 - 直近の PWA/Service Worker 対応に起因するキャッシュ不具合を解消。(1) Service Worker が CSS/JS (asset.php) を cache-first + ignoreSearch でキャッシュしていたため ?v= による更新が無視され古いデザイン/スクリプトが配信され続ける問題、および style.css と anim.js が同一パスで照合衝突する問題を修正 - SW は CSS/JS を一切キャッシュせず常にネットワーク取得 (ETag/max-age/?v= でブラウザキャッシュ最適化) とし、キャッシュ対象を /assets/ 配下の不変的な静的ファイルのみに限定。FUSE_CACHE_VERSION を v129 に更新し activate 時に旧キャッシュを全削除 (古いキャッシュの強制クリア)。これにより最新の CSS/JS が必ず読み込まれ、ウェルカムページから先に進めない・デザインが古いまま戻る不具合を解消。(2) iOS ホーム画面起動時のブラウザバー対策として apple-mobile-web-app-status-bar-style を black-translucent に変更し、topbar に safe-area-inset-top/left/right 余白を追加してステータスバー/ノッチとの重なりを回避。(3) 対応端末で body の最低高を 100dvh に設定しアドレスバー伸縮時の下部隙間を解消 (スクロールは阻害しない)。既存機能・DB スキーマの変更なし
- v1.30 (#184) Phase 1: パスワード復旧 (リセットメール) - ログイン画面から「パスワードをお忘れですか?」のリンクを追加。メールアドレスを入力すると登録ユーザーには再設定リンクをメール送信 (列挙対策のため登録の有無にかかわらず同じレスポンス)。リンクは 60 分有効・1 度のみ使用可・1 ユーザーあたり 1 時間 5 回までのレート制限。raw token は 32 bytes hex (64 chars) で DB には SHA-256 ハッシュのみ保存。再設定成功時はパスワード変更 + 同ユーザーの未使用トークン全無効化 + 全 remember-me セッション破棄 + 自動ログイン。新規テーブル fuse_password_resets。既存機能・既存スキーマの変更なし。Phase 2 (新規登録時のメール確認) / Phase 3 (管理者によるサービス名・ロゴ変更) は別 PR にて追加予定
- v1.34 (#190) Phase 1: チャット画面の全画面化 - chat_room ページのみメインコンテナの幅制限を外し、PC では横幅最大、スマホでは画面端ぎりぎりまでメッセージ領域を表示。フレックスレイアウトで上部ヘッダー固定 / 中央スクロール / 入力欄下部固定はそのまま。CSS の :has() で chat_room ページにのみ適用、他ページに影響なし
- v1.34 (#190) Phase 1: チャット → プロフィール 1タップ遷移 - 1対1チャットのヘッダー (相手の名前) をタップで相手のプロフィールページへ、グループチャットでは各メッセージ上の送信者名タップでその人のプロフィールへ移動。アクセシブルな a タグ + 軽い破線下線ホバーで、既存の表示を崩さず操作性のみ追加。既存ロジック・スキーマ・他 UI は一切変更なし。Phase 2 以降 (フォロワー/フォロー一覧、承認制フォロー、相互フォローの友達セクション、公開範囲設定) は別 PR にて順次追加予定
- v1.35 (#190) Phase 2: フォロワー/フォロー中の一覧ページ - プロフィール上の「フォロワー」「フォロー中」の数字をタップで /index.php?page=followers&handle=… および /index.php?page=following&handle=… の一覧ページに遷移。一覧には各ユーザーのアイコン・表示名・@ハンドル・自己紹介 (120文字まで) を表示し、行全体から相手のプロフィール / そのまま一覧上でフォロー・フォロー解除が可能 (CSRF 保護付き)。1ページ 50 件のシンプルなページャ。公開範囲: 公開アカウントは誰でも閲覧可、非公開アカウントは本人・既存フォロワーのみ閲覧可 (それ以外には 🔒 メッセージのみ)。新規ライブラリ関数 fuse_follow_list / fuse_follow_status_map を追加 (既存関数は変更なし)。新規ページ pages/followers.php / pages/following.php と CSS .fuse-userlist / .fuse-userrow を追加。Service Worker のキャッシュバージョンを v133 → v135 に更新。既存スキーマ・既存ロジック・他 UI は一切変更なし。Phase 3 以降 (承認制フォロー、相互フォロー友達セクション、公開範囲設定) は次サイクル以降で別 PR にて追加予定
- v1.37 (#190) Phase 4: 相互フォロー「友達」セクション - チャット一覧 (?page=chats) の上部に、相互フォローしているユーザーを横スクロールアイコンとして表示 (LINE / Instagram 風)。アイコンタップでそのユーザーとの 1対1 チャット画面へ直接遷移し、まだチャットしたことがないユーザーへも chat_start.php 経由でワンタップで新規 DM を開始できる。相互フォローを解除されたユーザーはセクションから自動的に消える (新規テーブル不要、follows を 2 回 JOIN したリアルタイム計算)。検索中はセクションを非表示にして従来の検索フローを維持。スマホ (≤480px) でアイコンサイズを自動縮小、PC では 56px、アバターには相互フォローのグリーンリングを付与。新規ライブラリ関数 fuse_mutual_followers を追加 (既存関数・既存ページ・既存ロジック・既存スキーマは一切変更なし)。Phase 5 (公開範囲の細かい設定) は次サイクル以降で別 PR にて追加予定
- v1.39 (#192): メール送信元の安全なデフォルト + 管理画面からの From 設定 - デフォルト送信元を IANA 予約済の no-reply@example.com から noreply@aiapps.jp (SPF/DKIM/DMARC 完備) に変更し、登録確認・パスワードリセット・通知メール等が Gmail/Outlook 等で reject されずに届くよう改善。さらに「管理 → アプリ設定 → 📧 メール送信元 (From)」に『送信元メールアドレス』『送信者表示名』の設定欄を追加し、独自ドメインから送信したい場合は任意の From を指定可能に。優先順位は『DB 設定 > config.php > デフォルト』。空のままならデフォルトが使われる安全な fallback 設計。新規ヘルパー関数 fuse_mail_from_address / fuse_mail_from_name を追加。既存スキーマ・既存ロジック・他 UI は一切変更なし (app_settings の key/value 拡張のみ)。
導入手順
- AIアプリ開発部 でアカウント登録(まだの方)
- ダッシュボードから
installer.phpをダウンロード - 自社サーバーの公開ディレクトリにアップロードして実行
- APIトークンを入力 → このアプリを選択 → DB情報入力 → 完了
📚 バージョン履歴
現行版の概要のみ表示しています。 すべてのバージョン (45件) を見る →
v1.41.0
現行版
v1.41.0 (#209): Instagram DM完全実装フェーズ2 - 長押しリアクションメニュー(❤️😂😮😢😡👍), 送信者アバター表示, チャット一覧Instagram風(Messages/Requestsタブ・円形アバター・未読青ドット), プロフィールShareボタン・共通フォロワー表示
🔒 ダウンロードには ログイン + ライセンスが必要