さくらの一言アドバイス — 365日フォーマット仕様

九条流算命学に基づく「今日の巡り」コンテンツを365日分生成するための データスキーマ・生成ルール・相性分析の仕様。


目次

  1. 必要な入力データ
  2. 365日フォーマット
  3. 相性分析(ふたりの縁)
  4. 生成ルール
  5. 365日テンプレート(JSON)

1. 必要な入力データ

1-1. ユーザーの命式データ(個人ごとに固定)

以下は ユーザーの生年月日時から計算される固定値 で、 365日を通じて変わりません。

# ユーザープロファイル(計算済み)
userProfile:
  # === 基本情報 ===
  birthDate: "1991-03-06"          # 生年月日(JST)
  birthHour: null                   # 生まれた時間(不明ならnull)
  gender: "male"                    # male | female
 
  # === 陰占(命式)===
  insen:
    year:  { gan: "辛", shi: "未" }  # 年柱
    month: { gan: "辛", shi: "卯" }  # 月柱
    day:   { gan: "丁", shi: "巳" }  # 日柱
    hour:  null                       # 時柱(不明ならnull)
 
  # === 日干の象徴 ===
  nikkan: "丁火"                     # 日干+五行
  nikkanElement: "火"                # 日干の五行
  nikkanSymbol: "灯火"               # 日干の比喩
 
  # === 陽占 ===
  yousen:
    north:  "禄存星"
    south:  "鳳閣星"
    east:   "貫索星"
    west:   "車騎星"
    center: "司禄星"
 
  # === 天中殺 ===
  tenchusatsu: "辰巳"
 
  # === 五行バランス ===
  gogyoBalance:
: 25
: 30
: 15
: 20
: 10
  dominantElement: "火"              # 最高点の五行
  deficientElement: "水"             # 最低点の五行
 
  # === 八門 ===
  hachimon:
    east:   25                       # 青龍(同)
    south:  10                       # 朱雀(洩)
    center: 15                       # 騰蛇(剋)
    west:   20                       # 白虎(被剋)
    north:  30                       # 玄武(生)
  mainType: "玄武"                    # 主型
 
  # === 大運 ===
  taiun:
    direction: "reverse"             # 順行 | 逆行
    ritsuun: 4                       # 立運年齢
    currentCycle:
      pillar: "己丑"
      startAge: 30
      endAge: 39
      shusei: "司禄星"
 
  # === 年運(今年)===
  nenun2026:
    pillar: "丙午"
    gogyo: "火"
    shusei: "鳳閣星"
    tenchusatsu: false

1-2. 日付ごとの変動データ

# その日のカレンダーデータ(日付から計算)
dailyData:
  date: "2026-06-01"
  kanshi: "甲子"                     # 日柱の干支(60干支サイクル)
  dayGan: "甲"                       # 日干
  dayGogyo: "木"                     # 日干の五行
  # 旧暦(太陰暦)
  lunarMonth: 4                      # 旧暦月
  lunarDay: 16                       # 旧暦日
  moonNight: "十六夜"                 # 月齢呼称
  moonIndex: 16                      # 0-29(月満ち欠け画像用)
  # 節気
  sekki: "芒种"                      # 直近の節気
  # 年柱・月柱(節入り基準)
  yearKanshi: "丙午"
  monthKanshi: "癸巳"

2. 365日フォーマット

2-1. 1日分のデータ構造(JSON Schema)

interface DailyAdvice {
  // === カレンダー ===
  date: string;                      // "2026-06-01" (YYYY-MM-DD)
  dayOfWeek: string;                 // "月" | "火" | ... | "日"
  lunarLabel: string;                // "太陰暦 四月十六日"
  moonNight: string;                 // "十六夜"
  moonName: string;                  // "満ちゆく月" | "欠けゆく月" | ...
 
  // === 今日の干支 ===
  kanshi: string;                    // "甲子"
  dayGan: string;                    // "甲"
  dayGogyo: Gogyo;                   // "木"
 
  // === メインコンテンツ ===
  dailyTitle: string;                // "整える日" | "動く日" | "受け取る日"
  dailyLabel: string;                // "今日は"
  headline: string;                  // "火を少し鎮める水の流れ"
  body: string[];                    // 3〜5行の本文
 
  // === 陰占三柱 ===
  pillars: {
    label: string;                   // "年柱" | "月柱" | "日柱"
    value: string;                   // "丙午"
    element: string;                 // "火"
    color: string;                   // 五行カラー
  }[];
 
