好奇心の赴くままに。気になったことを、気ままに深掘り

WordPressで桜や雪を降らせる方法|季節で自動切替する軽量プラグインを自作

春は桜、夏はクローバー、秋は紅葉、冬は雪の結晶。

ブログのトップページに、季節に合わせて自動で変わるエフェクトを付けてみました。しかも紅葉は、本物の木と同じように10月は緑、11月に黄色やオレンジ、11月末に真っ赤と、日付に合わせて少しずつ色づいていきます。

この記事では、その仕組みと、作ってみてわかったことをまとめます。

この記事でわかること

  • 季節で自動切替するエフェクトの仕組み
  • 紅葉を「暦どおり」に色づかせる方法
  • 重たいライブラリ(p5.js)なしで軽くするコツ
  • テストでは動いたのに本番で動かなかった、1.6pxの落とし穴
  • コードが書けない素人でも、AIとならここまでできるということ
AD – 読み進める前のひとやすみ

完成イメージ:4つの季節が自動で巡る

期間舞うもの色のイメージ
3/15〜4/20🌸 桜の花びらやさしい桃色〜赤みのあるピンク
4/21〜10/14🍀 クローバー黄緑〜緑
10/15〜12/23🍁 紅葉緑 → 黄 → オレンジ → 赤 → 枯れ葉色
12/24〜3/14❄️ 雪の結晶白っぽい水色

クリスマスは雪のイメージなので、紅葉は12月23日でおしまいにしました。

サイトを開いた日付をブラウザが確認して、その日に合った季節のものが舞います。一度設置したら、1年中ほったらかしでOKです。

前回のHTMLブロック版から何が変わった?

以前、HTMLブロック1つで季節のエフェクトを付ける方法を紹介しました。

【WordPress】HTMLブロック1つで、LINE風の背景エフェクトを実装(季節の演出)プラグインは不要。WordPressの『カスタムHTMLブロック』1つで完結。LINEのトーク画面の背景エフェクトのような、桜や紅葉が舞う演出を自分のブログで再…

今回はそれを育てて、プラグインにしました。

前回(HTMLブロック版)今回(プラグイン版)
設置方法HTMLブロックにコピペプラグインを有効化
季節の切り替え自分で書き換える日付を見て自動
紅葉の色固定暦に合わせて変化
使うライブラリp5.js(約1MB)なし(約17KB)
表示する場所ブロックを置いたページトップページだけ

いちばん大きな変化は、重さが約60分の1になったことです。

💡 たとえるなら
前回は、葉っぱを数枚落とすために「画材一式が入った大きな道具箱」を毎回運んでいた状態。
今回は「必要な筆1本だけ」を持っていく形に変えました。

1つの季節だけで十分な方や、プラグインを増やしたくない方は、前回のHTMLブロック版もまだまだ使えます。

紅葉を「暦どおり」に色づかせる仕組み

本物の紅葉はいつ色づく?

紅葉は、最低気温が8℃を下回るころから色づき始め、5℃前後まで冷え込むと一気に赤くなると言われています。

大阪の平地なら、だいたいこんなスケジュールです。

時期葉の様子
10月中旬までまだ緑
10月下旬〜11月上旬黄色っぽく色づき始める
11月中旬オレンジ混じり
11月下旬〜12月上旬真っ赤(見頃)
12月中旬以降赤黒くなり、茶色い枯れ葉に

ちなみに、箕面や京都の名所は11月中旬〜下旬が見頃。気象庁の大阪の「カエデの紅葉日」の平年値は12月初めごろです。

「色のカレンダー」を作って、間を埋める

コードの中に、日付と色のセットを並べた色のカレンダーを作りました。

const MOMIJI_KEYS = [
  { m: 10, d: 15, h: 100, s: 70, b: 85 }, // まだ緑
  { m: 11, d:  1, h:  55, s: 75, b: 95 }, // 黄色く色づき始め
  { m: 11, d: 15, h:  28, s: 85, b: 95 }, // オレンジ
  { m: 11, d: 28, h:   5, s: 90, b: 90 }, // 真っ赤(見頃)
  { m: 12, d: 10, h:   0, s: 85, b: 72 }, // 深紅
  { m: 12, d: 23, h:  25, s: 55, b: 50 }, // 枯れ葉色
];

h は色合い(100が緑、55が黄色、0が赤)、s は鮮やかさ、b は明るさです。

カレンダーにない日、たとえば11月8日は、11月1日(黄色)と11月15日(オレンジ)のちょうど間くらいの色を計算で出します。

