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
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FluentMigratorでDBマイグレーション
2015/2/21に開かれた、めとべや東京 #7 でのLTスライドです。
thinkAmi
February 21, 2015
More Decks by thinkAmi
See All by thinkAmi
知ろう!使おう!HDF5ファイル!/pycon-jp-2019-talk
thinkami
5
11k
Djangoでのメール送信 - 設定からテストまで/djangocongress-jp-2019-talk
thinkami
1
13k
Django・WSGIミドルウェア入門/django-congress-jp-2018-talk
thinkami
4
5.6k
自分のための機械学習をしてみた話
thinkami
0
690
Xamarinで作るAndroid Wearアプリ
thinkami
1
2.8k
デプロイボタンを使ってみた
thinkami
0
1.1k
Vagrant + Berkshelf でお手軽写経環境構築
thinkami
1
1.4k
Twilio入門
thinkami
0
1.7k
おひとりさま環境でのChef-solo使用例
thinkami
2
1.5k
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
900
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
540
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
270
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.3k
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
act2-costs.pdf
sumedhbala
0
120
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
300
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
160
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
100
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1k
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
57k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
620
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Optimizing for Happiness
mojombo
378
71k
Mind Mapping
helmedeiros
PRO
1
290
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
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/