Skip to content

Instantly share code, notes, and snippets.

@thinkAmi
Created February 21, 2015 22:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkAmi/5cef20eefde3faba33b2 to your computer and use it in GitHub Desktop.
Save thinkAmi/5cef20eefde3faba33b2 to your computer and use it in GitHub Desktop.
めとべや東京#7向けの発表用Markdown

FluentMigrator

subtitle : でDBマイグレーション

author : @thinkAmi

institution : めとべや東京 #7 2015.2.21

theme : thinkami

自己紹介

  • 長野県から来ました

  • アカウント

    • thinkAmi
      • Twitter
      • hatena
      • GitHub
  • C#(WPF)とかMS AccessとかRubyとか

自己紹介

{:height='200' :width='200'}

長野県のコミュニティ

  • NSEG (#nseg)

    • 長野県とコンピューターをテーマに毎月開催(#60)
    • 本日、ギークラボ長野でOpenDataハッカソン中
  • Google Developer Group 信州

    • 3/14 AndroidWearイベント(スタンプラリー参加)
  • Azure しなの(3/28 Hokuriku.NETと合同)

  • JAWS-UG 長野支部

  • https://github.com/nseg-jp/w/wiki/NSEG以外の長野のIT勉強会

本題

  • FluentMigratorでDBマイグレーション
    • クライアントアプリの裏側ということで...

定義

  • DBマイグレーションとは
    • DBのテーブルスキーマの更新などを管理・実行できるようにすること
      • 他にもありますが、今回は上記の定義です

データベースの管理にて

  • 最初のうち

    • CUIでDDLやDMLを実行
    • GUIでポチポチ
  • 次第に忘れ去られ...

    • どの順番でどのDDLやDMLを実行する?
    • 何でこんなスキーマにしたんだっけ?
      • ツライ
  • DBマイグレーションしたい...

Entity Framework

FluentMigrator

  • DBマイグレーションフレームワーク
    • C#で、DDLやDMLを書く

      • DBに依存せず、スキーマの変更を記述可能
      • Gitなどで、バージョン管理可能
    • リポジトリ(GitHub)

    • Apache 2 License

動作RDBMS

実行方法

インストール

  • NuGetでインストール
    • 本体

      PM> Install-Package FluentMigrator

    • コマンドラインランナーを使う場合

      PM> Install-Package FluentMigrator.Tools

マイグレーションファイル

  • C#のコード

{:relative_height='100' :relative_width='100'}

マイグレーションの実行

{:relative_height='20' :relative_width='20'}

.\Migrate.exe 
  --assembly=FluentMigrationTest.exe
  --provider=jet 
  --connection=
      "Provider=Microsoft.ACE.OLEDB.12.0;
      DataSource=D:\db\targetdb.accdb" 
  --verbose=True
  --task=migrate

実行結果の表示

{:relative_height='40' :relative_width='40'}

  CREATE TABLE [hoge]
    ([id] COUNTER NOT NULL,
     [content] VARCHAR(255), 
     CONSTRAINT [PK_hoge]
         PRIMARY KEY ([id]))

MS Accessの中身

  • DDLが実行されている

{:relative_height='25' :relative_width='25'}

マイグレーション(DDL)

  • CREATE TABLE
  Create.Table("hoge")
      .WithColumn("id").AsInt32()
          .PrimaryKey().Identity()
      .WithColumn("content").AsString()
          .Nullable();

マイグレーション(DDL)

  • ALTER TABLE
  Alter.Table("hoge")
      .AddColumn("fuga").AsString()
          .Nullable()
      .AlterColumn("content").AsString()
          .NotNullable();

マイグレーション(DDL)

  • CREATE INDEX
  Create.Index("idx")
      .OnTable("hoge")
          .OnColumn("content");

マイグレーション(DDL)

  • RENAME COLUMN
  Rename.Column("fuga")
      .OnTable("hoge")
          .To("piyo");

マイグレーション(DML)

  • INSERT
  Insert.IntoTable("hoge")
      .Row(new { content = "added" });

 

  • UPDATE
  Update.Table("hoge")
      .Set(new { content = "updated" })
      .Where(new { id = 1 });

ランナーのオプション

  • 一例

    • assembly
      • 対象のマイグレーションが含まれるexe/dll
    • provider (対象のRDBMS)
    • connection (接続文字列)
    • task
      • Migration, Rollback(全件, 1件, 指定ver etc)
    • verbose (Trueでマイグレーションの詳細を表示)

クラウド(PaaS)での実行

  • Azure Websites

    • 管理画面(Kudu)のConsoleにて実行
  • Heroku

    • Third-Party Buildpacksでビルド
      • Monoでのビルド
        • friism/heroku-buildpack-mono
        • heroku/dotnet-buildpack
    • One-Off Dynos でHeroku Postgresへ実行
      • heroku run bash 後に実行

まとめ

  • FluentMigratorを使えば、EFを使えない環境でもDBマイグレーション可能

  • 他のDBマイグレーションツールがあれば知りたいです!

参考文献など

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment