「アンパンマンDB(システム)」に関する日記(5)

<前 次>

アンパンマンDBとXdebug

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

コラムからの転記。
この程度なら毎日いっぱいやってもいいのにね。

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

リストをNULL検索できないバグを修正しました。
ただ、今のところ、何もない項目はNULLじゃなくて空文字列が入っているので、実質的に影響はありません。

Xdebug

Xdebug - Debugger and Profiler Tool for PHP
Xdebug導入しました。
すなわち、Xdebug使わない縛り辞めました。

もともとデバッガとしては、PHP標準のphpdbgを使ってました。
PHPUnitのカバレッジもphpdbgだったんですが、PHPUnit10以降(最新版は11)には使えなくて、phpdbgのために古いのを使う続けるのも厳しいなって思ってました。

カバレッジ計測の選択肢としては、PCOVもあったんですが、あんまり更新されてなさそうだったし、カバレッジ「だけ」というのもどうかと思ったので、デバッグ並びにカバレッジ計測の定番、Xdebugを導入した次第です。

そもそもXdebugを避けてphpdbgを使っていたのは、XdebugはPHP標準に入っていないというのと、カバレッジ計測が遅いという話を聞いたからだったのですが、実測してみると、今はXdebugのほうがphpdbgより1割ほど早く終わりました。

アンパンマンDB

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

昨日のふくろうおじさんの流れで今度はおじいさんを追加しました。

こっちはコラムから転記組。
元気倍率アップ系ですね。
300より200のほうが見た目豪華なのがポイント。

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

テストが不安定な問題、直接の原因は一応わかりました。
エラーコード0xC0000005(-1073741819)、アクセス違反です。
アクセス違反なら何でもこのエラーが出るので、このエラーコード一つで真の原因の特定はできません。
傾向として、カバレッジ計測なしだとエラーは起きず、計測ありのときだけエラーが出ることがあるので、カバレッジと何かの競合だと思われます。
落ちる部分のコードがやってることと言えば、同じPHPスクリプトを条件を変えて2回呼び出していることなので、ここで何らかのロックがかかってしまってカバレッジを邪魔しているのでは?と考えています。
完全解決までは、カバレッジ計測の頻度は減らすかなぁ。

アンパンマンDB

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

おそらく1話限りのゲストだと思いますが、追加しました。
こういうのって、たまたま見かけたときに書いておかないと忘れますからね。

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

本番環境では多分問題ないんですが、なんだか自動テストが不安定になっています。
最後までテストせず、エラーも出さず、急にすっと終わる感じ。
一応突然終了する地点は絞り込みましたが、別に何でもないテストをやっているようにしか見えないところなんですよね。
毎回発生するわけでもなく、なんだか不気味です。

アンパンマンDB

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

またコラムから転記。
勇気百倍はそれなりに回数あるけどアニメDBの専用カテゴリは作ってなかったな。

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

アクセス統計、直ったことが確認できました。

あと、経路別画像ってやつ、作ってます。
総合索引で、マッチした名前ごとに別々の画像を出す機能です。
同じネギーおじさんでも、「な」で探したときと、「ね」で探したときでは期待する姿が違いますからね。

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

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

アンパンマンの状態いろいろから転記。
今日はひとまずこのひとつだけだけど、変身パターンとかも含めて、この手の記事も増やしていきたいですね。

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

アンパンマンDBに限っての話ではないのですが、アクセス統計が6月ごろから全然更新されていませんでした。
まあ、一般ユーザーにもわかる範囲だと結局アンパンマンDBだけではあるのですが。
修正したんで、明日から最近のTOP10とかが動き出すかと思います。
動かなかったらまた調べます。

TGWS内部処理

同じ意図のコードなのに変数名が全然統一されてなくてコピペでコードが動かないことが多かったので、ばらばらな変数名を統一する作業をしていました。
もちろん、全部の変数は無茶なので、よく使う型の変数に限ってですが。
それでも数百ファイルはいじったかも。

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

自動テスト方面で出た問題、解決しました。
最初に作ったオブジェクトを次々受け渡していかなきゃいけないんだけど、途中で断絶しちゃっていたんですよね。
本番環境では、断絶しても最終的にデフォルト設定で再生成するから問題にはならないんですが、テストでは、テストケースごとに別オブジェクトを作るのでデフォルト設定じゃダメだったのです。

