not/onNOT DONE, ALWAYS ON

not/onのTIPs:予約語で動く文言を埋め込む

ver.3.1

中の人です。ここ(最高℃)です。
次の祝日は、今から待ち遠しいですね!

上記はnot/onのマークダウン記事に、下記の予約語を埋め込んで表示しています。。

> ![TRIVIA type="zen"]

この度は、not/on の記事本文に埋め込める動的文言の「予約語」の機能を追加したので、その仕様と使い方をまとめます。

予約語は公開時に値を焼き込まず、閲覧のたびにブラウザ側で評価されます。

同じ記事でも、開くたびに時刻・天気・挨拶などが変わる——which is the "ALWAYS ON" の由来でもあります。


1. 記法

![KEYWORD]
![KEYWORD 属性="値" 属性2="値2"]
![KEYWORD 属性="値"]内側テキスト![/KEYWORD]

空になったときの挙動

天気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

formatYYYY 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(各区分の文言を個別上書き)、styleformal 既定 / 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_ADVICEWEATHER_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](最高![WEATHER field="temp_max"]℃)。
![WEATHER_ADVICE]

次の祝日は![HOLIDAY](![HOLIDAY field="date"])です。

今日の一言:![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" で閲覧者の現在地を使用 天気・場所系


関連記事

この記事のつづきにあたる記事 | not/onのTIPs:予約語で動く文言を埋め込む その2GREETING]! 中の人 です。ここ PLACE]は WEATHER](最高 WEATHER field="temp max"]℃)です。 WEATHER ADVICE]、また、次の祝日は HOLIDAY]の HOLIDAY field="date"]、今から待ち遠しいですね…not/on

今回の機能追加のベースになっているライブラリ | not/onの開発メモ:FunkApiCore編not/on の公開記事をより、 止まらせず(NOT DO NE)、動く(ALWAYS ON) ものにするため、ダイナミックな記事生成のパーツを検討する。 funkApiCore は、これを実現するにあたり、 not/on エンジンが呼び出すライブラリとして作成する。 not/o…not/on

not/onのChangelogはじめに SAY handle="anti frame" side="left"] not/onの見た目や機能がコロコロ変わるからわかりにくいな /SAY] SAY handle="inside human" side="right" name="なかの人"] このページに集約し…not/on

not/onのread.me:自走する記事を公開できるSAY handle="inside human" side="left" name="なかの人"] GREETING]。なかの人です。 このページはnot/onのread.meとして、コンセプトなどをまとめています。 /SAY] https://noton.youside.me…not/on

not/on