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

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

次>

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

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

来週の放送情報。

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

コニーちゃん
しろいコキンのバージョン3開始!
3オープニングの六種族の祭典わりと好きなんで王族の方々とゆっくりお話ししていたら時間がっ!
ムービーは日を跨ぎそうな感じです。

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

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

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

コメント欄も、連打対策入れました。
本当はレンタルDVD情報のほうも更新したかったんだけど、またなんかイレギュラーがありそうな感じ…。

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

プレイベ情報取得の安定性向上の前に、現状の計測。
不安定になってないところを必死に安定性上げてもほぼ効果ないですからね。
とりあえず、今向かっている方向性で安定性はちゃんと向上しそう。

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

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

変なタグが多い問題についてはまだ解決に向かってないですが、ボタン連打対策を一つ入れておきました。
いっぱい押すこと自体の対策というよりは、チャタリングや誤操作で送信が二重にならないようにする対策です。
だから、意味のないタグに連続で入れるのに対しては効果はないんですが、シンプルに操作感が良くなるやつです。
これでうまくいきそうなら他の二重送信が気になるところにも順次入れていきたいところ。

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

ダラズ大鉱脈
バージョン4.3、ドワチャッカ過去篇、始めました!
今回は防砂ダムまわりからスタートみたいですね。

(ボスネタバレ)

古代ウルベア魔神兵たち

  • 【シナリオ】ウルベア魔神兵たちをはじめて倒した!

現代で防砂ダムを突き進んだら見覚えのあるボスが大挙して出現!
戦歴には「ウルベア魔神兵たち」って出てますが、正式名称は古代ウルベア魔神兵です。
いっぱい出てくる分、一機一機は弱かったんですが、火力はちょっとあった気がします。

他の写真は以下から。永遠のガテリア号もあるよ!
写真置き場「2026/09/29」

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

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

来週の放送。
周年記念ですな。

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

おきがえリポちゃん ~ シンクギアウェア ~
[DQXショップ] おきがえリポちゃん ~ シンクギアウェア ~ (2026/9/24)|目覚めし冒険者の広場
今月の貸衣装。
なんか一部で頭にお弁当箱とか言われてた模様。

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

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

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

予定通り、「#メロンパンナ誕生祭2026」追加です。

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

リリィアンヌ

  • クエスト「幸運を呼ぶサロン/2人のクライアント」をクリアした!

物騒なことしようとしてるように見えるけど、武器をしまい込んでるだけです。
せっかくなので髪色クエスト全部クリアしました。
このクエスト以降に追加された髪色はほぼ課金かな。

アサナギ

  • クエスト「悪夢より来たるもの/いにしえの呪文」をクリアした!
  • クエスト「悪夢より来たるもの/夢見る男のお宝伝説」をクリアした!

また物騒なことしようとしてるように見えるけど、武器をしまい込んでるだけです。
アサナギくん大活躍のクエスト2連発。
ミフミンで過去にやったので細かいことはいまさら語らないですが…と言いたいところだったけどいにしえの呪文のほうは過去日記が見つからなかったので語っちゃおう。
夢に関するクエストでは毎度毎度変顔をアップで見せつけられるのですが、今回は顔を隠す服装(というか覆面)だったのでセーフ。
ボスはまあ、焼け付く息を吐いてきたこと以外に特に印象はなかったかな。
ちなみに、エルフだとアサナギくんの反応が変わると聞いたんですが、プクリポだとドガ(夢見る男のお宝伝説のドワーフ)に対するのと大して変わらない淡白な反応でしたね。
ナシームの洞くつで迷いに迷いまくったのが今回一番大変なところでした。

他の写真は以下から。ボス戦も。
写真置き場「2026/09/21」

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

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

「#ロールパンナ誕生祭2026」を追加しました。
結構毎年のやつですね。
例年通りならメロンパンナも2日後に来るかな。

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

ドラゴンクエスト10のプレイヤーイベントを検索および通知するサイト
メールログイン機能を公開して、RC2版になりました。
何がRCなのかもはやよくわかりませんが、今回はログイン機能自体と、メール通知登録画面の自動記入に絞って実装しています。
あんまり一度に多くをリリースしようとすると差分確認が大変…というか、順次リリースしていきたい機能もあるんでね。

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

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

