タロット占いを作った。問題はカードだった
ヨルシルベに「タロット占い|今日の一枚」を追加した。大アルカナ22枚から一枚を引く、シンプルなタロット占い。
機能そのものを作るだけなら、それほど大掛かりではない。問題はカードだった。
せっかくヨルシルベでやるなら、一般的なタロット画像ではなく、「ヨイが大アルカナ22枚すべてに登場するオリジナルのタロットカード」にしたかった。
そこで画像生成AIを使って、0「愚者」からXXI「世界」まで、22枚を一枚ずつ制作することにした。
そうでもなかった。
ヨルシルベのカードなら、ヨイに出てほしい
ヨイはヨルシルベのオリジナルキャラクター。黒から深紫の毛、小さな金色の目、額の三日月と星。そして、だいたい眠そうで、あまり興味がなさそうな顔をしている。
もう二つ、大事な特徴がある。耳のような器官は、頭頂部に一本と左右に垂れた二本。尻尾は二本。
この特徴を、テーマも構図も違う22枚すべてで維持する。それが今回の本題になった。
大アルカナを、一枚ずつ作る
同じヨイが登場しても、カードごとの意味と景色は必要になる。一度にまとめて完成させたのではない。生成し、確認し、修正し、再生成し、採用する。その繰り返しだった。
- 0 愚者 / THE FOOL
- I 魔術師 / THE MAGICIAN
- II 女教皇 / THE HIGH PRIESTESS
- III 女帝 / THE EMPRESS
- IV 皇帝 / THE EMPEROR
- V 教皇 / THE HIEROPHANT
- VI 恋人 / THE LOVERS
- VII 戦車 / THE CHARIOT
- VIII 力 / STRENGTH
- IX 隠者 / THE HERMIT
- X 運命の輪 / WHEEL OF FORTUNE
- XI 正義 / JUSTICE
- XII 吊るされた男 / THE HANGED MAN
- XIII 死神 / DEATH
- XIV 節制 / TEMPERANCE
- XV 悪魔 / THE DEVIL
- XVI 塔 / THE TOWER
- XVII 星 / THE STAR
- XVIII 月 / THE MOON
- XIX 太陽 / THE SUN
- XX 審判 / JUDGEMENT
- XXI 世界 / THE WORLD
耳が減る。尻尾が増える
画像生成を続けると、ヨイが少しずつ変わった。頭頂部の一本が消える。垂れた耳の形が変わる。尻尾が二本から三本になる。顔つきが別のキャラクターになる。
後ろ姿では身体構造が崩れ、カードのテーマが明るければ、ヨイまで急に楽しそうになる。放っておくと、普通の猫にも近づいていった。
一枚だけ見れば綺麗でも、並べると別人なら採用できない。制作中は何度も同じ確認に戻った。耳は3本、尻尾は2本。最後の一枚まで、それは変わらなかった。
綺麗にできても、ヨイでなければ戻す
愚者 / THE FOOL
身体は後ろ向きで、頭だけこちらを見る構図にしたかった。最初は身体と尻尾の位置関係が不自然だったため、尻尾が正しい位置から出るように調整。身体は後ろ向き、頭だけ30〜45度ほど振り返る形に落ち着いた。

恋人 / THE LOVERS
ヨイの尻尾が三本になった。画像としては綺麗だった。でも、ヨイの尻尾は二本なので修正した。綺麗かどうかと、キャラクターとして正しいかは別だった。
戦車と隠者
戦車は、最初の猫系の動物から白豹と黒豹が戦車を引く構図へ変更。隠者は耳の形を直そうと生成を重ねたものの、最終的には一つ前の画像を採用した。回数を増やせば必ず良くなるわけでもない。


