「アンパンマンDB」に関する日記

アンパンマンDBの、主に開発に関する日記。

次>

アンパンマンDB

アンパンマンDB(記事更新)

バイキンメカ情報追加。

昨日の件へのデータ側からの対応として、リンクがない項目の記事化を進めていて、その中で実は記事が既にあるけど名前が違っていてリンクされていなかった項目がこれ。
他の完全新規になる記事は、数が多いのと、あくまでリンク用でほとんど中身がないので、ひっそりこっそり更新です。

アンパンマンDB(システム)

管理メモの未記入スタッフ、大幅に機能拡張しました。
もともとリンクがない項目を見つけ出すためのページだったのですが、どこに記入された項目なのか、いくつ記入されているのかがわかるようになり、記入の優先順位をつけやすくなりました。

キャラ倉庫とアンパンマンDB

キャラ倉庫

とりあえず、統計用のリクエストは問題なく記録されている模様。
AIとも検索ともつかないよくわからないロボットが徘徊しているけど、統計への影響はないし、Metaみたいに狂った大暴れをしないのでひとまずは放置。
そろそろちゃんと記事の更新をして、統計をする意味がある状態を作っていきたいなァ。

アンパンマンDB(みんなのタグ)

なんかまたおかしなのが増えてきている模様。
本当はユーザー側で自主的にどうにかしてほしいけど、なんかまた対策考えるかなぁ。

アンパンマンDBとキャラ倉庫とJC-GP20XBK

アンパンマンDB(記事更新)

来週の放送情報。
そうめん…残暑だからまだ季節か。

キャラ倉庫

Bot対策しつつアクセスログから人気のページを集計するための仕組み、作ってみました。

(技術的な話)
mw.hook('wikipage.content').add(function () {
    const id = mw.config.get('wgArticleId');
    if (id === 0) {
        return;
    }
    const d = new Date().getTime();
    setTimeout(async () => {
        try {
            const url = '/a.md?' + id + '-' + d + '-' + (new Date().getTime());
            await fetch(url, { method: 'HEAD' });
        } catch (error) {
        }
    }, 5000);
});

グローバルスクリプトのMediaWiki:Common.jsに処理を書くことで対応しています。
このスクリプトでやるのは、集計に使えるリクエストをサーバーに送ってアクセスログに残させるところまでです。
実際の集計は、後日、これとは別に作ります。

まず前提として、ここではJavaScriptを使って行います。
私の個人的なこだわりとして、JavaScriptを使わずに済むなら使わずに済ませたいのですが、MediaWikiの時点でJavaScript使いまくっているので、相対的にデメリットは少ないかなと。
そして、Botはページ本文だけ見に来て、JavaScriptの実行まではしないことがほとんどですからね。

mw.hook('wikipage.content')は、コンテンツロード後に関数が発動するする仕組みです。

で、最初にページIDを取って、有効なページのときだけ処理を進めるようにしています。
特別ページなど、記事じゃないページを集計しても仕方ないですからね。
ちなみに、このMediaWiki:Common.jsのページも記事IDを持つ立派な記事なので、みんながこのスクリプトを見に行くと、スクリプトが人気ページになります。
まあ、これは今後実際に集計する仕組みを作るときに除外すればいいだけの話かな。

処理が進んだら、時刻を記録してタイムアウトを仕込んで、サーバーにリクエストを送ります。
このときのリクエスト先URLは、できるだけ短い名前にした静的ファイルのa.mdに、パラメータでページIDとタイムアウト前後の時間を加えています。
URLに時刻を含めることで、リクエストせずキャッシュからレスポンスが返るのを防ぎつつ、URLと実際のリクエスト時刻を照合してリクエストの整合性を検証できるようにしています。
タイムアウト仕込む前とタイムアウト後の時刻両方を含むので、ちゃんと待ったかどうかの検証もできます。
Botが昔見つけたURLをもう一度叩いても期限切れなので意味がないというわけですね。
もちろん、人間のアクセスでも、ちゃんと読まずに一瞬で通り過ぎた場合は集計対象になりません。
なお、ただのタイムスタンプなので明確な悪意があれば偽装は容易ですが、そんなことする意味もないので、偽装するやつはいないという想定です。

ちなみに、わざわざ有効な静的ファイルを用意しているのは、MediaWikiの手を煩わせないためです。
静的ファイルがあればそれを直接読むように設定してあります。
もしファイルを置かなければ、MediaWikiに処理が渡り、a.mdというありもしない記事を探した挙句、本来必要のないエラーログを残して404エラーを出すことでしょう。
そうさせないための、静的ファイルです。