  // === さくらの一言アドバイス ===
  advice: {
    label: string;                   // "今日の手入れ" | "さくらの一言"
    title: string;                   // "予定をひとつ減らし、余白を先に確保する"
    lines: string[];                 // 2行の具体アクション
  };
 
  // === メトリクス(4項目)===
  metrics: {
    label: string;                   // "メインの気"
    value: string;                   // "水"
    subvalue: string;                // "調整・内省"
    icon: string;                    // "water" | "fire" | ...
    color: string;
  }[];
 
  // === パーソナライズ判定 ===
  compatibility: {
    overallScore: number;            // 0-100
    gogyoRelation: string;           // "相生" | "相剋" | "比和"
    isTenchusatsuDay: boolean;       // 年運天中殺 or 大運天中殺
    guardianStarActive: boolean;     // 守護神が回っているか
  };
 
  // === 翌日プレビュー ===
  nextDayPreview: {
    date: string;
    kanshi: string;
    gogyo: string;
    oneWord: string;                 // "明日は静けさが吉です"
  };
}

2-2. dailyTitle のバリエーション(30パターン)

五行×日干との関係で以下のタイトルを使い分ける:

カテゴリタイトル例条件
相生(生まれる)受け取る日、恵まれる日、育つ日日干の五行を生かされる
相生(生む)表現する日、動く日、蒔く日日干が日付の五行を生む
比和素のままの日、自分らしく同五行
相剋(剋する)整理する日、決める日、切る日日干が日付を剋する
相剋(剋される)守る日、我慢する日、堪える日日干が日付に剋される
天中殺静かな日、休む日、内なる日年運/大運天中殺期間
特殊転換の日、祈る日、振り返る日節気・月始まり

3. 相性分析(ふたりの縁)

3-1. 何が見えるか

ふたりの命式を比較して 6つの縁 を読み取ります:

縁の種別読み方物語的意味
干合Aの干とBの干が合(甲己・乙庚・丙辛・丁壬・戊癸)強烈な引き寄せ。離れても縛る縁
支合Aの支とBの支が合(子丑・寅亥・卯戌・辰酉・巳申・午未)支え合い。生活の土台での結びつき
対冲Aの支とBの支が冲(子午・丑未・寅申・卯酉・辰戌・巳亥)ぶつかりながら成長する関係
相性の葛藤。表面上は合うが内面でズレる見えない溝
同じような強さが摩擦を生む刺激的だが消耗する
比和同じ五行・同じ星わかり合えるが、鏡みたいで成長しづらい

3-2. 必要なデータ(最小セット)

相性を計算するには 以下2つの決定 だけが必要:

# Person A
personA:
  birthDate: "1991-03-06"    # 必須:生年月日
  gender: "male"              # 必須:大運の順逆判定用
 
# Person B
personB:
  birthDate: "1988-11-22"    # 必須:生年月日
  gender: "female"            # 必須:大運の順逆判定用

これだけで以下が計算できます:

  • ✅ 四柱(年・月・日)の干支
  • ✅ 蔵干
  • ✅ 十大主星
  • ✅ 天中殺
  • ✅ 五行バランス
  • ✅ 大運(立運年齢+10周期)
  • ✅ 位相法(干合・支合・対冲・害・刑・半会)

時刻(時柱)は任意。あると精密ですが、 なくても年・月・日柱の3本で十分な相性が読めます。

3-3. 相性スコアの構造

interface CompatibilityResult {
  // === ふたりの基本 ===
  personA: {
    name: string;
    nikkan: string;               // "丁火"
    dominantElement: Gogyo;
    centerStar: string;           // 中心星
  };
  personB: {
    name: string;
    nikkan: string;               // "壬水"
    dominantElement: Gogyo;
    centerStar: string;
  };
 
  // === 縁の判定 ===
  bonds: {
    type: PhaseCondition;         // "干合" | "支合" | "対冲" | ...
    pillar: string;               // "日干×日干" | "年支×月支"
    strength: "strong" | "medium" | "weak";
    description: string;          // 物語的解説
  }[];
 
  // === 総合評価 ===
  overallScore: number;           // 0-100
  overallLabel: string;           // "強い縁で結ばれた関係"
 
