さくらの一言アドバイス — 365日フォーマット仕様
九条流算命学に基づく「今日の巡り」コンテンツを365日分生成するための データスキーマ・生成ルール・相性分析の仕様。
目次
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: false1-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)の生成ロジック
- 五行関係 → その日のベーストーン(行動/受容/内省/整理/表現)
- 天中殺 → true なら「無理に動かず」「内なる声に耳を澄ます」
- 月齢 → 満月付近は「表現・発散」、新月付近は「内省・種まき」
- 守護神活性 → 不足五行を補う日なら「今日は〇〇が整う日」
4-4. advice(さくらの一言)の生成ロジック
- 上位のトーン(五行関係)を決定
- 具体的な 1つのアクション を title に
- 2つの補足 を lines に
- 巡の祖母・さくららしい口調:
- 「〜してみるといい」
- 「〜は、あとで自分を助けてくれる」
- 「無理に〜しない。ただ〜」
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.tsx の V3DailyMeguriData 型と
prescription.ts の calculateDailyCompatibility を基に設計されています。