うーん、オブジェクトオブジェクト言ってても説明になってない気がするのでもうちょっと具体的に言うと、データベース接続オブジェクト(以下、DBO)です。
表示ロジックでは、表示に必要なデータはそろっている前提なので、余計なことをできないように、DBOを渡さないようにしています。
しかし、表示ロジックの最後の最後で、画像タグや記事間リンクなどのリンク処理を行うため、DBOが必要になります。
本番環境では、本番データベース以外に繋がないので、DBOをいくつデフォルト設定で再生成しても問題ありません。
テスト環境では、デフォルト設定でもテスト用データベースに繋がるのですが、テストケースごとに別々の条件に分けたいので、データベースもテストケースごとに作っています。
ここで断絶が起こると、途中までテストケースごとのデータベースだったのが、最後にいきなりテスト環境の共用データベースに繋がることになります。
最初と最後で別々のデータベースに繋がるので、テストが動かなくなるというわけです。

解決には、表示ロジックにDBOを渡さないようにしつつ、リンク処理ではDBOを使えるようにする必要があります。
このため、表示ロジック呼び出し側が、リンク処理を司るオブジェクトに適切なDBOを持たせ、表示ロジックにはリンク処理オブジェクトのほうを渡すようにしました。
リンク処理オブジェクトからDBOを取り出すことはできないので表示ロジックが悪さをすることはできません。
一方、リンク処理オブジェクトは適切なDBOを自分で持っているので、あるべきデータベースを使ってリンク処理を行うことができるというわけです。

アンパンマンワンドロとアンパンマンDB

アンパンマンワンドロ

テーマ追加しました。
提案があったやつです。
初開催のやつは確率アップしていますが、再開催のやつも確率が低いだけで普通に候補にあるので、必ずしも次の開催で選ばれるわけではないです。

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

記事一覧のメイン画像、更にもうちょっといい感じの見た目にしました。
環境によっては実感できないのですが、高解像度ディスプレイでは高解像度版の画像が表示されるようになっています。
ただ、この修正をするにあたって、自動テスト方面で問題が出たので、目下対応中です。

アンパンマンDB

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

来週の放送情報。
ねむねむおじさん地味に登場回数伸ばしてんな。

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

記事一覧と詳細画面に、メイン画像を表示するようにしました。
実はずっと前からひっそり開発し、こっそりプレリリースしていた機能なんですが、スタイルをまあまあいい感じに調整して、この度デフォルトONにしました。
ただ、更にもうちょっといい感じの見た目にしたいなーとかまだ思ってます。

アンパンマンDB

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

ユーザーから提案のあった「カツ」カテゴリの追加のついでに、全面的に加筆しました。
カツドンマンとか他の記事については、カテゴリだけの細かい修正なので個別に告知せずこっそりひっそり。
あと、揚げ物繋がりの「天ぷら」も。

こっちも情報提供の反映。

これは、字が似てて見分けついてなかったのを、ちゃんと見分けつけましたという更新。
ただ、この2つの間に、「篠原恵美子」という謎の名前の記事が存在するのですが。
どこかで見たのか書き間違えたか、更に詳しく確認する必要がありそうです。

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

「別名・別表記」にした項目、扱いをはっきりさせるため、注釈つけました。
大昔にコメントお気軽にどうぞ的なことを表示するために使っていたシステムを作り変えて、注釈の位置に出すようにしています。
なお、コメント欄のほうは、お気軽にどうぞとか言わなくてもお気軽に書いてもらっているので、注釈はつけないことにしました。

アンパンマンDB

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

あの後いろいろ調整して、ひとまず完成と言ってよさそうなところまでできたので、公開しました。
間違っているはずのSQLがなぜかテスト環境で動いてしまって、公開した瞬間エラーを起こしたりもしましたが、それも修正しました。
なお、商品DBとコラムは、索引で探すようなものじゃないとか、索引で探せるようなデータ構造にしてないとかの事情があり、総合索引の対象外としています。

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

情報量の変わらない細かい更新なので個別の告知はしていませんが、総合索引で邪魔になる、ふざけた呼び方の類を別の場所に転記しました。
あわせて、ちゃんと呼び名として成立しているものという意図を込めて、「他の呼び方」から「別名・別表記」に項目名を改めました。
今のところ、ふざけた呼び方の転記先は説明文中ですが、これもこれでデータベース化したら面白いかもしれないので、誰かから誰かの呼び方みたいな項目を作れないか、検討中です。
ただまあ、それをやるより、普通の本編&キャラ情報を充実させたほうがよさそうですがね。

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

