### X のリンク（2026-10-31 から、いまは付けない）

リポジトリの Variables の `X_LINKS` が `1` のときだけ、X にリンクを付ける。ないとき（いま）は、本文の URL の行を外して出し、リンクの返信（`x_en_reply`）も出さない。json の文は URL 入りのまま置いてよい（`X_LINKS` を `1` にすれば、そのまま元の形で出る）。LinkedIn には関係しない。

- 理由：API でリンクのある投稿を出すと1本 0.20 ドル、リンクなしは 0.015 ドル（2026-04-20 からの X の料金）。日本語1日4本・英語平日2本をリンク付きで出すと月に約35ドルかかる。リンクなしだと月に約3ドル
- エイイチの決定（2026-10-31）「今は投稿にリンク追加は無しの設定にしてください。いいねやリポストが増えたらリンク付きの投稿に変えます」。リンクはプロフィールに置く
- 戻すとき：GitHub の r2r2r-content → Settings → Secrets and variables → Actions → Variables で `X_LINKS` = `1`
- 一覧（`schedule_preview.md`）も、その時の設定で出る形を表示する

### マンガの英語の X（2026-10-31 から）

英語の X には、4コマの絵を画像で付け、リンクは自分への返信に置く（いまは上の「X のリンク」のとおり、返信は出さない）。

```json
"posts": {"x_en": "Hook line...\n\nHakobukun · Ep. 132\n#webcomic #AI",
          "x_en_images": ["/media/manga_ep132en_p1.webp", "…p2", "…p3", "…p4"],
          "x_en_alts": ["画像の説明（英語）", "…"],
          "x_en_reply": "Read it with the design note: https://pixelstomotors.com/english-4-koma/ep132"}
```

- `x_en_images`：最大4枚。`/media/…` はサイトの住所で取る（Actions が取りに行き、X の /2/media/upload に上げる）。縦長の話は4コマを4枚、1枚の4コマは1枚
- `x_en_alts`：画像と同じ数。X の /2/media/metadata で付ける（失敗しても画像はそのまま出す）
- `x_en_reply`：本文を出したあと、その投稿への返信として出す。返信だけ失敗しても本文は出ている（posted.json の comment_error に理由）。`X_LINKS` が `1` のときだけ出す
- 1本の費用の目安：本文 0.015 ドル＋説明 0.005 ドル×画像の数（縦長で約 0.035 ドル、1枚の4コマで約 0.02 ドル）。リンクの返信を出すと＋0.20 ドル（2026-04-20 からの X の料金）
- 予定表の id は `MANGA_ep{N}-x-en`、`"lang": "en"`

決めた理由（2026-10-31 に調べたこと）
- 時刻：X の投稿は、読む人の地元の時刻で、平日の午前中（9〜11時）が最も反応がよい（Buffer、約870万投稿）、火〜木の昼〜夕方がよい・技術の分野は11〜16時（Sprout Social）。土曜がいちばん弱く、夜はどの曜日も弱い。英語の読み手の多い米国・英国の両方に届く、米国東部の 11:00（英国 16:00）と 15:00（英国 20:00）にした
- リンク：X は「リンクを減点していない」と言っている（2026-07）が、リンクのある投稿は表示が大きく少ないという測り方がある。また 2026-04-20 から、API でリンクのある投稿を出すと 0.20 ドル（リンクなしは 0.015 ドル）。本文はリンクなし・画像ありにし、リンクは返信に置いた
- 画像：画像のある投稿は、文だけの投稿より広く表示されやすい（業界の目安で 15〜25%）。マンガは絵が中身なので、絵そのものを出す
- タグ：X では2つまでが目安（X のヘルプも、タグの使い過ぎをすすめていない）。マンガを読む人が追う `#webcomic` と、話題のタグ1つにした

### YouTube のショート（sns/SHORT_ep{N}_sns_posts.json）

ショート専用のマンガのショートは、YouTube の公開予約に合わせて X に出す（2026-10-24 エイイチの指示「ショートもXに出す」「19:30が重なったら動画は20:00」）。

```json
{"meta": {"kind": "youtube_short", "episode": 7, "title": "ショート 第7話 ピンポン",
          "youtube_title": "YouTube のタイトル", "manga_url": "https://pixelstomotors.com/manga/ep07",
          "url": "（自動）", "youtube_id": "（自動）"},
 "posts": {"x_template": "本文…\n\n{url}\n#ロボット #病院", "x": "（自動）"}}
```