  // === 五行の補完性 ===
  gogyoComplement: {
    aGivesB: string;              // "Aの火がBに情熱を与える"
    bGivesA: string;              // "Bの水がAに冷静さを与える"
    conflict: string;             // "火×水で意見がぶつかる場面も"
    harmony: string;              // "木を介して火と水が調和する"
  };
 
  // === さくらの一言(相性版)===
  sakuraAdvice: string;           // "このふたりには、無理に近づかず、
                                  //  ちょうどいい距離を守る美しさがある"
 
  // === 注意点 ===
  warnings: string[];             // 1-3個の注意点
 
  // === 大運の重なり ===
  taiunOverlap: {
    personA: string;              // "現在は己丑の大運"
    personB: string;              // "現在は甲戌の大運"
    combinedEffect: string;       // "ふたり合わせて土気が強まる。安定が増す"
  };
}

3-4. 相性成立のために決めること(チェックリスト)

#決定事項デフォルト備考
1生年月日(ふたり分)必須これが全ての起点
2性別(ふたり分)必須大運の順逆に影響
3生まれた時間null(不明可)あれば時柱が加わり精度アップ
4関係性の種類”general”恋人 / 夫婦 / 親子 / 友人 / 仕事 / general
5読みの深さ”standard”light(五行のみ)/ standard(位相法) / deep(大運重ね)
6出力スタイル”sakura”sakura(物語的) / clinical(分析的) / oneWord(一言のみ)

関係性の種類によって、さくらのアドバイスのトーンを変えます:

  • 恋人・夫婦 → 縁の引き合い・離れ難さに焦点
  • 親子 → 守る・守られるの構造に焦点
  • 仕事 → 役割の補完性に焦点
  • 友人 → 刺激と安らぎのバランスに焦点

4. 生成ルール

4-1. 日付→干支の計算

base: 1900/1/1 = 甲戌 (offset=10)
今日のoffset = (10 + diffDays) % 60
dayGan = GAN[offset % 10]
dayShi = SHI[offset % 12]

4-2. 日干×ユーザー日干の五行関係

ユーザー日干の五行 → 今日の五行

同五行(比和):   安定・自分らしさ
生む(食傷):    表現・発散
生まれる(印):   受け取り・養われる
剋する(財):    コントロール・獲得
剋される(官殺): 責任・守り・抑制

4-3. 本文(body)の生成ロジック

  1. 五行関係 → その日のベーストーン(行動/受容/内省/整理/表現)
  2. 天中殺 → true なら「無理に動かず」「内なる声に耳を澄ます」
  3. 月齢 → 満月付近は「表現・発散」、新月付近は「内省・種まき」
  4. 守護神活性 → 不足五行を補う日なら「今日は〇〇が整う日」

4-4. advice(さくらの一言)の生成ロジック

  1. 上位のトーン(五行関係)を決定
  2. 具体的な 1つのアクション を title に
  3. 2つの補足 を lines に
  4. 巡の祖母・さくららしい口調:
    • 「〜してみるといい」
    • 「〜は、あとで自分を助けてくれる」
    • 「無理に〜しない。ただ〜」

4-5. 月齢の呼称

月齢呼称月の様子
0新月(見えない)
1-2二日月・三日月細い糸のような月
3-5弓張月弓なりに満ちゆく
6-7上弦右半分が光る
8-12弓張月→十三夜丸みを増して
13十三夜ほぼ満月
14待宵月満月の前夜
15満月
16十六夜欠け始め
17立待月少し欠けた月
18-19居待月・寝待月さらに欠けて
20-22更待月→下弦左側に欠け
23-29暁月朝に見える細い月

5. 365日テンプレート(JSON)

以下は 2026年6月1日〜2027年5月31日 の365日分テンプレート。 各日の kanshi は日柱計算で確定、dailyTitle/headline/body/advice は ユーザーの命式との五行関係から生成。

注意: このテンプレートは 日付・干支・月齢・旧暦 の固定部分を365日分出力し、 パーソナライズ部分(headline/body/advice/metrics/compatibility)は ユーザーの命式データと結合して動的に生成します。

