仕様書


●サービスの目的について

サービス名:フラグメントペット


個人サイトに住みつく、ドット絵のへんなヤツ。

サイトの情報断片を食べて育ち、似たにおいのする個人サイト同士をゆるくつなぐ。


一番の目的は、個人サイト管理者同士がつながること。

SNS的なタイムラインやフォロー文化ではなく、昔の個人サイト・WEBリング・足あと文化に近い、ゆるい交流を目指す。


AI連携はしない。

PHPとDBを使い、無料サーバーや低コストなサーバーでも動かせる軽い構成を目指す。


●設置方法について

管理者が自分のサイトアドレスを登録する。

登録後、発行された表示用リンクやタグを自分のホームページに貼る。


自サイト以外の登録を完全に防ぐのは難しい。

ただし、確認用タグを貼ってもらい、サーバー側がそのタグを確認することで、

「そのサイトを編集できる人だけが本登録できる」形にする。


表示方法は、古い個人サイトにも貼りやすい形を優先する。

例:

・バナー型

・簡易ウィジェット型

・リンク型


操作ボタンは基本的に置かない。

クリック、タップ、長押しなどで反応する。


●ペット作成について

キャラクターは、ドット絵のへんなヤツ。

初代たまごっちくらいの簡単な動きにする。


最初に断片パーツを組み合わせて1体を作る。

体、目、口、飾り、色などのパーツを組み合わせる。


画像パーツではなく、文字記号をキャンバス上に自由配置して作る方式にする。

1行の顔文字ではなく、等幅セルに並べる文字絵でもなく、文字記号をパーツとして座標指定で置いていく。

小さなキャンバス上に、記号の断片を貼り合わせたような生き物を作る。


生成したペットは画像化する。

初回生成時に、文字記号パーツをキャンバス上へ自由配置し、その結果をPNG画像として保存する。

以後の表示は、そのPNG画像を使う。


これにより、表示時の処理を軽くし、閲覧者環境によるフォント差や配置崩れを避ける。

外部サイトへの貼り付け、バナー表示、対戦画面でも同じ画像を使える。

例:

・記号

・括弧

・点

・線

・カタカナ

・ひらがな

・全角記号


文字記号方式の利点:

・画像制作の負担が少ない

・サーバー負荷が軽い

・古い個人サイト文化と相性がよい

・「断片を組み合わせて生まれた」感じが出る

・表示環境に合わせてサイズを変えやすい


文字記号方式にする場合、フォント差で見た目が崩れすぎないように注意する。

サービス側で指定したWebフォントを使う。


目と口は必須。

どんなに変な形でも、目と口があることでペットとして認識できるようにする。


ペットクリエイトはランダム生成ではなく、管理者が自分で組み立てる方式にする。

基本操作は、記号を選ぶ、サイズを選ぶ、キャンバス上に置く、決定する、だけにする。

記号そのものを複雑に加工せず、大きくしたり小さくしたりする程度に留める。

一度置いた記号は、あとから選択して移動できる。

選択中の記号には枠を出し、右下に小さいハンドルを表示する。

ワードの図形のように、その右下ハンドルをドラッグしてサイズ変更できるようにする。


文字記号方式の生成ルール例:

・キャンバスサイズを決める

・文字記号パーツを座標指定で配置する

・体の外形を記号のまとまりで作る

・目を2つ配置する

・口を1つ配置する

・余白や模様を少し入れる

・PNG画像として保存する

・生成後の見た目は固定する


見た目の成長はなし。

生まれた見た目は固定で、その子の個性になる。


初回に、自サイトのジャンルタグを最大5つ食べる。

このタグが、近しいサイト間交流の鍵になる。


タグは、散歩先や対戦相手の選定に使う。

似たタグを持つサイト同士が出会いやすくなる。


見た目の生成にもタグを少し反映してよい。

ただし、処理が重くならないよう、生成は初回のみ。



●ペットの持つステータスについて

名前

誕生日

飼育歴

健康度

タグ(最大5つ)

勝利数

対戦数

勝率


飼育歴は、誕生日からの経過日数。

見た目には影響しないが、称号・セリフ・趣味活動・散歩報告などに使える。


成長は見た目ではなく、内部ステータス・称号・セリフ・対戦記録などで表現する。

公開ステータスとして重要なのは勝率。



●行動について


12:00から10分ほど

ごはん(確定 前のごはんからHP更新があったかだけを見る)


12:10~13:00

趣味活動(ランダム)


13~17時の間で一時間

さんぽ-確定 訪問先のWEB情報を拾ってくる


●ごはんについて

12:00から10分ほど、ごはん時間になる。

前回のごはんからホームページ更新があるかを見る。


更新がある場合:

家に新しい情報があるので、それを食べる。

健康度を維持、または少し回復する。


更新がない場合:

