開発ダイジェスト 2026-05-15
期間: 2026-05-01〜2026-05-15 / コミット 140 件・PR 1 件
前回(5/1)以降、本番リリース直前の仕上げが一気に進みました。検索エンジンに正しく載るための土台(sitemap・OG 画像・robots)、画面エラー時の受け皿、データベースの整理、セキュリティの底上げ、そしてランディングページ(LP=サービス紹介ページ)の作り直しが主なテーマです。[FACT] 期間中のコミット数 140、PR 1 件(develop 直 push 中心の開発体制のため、develop を base とした PR は少なめ)。
新機能¶
- 検索エンジン向けの整備: Google などの検索結果に正しく載せるための sitemap.xml と robots.txt を追加しました。LP には OG 画像(SNS 共有時に出るプレビュー画像)と Twitter カード用メタデータも付き、SNS に貼った時の見栄えが整っています。
- 画面エラー時の受け皿: 何かの拍子に画面が落ちたときに、真っ白ではなく「エラーが起きました」と表示する画面(error boundary)をルートとアプリ全域に追加しました。
- 読み込み中の表示(スケルトン): 公開プロフィール・通知一覧・GAR スコア内訳・推薦投稿フォームの 4 画面に、データ取得中の骨組み表示を追加しました。ぱっと画面が切り替わったように見えてストレスが減ります。
- 推薦に通報リンクを追加: 受け取った推薦カードに、不適切な内容があった場合に運営へ報告できるメールリンクを設置しました。
- 推薦時のクライアント情報記録: 推薦が送られた時のブラウザ情報(user agent)も保存するようになり、不正利用調査の手がかりが増えました。
- 画像アップロードの容量上限: ポートフォリオ画像を 1 ユーザーあたり 60 枚までに制限する仕組みをデータベース側で強制するようになりました。アバター・ポートフォリオ画像のアップロード時には、ファイルの中身(magic byte=ファイル先頭の識別バイト)を見て、本物の画像かどうか検証もしています。
改善¶
- LP(ランディングページ)の全面リニューアル: トップページを新しい 7 セクション構成に作り直しました。
- ヒーロー(最上部)に公開プロフィールを模した「ProfileMockupMini」を配置し、6 つの軸(GAR の評価軸)をハイライト
- 「名刺メタファー」セクションを新設し、Guilders が「次世代の名刺」であることを訴求
- 6 軸の深掘りセクション(スクロール追従式)
- 受け手目線のシナリオセクション
- 「ShareModal 体験」セクション(共有モーダルの動きを LP 上で疑似体験)
- 推薦の循環図(4 ステップ)に再構成
- FAQ と最終 CTA(行動喚起)を 1 セクションに統合
- 古いプロフィール情報の整理: 旧バージョンで使っていた
skills/portfolio/skill_detailsカラムをデータベース・コード両方から完全に取り除きました。コードの古い互換 fallback も削除し、見通しが良くなりました。 - OG 画像のキャッシュ最適化: プロフィール用 OG 画像の取得に Vercel のデータキャッシュ(24 時間)を効かせ、生成回数を抑えるようにしました。
- アバター画像を最適化形式に: オンボーディング画面のアバター表示を
next/image化し、自動最適化(軽量化)が効くようにしました。 - ログイン画面の整理: 開発中だけ表示していたスタブボタン(メール+パスワード再検討、未対応ボタン)を本番から消しました。
バグ修正¶
- プロフィール変更時に OG 画像が古いままになる問題: プロフィールを更新したのに SNS シェア時の画像が古いまま、という不具合を修正しました。
- 匿名推薦が送れなかった問題: 「完全匿名」を選んだときに推薦の送信ボタンが効かない不具合を直しました。
- 推薦完了ページが開けないケース: 推薦が完了状態のトークンでも、受信者情報を正しく解決できるようにしました(新しい RPC を追加)。
- アバター画像のプレビューが消える問題: アバターアップロード画面でプレビューが描画されない回帰を修正しました。
- オンボーディング保存時の公開範囲が不定だった問題: 基本情報を保存する際に公開範囲を
private(非公開)として明示し、GAR スコアの再計算も走るようにしました。 - 推薦のレート制限が解除されない問題: レート制限の判定を「完了時刻ベース」に変更し、長時間制限が残ってしまうケースを直しました。
- シェア画像の URL がハードコードされていた問題:
guilders.appというドメイン直書きをSITE_URL環境変数に統一し、プレビュー環境でも正しい URL が出るようにしました。 - クライアントとサーバーで表示が食い違う(hydration mismatch)問題: 推薦画面で発生していた表示ズレを
SITE_URL統一で解消しました。 - LP のアンカーリンク切れ: 古いセクション ID を新しいセクションに対応させ、ナビゲーションの
#proof#usecasesがちゃんと飛ぶようにしました。 - アバターアップロードの競合: ストレージのファイルパスを UUID 化し、スキップしてやり直した時に古いファイルが上書きされる競合(race condition)を解消しました。
- ポートフォリオ削除中のデータ損失: 削除処理を保存処理の完了後に遅延させ、保存途中で失敗した時に画像が消えてしまう問題を防ぎました。
- 公開プロフィール(受信者)の表示問題: ProfilePortfolioCard で外部 URL が再表示されない問題を修正しました。
- スキル更新時のチャーン(無駄な作り直し): ID なしのスキル行を category+tag で照合し直すことで、保存のたびに DB 行が作り直されてしまう問題を抑えました。
内部改善¶
- セキュリティ強化第 2 ラウンド(Group H): 包括的なセキュリティ整備を実施。
- 推薦トークンの解決を pending かつ未期限のものに限定
- 信頼できるプロキシ判定(trusted-ip)を
TRUSTED_PROXY環境変数で fail-closed(明示設定がないと信用しない)化 - ポートフォリオ書き込みと推薦 INSERT を Server Action 経由(service-role)に限定し、anon ロールから REVOKE
- profiles の列(カラム)単位で UPDATE 権限を絞り、gar_score 詐称や自己承認を不可能に
- state machine(公開状態の遷移)を BEFORE UPDATE トリガーで強制
- 非オーナーが private プロフィールを開いたら 404 を返すよう gating 追加
recommendations_publicview に公開範囲のフィルタを追加し、メール harvest(収集)を封じる- データベース整理(Group E / F): 旧 v1 カラム DROP、SECURITY DEFINER 関数 3 つに
search_pathを追加、MVP で使わないテーブル 7 つと関数 3 つを CASCADE DROP、推薦系 view 4 つに公開意図を明示する COMMENT を追加。 - 本番運用準備(Group G): SITE_URL ヘルパー集約、sitemap 対象 view 追加(migration 024)、本番では
/coming-soonを 404 に gate するルーティング追加。 - テスト基盤: pgTAP(PostgreSQL 用テストフレームワーク)でセキュリティとデータ整合性のアサーション計 27 件を追加。GitHub Actions に RLS(行レベルセキュリティ)テスト専用 job を追加し、CI で毎回検証されるように。
- 依存パッケージ更新: Next.js を 16.1.6 → 16.2.6 へ。Cloudflare が公表した React/Next.js の脆弱性群(CVE-2025-55184 ほか)を解消(PR #43)。
- CI ランタイム延命: 2026-06-02 から GitHub Actions の Node 20 が廃止されるため、checkout / setup-node / pnpm-action / supabase-cli を Node 24 対応の最新メジャーに更新(PR #43)。
- 開発環境の改善:
pnpm dev:agentで AI エージェント(Claude in Chrome 等)が自律 E2E テストを走らせるための環境を追加。Supabase テストデータの確認・更新ユーティリティスクリプトも追加。 - Server Action のボディサイズ拡張: 画像複数枚アップロードに対応するため、
serverActions.bodySizeLimitを 4mb → 最終的に 32mb まで拡張。 - 設計ドキュメント: Group E / F / G / H / LP refresh の設計仕様書と実装プランを追加。本番デプロイ準備の統合監査レポートも整備。
次に進行中の作業¶
[INFERENCE] PR #44 release: Next.js 16.2.6 セキュリティ更新 + CI Node 24 対応 が develop → main へマージ済み(2026-05-09)であることから、Group H までの内容は本番へ反映済みの可能性が高い。期間後半のコミットが LP リファクタとセキュリティ修正に集中している点から、次の重点は本番リリース後の追加調整(UI 微修正・運用フィードバック対応)になると推測される。