💡 たとえるなら
絵の具の「黄色」と「オレンジ」を、日付の進み具合に合わせて少しずつ混ぜていくイメージです。

葉っぱ1枚ずつに「個性」を付ける

全部の葉が同じ色だと、なんだか作り物っぽく見えます。

そこで、葉っぱ1枚ずつに「±7日」のずれを持たせました。早く色づくせっかちな葉もあれば、のんびり緑のままの葉もある、という具合です。

おかげで、11月上旬なら黄色・オレンジ・まだ緑の葉が混ざり、本物の木を見上げたときのような雰囲気になりました。

季節の切り替えは「設定表」1つで管理

4つの季節は、1つの設定表にまとめています。

const SEASONS = [
  { name: 'sakura', from: [3, 15],  to: [4, 20],  scale: [0.3, 0.7],
    color: (p) => ({ h: p.random(330, 350), s: 35, b: 100 }) },
  { name: 'clover', from: [4, 21],  to: [10, 14], scale: [0.08, 0.12],
    color: (p) => ({ h: p.random(70, 125), s: 70, b: 100 }) },
  { name: 'momiji', from: [10, 15], to: [12, 23], scale: [0.8, 1.2],
    color: (p, date) => momijiColor(p, date) },
  { name: 'snow',   from: [12, 24], to: [3, 14],  scale: [0.05, 0.15],
    color: (p) => ({ h: p.random(180, 200), s: 25, b: 100 }) },
];
項目意味
from / to始まりと終わりの日付(月, 日)
scale大きさの範囲(形の元データの大きさがバラバラなので、ここで調整)
color色の決め方

「桜をもう1週間長く見たい」と思ったら、to: [4, 20] を to: [4, 27] に変えるだけです。

雪の結晶は彩度(s)を低めの25にしているので、水色というより白っぽく光る雪になります。

年をまたぐ冬だけ、ちょっと工夫

冬は「12月24日〜3月14日」と年をまたぐので、そのままでは判定できません。

そこで、日付を 1224 や 314 のような数字に変えて比べています。「始まりより大きい、または終わりより小さい」なら冬、という判定です。

AIと作ってみてわかったこと

ここからは、AIと会話しながら作った体験談です。

⭐ いちばん伝えたいこと

この記事に出てくる技術的な工夫は、ほとんど私が最初から知っていたことではありません。AIが教えてくれたことです。

私は年金生活の、いわば素人のおばちゃんです。コードを一から書くことはできません。

それでも、ほんの基本の基本さえわかっていれば、AIと会話しながら、プロが作るようなものに手が届く。今回いちばん驚いたのは、そこでした。

私が知っていたこと(基本の基本)AIが教えてくれたこと
HTML・CSS・JavaScriptが何をするものか紅葉の色を日付で混ぜていく計算
SVGのpathは「形のデータ」だということp5.jsを使わずに Path2D で軽くする方法
WordPressのプラグインは「機能を足す部品」プラグインのファイル構成と、トップページだけで動かす書き方
「なんか固まって降ってくるなぁ」という違和感その原因(最初の配置と、同じ速さ)
「季節で変わったら素敵やなぁ」という思いつき年をまたぐ冬の判定、120Hz画面での速さ補正、「動きを減らす」設定への配慮

左の列は、どれも「なんとなく知っている」程度のことです。でも、この左の列があるからこそ、AIの説明が理解できて、「じゃあこうしたい」と相談できました。

今回も、始まりは「紅葉っていつ色づくんだっけ?」という、ただの雑談でした。

1. p5.jsは「試作用の道具」だった

最初はp5.jsという描画ライブラリで作りました。p5.jsは、思いついたことをすぐ形にできる、試作にとても向いた道具です。

ところが、プラグインにする段階でAIから「ブラウザに最初から入っている機能(Canvas2D)だけで書き直せますよ」と提案されました。

正直、Canvas2Dは「ややこしい」というイメージがありました。でも実際は、いちばん複雑だった部分がまるごと不要になったんです。

// SVGの形データをそのまま渡すだけで描ける
const shape = new Path2D(PATHS.momiji);
ctx.fill(shape);

以前は、SVGの形データを1文字ずつ読んで点を打つ関数(約40行)が必要でした。それが、ブラウザ標準の Path2D にお任せで済むようになりました。

💡 学んだこと
試作は手軽な道具で、完成形は軽い道具で。p5.jsで動きを決めておいたからこそ、「軽くするだけ」の作業で済みました。