そして、サーバーへリクエストを送る際は、HEADメソッドで送ります。
目的はあくまでも「リクエストを送ること」までなので、レスポンスは要らないし、ましてやリクエスト先のコンテンツなんかも全く必要ありません。
なので、コンテンツを返さないHEADメソッドが無駄がなくてよいということになります。
厳密に言うと、レスポンスヘッダは返ってきますが、不要なので受け取らずに捨てています。
Botはむしろリクエスト先の中身が欲しいので、GETメソッドでリクエストするでしょうが、HEADメソッドではないので集計対象にはしませんし、もちろんリクエスト先のa.mdの中身は無意味なものしか入っていません。

一応、a.mdの中身は下記リンクから見えるようにしておきますが、本当に意味のないことしか書いていませんし、これを読んだところで人気ページ集計には寄与しません。
a.md

というわけで、まとめると、こうなります。

  • 文字化け対策:ページIDを使って確実にページ特定
  • Bot対策:時刻をパラメータに含めて検証&普段使わないHEADメソッドでリクエスト
  • 負荷対策:静的ファイルにHEADメソッドでリクエスト

JC-GP20XBK(ゲームコントローラ)

なんかPCが一挙手一投足ごとにタスク切り替えだのゲーム起動画面だのが出てきておかしいなと思ったら、ゲームコントローラが誤作動していました。
USBケーブル差しなおしたら改善したので、どうやら繋ぎっぱなしだったケーブルが外れかけて接触不良を起こしていたようです。

アンパンマンDBとX-Robots-Tag

アンパンマンDB(記事更新)

はい、前回のを正式な情報に修正して、最新DVDの情報も入れました。
秋号はたぶんイレギュラーないかと。

X-Robots-Tag(Today I Learned)

Robots meta タグ、data-nosnippet、X-Robots-Tag の設定 | Google 検索セントラル  |  Documentation  |  Google for Developers
X-Robots-Tag ヘッダー - HTTP | MDN
最近キャラ倉庫やらDQPEの関係で外部からアクセスしてくるロボットの挙動を制御する必要が出てきて、調べていたら出てきた概念がこれ。
HTTPヘッダにX-Robots-Tagを付けて返すことで、HTMLのMETAタグに頼らずロボットの挙動を指示できるというやつです。
もちろん、METAタグと同様に、無視するロボットは無視しますし、なんなら比較的新顔で、標準化すらされていないので、METAタグより強制力は劣るものとみられます。
しかし、METAタグの書けない非HTMLコンテンツにも付けられますし、robots.txtより個別に細かく指定できます。
今からすぐに対応する必然性はなさそうですが、ちょっと存在だけは覚えておこうかと。

アンパンマンDBとドラゴンクエスト10のプレイヤーイベントを検索および通知するサイトと浮き沈みランチャー2

アンパンマンDB(記事更新)

来週の放送情報。
これは終始楽しい夏まつりになりそう。

ドラゴンクエスト10のプレイヤーイベントを検索および通知するサイト

ここもロボットが変なアクセスしがちなので、キャラ倉庫ほどじゃないけど、統計が程よくなるような調整を準備中。
今のところ、調整で変なバグが発生しないようにテストを整えたところです。

浮き沈みランチャー2

開発また滞っていますが、また改善したい部分が。
検索してから実行すると、次に画面を開いたときも検索結果が出るのですが、一度実行したものを何度も連続で実行することは少ないし、そもそも仕組み上、実行した項目は上に上がってくるから検索の必然性は減るし、画面を開くときは表示状態を毎回リセットしたほうがいいかなって感じました。
前作はこの辺の仕様どうだったかな…。

アンパンマンDBとキャラ倉庫

アンパンマンDB(記事更新)

なんか面白そうなバイキンメカ見かけたので。

キャラ倉庫

とりあえず、例の行儀悪いbotはCloudflareのブロック機能で弾いても来るのやめないので、あえてrobots.txtだけ許可して、どこも見るなって名指しの指示だけ見えるようにしておきました。

# 行儀の悪いbotは拒否
SetEnvIfNoCase User-Agent "meta-externalagent" bad_ua=on
RewriteCond %{ENV:bad_ua} on
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^(.*)$ - [F,L]
User-agent: meta-externalagent
Disallow: /

