!中の人です。ここは(最高℃)です。
次の祝日はの、今から待ち遠しいですね!
上記はnot/onのマークダウン記事に、下記の予約語を埋め込んで表示しています。。
> ![TRIVIA type="zen"]
この度は、not/on の記事本文に埋め込める動的文言の「予約語」の機能を追加したので、その仕様と使い方をまとめます。
予約語は公開時に値を焼き込まず、閲覧のたびにブラウザ側で評価されます。
同じ記事でも、開くたびに時刻・天気・挨拶などが変わる——which is the "ALWAYS ON" の由来でもあります。
1. 記法
![KEYWORD]
![KEYWORD 属性="値" 属性2="値2"]
![KEYWORD 属性="値"]内側テキスト![/KEYWORD]
- 予約語は大文字のスネークケース(例:
WEATHER_ADVICE)。 - 属性は
key="value"の半角ダブルクォート。複数指定可。 - 一部の予約語(
RANDOM/PICKなど)は開始・終了タグで候補を囲むブロック記法も使える。 - 先頭に
!を付けて![…]としているのは、Markdown のリンク[text](url)や画像との衝突を避けるため。(...)が続かない![…]は他の記法と混同しない。 - コードブロック(```)・インラインコード・SVG・埋め込み(
.embed)の中身は評価対象外。書いた文字がそのまま表示される。
空になったときの挙動
天気APIの取得失敗など、予約語の評価結果が空になった場合は fallback 属性の文字列を表示する。fallback 未指定なら直前の区切りスペースを自動で1つ詰めて、不要な空白を残さない。
![GREETING] ![WEATHER_ADVICE]
天気取得に失敗した場合 → おはようございます(末尾の空白なし)
2. ロケーション/タイムゾーンの解決
天気や最寄り駅は緯度経度、時間・挨拶はタイムゾーンが必要になる。解決順は以下の通り。
位置:![…] タグの lat/lng 属性 → geo="ask"(閲覧者の現在地・許可制) → 著者のプロフィール「既定ロケーション」 → サイト既定(未設定時のフォールバック)。
タイムゾーン:タグの tz 属性 → プロフィールの既定タイムゾーン → ブラウザの既定タイムゾーン。
プロフィールの既定ロケーション
設定画面(/settings.html)で以下を登録できる。
| 項目 | 内容 |
|---|---|
| モード | 固定座標 または 現在地を使う |
| 地点名 | 表示用ラベル(例: 調布) |
| 緯度・経度 | 固定モードの場合のみ入力 |
| タイムゾーン | プルダウンで選択 |
「現在地を使う」を選ぶと、記事を閲覧するたびに閲覧者のブラウザで現在地取得の許可が求められる(著者の設定ではなく、閲覧のたびに閲覧者の位置を使う点に注意)。固定座標を設定した場合は、閲覧者の位置情報を一切要求しない。
geo="ask" をタグに直接書いた場合も同様に、その予約語だけ閲覧者の現在地を使う。
3. 予約語カタログ
A. 時間・日付系(API不要)
| 予約語 | 説明 | 主な属性 | 出力例 |
|---|---|---|---|
![NOW] |
現在日時 | format, tz |
|
![DATE] |
今日の日付 | format, tz |
|
![TIME] |
現在時刻 | format, tz |
|
![WEEKDAY] |
曜日 | lang(ja/en), tz |
|
![SEASON] |
季節 | tz |
|
![TIMEOFDAY] |
時間帯の区分名 | tz |
|
![COUNTDOWN to="2027"] |
指定日までの残り日数 | to, label, tz |
|
![SINCE from="2026"] |
指定日からの経過日数 | from, label, tz |
format は YYYY MM DD HH mm ss M D H m s のトークンを組み合わせる簡易記法。
B. 挨拶系
![GREETING] は時間帯を6区分に分け、区分ごとにデフォルト文言を持つ。天気には依存しない。
| 区分 | 時間帯 | formal(既定) | casual |
|---|---|---|---|
| 早朝 | 4:00–5:59 | 早いですね! | よっ、早いね! |
| 午前 | 6:00–10:59 | おはようございます | おはよう |
| 昼 | 11:00–12:59 | こんにちは | どうも |
| 午後 | 13:00–17:59 | こんにちは | どうも |
| 夜 | 18:00–0:59 | こんばんは | こんばんは |
| 深夜 | 1:00–3:59 | おや、まだ起きていましたか! | まだ起きてる〜? |
属性:dawn / morning / noon / afternoon / evening / night(各区分の文言を個別上書き)、style(formal 既定 / casual)、tz。
![GREETING evening="よい夜を"]
→(夜なら)よい夜を
C. 天気・場所系(FunkApiCore 連携)
| 予約語 | 説明 | 主な属性 | 出力例 |
|---|---|---|---|
![WEATHER] |
天気テキスト | field, lat/lng, date(today/tomorrow/YYYY-MM-DD), lang |
霧雨(時々曇り) |
![WEATHER field="temp_max"] |
最高気温 | 同上 | 24.9 |
![WEATHER_ADVICE] |
天気に応じた実用アドバイス | カテゴリ上書き, priority(weather/temp/both) |
傘をお忘れなく |
![WEATHER_MOOD] |
天気の情感・ひとこと | 同上 | しっとりとした雨模様です |
![WEATHER_EMOJI] |
天気を絵文字で | lat/lng, date |
☔️ |
![PLACE] |
使用中の地点ラベル | — | 調布 |
![NEAREST_STATION] |
最寄り駅 | field(station_name/line_name/distance_meters/travel_time_minutes) |
調布 |
WEATHER_ADVICE と WEATHER_MOOD は役割が異なる点に注意。ADVICE は行動の助言のみ(「傘をお忘れなく」)、MOOD は情感のみ(「しっとりとした雨模様です」)。両方並べて使うのが基本の使い方。
![GREETING] ![WEATHER_MOOD] ![WEATHER_ADVICE]
WEATHER_ADVICE / WEATHER_MOOD のカテゴリ別デフォルト文言(clear/cloudy/rain/snow/storm/fog/hot/cold)は dyn.json で一括管理しており、著者は属性で個別上書きできる。
D. 祝日系
| 予約語 | 説明 | 主な属性 | 出力例 |
|---|---|---|---|
![HOLIDAY] |
次の祝日名 | period(next/this_month/next_month), field(name/date/list) |
山の日 |
E. ランダム・仕掛け系
| 予約語 | 説明 | 主な属性 | 出力例 |
|---|---|---|---|
![TRIVIA] |
ランダムな雑学・格言(外部API) | type(advice/zen/number), field |
焦らず一歩ずつ。 |
![RANDOM] |
候補から毎回抽選 | options="A|B|C" または ブロック記法 |
いらっしゃい |
![PICK] |
日替わり等で固定表示 | options, by(date/weekday) |
(その日の1つ) |
![FORTUNE] |
今日の運勢(日替わり固定) | set |
中吉 |
![DICE] / ![COIN] |
サイコロ/コイン(閲覧ごと) | sides |
4 / 表 |
候補の区切り記号は |(全角)。
![RANDOM options="ようこそ|いらっしゃい|どうも"]
F. not/on メタ系(API不要)
| 予約語 | 説明 | 表示例 |
|---|---|---|
![AUTHOR] |
著者ハンドル | |
![TITLE] |
記事タイトル | |
![VER] |
記事のバージョン(ver.X.X) | |
![RELATED_COUNT] |
つながり(被参照)数 |
これらはページに既に描画されている情報を読み取って表示するだけなので、追加のデータ取得は発生しない。
4. 共通属性
| 属性 | 意味 |
|---|---|
field |
取得する下位値(未指定は予約語ごとの既定) |
format |
日時の書式 |
fallback |
取得失敗・値なし時に表示する文字列 |
label |
値の前に付ける接頭辞 |
lang |
言語切替(ja/en) |
tz |
タイムゾーン |
lat / lng |
地点の直接指定 |
geo |
"ask" で閲覧者の現在地を使用(許可制) |
5. 組み合わせ例
埋め込み例:
![GREETING]。ここ![PLACE]は。
![WEATHER_ADVICE]
次の祝日はです。
今日の一言:![TRIVIA type="advice"]
出力例:
。ここは(最高℃)。
次の祝日は()です。
今日の一言:
6. エディタでの使い方
エディタのプレビューでも本文と同じ評価ロジックが動くため、公開前に実際の表示を確認できる。保存・公開時は ![…] の生の記法がそのまま本文(Markdown/HTML)に保存され、評価済みの値は保存されない。つまり公開後は毎回の閲覧時点の値が表示される。
7. 実装メモ
天気・駅・祝日の取得結果は一定時間キャッシュされ、同じ地点への問い合わせを短時間に繰り返さない。
not/on 予約語:全属性指定サンプル集
各予約語について、指定可能な属性をすべて書いたサンプルをまとめる。実際の記事では、必要な属性だけを指定すれば良い(未指定はデフォルト挙動になる)。
lat/lng(直接指定)とgeo="ask"(閲覧者の現在地)は本来どちらか一方を使うが、以下は「指定できる属性を網羅する」ためのサンプルなので両方を併記している。実際に両方指定した場合はlat/lngが優先される。
A. 時間・日付系
![NOW format="YYYY/MM/DD HH:mm:ss" tz="Asia/Tokyo"]
![DATE format="YYYY年M月D日" tz="Asia/Tokyo"]
![TIME format="HH:mm" tz="Asia/Tokyo"]
![WEEKDAY lang="ja" tz="Asia/Tokyo"]
![ERA tz="Asia/Tokyo" fallback="—"]
![SEASON tz="Asia/Tokyo"]
![SEKKI tz="Asia/Tokyo" fallback="—"]
![TIMEOFDAY tz="Asia/Tokyo"]
![COUNTDOWN to="2026-12-31" unit="days" label="今年もあと" tz="Asia/Tokyo"]
![SINCE from="2026-06-20" unit="days" label="連載" tz="Asia/Tokyo"]
B. 挨拶系
![GREETING dawn="早いですね!" morning="おはようございます" noon="こんにちは" afternoon="こんにちは" evening="こんばんは" night="おや、まだ起きていましたか!" style="formal" tz="Asia/Tokyo"]
C. 天気・場所系(FunkApiCore)
![WEATHER field="weather_text_ja" lat="35.6528" lng="139.5397" geo="ask" date="today" lang="ja" label="天気:" fallback="不明"]
![WEATHER_ADVICE clear="日差し対策をどうぞ" cloudy="空模様の変化にご注意を" rain="傘をお忘れなく" snow="足元にお気をつけて" storm="荒れ模様、外出は控えめに" fog="視界にご注意を" hot="水分補給を忘れずに" cold="暖かくしてお過ごしを" lat="35.6528" lng="139.5397" geo="ask" date="today" priority="weather" fallback="よい一日を"]
![WEATHER_MOOD clear="清々しい一日ですね" cloudy="穏やかな曇り空です" rain="しっとりとした雨模様です" snow="静かな雪景色です" storm="荒々しい空ですね" fog="幻想的な霧ですね" hot="うだるような暑さですね" cold="凍てつく寒さですね" lat="35.6528" lng="139.5397" geo="ask" date="today" priority="weather" fallback=""]
![WEATHER_EMOJI lat="35.6528" lng="139.5397" geo="ask" date="today" fallback="🌤️"]
![PLACE lat="35.6528" lng="139.5397" geo="ask" fallback="どこか"]
![NEAREST_STATION field="station_name" lat="35.6528" lng="139.5397" geo="ask" label="最寄り:" fallback="不明"]
D. 祝日系(FunkApiCore)
![HOLIDAY period="next" field="name" fallback="祝日なし"]
E. ランダム・仕掛け系
![TRIVIA type="advice" field="content" fallback="今日も良い一日を"]
![RANDOM options="ようこそ|いらっしゃい|どうも" fallback="こんにちは"]
![PICK options="月曜の話|火曜の話|水曜の話|木曜の話|金曜の話|土曜の話|日曜の話" by="weekday" tz="Asia/Tokyo" fallback="今日の話"]
![FORTUNE set="大吉|吉|中吉|小吉|末吉|凶" tz="Asia/Tokyo" fallback="吉"]
![DICE sides="6"]
![COIN]
(![COIN] は属性を持たない)
F. not/on メタ系
![AUTHOR fallback="名無し"]
![TITLE fallback="無題"]
![VER fallback="ver.1.0"]
![UPDATED format="YYYY-MM-DD" fallback="—"]
![READTIME wpm="600" fallback="約1分"]
![WORDCOUNT fallback="—"]
![RELATED_COUNT fallback="0"]
補足:共通属性の早見表
| 属性 | 用途 | 主な対象 |
|---|---|---|
field |
取得する下位値 | WEATHER / NEAREST_STATION / HOLIDAY / TRIVIA |
format |
日時の書式 | NOW / DATE / TIME / UPDATED |
fallback |
失敗・未取得時の表示 | ほぼ全予約語 |
label |
値の前に付く接頭辞 | WEATHER / NEAREST_STATION |
lang |
言語切替(ja/en) | WEEKDAY / WEATHER |
tz |
タイムゾーン | 時間・挨拶・ランダム日替わり系 |
lat / lng |
地点の直接指定 | 天気・場所系 |
geo |
"ask" で閲覧者の現在地を使用 |
天気・場所系 |