総合索引ほぼ完成。
画像に関しては、画像詳細のページへは飛ばさず、画像も含めて記事へのリンクとして機能させるようにしました。
枠線周りの挙動も、ほぼ私の考えていた通りに実装できました。
ただまあ、「あ」でいきなり「アホラーマン」が出てきたりするので、そういうふざけたのを減らす方向でデータ側の調整が必要ですね。

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

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


総合索引の今の見た目はこんな感じ。
一記事を四角いカード状のリンクにして並べて表示しています。
カードの幅は統一するか内容量反映するか、高さは画像があるときとないときで統一するか変えるか、カード内コンテンツの縦位置は上下中央どこに寄せるか、カード内画像のリンクを記事か画像詳細どちらに向けるべきか、カード間の隙間は開けるか詰めるかカード自体を広げるか、検索対象になった文字列の表記はどうすべきか、調整したい部分はまだまだあるのです。

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

  • 【コイン】プチドラゴンをはじめて倒した!

ミフミンまだ倒しとらんかったんか。
今まで強い方とずっと戦ってたってことか。

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

総合索引作ってます。
50音順で最初の文字を選んだら、その文字で始まる記事と、文字数を増やして絞り込むリンクが表示されます。
記事は各DBを横断して検索されるため、メカを探しているつもりがキャラのところにいて全然見つからなかった、ということが起こりません。
「か」の後ろのほうにいるカレーパンマンも、「かれ」に絞り込んで素早く近付けます。
別名も認識するので、「ま」から始めても「て」から始めても、鉄火のマキちゃんにたどり着けます。
名前に特化した検索なので、名前さえ知っていれば効率よく到達できますよ。

…という、夢のような機能なんですが、この動画をアップした後、レイアウトを整えようとして、flexレイアウトでドツボにはまってしまいました。
うーん、いい感じの見た目にできそうなんだけどなァ。

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

過去回自動記入機能完成。
昔の修正忘れも検出できるので、さっそく全部修正しておきました。
この程度の修正は個別に更新履歴に出さないので、日変わりのタイミングで今日の細かい更新として告知されます。

アンパンマンDB

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

来週の放送情報。
胸にCマークのヒーロー見習いコンビだ!

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

過去回自動記入機能作成中。
アンパンマン公式サイトでは、「じかいよこく」として公開された各エピソードのページは、本放送終了後から「おはなし」にアーカイブされるのですが、このときにURLも変わるんですよね。
アンパンマンDBでもそれに追随してリンクを張り替える必要があるのです。
まだ作成途中ですが、試作段階でも過去の差し替え忘れを検出できていたりしていて、なかなか優秀な予感がします。

アンパンマンDB

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

#アンパンマンのキャラクター」を追加しました。
「#アンパンマンキャラクター」と意味的にかぶるタグですが、少数ながら「の」付きのハッシュタグも利用されているようです。

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

誰も気付いてないと思うんですが、ストリクトクエリにバグがありました。
リスト形式の項目に対して、textの検索を行うと、エラーが発生していました。
既に修正したのでエラーは出ないですが、例えば「chara:text:like:%」とか。
内部で使っている識別子が「text」じゃないのに「text」をそのまま使おうとしたのが原因でした。
もしかしたらペアリストにも同じバグあるかもしれないから後で調べておこう。

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

アンパンマンDBの検索時の順序指定って実はコンマ区切りで複数指定できるのですが、それを記入できるインターフェースがなく、URLで直接指定するしかありませんでした。
今回、「指定された順序で」を選ぶと、記入フォームが出現するようにしました。

サンプル:検索結果「無条件」 | アンパンマンアニメDB

この例だと、キャラ数が多い順、キャラ数が同じなら日付が新しい順になります。

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

コメントミュート機能、だいたいできあがり。
結局やけくそ無理やり設計になりました。
やけくそ無理やり設計になった影響で、昨日発生した根本的な設計ミスよりも修正範囲が莫大になりました。
ということで、動作テストは念入りに。
リリースは明日ですね。

<前 次>