さて、普通に書いたrobots.txtを無視しやがるあいつが従ってくれるか…。

アンパンマンDBとドラゴンクエスト10とバイオハザード レクイエム

アンパンマンDB(記事更新)

来週の放送情報。
再放送ですな。

ドラゴンクエスト10(しろいコキン)

古代オルセコ闘技場に落ちてる武具

  • クエスト「仮面のバトルマスター/剣となる者」をクリアした!

バトマスクエ完了。
写真は道中に落ちてたやつで、クエストとは関係ありません。

(一応ボスネタバレ)

闘士セインズ
再戦セインズ君。
昨日と同じノリで舐めプしてたら地味にダメージが蓄積してきたんで、最後は一気に倒しました。

ブランドンビースト
黒幕さんの愛玩動物ブランドンビーストちゃん。
あんまり舐めプできるような余裕もなさそうなので、即座に殴りました。
まあ、レベル差もあるんで、普通に戦えば、普通に一方的。

他の写真は以下から。
写真置き場「2026/08/14」

バイオハザード レクイエム

2026_08_14_23_40_45.png
新しい血液検体ゲット!
他に特に進展はないです。
そろそろストーリー進めたいな。
レクイエムの弾量産できるようになったからボス戦は近いと思うけど。

音声の録音は、設定調整などしたので、だいぶ聞こえやすくなりました。
まあ、その分私自身の活舌の悪さもクリアに聞こえるようになっちゃいましたが。

他の写真は以下から。
バイオハザード レクイエム(2026/08/14)の画面写真集

アンパンマンDBと手柄山温室植物園とドラゴンクエスト10

アンパンマンDB(記事更新)

最近の放送に出てたので。

手柄山温室植物園


先日手柄山平和公園行ってたときに見かけたけど時間の都合で見送ってたやつ。
食虫植物展やってました。
常設の温室は、先日までの地獄のような酷暑を思い出す暑さでした。
いつぞや行った水族館と同じく、地元に寄り添った展示もありました。

ドラゴンクエスト10(しろいコキン)

ジェイコフ

  • クエスト「仮面のバトルマスター/バトリンピック・予選編」をクリアした!
  • クエスト「仮面のバトルマスター/バトリンピック・決勝編」をクリアした!

4年近くも放置していたバトマスクエ、進めました。
バトリンピックの選手たち、全員一撃で沈んでいった…。
敵のバトマスは今でもすてみ使うのね。

本当はバトマスクエ最後まで終わらせるつもりでしたが、持ち物がいっぱいになってしまったため中断です。

他の写真は以下から。
写真置き場「2026/08/13」

美文のキャラ倉庫と浮き沈みランチャー2とアンパンマンDB

美文のキャラ倉庫

様子見ながら記事いくつか更新。
修正が必要ない記事なら「移行作業中」カテゴリを外すだけなので、今後はもっと早く多く修正できると思います。
一応こうやって更新情報は列挙できるけど、一度に多くに記事を修正することになるし、一つ一つの細かい報告はしないほうがよさそうですね。

浮き沈みランチャー2

とりあえず、軽めだけど見た目の印象が大きく変わる2件を対応。

完了を待たずに閉じる件は、以下のように、明示的にHideしてから、投げっぱなしasyncしています。

private void OnContextRunAsAdminClicked(object? sender, RoutedEventArgs e)
{
    if (GetSelectedItem() is { } item && DataContext is MainViewModel mainVm)
    {
        Hide();
        mainVm.ExecuteItemAsync(item, runas: true);
    }
}
internal async void ExecuteItemAsync(Item item, bool runas = false)
{
    await Task.Run(() => ExecuteItemCore(item, runas));
}

private void ExecuteItemCore(Item item, bool runas = false)
{
    // 省略
}

スクロールのほうは、単純にScrollViewerで囲っているだけです。

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" AllowAutoHide="False">
  <!-- 省略 -->
</ScrollViewer>

アンパンマンDB(記事更新)

来週の放送情報。
公式サイトは「フルーツのしま」名義だったけど、前例や放送された次回予告からすると、「フルーツ島」のほうが正しいはず。
確実な正解は次週を待て!

アンパンマンDBとドラゴンクエスト10と美文のキャラ倉庫と日記

アンパンマンDB(記事更新)

リンクにげんき100ばい!マーケットを追加しました。
公式のオンラインショップです。
DVDとかの円盤系はなくて、ぬいぐるみや雑貨とかのグッズ系が中心ですね。
絵本もあるけど原作はなくて、書籍目的なら書店のほうが良さげ。