家にごはんがないため外食する。

外食は健康度を下げる原因になる。


外食パターンはランダム。

・外食中

・コンビニ弁当

・配達ごはん


外食中の場合は、置き手紙を残して画面からいなくなってもよい。


健康度の増減:

・更新ありの家ごはん 健康度 +3

・更新なしの外食 健康度 -3

・連続外食2日目以降 追加で -1

・健康度の上限は100、下限は0


健康度は急に大きく上下させない。

毎日更新していると少しずつ良くなり、更新がない日が続くと少しずつ悪くなる。


●HP更新判定について

更新量は見ない。

「更新あり」か「更新なし」だけを判定する。


基本は、管理者への質問でよい。

「前回のごはんからHPを更新しましたか?」という、したか・していないかの自己申告を中心にする。


勝率のために嘘をつくことも技術的には防がない。

厳密な監視より、ペットを気に掛けることで、管理者が自分のホームページを見る習慣ができることを優先する。


自動判定を入れる場合も、補助的な扱いにする。

サーバーに負担をかけない方法を優先する。

登録URLのHTMLを軽く取得し、前回取得時のハッシュと違うかを見る。


判定は1サイトにつき1日1回まで。

ごはん前に判定できれば理想だが、無料サーバーなどで定期実行が難しい場合は、

その日の最初のアクセス時に遅延実行してもよい。


手動の「更新した」申告も用意する。

トップページに変化が出ない更新、画像だけの更新、別ページの更新などは、

管理者が手動で申告できるようにする。


負荷対策:

・1サイト1日1回まで

・取得サイズに上限を設ける

・タイムアウトを短くする

・script、style、コメントなどは判定から除外してよい

・必要なら、判定対象にする範囲をHTMLコメントで指定できるようにする


判定に使う情報:

・last_checked_at

・last_content_hash

・last_update_detected_at

・manual_update_reported_at


ごはん時の判定:

前回ごはん以降に更新があれば家ごはん。

更新がなければ外食。



趣味活動リンク

・本を読む

・運動


●さんぽについて

1日1回、13時~17時の間で1時間さんぽに出る。

その間、ペットは画面から姿を消す。


戻ってくると、他のサイトを訪問してきたことを報告する。

報告から、そのサイトへ飛べる。

報告文は「ただいま。〇〇さんのおうちにいってきた。[サイトに行く]」のようにする。

サイトを「おうち」と呼ぶことで、個人サイト同士を訪ねる感じを出す。


訪問先は、タグが近いサイトを優先する。

ただし、完全固定にならないようランダム性も入れる。


実際にペットが相手サイトへHTTPアクセスする必要はない。

DB上で「訪問した」扱いにする。

ユーザーが報告リンクを押した時だけ、実際に相手サイトへ移動する。


訪ねたペットだけではなく、訪ねてきたペットの情報も見られる。


●ステータスについて

からだ:ぱわふる 91~100(勝率+20%)

からだ:ばっちり 71~90(勝率+10%)

からだ:ふつう 51~70  (勝率+0%)

からだ:へろへろ 30~50(勝率-10%)

からだ:もうだめ 0~29(勝率-20%)


※勝率補正は、実際の勝敗にそのまま加算しない。

「健康なペットが少し有利」くらいにとどめる。


●かじりあいバトル

基本的に50%で勝負が決まる


互いのペットが持つ健康度を少しだけ反映する。


勝率 = 50 + (自分の補正 - 相手の補正) / 4


例:

ぱわふる vs ふつう 55%

ぱわふる vs もうだめ 60%

へろへろ vs ばっちり 45%

もうだめ vs ぱわふる 40%


長期的には、HP更新をまめにして健康度を保っているペットが少し勝ちやすい。

ただし、単発の勝敗はほとんどランダムで決まる。


●プロトタイプについて

PHP化の前に、静的HTML/CSS/JavaScriptで挙動確認用プロトタイプを作る。

場所:prototype/


画面サイズは横200×縦300。

この小さい画面の中で完結する。

外部の大きな管理画面に頼らず、ペット表示、最低限の操作、ペットクリエイトを小窓内に収める。


プロトタイプで確認すること:

・文字記号をキャンバス上に自由配置してペットを作る

・ペットはランダムではなく、自分で組み立てる

・記号を大きくしたり小さくしたりして配置する

・生成したペットをPNG画像として保存し、以後は画像として表示する

・名前とタグを保存する

・健康度、飼育歴、勝率を表示する

・ごはんの自己申告で健康度が増減する

・趣味活動を表示する

・さんぽ中は画面から消え、戻ってきたら訪問先を報告する

・情報かじりあいバトルの勝敗を試せる


プロトタイプはDBを使わず、ブラウザのlocalStorageに保存する。

本実装ではPHPとDBに置き換える。


もどる