{
  "schema": "daily-advice-v1",
  "generatedAt": "2026-06-02",
  "period": { "start": "2026-06-01", "end": "2027-05-31", "totalDays": 365 },
  "userProfileRef": "(ユーザープロファイルは別途指定)",
 
  "days": [
    {
      "date": "2026-06-01",
      "dayOfWeek": "月",
      "lunarLabel": "太陰暦 四月十六日",
      "moonNight": "十六夜",
      "moonName": "欠けゆく月",
      "moonIndex": 16,
      "kanshi": "甲子",
      "dayGan": "甲",
      "dayGogyo": "木",
      "sekki": "芒种",
      "yearKanshi": "丙午",
      "monthKanshi": "癸巳",
 
      "dailyTitle": "(ユーザー命式×日付五行で動的生成)",
      "dailyLabel": "今日は",
      "headline": "(動的生成)",
      "body": ["(動的生成)", "(動的生成)", "(動的生成)"],
      "pillars": [
        { "label": "年柱", "value": "丙午", "element": "火" },
        { "label": "月柱", "value": "癸巳", "element": "水" },
        { "label": "日柱", "value": "甲子", "element": "木" }
      ],
      "advice": {
        "label": "今日の手入れ",
        "title": "(動的生成)",
        "lines": ["(動的生成)", "(動的生成)"]
      },
      "metrics": [
        { "label": "メインの気",   "value": "木", "subvalue": "成長・始まり" },
        { "label": "あなたの日干", "value": "(user)", "subvalue": "(動的)" },
        { "label": "あなたとの関係", "value": "(動的)", "subvalue": "(動的)" },
        { "label": "今日のテーマ", "value": "(動的)", "subvalue": "(動的)" }
      ],
      "compatibility": {
        "overallScore": 0,
        "gogyoRelation": "(動的)",
        "isTenchusatsuDay": false,
        "guardianStarActive": false
      },
      "nextDayPreview": {
        "date": "2026-06-02",
        "kanshi": "乙丑",
        "gogyo": "木",
        "oneWord": "(動的生成)"
      }
    },
    {
      "date": "2026-06-02",
      "dayOfWeek": "火",
      "lunarLabel": "太陰暦 四月十七日",
      "moonNight": "立待月",
      "moonName": "欠けゆく月",
      "moonIndex": 17,
      "kanshi": "乙丑",
      "dayGan": "乙",
      "dayGogyo": "木",
      "sekki": "芒种",
      "yearKanshi": "丙午",
      "monthKanshi": "癸巳",
      "dailyTitle": "(動的生成)",
      "dailyLabel": "今日は",
      "headline": "(動的生成)",
      "body": ["(動的生成)"],
      "pillars": [
        { "label": "年柱", "value": "丙午", "element": "火" },
        { "label": "月柱", "value": "癸巳", "element": "水" },
        { "label": "日柱", "value": "乙丑", "element": "木" }
      ],
      "advice": { "label": "今日の手入れ", "title": "(動的生成)", "lines": [] },
      "metrics": [],
      "compatibility": { "overallScore": 0, "gogyoRelation": "", "isTenchusatsuDay": false, "guardianStarActive": false },
      "nextDayPreview": { "date": "2026-06-03", "kanshi": "丙寅", "gogyo": "火", "oneWord": "" }
    }
  ],
 
  "_comment": "365日分続く。以降はスクリプトで一括生成するため、以下にジェネレーター仕様を記載。"
}

6. 一括生成スクリプト仕様

365日分を一括生成する場合、以下の情報が必要:

必須パラメータ

# 日付・干支・月齢の固定部分を365日分生成
npx tsx scripts/generate-daily-365.ts \
  --start=2026-06-01 \
  --end=2027-05-31 \
  --output=daily-365-template.json

パーソナライズ部分の結合

# ユーザーの命式と結合して完全版を生成
npx tsx scripts/generate-daily-365.ts \
  --template=daily-365-template.json \
  --birth=1991-03-06 \
  --gender=male \
  --output=daily-365-personalized.json

出力先

content/daily-advice/
├── 365-template.json              # 固定部分(日付×干支×月齢)
├── {userId}-personalized.json     # 個人ごとの365日完全版
└── compatibility/
    ├── {userA}_{userB}.json       # ふたりの相性レポート
    └── ...

付録: 月齢計算の簡易式

moonAge = (synodicMonth * ((julianDay - referenceNewMoon) % synodicMonth)) / synodicMonth
synodicMonth = 29.530588853
referenceNewMoon = 2451550.1 (2000-01-06 18:14 UTC)
moonIndex = Math.round(moonAge) % 30

この仕様は DailyMeguriScreen.tsxV3DailyMeguriData 型と prescription.tscalculateDailyCompatibility を基に設計されています。