0Pricing
Learn Rust Coding · レッスン

マイグレーション

スキーマを進化させます

「マイグレーション」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

なぜマイグレーションが必要なのか

マイグレーションは、テーブルやカラムの追加など、データベーススキーマに対するバージョン管理された変更です。スキーマを安全かつ再現可能な形で発展させられます。

  • バージョン管理システムで追跡できます
  • 順番どおりに、正確に1回だけ適用されます

sqlx-cliツール

sqlxにはマイグレーションを管理するCLIが用意されています。cargoで一度インストールします。

cargo install sqlx-cli --no-default-features --features postgres

マイグレーションの作成

sqlx migrate addは、migrations/フォルダーにタイムスタンプ付きのSQLファイルを作成します。タイムスタンプによって順序が決まります。

sqlx migrate add create_users

マイグレーションSQLの記述

各マイグレーションファイルには、スキーマを次の状態へ進めるSQLを記述します。1ファイルにつき1つの論理的な変更にします。

CREATE TABLE users (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT
);

マイグレーションの実行

sqlx migrate runは、DATABASE_URLに対して保留中のすべてのマイグレーションを適用し、それぞれを追跡テーブルに記録します。

sqlx migrate run

追跡テーブル

sqlxは適用済みのマイグレーションを_sqlx_migrationsに記録し、バージョンとチェックサムを保存します。これにより、同じものを再適用したり、変更を黙って受け入れたりすることがありません。

可逆なマイグレーション

-rフラグを追加すると、up用とdown用のファイルを分けてロールバックできるようになります。sqlx migrate revertは直近のdownファイルを実行します。

sqlx migrate add -r create_posts

マイグレーション追跡のモデル化

マイグレーションランナーは、最後に適用されたバージョンより新しいバージョンだけを適用します。この実行可能な例では、その判断をモデル化しています。

fn pending(all: &[u32], applied: u32) -> Vec<u32> {
    all.iter().cloned().filter(|v| *v > applied).collect()
}

fn main() {
    let migrations = [1, 2, 3, 4];
    let last_applied = 2;
    println!("{:?}", pending(&migrations, last_applied));
}

バイナリへのマイグレーションの埋め込み

migrate!マクロはマイグレーションフォルダーをバイナリに組み込みます。これにより、CLIなしで本番環境の起動時にアプリがマイグレーションを適用できます。

use sqlx::{Pool, Postgres};

async fn migrate(pool: &Pool<Postgres>) {
    sqlx::migrate!("./migrations")
        .run(pool)
        .await
        .unwrap();
}

チェックサムと不変性

すでに実行したマイグレーションは決して編集しないでください。sqlxはチェックサムを保存しており、過去のマイグレーションの内容が変更されると処理を拒否します。代わりに新しいマイグレーションを追加してください。

べき等なSQL

IF NOT EXISTSで文を保護すると、新しい環境で再実行しても安全かつ予測可能になります。

CREATE TABLE IF NOT EXISTS tags (
    id   SERIAL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE
);

理解度チェック

マイグレーションについての理解度を確認しましょう。

まとめ

スキーママイグレーションについて学びました。

  • マイグレーションは、順序付けられたバージョン管理済みのスキーマ変更です
  • sqlx migrate add/run/revertで管理します
  • 適用済みのバージョンとチェックサムは_sqlx_migrationsに保存されます
  • migrate!で埋め込むと、起動時に適用できます
  • 適用済みのマイグレーションは編集せず、新しいものを追加します

これでsqlxコースは完了です。

よくある質問

「マイグレーション」レッスンは無料ですか?

はい。「マイグレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「マイグレーション」で何を学びますか?

スキーマを進化させます ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「マイグレーション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. データベースへの接続
  2. コンパイル時に検査されるクエリ
  3. CRUD操作
  4. マイグレーション
← Learn Rust Codingに戻る