Data Migration on Rails ツクリンクの場合

504 Views

November 27, 24

スライド概要

Tsukulink Tech Talk 〜Kaigi on Rails After LT会〜 #4
https://tsukulink.connpass.com/event/334880/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Data Migration on Rails ツクリンクの場合 #つくてくトーク ツクリンク株式会社 あっきー(@kuronekopunk)

2.

⾃⼰紹介 ● あっきー @kuronekopunk ● ツクリンク株式会社 ● 経歴 ○ ○ エンジニアリングマネージャー 2011年 新卒 SESでPHP 2012年 ㈱ハンズシェア創業(現:ツクリンク㈱) ■ ツクリンクの0→1の開発 ■ PHP→Railsのリプレース ■ SEO、グロースハック ■ データアナリスト ■ 採⽤広報 ● イベント『EMゆるミートアップ』『カクカクシカジカモデリング』 ● ポッドキャスト『ぐんぐんfm』

3.

Kaigi on Rails 2024 出展:https://kaigionrails.org/2024/

4.

『Data Migration on Rails』@ohbarye 出展:https://speakerdeck.com/ohbarye/data-migration-on-rails

5.

Data Migrationとは ⼤きく分けて2つ 1. データベース全体の移⾏や変更 2. 特定のデータの変更や移⾏ 2の特定のデータ変更についてを今回の対象とします。 出展:Data Migration on Rails p.3

6.

Data Migrationの代表的なアプローチ 1. SQLによる直接データ操作 2. rails console, rails runner 3. db:migrateと同時に実⾏ 4. rake task, ruby scriptを実⾏ 5. 専⽤gemの活⽤ 出展:Data Migration on Rails p.20

7.

Data Migration on Rails ツクリンクの場合

8.

データ変更をするユースケース ● DB migrationに伴うデータ変更 ● 不具合による不整合データの修正 ● CSからの依頼でデータ更新

9.

DB migrationに伴うデータ変更

10.

DB migrationに伴うデータ変更 新しいカラムを作り、既存データから算出できるデータを埋めるケースです。 migrationファイル内でデータ変更を ⾏っているファイルを⾒つけました。 最新が202206のファイルで最近はこの形式で data migrationは⾏われていないようでした。

11.

マイグレーションファイルでデータ操作は⾮推奨 データをマイグレーションすると、データベース内でデータが変換されたり移動したりします。Railsで は⼀般的に、マイグレーションファイルでデータを操作することは推奨されません。 出展:Active Record マイグレーション - Railsガイド

12.

DB migrationに伴うデータ変更 直近のデータ変更ではfeatureトグルを利⽤した機能制御と合わせて以下のステッ プでデータ変更が⾏われています。 1. データ変更を⾏わないDB変更のみのdb:migrateを実⾏ 2. rake taskでデータ変更 3. データに問題がなければfeatureトグルを利⽤し機能を有効化

13.

不具合による不整合データの修正

14.

不具合による不整合データの修正 不具合や過去データと整合性が取れなくなり想定外のデータが⾒つかり修正するケース 即時データ変更をしないとユーザーが使えないなどのクリティカルな場合 →rails consoleでデータ修正の実⾏ 直接の不具合は出ないもののデータ不整合の場合 →rake taskでテストを書きつつ安全にデータ変更

15.

CSからの依頼でデータ更新

16.

CSからの依頼でデータ更新 前提:ツクリンクではユーザーさんのサポートで情報変更をするための管理画⾯があります 管理画⾯でできないデータ変更をCSから依頼されるケースがあり、エンジニアが直接データ変更をする ことがあります。

17.

rails consoleで実⾏ 機能として存在しないものはエンジニアがスクリプトを作りconsoleで実⾏しています。 ● スクリプト作成 ○ 再利⽤可能にする ○ ログ出⼒をする ● 実⾏の際はSlackでレビュー依頼 ● ドキュメント化 ● 機能化が必要な場合はチケット発⾏ ※再利⽤可能なイメージ

18.

rake taskで実⾏ 管理画⾯への追加が難しい場合、⼀旦対応スクリプトをrake task化しています。 テストも書けるためrails consoleのスクリプト実⾏よりは安全に実⾏できるようになっています。

19.

maintenance_tasksを試してみた

20.

maintenance_tasksをインストール インストールすると以下が実⾏される ● routesの追加 ● DBセットアップ

21.

maintenance_tasksの管理画⾯ /maintenance_tasks で管理画⾯が開けるようになった

22.

maintenance_tasksで新しいタスクを作る app/tasks/ 配下に作られるのが良かった ※そもそもrake taskが lib/tasks/ なのってなんでなんだろう...

23.

maintenance_tasksで新しいタスクを作る(collection⽤) ※適当なcollectionを回すだけのサンプル

24.

maintenance_tasksで新しいタスクを作る(no-collection) collectionを使わないタスクも作成可能

25.

管理画⾯でタスクを確認する タスク詳細 タスク⼀覧 実⾏結果

26.

引数、バリデーションが便利 attribute, validatesを簡単に定義できる 管理画⾯から引数を指定して簡単に実⾏

27.

引数を指定した実⾏履歴も確認可能 例:attribute title に “new title” を指定

28.

maintenance_tasksのちょっと気になり 1. 権限管理は独⾃で作る必要がありそう? 2. task内で⾊々やるより対象Jobをキックする⽤途は使いやすそう

29.

さいごに より良い知⾒を取り⼊れ、検証をして、安全かつベターなやり⽅に変更していけ ればと思います。 maintenance_tasksの上⼿い使い⽅や、その他運⽤⽅法など良いものがあればぜ ひ教えてください🙌

30.

Thanks. 🙌