正義 / JUSTICE
制作を続けるうちに、ヨイの顔が基準デザインから離れてきた。そこで基準画像を改めて参照させ、顔と頭部を戻した。特徴をテキストで指定し続けるだけでなく、戻る場所になる画像を持っておくことが重要だった。
太陽と世界
太陽では、カードの意味に引っ張られてヨイまで明るく楽しそうになった。だがヨイは、世界が明るかろうが暗かろうが通常運転。「太陽の下でも眠そうなヨイ」へ戻した。
最後の世界でも、壮大な景色につられて顔と頭部が変わり、楽しそうになった。基準画像を参照し、「世界が完成していても、ヨイ本人は別に興味がなさそう」な顔へ戻した。


原本と、Webで配る画像を分ける
完成画像は1024×1536のPNGで保存した。これはWeb配信用ではなく、将来また使うためのマスター。画像生成AIから得た完成画像を、そのまま公開用ファイルにはしなかった。
Web版は768×1152のWebP、品質84。描き直しや構図変更を伴うトリミングはしていない。原本を残しておけば、公開側だけを用途に合わせて作り直せる。
| 用途 | 形式 | 22枚合計 |
|---|---|---|
| 原本 / MASTER | 1024×1536 PNG | 60,022,377 bytes / 約57.2 MiB |
| Web配信 | 768×1152 WebP / 品質84 | 5,701,454 bytes / 約5.44 MiB |
Web版は一枚あたり約227〜301 KiB。22枚合計では、原本から約90.5%小さくなった。
22枚あっても、22枚送る必要はない
タロットページを開いた時点で、カード画像のリクエストは0件。ユーザーがカードを引き、結果が決まった後に、選ばれた一枚だけを読み込む。
画像が全部で約5.44 MiBあることと、一回のページ表示で5.44 MiBを転送することは別の話だ。存在する画像容量と、その場で必要な転送量は分けて考えた。
引いたあとに、1枚だけ。
22画像で、正位置と逆位置の44結果
大アルカナ22枚には、それぞれ正位置と逆位置がある。結果は44通りになるが、画像を44枚作ったわけではない。
管理する画像は22枚。逆位置では同じ画像をCSSで180度回転して表示する。画像を複製せず、正位置と逆位置の見た目を両方作った。
利用者から見える仕様は「1日1枚」「同じ日は同じカード」「翌日になると新しく引ける」。結果を選ぶ内部処理は、ここでは扱わない。
静かなまま、カードをめくる
画面は、カード裏面から始まる。カードを引くと反転し、選ばれた大アルカナと占い結果が現れる。派手にしすぎず、ヨルシルベの静かな雰囲気を壊さない程度の動きにした。動きを減らす設定にも対応している。
画像には幅768、高さ1152を明示し、2:3の領域を先に確保。object-fit: containで絵を切り抜かずに表示する。保存済みカードの復元も初回描画前に行い、再訪時のレイアウトシフトを抑えた。
PC 1440px、スマートフォン390pxと320pxで確認し、横スクロールなし、CLSは0。カードのaltには名称と正位置/逆位置を含め、たとえば「愚者(THE FOOL)逆位置のタロットカード」と読めるようにした。
基準へ、何度でも戻る
生成AIで同じキャラクターを大量の画像に登場させるとき、一枚ずつ綺麗に作るだけでは足りなかった。
綺麗でも耳が違う。構図が良くても尻尾が増える。カードらしくても、ヨイらしくない。だから基準となるデザインを持ち、生成のたびにそこへ戻って確認する。
22枚を自動で一気に作ったわけではない。生成、確認、修正、再生成、採用。その手順をカードごとに繰り返した。
耳は3本、尻尾は2本。
作ったので、実際に使われるところを見る
カードは完成し、タロット占いにも組み込んだ。各結果にはメッセージ、注意点、今日の一手、ヨイの一言がある。
次に見るのは、実際にどのくらい使われるか。22枚を作る時間は長かったが、一日に出るのは一枚だけ。その一枚が、誰かの今日を少し考えるきっかけになればいい。