---
title: "officialSns マージ手順書"
---

`data/work/members.json` の `officialSns` を Vercel Blob 上のメンバーデータに一括マージする手順を記述する。

- 対象スクリプト: `scripts/patch-official-sns.ts`
- 関連 Issue: #155

---

## 背景

PR #149 で `data/members.json` に `officialSns` フィールドを追加したが、アプリが実際に読み書きするデータは
Vercel Blob 上にある。そのため、デプロイ済みアプリでは `officialSns` が空のまま（公式SNSセクションが非表示）となっている。

本スクリプトを **一度だけ** 実行することで、Blob 上のデータに `officialSns` をマージする。

---

## 前提条件

`.env.local` に以下の環境変数が設定されていること:

| 変数名 | 説明 |
|--------|------|
| `BLOB_READ_WRITE_TOKEN` | Vercel Blob の読み書きトークン（Vercel ダッシュボード > Storage > Connect から取得） |
| `MEMBERS_BLOB_URL` | Blob 上の `members.json` の URL（Vercel ダッシュボード > Storage > Blobs から取得） |

---

## 実行手順

### 1. 事前確認

`data/work/members.json` に `officialSns` が設定されていることを確認する:

```bash
cat data/work/members.json | bun -e "
  const d = await Bun.stdin.json();
  const withSns = d.members.filter(m => m.officialSns?.length > 0);
  console.log('officialSns 設定済み:', withSns.length, '件');
"
```

### 2. スクリプトを実行

```bash
bun scripts/patch-official-sns.ts
```

実行成功時の出力例:

```
30 件のメンバーに officialSns をマージしました。
Vercel Blob への書き戻しが完了しました。
officialSns のマージが完了しました。
```

### 3. 動作確認

デプロイ済みアプリで `officialSns` を持つメンバーの詳細ページを開き、「公式SNS」セクションが表示されることを確認する。

同期スクリプト（`sync-members.yml`）の次回実行ログで、SNS ドメイン限定検索が動作していることを確認する。

---

## 注意事項

- **一回限りの操作**: 本スクリプトは初期マージ用として設計されている。今後 `officialSns` を更新する場合は `data/work/members.json` を編集した上で再実行するか、Blob を直接編集すること。
- **再実行時の上書き**: Blob 側に既に `officialSns` が存在する場合、`data/work/members.json` の値で上書きされる。Vercel ダッシュボード等で Blob を直接編集した `officialSns` を保持したい場合は本スクリプトを再実行しないこと。
- **上書き保存**: `put()` は `allowOverwrite: true` で既存 Blob を上書きする。実行前に Blob の現在の内容をバックアップしたい場合は、Vercel ダッシュボードから JSON をダウンロードしておくこと。
- **id 照合**: `data/work/members.json` に存在しないメンバーが Blob 上にいる場合、そのメンバーの `officialSns` は変更されない。
- **officialSns 未設定のメンバー**: ローカルで `officialSns` が空配列または未定義のメンバーは、Blob 上のデータも変更されない。

---

## トラブルシューティング

### `BLOB_READ_WRITE_TOKEN が設定されていません`

`.env.local` に `BLOB_READ_WRITE_TOKEN` が設定されているか確認する。Vercel ダッシュボード > Storage > プロジェクトの Blob ストア > `.env.local` スニペットからコピーできる。

### `MEMBERS_BLOB_URL が設定されていません`

`.env.local` に `MEMBERS_BLOB_URL` が設定されているか確認する。同スニペットに含まれている。

### `Vercel Blob からのデータ取得に失敗しました`

`MEMBERS_BLOB_URL` が正しい URL を指しているか確認する。Vercel ダッシュボード > Storage > Blobs で `members.json` の URL を確認すること。
