Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FluentMigratorでDBマイグレーション
Search
thinkAmi
February 21, 2015
Programming
0
2.2k
FluentMigratorでDBマイグレーション
2015/2/21に開かれた、めとべや東京 #7 でのLTスライドです。
thinkAmi
February 21, 2015
Tweet
Share
More Decks by thinkAmi
See All by thinkAmi
知ろう!使おう!HDF5ファイル!/pycon-jp-2019-talk
thinkami
4
10k
Djangoでのメール送信 - 設定からテストまで/djangocongress-jp-2019-talk
thinkami
1
12k
Django・WSGIミドルウェア入門/django-congress-jp-2018-talk
thinkami
4
5.2k
自分のための機械学習をしてみた話
thinkami
0
630
Xamarinで作るAndroid Wearアプリ
thinkami
1
2.7k
デプロイボタンを使ってみた
thinkami
0
1k
Vagrant + Berkshelf でお手軽写経環境構築
thinkami
1
1.4k
Twilio入門
thinkami
0
1.6k
おひとりさま環境でのChef-solo使用例
thinkami
2
1.5k
Other Decks in Programming
See All in Programming
Jakarta EE Core Profile and Helidon - Speed, Simplicity, and AI Integration
ivargrimstad
0
320
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
460
兎に角、コードレビュー
mitohato14
0
170
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
0
270
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
19
4.6k
Swift Updates - Learn Languages 2025
koher
2
410
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
temoki
0
200
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.4k
Laravel Boost 超入門
fire_arlo
2
190
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
160
AIエージェント開発、DevOps and LLMOps
ymd65536
1
380
ProxyによるWindow間RPC機構の構築
syumai
3
870
Featured
See All Featured
Done Done
chrislema
185
16k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Facilitating Awesome Meetings
lara
55
6.5k
Building an army of robots
kneath
306
46k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Music & Morning Musume
bryan
46
6.8k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
The Language of Interfaces
destraynor
160
25k
Producing Creativity
orderedlist
PRO
347
40k
Bash Introduction
62gerente
615
210k
Transcript
FluentMigratorで DBマイグレーション @thinkAmi めとべや東京 #7 2015.2.21
自己紹介 • 長野県から来ました • アカウント – thinkAmi • Twitter •
Hatena • GitHub • C#(WPF)とかMS AccessとかRubyとか
自己紹介 • りんご食べあるき – 現在57種類くらい • 今日はピンクレディを食べました • Twitter +
Heroku + C#(Ruby)で記録・公開 » http://ringo-tabetter-cs.herokuapp.com/
長野県のコミュニティ • 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勉強会
本題 • FluentMigratorでDBマイグレーション • クライアントアプリの裏側ということで...
定義 • DBマイグレーションとは – DBのテーブルスキーマの更新などを管理・実 行できるようにすること – 他にもありますが、今回は上記の定義です
本題 • データベースの管理にて – 最初のうち • CUIでDDLやDMLを実行 • GUIでポチポチ –
次第に忘れ去られ... • どの順番でどのDDLやDMLを実行する? • 何でこんなスキーマにしたんだっけ? » ツライ – DBマイグレーションをしたい...
Entity Framework • Code First Migrations – MS Accessで試したが使えず... •
EFがOLEDB接続をサポートしていないため » http://stackoverflow.com/a/11197393
FluentMigrator • DBマイグレーションフレームワーク – C#で、DDLやDMLを書く • DBに依存せず、スキーマの変更を記述可能 • Gitなどで、バージョン管理可能 •
リポジトリ(GitHub) – https://github.com/schambers/fluentmigrator • 830starほど • Apache 2 License
動作RDBMS • SQL Server • SQL Server Compact Edition •
PostgreSQL • MySQL • Oracle • SQLite • Jet (MS Access, ACEも動作) » https://github.com/schambers/fluentmigrator /wiki/Fluent-Interface
実行方法 • コマンドライン • NAnt • MSBuild • Rake –
Ruby + Albacore gem が必要 » https://github.com/schambers/fluentmigrator /wiki/Migration-Runners
インストール • NuGetでインストール – 本体 • PM> Install-Package FluentMigrator –
コマンドラインランナーを使う場合 • PM> Install-Package FluentMigrator.Tools
マイグレーションファイル • コード
マイグレーションの実行 • 実行 .\Migrate.exe --assembly=FluentMigrationTest.exe --provider=jet --connection="Provider=Microsoft.ACE.OLEDB.12.0;DataSo urce=D:\db\targetdb.accdb" --verbose=True --task=migrate
実行結果の表示 CREATE TABLE [hoge] ([id] COUNTER NOT NULL, [content] VARCHAR(255),
CONSTRAINT [PK_hoge] PRIMARY KEY ([id]))
MS Accessの結果 • DDLが実行されている
マイグレーション(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 (ASP.NET 5用?) – One-Off Dynos でHeroku Postgresへ実行 • heroku run bash 後
まとめ • FluentMigratorを使えば、EFを使えない 環境でもDBマイグレーション可能 • 他のDBマイグレーションツールがあれば 知りたいです!
参考文献など • 参考文献 – 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/