- 文は動画を作った会話で作って置く（`x_template`。`{url}` がショートの URL に替わる）。タグは話題のタグ2つ、エイイチの話し方
- `tools/sync_youtube_shorts.py --videos youtube_videos.json` が、エイイチの Mac が1時間ごとに書き出す YouTube の一覧（`_制作ベース/youtube_videos.json`）を読み、説明文の `manga/ep{N}`（`manga_ep`）で json と動画を結びつけて、公開の時刻で予定表に入れる。`url` と `posts.x` もそのときに入れる
- 同じ時刻に X の予約があれば、19:30 なら 20:00、それ以外は30分ずつ後ろへずらす（12:30 なら 13:00）
- YouTube で公開の時刻を変えたら、まだ投稿していない予約の時刻も次の同期で直る。公開の時刻を過ぎてから見つけたものは入れない
- LinkedIn には入れない（ショートは LinkedIn に出さない）
- 同期は予定のタスク「ショートと本編のX予約をYouTubeに合わせる」が1日2回（7:47・17:47）動かす（本編も同じ回で入る）。Mac が眠っていると、その回は何もしない
- YouTube へのアップロードと公開予約は、まだ手で行う（API で上げるには Google の審査が要る。審査前に API で上げた動画は非公開から変えられない）

### YouTube の本編（sns/VIDEO_{名前}_sns_posts.json）

本編の動画も、YouTube の公開予約に合わせて X に出す（2026-10-24 エイイチの指示。「何台入れたら店は変わる」から）。ショートと同じ同期（`tools/sync_youtube_shorts.py`）で入る。

```json
{"meta": {"kind": "youtube_video", "title": "動画名（作業フォルダの名前）",
          "youtube_title": "タイトル.txt のタイトル", "title_match": ["配膳ロボット", "何台"], "seconds": 860,
          "url": "（自動）", "youtube_id": "（自動）"},
 "posts": {"x_template": "本文…\n#配膳ロボット #飲食店\n{url}", "x": "（自動）"}}
```

- 文は動画を作った会話で、投稿文_X_LinkedIn.txt の X の文から作って置く（`{url}` が `https://youtu.be/{id}` に替わる。X の数え方で280まで）。書き方は article_rules.md の「SNS の文章の質の決まり」（1行目で手が止まる一文・シミュレーションならそう分かる言葉・小さな感想・話題のタグ2つ）。ファイル名の `{名前}` は英数字とハイフン
- 動画との結びつけ: YouTube のタイトルが `youtube_title` と同じもの。なければ、`title_match` の語をすべて含み、長さ（秒）が `seconds` と3秒以内のもの（上げるときにタイトルを直しても結びつく）
- 時刻の決まり（19:30 が重なったら 20:00、ほかは30分ずつ後ろへ）・公開の時刻を過ぎてから見つけたものは入れない・時刻を変えたら次の同期で直る、はショートと同じ
- **LinkedIn にも YouTube のリンクで自動で出す**（2026-10-30 エイイチの指示「LinkedIn で動画を自分でアップロードするのが面倒。YouTube の投稿に統一」。それまでは LinkedIn に動画を直接上げて手で出していた）。`posts.linkedin_template`（本文）と `posts.linkedin_comment_template`（最初のコメント）を置くと、同期が YouTube の公開と同じ時刻に `VIDEO_{名前}-linkedin` を予定表に入れ、`{url}` を `https://youtu.be/{id}` にして `posts.linkedin`・`posts.linkedin_comment` を作る。LinkedIn では YouTube のサムネイルつきのリンクのカード（題は YouTube のタイトル）で出る。同じ時刻に LinkedIn の予約があれば30分ずつ後ろへ。文は日本語だけ（投稿文_X_LinkedIn.txt の LinkedIn の日本語の部分）
- 動画を LinkedIn に直接上げるより、外のリンクの投稿は LinkedIn で広がりにくいと言われている（公式の発表ではない）。反応は sns_analytics の書き出しで見比べる
- **ここぞという回は、エイイチが LinkedIn に動画を直接上げる**（2026-10-30 エイイチ「ポイントポイントで直接あげる」）。その回は json の meta に `"linkedin_manual": true` を書く。同期が自動の LinkedIn の予約を入れず、もう入っていれば（まだ出ていなければ）外す
