Kaigi on Rails 2024 proposal
code:markdown
### Title
Data Migration on Rails
### Abstract (~600字)
(公開プログラムの簡潔で魅力的な説明文です。文字数は600字以内です)
Railsアプリケーションの長期運用においてスキーマやデータの変更は不可避です。スキーマ変更(schema migration)にはRailsが公式に仕組みを提供していますが、データ変更(data migration)には決定的なデファクトスタンダードが存在しません。そのため、各現場で独自のdata migration管理方法を編み出したり、類似する多様なgemの選定に苦心した経験をお持ちの方も多いでしょう。
長年Railsに携わる開発者の多くがこうした経験をしているにも関わらず、これらのアプローチについて広く議論がなされていない現状があります。本セッションではこの状況を再考し、Railsにおけるdata migrationの既存アプローチ(SQLによる直接操作、Rakeタスク、gem利用など)を解説します。各手法のメリット・デメリット、発生しうるトレードオフ、実際のユースケースを紹介するとともに、migration scriptの実行環境やレビュープロセスなど、手法によらず考慮すべき運用課題についても視点を提供します。
本セッションを通じて、参加者がプロジェクトに応じた最適なアプローチを選択できるようになることはもちろん、既存の運用方法を見直す機会にもなるでしょう。data migrationに対する理解と視野を広げ、さらなる議論の発展につながることを期待しています。
### Details
(概要、成果、対象者など、関連する詳細を含めてください)
#### 前提: data migrationの定義について
今回のセッションのスコープはより限定的で、単一のデータストレージ内のデータ操作が主な目的のアクティビティになります。誤解を招かぬようどの用語を用いるか検討しましたが、ことRailsに関するオンライン上の情報ではこの操作を"data migration"と呼んでいるものが多く見つかります。そのためあえて"data migration"を選択しています。この点についてはセッション中にも補足します。
e.g. thoughtbot社、OMBULABS社の記事やdiscuss.rubyonrails.orgにおいて"data migration"という用語が使われるようす
#### 想定する聞き手
このセッションは初級から中級の開発者を対象としています。特に以下のような聞き手には有益な内容となります。
- data migrationを伴う長期的なWebサービス開発・運用に関わる方(初級者〜)
- これから新たにサービスを立ち上げるにあたりdata migrationの運用設計を行う方(中級者〜)
- data migrationの運用設計の経験があり、他社の実践方法や改善のアイデアを学びたい方(中級者〜)
#### 話そうと考えていること
data migrationを伴うWebサービス開発・運用に関わる参加者が興味を持ち、実践的な学びを持ち帰ることができるよう、本セッションは以下の構成を想定しています。
1. data migrationの基本概念と重要性 (5分)
- data migrationとschema migrationの違いなど、基礎や用語を整理することで前提知識を揃える
- 必要になるシーンとは?データ不整合の解決や新たなschemaへの移行など
- 現場で起きがちな課題や失敗を紹介し、聴衆の興味や共感を得る
- 手作業によるオペレーションミス
- 長時間のdata migrationによる障害、ユーザー影響
1. data migrationのアプローチとその比較 (10分)
- 現存する十数個のアプローチを主に以下の3つに分類し、メリット・デメリットを評価する
- 直接データ操作
- Rakeタスクの利用
- 専用gemの活用
- 評価する際の基準についても解説する
- デプロイとdata migrationの依存関係
- チームにおける理解のしやすさ
1. data migrationの運用におけるポイント (10分)
- コード管理、レビュープロセス
- 実行したscriptの履歴
- レビュー機構の重要性
- テスタビリティ、リトライ、ロールバックの検討
- どの環境でどうやって実行するのか
- 踏み台サーバの利用、権限管理
- アプリケーションとリソースを共用するリスク
- 実際のユースケースと実装例
- 発表者が運用するアプリケーションにおける選択
1. まとめ、持ち帰ってほしいこと (5分)
- 紹介したアプローチのすべてに共通して言えること
- 今後のdata migrationの展望、理想像
- セッションを聞いた聴衆とディスカッションできる種をまく
また、時間が許せば以下のトピックについても盛り込むことを検討しています。
- Railsではない他のフレームワークや、他言語のプロジェクトにはデファクトスタンダードがあるのか
- 直近のRails本体における動向
- one-off scriptsの管理方法
- ActiveJobの管理ツールだがdata migrationとの関係はあるのか
#### 成果
聞き手はこのセッションを通じて以下の成果を得られると考えます。
- 参加者がdata migrationの重要性を深く理解し、自身のプロジェクトに適した手法を選択できるようになる
- 複雑なデータ変更を安全かつ効率的に実施するための実践的なスキルを習得する
- data migrationに関する一般的な落とし穴を認識し、回避する方法を学ぶ
- 長期的なアプリケーション保守における戦略的なデータ管理の重要性を理解する
### Pitch
(この講演を検討すべき理由と、そのテーマで講演する資格があることを説明してください)
#### この講演を検討すべき理由
本セッションで話すトピックが、「初学者から上級者までが楽しめるWeb系の技術カンファレンス」であるKaigi on Railsに適切であると考えた理由を3つ記します。
**1. data migrationの重要性は普遍的であり、幅広い層に価値がある**
data migrationはデータベースをバックエンドに持つRailsアプリケーションの保守において極めて重要な営みであり、初級者であろうと上級者であろうと逃れることはできません。Kaigi on Railsの参加者は大半がWebサービス開発者であり、data migrationの運用経験があると思われます。そのため、実務との深いつながりを意識しながらのセッションとなり、得られる成果も大きいと期待できます。
**2. 運用中のプロジェクトを持つ層にとっても有益である**
本セッションは既存のアプローチを紹介するだけでなく、それぞれにどのようなトレードオフが存在するのかを解説します。また、選択するアプローチに依存しない重要な観点を紹介することで、すでに運用を開始している聴衆にとっても自らのプロジェクトにおけるアプローチを見直す機会を提供します。(「話そうと考えていること」セクションの3参照)
**3. 今後の議論の発展性がある**
「Abstract」に記述した通り、data migrationはその重要性にも関わらずコミュニティで十分な議論が起きているようには見えず、20年の歴史を経て未だデファクトスタンダードが存在しないのは驚きに値します。本セッションを通じてこの重要なトピックについて議論が活性化し、エコシステムの発展に寄与できれば幸いだと考えています。
#### テーマで講演する資格
私は8年以上Railsアプリケーションの開発と保守に携わっており、その経験の中で大小さまざまなdata migrationを複数のアプローチで実施し、課題に直面してきました。扱うデータの中には教育サービスの学習ログのようにユーザー体験にとって重要なものもあれば、決済・注文データ、取引履歴、口座残高のようなミッションクリティカルなものもありました。
加えて、現職においてもdata migrationの運用設計を行った実績もあり、このテーマについて深く語れる知識・経験・資格が十分にあると考えています。
### Bio (~500)
SmartBank社で家計簿プリカ「B/43」の開発・運用をしています。Ruby on Railsによるmobile application向けAPI開発、Single Page Application開発が主な業務内容です。