とある会社に転職したエンジニアが、訳わからんDBを理解しようとして作ったツール


あらすじ

とある会社に転職した、ぺちぱーのぺーさんは、まず最初に担当するWebアプリケーションについて
ざっくりとした説明の後、ドキュメントを教えてもらいました。
しかし、いざドキュメントを見てみると開発環境の作り方しか書いていなく、
しかも陳腐化しているため信憑性が微妙なものでした。
「さて困ったぞ」
しかし、エンジニアなので、なんとかしようとするもの。
何とかしようとしたぺーさんの最初に作ったツールのお話です。
※この話は数年前にあった実話を元にしたフィクションです。

最初の仕事で壁に当たる

研修を終え、会社のビジネスを知ったぺーさんは、まず簡単な機能開発をする事になりました。
内容は都道府県別のリストで出しているものをグルーピングして表示すると言った内容です。
(この←の部分です)

こんなのすぐできる、そう思った数分が僕にもありました。
意外な所で時間がかかってしまうのです。

このデータはどう作成しているのだろう

こういう時、view側でDOMの個数を計算するなんて事はあまりしないと思います。
まあ普通に考えてこの表示になるようにするのはviewにfetchしている変数があるはずなので
その変数を作成する時に一緒に変数を作っちゃえって思いました。
なのでController側を見てデータを抜き出している所までざーっと追ってみました。
しかし、ここでなんとかのパラドックスに出会います。

謎のwhere句に翻弄される

データを取得しているのは、hoge_containersというテーブルと言うのがわかったので、そのクエリを参照します。

SELECT id, name FROM hoge_blocks WHERE pref IN ('愛媛県', '香川県', '徳島県', '高知県') AND hoge_block_type_id = 1 AND deleted IS NULL;

なるほど、hoge_blocksを見ればいいのか。
よしよし、databaseを見てみよう。うん。こうとってきているので、戻り値にprefをつけてあげて、それでグルーピングしてあげればいいね。
ところでこのhoge_block_type_id=1ってなんだろう??
まあとりあえずhoge_block_typesってテーブルを見ればわかるか。見てみよう!

mysql> select * from hoge_block_types;
ERROR 1146 (42S02): Table 'm9(^Д^).hoge_block_types' doesn't exist

ない・・・?どういう事だろう・・・?idだよな・・・?

常識が通用しないパターンに出会う

結局、この後ソースコードに記載を見つけるのですが、結局こう言う話でした。

const JAPAN_HOGE_BLOCK_TYPE   = 1; // 日本のhoge block type
const ANOTHER_HOGE_BLOCK_TYPE = 2; // 日本以外のhoge block type

なるほど・・・。ソースコードにしかないのか・・・。

DBの中身を調べなきゃ。

結局この後も似たようなケースで、どこにどんなデータが入っているのかよくわからない状態が続きます。
これはあかん。無理や。テーブルの構造が想定外のものが多い。
なぜなら、この時1つのdatabaseに200以上のテーブルがあり、何がどのように関わっているのかわからないからです。

DBの中を見るツールはいっぱいあっても、どこに設定されているかって案外わかんないですよね。
(ER図あれば楽なんですけどねー。)

CREATE文検索ツールを作ったら

CREATE文出してくれる便利なアプリないかなーってドラクエ3で言う所の、とうぞくのカギを手に入れるくらいの時間探したけど見つからない・・・。
桃鉄で言う所の最初の急行カードを使うくらいの時間悩み、作る事を決意。
適当なCSSと適当なDB接続を使い、パパッとDB検索ツールを作成しました。

こんな感じ。で、ここに検索したい文字入れると、

こんな感じにこの単語に引っかかるテーブルを教えてくれる。

一応びよーんって伸びてCreate文を教えてくれます。。

お粗末なローカルでしか動かないWEBアプリケーションですが、
これを作って少しだけ楽になりました。

その後

訳わからんDBを理解する事は未だに出来てはいませんが、こうやって少し調べながらなんとかやっています。
こういうツール作ると捗るものもありますよね。
ただ、もう使ってないや。