ドラゴンクエスト10(全員)

水やり
第25回アストルティア★ハッピーくじ「アストルティア14周年お祝いくじ」 (2026/8/3更新)|目覚めし冒険者の広場
くじの結果が出たので、商品引き換えしてきました!
今回の参加賞は、水やりのしぐさです。
カメラが近付くとじょうろだけ消えるので、何か悪いことに使えそう。

他の写真は以下から。
写真置き場「2026/08/03」

美文のキャラ倉庫(MediaWiki)

ifという制御構造が入る以上、プログラミングなわけで、Wikiのマークアップ言語ではなくプログラミング言語のLuaで書くのが正攻法だったのです。
そうすれば、Wikiルールの余計なものが入るのも防げるのです。
…という方向で、修正中。

日記

共有ボタン、表示するようにしました。
こんな感じのHTMLになっています。

<a class="cp" href="javascript:navigator.clipboard.writeText('2026年8月3日の日記 https://tgws.plus/diary/20260803');" title="タイトルとURLをコピー">コピー</a>

まあ、昔ながらの、hrefに「javascript:」入れるやつです。
もっときれいにやる方法はもちろんあるんですが、機能しなくても困らないおまけみたいなボタンなんで、あんまりこだわる必要はないかなーと。

アンパンマンDBとスーパーカービィハンターズとドラゴンクエスト10

アンパンマンDB(記事更新)

同じ日に登場した2人追加。

スーパーカービィハンターズ


ログボでちまちま貯めたリンゴで強化続けてました。

ドラゴンクエスト10(ミフミン)

ムーロンとメローラ

  • クエスト「夏の恋は嵐のごとく」をクリアした!

ミフミンも海イベント行って、これで全員分完了!

だいおうキッズ
最初タコメットで行ってたんだけどタコメット被りすぎてグダグダになってしまいました。
周回はだいおうキッズで行くとスムーズでした。

他の写真は以下から。人間だと変態になってしまう…。
写真置き場「2026/08/01」

このあと14周年もあるけど、それは明日の日記で。

アンパンマンDBとドラゴンクエスト10と美文のキャラ倉庫

アンパンマンDB(記事更新)

来週の放送情報。
可愛い組み合わせと神秘の組み合わせですな。

ドラゴンクエスト10(しろいコキン)

オトナなビキニ

  • クエスト「夏の恋は嵐のごとく」をクリアした!

しろいコキンも無事クリア。
うーんセクシー…?

マリンスライム
バトルはいろんなモンスターを試してみました。
前回のヒトデのほうがやりやすかったなーと思ったり。

他の写真は以下から。
写真置き場「2026/07/31」

美文のキャラ倉庫

ひとまずWordPressにあるデータはすべて移行できるようになりました。
ただ、ここからカテゴリ自動登録とかの仕組みも作っていきたいので、実際の移行までにはもうちょっとかかりそうです。
土日にできたらいいなァ。

謎に広い間が開く件については原因が分かったのでセクションを改めて。

MediaWiki

HTMLのtable要素の中でMediaWikiのifを使うと、trタグを生成しなかったときに、何もない空行ではなく、「何もない」がある有効行として扱われ、何も表示しないパラグラフを生成してしまっていたのでした。

<table class="wikitable">
{{#if:{{{正式名称|}}}|
<tr><th>正式名称</th><td>{{{正式名称|}}}</td></tr>
}}<!-- 正式名称がないとき、<p><br></p>が生成される -->
</table>

で、table要素の中に直接パラグラフがあるのは違反だから、外に追い出されて謎の空白を生み出していたというわけです。
とりあえずtableタグも含めて全部1行に押し込めると行うんぬんの話が根本から消滅するので一応は解決なのですが、それじゃ読みにくくてしゃーないんですよね。
もっといい解決法考えたいものです。

アンパンマンDBと美文のキャラ倉庫

アンパンマンDB(記事更新)

情報提供の反映など。

美文のキャラ倉庫

画像インポートの仕組み作った!
もちろんMediaWiki自体にもインポート機能はあるんだけど、WordPressの作る画像データをMediaWikiに入れやすい形式に整えてやるというのをやっとかないと、いらん画像が増えますからね。

で、インポートはうまくいったんですが、記事に画像が表示されません。
なんか間違ってんのか…。

アンパンマンDBとドラゴンクエスト10と美文のキャラ倉庫とTGWS内部処理

