Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FluentMigratorでDBマイグレーション

thinkAmi
February 21, 2015

 FluentMigratorでDBマイグレーション

2015/2/21に開かれた、めとべや東京 #7 でのLTスライドです。

thinkAmi

February 21, 2015
Tweet

More Decks by thinkAmi

Other Decks in Programming

Transcript

  1. FluentMigratorで
    DBマイグレーション
    @thinkAmi
    めとべや東京 #7 2015.2.21

    View Slide

  2. 自己紹介
    • 長野県から来ました
    • アカウント
    – thinkAmi
    • Twitter
    • Hatena
    • GitHub
    • C#(WPF)とかMS AccessとかRubyとか

    View Slide

  3. 自己紹介
    • りんご食べあるき
    – 現在57種類くらい
    • 今日はピンクレディを食べました
    • Twitter + Heroku + C#(Ruby)で記録・公開
    » http://ringo-tabetter-cs.herokuapp.com/

    View Slide

  4. 長野県のコミュニティ
    • NSEG (#nseg)
    – 長野県とコンピューターをテーマに毎月開催
    • 本日、ギークラボ長野でOpenDataハッカソン中
    • Google Developer Group 信州
    • 3/14 AndroidWearイベント
    » IT勉強会スタンプラリー参加
    • Azure しなの (3/28 Hokuriku.NETと合同勉強会)
    • JAWS-UG 長野支部
    » 他のコミュニティ > https://github.com/nseg-
    jp/w/wiki/NSEG以外の長野のIT勉強会

    View Slide

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

    View Slide

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

    View Slide

  7. 本題
    • データベースの管理にて
    – 最初のうち
    • CUIでDDLやDMLを実行
    • GUIでポチポチ
    – 次第に忘れ去られ...
    • どの順番でどのDDLやDMLを実行する?
    • 何でこんなスキーマにしたんだっけ?
    » ツライ
    – DBマイグレーションをしたい...

    View Slide

  8. Entity Framework
    • Code First Migrations
    – MS Accessで試したが使えず...
    • EFがOLEDB接続をサポートしていないため
    » http://stackoverflow.com/a/11197393

    View Slide

  9. FluentMigrator
    • DBマイグレーションフレームワーク
    – C#で、DDLやDMLを書く
    • DBに依存せず、スキーマの変更を記述可能
    • Gitなどで、バージョン管理可能
    • リポジトリ(GitHub)
    – https://github.com/schambers/fluentmigrator
    • 830starほど
    • Apache 2 License

    View Slide

  10. 動作RDBMS
    • SQL Server
    • SQL Server Compact Edition
    • PostgreSQL
    • MySQL
    • Oracle
    • SQLite
    • Jet (MS Access, ACEも動作)
    » https://github.com/schambers/fluentmigrator
    /wiki/Fluent-Interface

    View Slide

  11. 実行方法
    • コマンドライン
    • NAnt
    • MSBuild
    • Rake
    – Ruby + Albacore gem が必要
    » https://github.com/schambers/fluentmigrator
    /wiki/Migration-Runners

    View Slide

  12. インストール
    • NuGetでインストール
    – 本体
    • PM> Install-Package FluentMigrator
    – コマンドラインランナーを使う場合
    • PM> Install-Package FluentMigrator.Tools

    View Slide

  13. マイグレーションファイル
    • コード

    View Slide

  14. マイグレーションの実行
    • 実行
    .\Migrate.exe
    --assembly=FluentMigrationTest.exe
    --provider=jet
    --connection="Provider=Microsoft.ACE.OLEDB.12.0;DataSo
    urce=D:\db\targetdb.accdb"
    --verbose=True
    --task=migrate

    View Slide

  15. 実行結果の表示
    CREATE TABLE [hoge]
    ([id] COUNTER NOT NULL,
    [content] VARCHAR(255),
    CONSTRAINT [PK_hoge] PRIMARY KEY ([id]))

    View Slide

  16. MS Accessの結果
    • DDLが実行されている

    View Slide

  17. マイグレーション(DDL)
    • CREATE TABLE
    Create.Table("hoge")
    .WithColumn("id")
    .AsInt32()
    .PrimaryKey().Identity()
    .WithColumn("content")
    .AsString().Nullable();

    View Slide

  18. マイグレーション(DDL)
    • ALTER TABLE
    Alter.Table("hoge")
    .AddColumn("fuga")
    .AsString().Nullable()
    .AlterColumn("content")
    .AsString().NotNullable();

    View Slide

  19. マイグレーション(DDL)
    • CREATE INDEX
    Create.Index("idx")
    .OnTable("hoge")
    .OnColumn("content");

    View Slide

  20. マイグレーション(DDL)
    • RENAME COLUMN
    Rename.Column("fuga")
    .OnTable("hoge")
    .To("piyo");

    View Slide

  21. マイグレーション(DML)
    • INSERT
    Insert.IntoTable("hoge")
    .Row(new { content = "added" });
    • UPDATE
    Update.Table("hoge")
    .Set(new { content = "updated" })
    .Where(new { id = 1 });

    View Slide

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

    View Slide

  23. クラウド(Paas)での実行
    • Azure Websites
    – 管理画面(Kudu)のConsoleにて
    • Heroku
    – Third-Party Buildpacksでビルド
    • Monoでのビルド
    – friism/heroku-buildpack-mono
    – heroku/dotnet-buildpack (ASP.NET 5用?)
    – One-Off Dynos でHeroku Postgresへ実行
    • heroku run bash 後

    View Slide

  24. まとめ
    • FluentMigratorを使えば、EFを使えない
    環境でもDBマイグレーション可能
    • 他のDBマイグレーションツールがあれば
    知りたいです!

    View Slide

  25. 参考文献など
    • 参考文献
    – FluentMigrator公式Wikiが一番参考になります
    • https://github.com/schambers/fluentmigrator/wiki
    • スライドまわり
    – プレゼンツール
    • Rabbit (Ruby製)
    – http://rabbit-shocker.org/ja/
    – スライドテンプレート
    • 交差点の真ん中で様のパワーポイント用自作デザインテンプレート
    – http://sagittarius.dip.jp/toshi/template.php
    – フォント
    • フォントな様のやさしさゴシックボールド
    – http://www.fontna.com/blog/736/

    View Slide