来週の放送情報。
ドキンちゃん、昔も氷の女王につかまってなかったっけ?

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

お月サマー

  • クエスト「神の月の感謝祭2」をクリアした!

二人とも秋イベントクリアした!
これで今回の季節イベントは全キャラおしまいかな。

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

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

ドラゴンクエスト10(ァォィョッュ)

秋の装いのオルフェア

  • クエスト「神の月の感謝祭2」をクリアした!

秋イベント「神の月の感謝祭2」 (2026/9/10)|目覚めし冒険者の広場
秋イベント、ひとまずァォィョッュで行ってきました。
お祭りスタッフ、前回と全く同じミスをしている…?

2026秋イベント庭具と衣装
今回の新規報酬はぽんぽこ装備。
後ろから見ると尻尾もあります。
ァォィョッュには青く染めたほうがいいかな、とも思ったけど、今の黄色も青の補色となって引き立ててくれるかもしれない。

お月サマー
お月サマー、盛り上げたらもっと派手な格好にならなかったっけ?
逆に脱げていくんだったかな?
ともかく、いい感じに収集アイテムも手に入ったので、ァォィョッュの分はひとまずこれで終わり。

他の写真は以下から。尻尾とか他の家具庭具の写真もあるよ。
写真置き場「2026/09/17」

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

商品DBの抜け漏れデータの記入中。
本当はプリちぃ★ビーンズのデータ集まったんでそれも記入しようかと思っていたんですが、そこまでは手が回りませんでした。

ユーザー機能とPHPUnitとアンパンマンDB

ユーザー機能

動作確認できたので、リリース。
ちなみに、Twitter側の連携済みアプリ一覧からは消えませんでした。

PHPUnit(TGWS内部処理)

PHPUnit、バージョン10から一気に最新の13まで上げました。
前回はコードの修正がまあまあ大変だったのですが、今回はテストコードのほうは一切変更なしで動きました。
ただ、設定のデフォルト値などが変わって、カバレッジの設定がphpunit.xmlに入っていると、カバレッジなしで実行するにはコマンドライン側で--no-coverageを明示してやらないと一切動いてくれなくなりました。
あとは、PHPUnitが内部的に使っているsebastianbergmann/diffが、うちで使っていたバージョンと競合して、一緒にバージョンアップしなきゃいけないぐらいですね。

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

個人メモの自動保存、リリースしました。
ただ、使い方の説明とかがまだ一切ないので、(preview)は外さないでおきます。
一応今のところは快適。

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

情報提供の反映。

浮き沈みランチャー2とアンパンマンDBとユーザー機能

浮き沈みランチャー2

自分用で使ってて気になったところの修正。
同じダイアログをいくつも出せちゃったりしてたんですよねぇ。
本来はそれを防ぐ仕組みがあったのですが、先日のメインウィンドウ閉じる対応で、潰れちゃってました。
ということで、別のやり方でほぼ同じ機能を再現しました。

Desktop?.Windows.Where(w => w is ItemEditWindow).ToList().ForEach(w => w.Close());

やってることは割と簡単で、同じ種類のウィンドウが一覧にあったら先にそれを閉じるという対応。

var existingAboutWindow = Desktop?.Windows.FirstOrDefault(w => w is AboutWindow);
if (existingAboutWindow is not null)
{
    existingAboutWindow.Hide();
    existingAboutWindow.Show();
    return;
}

消す必要がない場合、既にあるのを使いまわして再表示しています。
ウィンドウをアクティブにするならActivateメソッドで良さそうと思ったのですが、うまく機能しなかったので、Hide→Showの力業で前面に出しています。

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

今更ながら、個人メモの自動保存に着手。
このあたり、AIにやらせてみたらいろいろ考慮されたコードが出てきました。
入力内容の自動保存なんて世界中のいろいろなサービスがやってることだから、定番の方法も確立されてたんだろうなァ。
問題なさそうならこのままリリース、問題あったら手直しってところですね。