アンパンマンDB(記事更新)

来週の放送情報。
SLマンとコキンちゃんは昔順序逆のやつがあったらしい。

ドラゴンクエスト10(おきがえリポちゃん)

あぶない浴衣
[DQXショップ] おきがえリポちゃん ~ あぶない浴衣 ~ (2026/7/22)|目覚めし冒険者の広場
いつもの月例貸衣装。
浴衣の片側が大きくはだけてインナーが丸出しになっている服。
ちなみに男はインナーなしなので片乳丸出しです。

あぶない浴衣
うーん、確かにこれは危ない男…。

他の写真は以下から。
写真置き場「2026/07/24」

美文のキャラ倉庫

モジュールを読み込んでくれない問題、XMLからモジュールをインポートしてたんですが、そこでのモデルとフォーマットの指定が通常の記事と同じだったので、モジュールじゃなくて記事扱いされていたのでした。
移行用プログラムを修正してScribuntoとして取り込まれるように修正しました。
そしてもう一つ、Luaの実行用バイナリに実行権限がついていなかったのも一因でした。
Windowsめぇ…。

TGWS内部処理

とりあえず、致命的な問題はなさそうなので、PHP8.4に上げてみました。
うーん、事前調査で出なかったDEPRECATEDがいっぱい出てたぞ…。

アンパンマンDBとドラゴンクエスト10

アンパンマンDB(記事更新)

解説・感想のネタバレ部分追記。
映画館で直接観て書くのはこれでいったん区切りとします。
あとはDVD発売後かなー。
過去作もDVD発売後に追記とかできてないのがあるし、そっちのケアもしたほうがいいかな?

ドラゴンクエスト10

ウェディの日ウェディの日ウェディの日
7月20日(海の日)は「ウェディの日」! (2026/7/13)|目覚めし冒険者の広場
昨年もやってましたが、ウェディ無料変身。

アンパンマンDBと美文のキャラ倉庫

アンパンマンDB(記事更新)

来週の放送情報。

美文のキャラ倉庫

データ移行の一環で記事追加。
オカルト研究室はPukiWikiにもなかった完全新規ですが、設定は定まっていません。
これで進捗98%!
残りは文面も調整しないといけないやつ!

MediaWiki用コンバータも作成中。

アンパンマンDBと美文のキャラ倉庫

アンパンマンDB(記事更新)

バイキンメカ」を追加しました。
結構使われてる!

虹の星が原曲そのままじゃなかったのでそのあたりの追記です。

美文のキャラ倉庫

WordPressに情報追記。
77%まで進んだ!

バイオハザード レクイエムとアンパンマンDB

アンパンマンDBとドラゴンクエスト10

アンパンマンDB(記事更新)

来週の放送情報。
映画のテレビ放送後編です。

ドラゴンクエスト10(ミフミン)

Amazon.co.jpにて『ドラゴンクエストX 時空の迷い子たち オンライン』をご予約いただいた方へ
昨日の件、どうやらKonozama(Amazonがokじゃない現象)だったようで、Amazonにお問い合わせしたらアイテムコード送ってもらえました。
このお知らせは逆の現象のことだったみたいですけどね。
ということで…

時の妖精のフード
不審者だ!

エンゼル皇帝の冠
変態だァ!

特典アイテム、貰えました。

ドラゴンクエスト10(しろいコキン)

デスマシーン ヴァーミリオンボム
毎月10日はDQXで遊ぼう! ~みんな一緒に福の神まつり~ (2026/7/3)|目覚めし冒険者の広場
そして今日はテンの日!
福の神メダルいっぱいもらえたので行ってきました!
なのになぜ写真が福の神じゃなくてデスマシーンなのかって?
福の神終えて香水が余ったから適当なコインボスでもと思って……福の神倒すことしか考えてなかった低レベルの職で…………行っちゃったんですよねぇ。
まあ前回のデスマシーン特化サポが残っていたから実質3人討伐でどうにかなったんですけどね。

他の写真は以下から。
写真置き場「2026/07/10」

アンパンマンDBとTGWS内部処理

アンパンマンDB(記事更新)

#映画アンパンマンあるある」を追加しました。

TGWS内部処理

バイオ9以外のページにも画像の新システム入れました。
余計なタグが付いちゃってたとか、たまにキャッシュ生成失敗してずっとエラーファイル返し続けるみたいな問題を見つけたので、そのあたりは修正しています。

次>