subtitle : でDBマイグレーション
author : @thinkAmi
institution : めとべや東京 #7 2015.2.21
theme : thinkami
-
長野県から来ました
-
アカウント
- thinkAmi
- hatena
- GitHub
- thinkAmi
-
C#(WPF)とかMS AccessとかRubyとか
- りんご食べあるき
- 現在57種類くらい
- 今日はピンクレディを食べました
- Twitter + Heroku + C#(Ruby)で記録・公開
- 現在57種類くらい
-
NSEG (#nseg)
- 長野県とコンピューターをテーマに毎月開催(#60)
- 本日、ギークラボ長野でOpenDataハッカソン中
-
Google Developer Group 信州
- 3/14 AndroidWearイベント(スタンプラリー参加)
-
Azure しなの(3/28 Hokuriku.NETと合同)
-
JAWS-UG 長野支部
- FluentMigratorでDBマイグレーション
- クライアントアプリの裏側ということで...
- DBマイグレーションとは
- DBのテーブルスキーマの更新などを管理・実行できるようにすること
- 他にもありますが、今回は上記の定義です
- DBのテーブルスキーマの更新などを管理・実行できるようにすること
-
最初のうち
- CUIでDDLやDMLを実行
- GUIでポチポチ
-
次第に忘れ去られ...
- どの順番でどのDDLやDMLを実行する?
- 何でこんなスキーマにしたんだっけ?
- ツライ
-
DBマイグレーションしたい...
- Code First Migrations
- MS Accessで試したが使えず...
- EFがOLEDB接続をサポートしていないため
- MS Accessで試したが使えず...
- DBマイグレーションフレームワーク
-
C#で、DDLやDMLを書く
- DBに依存せず、スキーマの変更を記述可能
- Gitなどで、バージョン管理可能
-
リポジトリ(GitHub)
-
Apache 2 License
-
- SQL Server
- SQL Server Compact Edition
- PostgreSQL
- MySQL
- Oracle
- SQLite
- Jet (MS Access, ACEも動作)
- コマンドライン
- NAnt
- MSBuild
- Rake
-
Ruby + Albacore gem が必要
-
- 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]))
- DDLが実行されている
{:relative_height='25' :relative_width='25'}
- CREATE TABLE
Create.Table("hoge")
.WithColumn("id").AsInt32()
.PrimaryKey().Identity()
.WithColumn("content").AsString()
.Nullable();
- ALTER TABLE
Alter.Table("hoge")
.AddColumn("fuga").AsString()
.Nullable()
.AlterColumn("content").AsString()
.NotNullable();
- CREATE INDEX
Create.Index("idx")
.OnTable("hoge")
.OnColumn("content");
- RENAME COLUMN
Rename.Column("fuga")
.OnTable("hoge")
.To("piyo");
- 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でマイグレーションの詳細を表示)
- assembly
-
Azure Websites
- 管理画面(Kudu)のConsoleにて実行
-
Heroku
- Third-Party Buildpacksでビルド
- Monoでのビルド
- friism/heroku-buildpack-mono
- heroku/dotnet-buildpack
- Monoでのビルド
- One-Off Dynos でHeroku Postgresへ実行
heroku run bash
後に実行
- Third-Party Buildpacksでビルド
-
FluentMigratorを使えば、EFを使えない環境でもDBマイグレーション可能
-
他のDBマイグレーションツールがあれば知りたいです!
-
参考文献
- FluentMigrator公式Wikiが一番参考になります
-
スライドまわり
-
Rabbit (Ruby製プレゼンツール)
-
やさしさゴシックボールド (フォントな様)
-