ユーザー機能

Twitterトークン無効化の実装はしたけど、動作確認してないので未リリース。

ユーザー機能とアンパンマンDB

ユーザー機能

Twitterログイン、死んで久しいけど、有料API買ったし、復活できるかも。
昔いろいろ厳しくなったときにアプリごと消しちゃったのでアプリ作り直しからだけど。
2023年に潰れてたっぽいけど、あの頃のソースコードは動くかな…。

アンパンマンDB

商品DB、今はほぼ作品と直結するDVDやCDの情報がほとんどだけど、ぬいぐるみとかのグッズ情報も需要あるかな。
とりあえず、私も買ってて店頭でもよく見かけるプリちぃ★ビーンズで試してみるか。

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

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

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

ドラゴンクエスト10(ァォィョッュ)

情報屋ザップ

  • クエスト「ジェニャの未来/黄金のパラディン」をクリアした!

やりかけで放置してたクエスト進行。
情報屋ザップさん、もしかして怪しげな裏ワザとかいろいろ知ってたりしません?

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

浮き沈みランチャー2とPHP8.5とアンパンマンDB

浮き沈みランチャー2

余白、限界まで詰められるようになりました。

<Setter Property="Padding" Value="0" />

やったのはこれだけ。
リストボックス側の外の余白を0にするっていう対応です。
あ、でもインポート画面のほうは忘れてたかも。

PHP8.5

TGWS本体のPHPのバージョンを最新の8.5に上げました。
コードの中身のほうはまだまだ8.4仕様ですが、簡単で効果高そうなところから手を付けて行こうかなと思っています。

アンパンマンDB

コメントのルールちょっと追記しました。
「リクエストにはお応えできません。」の一文です。
まあ、昔から応えていなかったけど、改めて明文化です。

アンパンマンDBと日記

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

来週の放送情報。
おじさんが…赤ちゃん!?

日記

管理側の機能ですが、JavaScriptを使って日記の情報をTwitter用にコピーする機能があって、それに記載する画像情報をもっといい感じにする修正を行いました。
1日に複数の作業を行った場合、全然違うジャンルの画像が出てきて、それをTwitterに貼り付けるわけですが、ALTに小見出しも自動で付けるようにして、ジャンルをわかりやすくしました。
まあ、そんな今日に限って画像一枚もないんですがね!

(せっかくなので、該当部分のソースコードでも)
function copyArticleInfo(id) {
    var article = document.getElementById('diary-' + id);
    if (!article) return;
    var titleElem = article.querySelector('.diary-title');
    var title = titleElem ? titleElem.textContent : '';
    // perma-linkクラスのaタグからURL取得
    var permaLinkElem = article.querySelector('a.perma-link');
    var url = permaLinkElem ? permaLinkElem.href : '';
    // 日付取得と「○○日の日記」生成
    var timeElem = article.querySelector('time.diary-date');
    var diaryLabel = '';
    if (timeElem && timeElem.dateTime) {
        var date = new Date(timeElem.dateTime);
        var month = date.getMonth() + 1;
        var day = date.getDate();
        diaryLabel = month + '月' + day + '日の日記。';
    }
    // 直前の見出しを画像titleに前置(details内は除外)
    var headingText = '';
    var images = [];
    Array.from(article.querySelectorAll('h3, img')).forEach(function (el) {
        if (el.closest('details')) {
            return;
        }
        if (el.matches('h3')) {
            headingText = el.textContent.replace(/\(.*$/, '').trim();
            return;
        }
        if (el.tagName !== 'IMG') {
            return;
        }
        var imgTitle = el.title || '';
        images.push({
            src: el.src, // 絶対URL
            title: headingText ? ('【' + headingText + '】' + imgTitle).trim() : imgTitle
        });
    });
    var data = {
        content: url + "\n" + diaryLabel + title,
        images: images
    };
    var json = JSON.stringify(data, null, 2);
    navigator.clipboard.writeText(json);
}

結構地道にforEachで回してます。
クエリセレクタでやろうとすると思ったよりややこしいパズルになってしまったんで。

アンパンマン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

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

次>