【個人開発】backupの大事さを学んだ土日
結論 管理者画面にてdumpを自動化します
「アクセスフラッシューーーーーーーーーー!」
SSSS.GRIDMAN 響裕太 引用
ども、こんにちはこんばんは「ひろむ」です。
この放送はYDのひろむが自身の成長過程や生き様、アニメやプログラミング、日常を切り取ったエンタメや楽しさ、
ワクワクをお届けする放送チャンネルとなっています。
冒頭の名言はアニメ「SSSS.GRIDMAN」響裕太 引用
さて、本日もひろむの日常チャンネル始めていきたいと思います〜
最近わたくしひろむはstand.fmでの出現率が激減していますよね?
そうなんです、現在新しいアニメとの出会いの場を提供するサービス「あに族」の個人開発にかなり集中しています!
その中で色んな問題や課題が発生しているわけなのですが、本日はですね、個人開発の話で「アニメのデータ全部消えて死にかけました」という話をしていきたいと思います〜(少しプログラミング的な話が入ります🙇♂️)
それでは参りましょうか!(パチンっ)
アニメとタグの紐付けをしたら✔️済みにしたかっただけやねん
事の発端は金曜の深夜に発生したデータを管理するtableの修正でした。下記の簡易管理者画面を作成し、一つのアニメに複数のタグを紐付けしようとしていました。
※今後、アニメやタグが増えたりした際に管理できるようにしたいと思い、作成しました。
イメージはこんな感じ(デザイン超適当、他に時間をかけたいのでロジックだけ正常に動くようにしました)
アニメ一覧(大体データ 2021年-1980年まであります)
タグ数(54件ほど、今後増えます)
「五等分の花嫁」を例にすると 恋愛/ラブコメ、ドラマ/青春、学園、萌えなどの複数のタグ情報を持っているわけです!
膨大なデータ量のため、タグの紐付けをするのに時間もかかりますし、誤ったタグを編集したりした際にこのアニメは✔️済みのように可視化したかったのです、はい。
まさかここから地獄が始まるとは、思いもしませんでした。
誤ったコマンドを実行し、エラー祭り
migrationファイルというものでtable情報を管理しているのですが、一部に変更を適用させるはずのコマンドを全てに適用させてしまい追加したはずのtable情報が消えたり、削除したはずの外部キーが復活したりとエラー祭りが発生しました。
深夜で作業効率も落ち、疲れておりくだらないミスが発生してしまいました。この時点でもう結末は決まっていたのかもしれません。。
世界は消えて生まれ変わる、データはララバイしました。
そしてエラーを解決するために、下記リセットコマンドを実行してしまったのですよね。
bundle exec rails db:migrate:reset
結果、tableは全てdropされ新たにcreateされデータが消えました。。
声優さんやスタッフさんのデータや2021年から1980年のアニメのデータが全部消えました、10万件近いデータ量が一瞬にしてdeleteしてしまったのです。
もちろん、かなり色々試し、データの復旧をしようとしましたが無理でした。dumpとってなかったよ。。
初期データを用意するのに1月は心臓を捧げたのですが、全てパー。流石に頭が固まりましたが、思考は停止しませんでした。
「まじで個人開発でよかったなあ」と安堵、いや良くはない!!
この時点でわたしの土日はなくなりました。
「アニメ見たいよー」
止まるんじゃねぇぞ!?
起こってしまったことは事実であり、嘆いても状況は変わりません、そして誰も助けてもくれません。当たり前ですよね
このプロジェクトは、自分自身が解決していかないと絶対完成しないのです。
リリース予定の期限ももう3ヶ月も切ってしまいましたが、ここで立ち止まってる時間なんてありません。今月中にはアニメとタグの管理を終え、ホーム画面周りに入っていかないと間に合わないのです!!
まずは現状を整理し、自動化できる部分と手間がかかる部分で問題を切り分けました。そこから優先順位を決めデータの復旧を以下の順に取り組むことにしました。*印さえクリアできれば、他はAPI走らせてコーヒー飲んでたらいいだけ。
<再度初期データを突っ込む>
*tags(タグ情報)のデータを秒で入れる
↓
dumpをとる
↓
*works(アニメ情報)APIで取得して保存 2021-1980
↓
dumpをとる
↓
*danime(○アニメタイトル、タグ情報)csvファイルからdbへ保存
↓
dumpをとる
↓
*worktags(アニメとタグを紐付ける中間)csvファイルへ一旦書き出す
↓
*worktags(アニメとタグを紐付ける中間)dbへ保存
↓
dumpをとる
これで下準備は完了です!(同じことやりすぎやろ自分w)
※幸い某○アニメの作品情報はスクレイピングしてcsvファイルへデータを書き出すロジック、API取得のロジックを組んでいたためほとんどが復旧するのに時間がかからないということが分かりました!
プログラム様様です。結果的に
無事データ入りました!!しかし一括で入れてしまうとタグが間違っていたり、編集したりする作業が発生するのです。
個人的には外部キーのtag_idを[1, 2, 3, 4, 5,]のようにserializeしようとも考えたのですが、検索した際や変更に弱い仕様になるのでは?と考えたため、[work_id , tag_id] unique: trueとし、一つのアニメとタグの組み合わせは重複を許さないように設計いたしました。
まとめ
データのbackupほんと大事ですね、実務でもやらかしたことありましたがデータ件数は今回の方が消えてしまいましたねww
もちろん、キャプチャを添付しているので一応復旧は完了しました〜
本当に冗談で済まないので、細心の注意を払いデータを管理しようと改めて認識することができました。
現在はアニメとタグの紐付けをアニメごとにしています、全部は無理なので絞って2400作品。APIで自動化できたらいいのですが、そうもできませんでした(今回独自のオリジナルタグも設けたため)
そして管理者画面へdumpは自動化する画面を設けようと思います〜これもまた設計しなくては
まだまだ手探りですが、一歩ずつ進んでおります!また次回も個人開発をお話できたらと思います!!
皆様もbackupを気をつけてください〜bye
この記事が参加している募集
やりたいことしかできない病 アニメが大好きです。 2年未満ITエンジニアで正社員で働いていました。 主にAndroidアプリの機能改修や追加、保守担当 現在はやりたいことを模索中☆ 言語 Java/VB/PHP/SQLなど....現在Rails学習中 Pythonも少しかじる