2. スマホで葉っぱが固まって降ってくる問題

スマホで見ると、葉っぱがかたまりになって降ってくるのが気になりました。

原因は2つありました。

  • 最初の配置:葉っぱを「画面2つ分」の範囲にばらまいていたのに、落ちて戻る1周は「画面1つ分+余白」。はみ出した分が重なって、密集地帯ができていた
  • 落ちる速さ:全員が同じ速さなので、密集がずっと崩れない

💡 たとえるなら
回転寿司のレーンに、レーン2周分のお皿を一度に置いたようなもの。重なったお皿は、同じ速さで回り続けるかぎり、ずっと重なったままです。

最初の配置を「1周分」に収め、落ちる速さを1枚ずつ少し変えたら、自然にばらけるようになりました。

3. テストでは動いたのに、本番で何も降らない(1.6pxの落とし穴)

これがいちばんの学びでした。

このエフェクトには、スクロールして見えなくなったら止まる省エネ機能があります。ページの上のほうに目に見えない「センサー」を置き、それが画面から消えたら止める仕組みです。

HTMLファイルでのテストは完璧でした。ところが、AIがプラグイン版を実際のブラウザで動かして確認すると、何も降ってこないのです。

原因は、センサーに付けていた margin-top: -0.1rem(少しだけ上にずらす指定)でした。

  • テスト用HTML:ブラウザが最初から付けるすき間(8px)があったので、上にずらしても画面内に収まっていた
  • プラグイン版:ページのいちばん上に置かれるので、1.6pxだけ画面の外にはみ出していた

その結果、ページを開いた瞬間に「もうスクロールして通り過ぎた」と判断され、エフェクトが止まっていたのです。

💡 学んだこと
「テストで動いた」と「本番で動く」は別物。置く場所が変わると、たった1.6pxで結果が変わることもあります。

今はセンサーを「ページ上部の1画面分の見えない帯」に変えたので、1画面分スクロールすると止まり、上に戻るとまた舞い始めます。

プラグインの中身

プラグインは、3つのファイルだけのシンプルな作りです。

kk-season-fall/
├── kk-season-fall.php   ← WordPressへの登録係
├── season-fall.js       ← 季節の判定と、舞い落ちる動き
└── season-fall.css      ← 表示位置の設定

PHPファイルの役目は、「トップページのときだけ、JSとCSSを読み込む」ことです。

add_action( 'wp_enqueue_scripts', function () {
	if ( ! is_front_page() ) {
		return; // トップページ以外なら、何もせず帰る
	}
	// ここでJSとCSSを読み込む
} );

! is_front_page() は「トップページではないなら」という意味です。トップページ以外ではファイルすら読み込まないので、他のページの表示速度には影響しません。

細かい配慮も入れました

「動きを減らす」設定の人には表示しない

パソコンやスマホには、画面の動きを控えめにする設定があります。目が疲れやすい人や、動きで酔いやすい人が使う設定です。この設定がオンの人には、エフェクトを表示しないようにしました。

画面の更新速度が違っても、同じ速さで落ちる

最近のiPhoneなどは、1秒間に120回画面を書き換えます(一般的な画面は60回)。何も対策しないと、120回の画面では葉っぱが2倍速で落ちてしまいます。そこで、前回からの経過時間を測って速さを補正しています。

日付を変えて確認する方法

11月や12月まで待たなくても、見た目を確認できるようにしています。

URLの後ろに ?koro-date=日付 を付けると、その日の表示になります。

まとめ:WordPressはやっぱり楽しい

  • 季節の切り替えは、日付と設定表で自動化できる
  • 紅葉は色のカレンダーと1枚ずつの個性で、本物らしく色づく
  • 試作はp5.jsで、完成形はCanvas2Dで、約1MB → 約17KBに
  • 「テストで動いた」を過信しない。1.6pxで結果が変わることもある

「紅葉っていつ色づくんだっけ?」という雑談から始まって、気づけばプラグインが1つできていました。

この記事に書いた工夫のほとんどは、AIが教えてくれたものです。私に必要だったのは、基本の基本の知識と、「こうしたい」という思いつきだけでした。

コードが書けない素人のおばちゃんでも、プロ仕様のものに手が届く。

WordPressとAIの組み合わせは、やっぱり楽しいです。

そして、自分のサイトに季節が巡るのは、思った以上にうれしいものです🍁

紅葉が真っ赤になる11月末に、ぜひ当ブログのトップページものぞいてみてください。

最後まで読んでいただき、ありがとうございました🍵