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

SQL Server のプロジェクト指向オフライン データベース開発を採用してみた話 実践編

SQL Server のプロジェクト指向オフライン データベース開発を採用してみた話 実践編

2016年7月30日 第16回中国地方DB勉強会 のセッション資料

kiyokura

July 30, 2016
Tweet

More Decks by kiyokura

Other Decks in Programming

Transcript

  1. データべース開発で… 問題なく回っていますか? ✓ ソースのバージョン管理 ✓ チーム開発 ✓ 複数のDB環境の管理 ✓ 単体テスト

    11 ※データベース上のオブジェクト= テーブル/ビュー/ストアド/ユーザー定義関数/ユーザー定義型等々の諸々
  2. まれによく見る()光景その4 単体テスト?書いてないけど 「おまえそれ@t_wada の前でも 同じこと言えんの?」 15 _,,;' '" '' ゛''"

    ゛' ';;,, (rヽ,;''"""''゛゛゛'';, ノr) ,;'゛ i _ 、_ iヽ゛';, ,;'" ''| ヽ・〉 〈・ノ |゙゛ `';, ,;'' "| ▼ |゙゛ `';, ,;'' ヽ_人_ / ,;'_ /シ、 ヽ⌒⌒ / リ \ | "r,, `"'''゙´ ,,ミ゛ | | リ、 ,リ | | i ゛r、ノ,,r" i _| | `ー――----┴ ⌒´ ) (ヽ ______ ,, _´) (_⌒ ______ ,, ィ 丁 | | |
  3. プロジェクト指向オフライン データベース開発とは プロジェクト指向オフライン データベース開発 マイクロソフトが提案している手法 一般的な用語ではないかも? 「接続指向のデータベース開発」と対比 比較的よくつかわれている開発手法を「接続型」と分類 その対比として「オフライン型」と呼んでいる(っぽい) マイクロソフトによる説明

    Presentation on Visual Studio Database Projects Integration with Visual Studio Team Foundation Server http://blogs.msdn.com/b/ssdt/archive/2014/08/04/presentation-on- visual-studio-database-projects-integration-with-visual-studio- team-foundation-server.aspx 21 ※以下、上記のエントリと資料から一部抜粋
  4. 接続型開発(パターン1) 22 開発端末 SSMS 実行 backup ※SSMD=SQL Server Management Studio

    .bak Fileサーバ SQL DBサーバ データベースに接続し SSMSやコマンドラインのツールなどを用いて 都度サーバ上のオブジェクトを操作する開発
  5. 接続型開発(パターン1) 23 開発端末 SSMS 実行 backup ※SSMD=SQL Server Management Studio

    .bak Fileサーバ SQL DBサーバ ✓ 手軽 × 間違った時のリカバリがバックアップからのリストアのみ × バックアップがとられているタイミングにしか戻れない × 他人の開発・修正の影響をダイレクトに受ける × 他サーバへのデプロイの管理が困難 × 何がデプロイされてて何がデプロイされてない?
  6. 接続型開発(パターン2) 24 開発端末 SSMS 実行 write Fileサーバ または ソース管理 SQL

    DBサーバ 差分のSQL文を事前に作成・管理 差分のSQL文を発行してサーバのオブジェクトを操作する開発 SQL スクリプト (ALTER) read
  7. 接続型開発(パターン2) 25 開発端末 SSMS 実行 write Fileサーバ または ソース管理 SQL

    DBサーバ ✓ バックアップと併用することで任意のロールバックが可能 △ バックアップを戻した後、戻りたいところまで順番にSQLを実行する必要あり ✓ 変更の理由や追跡が可能 × ある特定の時点の”正しい姿”がはっきりと解らない × 容易なロールバックやデプロイすべき構成の特定が困難(履歴の積重ね) × 他人の開発・修正の影響をダイレクトに受ける × 他サーバへのデプロイの管理が困難 SQL スクリプト (ALTER) read
  8. オフライン型開発 26 開発端末 VS 発行 commit ソース管理 SQL DBサーバ SQL文を編集して開発

    ローカルのDBに発行してテスト テストが完了したらソース管理にコミット(CREATE文) ソース管理から他人の開発を取得 テストが完了したら共用のサーバに発行 SQL スクリプト (CREATE) sync SQL Deploy TEST
  9. オフライン型開発 27 開発端末 VS 発行 commit ソース管理 SQL DBサーバ スクリプトの断片ではなくプロジェクトという単位で管理する

    DBのスキーマのように論理構造を意識してローカルでも管理 オブジェクトのスクリプトは差分ではなく定義そのものを管理 例えばALTER文ではなくCREATE文を管理 ローカルで完結した環境でテストを実行 プリリクエスト等も活用 SQL スクリプト (CREATE) sync SQL Deploy TEST
  10. オフライン型開発 28 開発端末 VS 発行 commit ソース管理 SQL DBサーバ ✓

    特定のコミット時点のスキーマを容易に再現可能 ✓ 変更の理由や追跡が可能 ✓ 共有サーバへ危険な変更を事前に検出 ✓ プルリクエスト等の活用で他人の変更も容易にチェック ✓ デプロイ単位の管理 SQL スクリプト (CREATE) sync SQL Deploy TEST
  11. SQL Server Data Tools Visual Studio用のアドオン 無償で利用可能 VS2010以降で利用可能 VS2012までのものはメンテ終了、VS2013/VS2015を推奨 オフライン型DB開発を行うための機能

    多岐にわたる機能を内蔵 が、別にオフライン型開発をしなくても便利に使えます 対象DBはSQL Server Azure SQL Databaseでも利用可能 30
  12. SSDTの導入方法 推奨:Webサイトから直接ダウンロード Download Latest SQL Server Data Tool  https://msdn.microsoft.com/ja-jp/mt186501

     言語とVSのバージョンを適切に選択してDL Visual Studioの「拡張機能と更新プログラム」からでも 入るのだが… 日本語版のVSの場合はいらないことがあったりして最近微妙 31
  13. 関連する機能 SQL Server Express LocalDB(以降LocalDB) 開発者向けのSQL Server Express の実行モード サービスではなく必要時にプロセスとして起動

    ホストプロセスの子プロセスとして実行される アプリケーション側はDBのファイル(mdf)を管理するだけでだ いたい大丈夫 33
  14. SQL Server オブジェクトエクスプローラー SQL ServerおよびDBプロ ジェクトの操作と管理に特 化 SQL Serverに接続して操作 を行う機能

    サーバーエクスプローラと同様の操作 SSDT独自の操作もある  スキーマ比較/データ比較等 LocalDBやAzure SQL Databaseにも接続 可能 DBプロジェクトの論理 ビューとして DBプロジェクト内のスクリプトファイ ルを DBオブジェクトとして論理的に展開・ 管理 35
  15. デモシナリオ 前提条件 • 共有のSQL Serverをメンバ全員で直接触って開発 • バージョン管理されてない • SQL Server

    2016(2005以降で利用可能) • Visual Studio 2015 (2010以降で可能、最新を推奨) • 2016年7月現在、VS2013以降用のみ最新がリリースされている シナリオ 1. とりあえずデータベースプロジェクトの導入& バージョン管理 2. 単体テストをやってみる 3. そしてオフライン開発へ…… 45
  16. とりあえずデータベースプロジェクトの導入& バージョン管理 このステップの目的 1. まずはソースコードのバージョン管理を行う 2. (そのため&今後の基盤とするために)データベース 開発プロジェクトを導入する このステップでやること 1.

    データベース開発プロジェクトを新規作成 2. SQL Server上の既存スキーマをインポート 3. ソースコードのバージョン管理 追加ステップ 1. サーバ上での変更を取り込む 46
  17. 実際採用してみてどうだったか すごく便利で捗った ✓ ソース管理が楽 ✓ プルリクエスト駆動 ✓ ローカルでの手軽なデバッグ ✓ データベース間の同期や比較

    開発用/テスト用/デモ用 ✓ テスト駆動”気味”のストアド開発 呼び出し側のアプリと非同期で開発が可能 51