きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Docker for Windowsを使用したASP.NET Core のデバッグ実行

Docker for Windowsを使うと、ASP.NET CoreのWebアプリのDockerコンテナをVisual Studioから簡単かつシームレスにデバッグ実行できるとのことなので、試してみました。

 

前提

以下が必要になります。 それぞれインストールしておきます。

また、Docker for WindowsHyper-V上で実行されるので、Hyper-Vが動くようになっている必要があります(OS・エディションが限定されます&ハードウェアの制約もあり)。

 

アプリケーションプロジェクトの作成

ASP.NET Core Web Application(.NET Core) テンプレートでWebアプリケーションを作成します。テンプレートは Webアプリケーションを選択します。とりあえず認証は認証なしにしておきます。

f:id:kiyokura:20161018163458p:plain f:id:kiyokura:20161018163505p:plain

 

Dockerでデバッグ実行を行うための準備

プロジェクトテンプレートが展開されたら、このプロジェクトでDockerを利用するための準備を行います まずはソリューションエクスプローラーのコンテキストメニュー追加-Docker Supportをクリックして、Dockerサポート関連の設定を追加します。

f:id:kiyokura:20161018163512p:plain

 

すると、Docker関連のファイルが追加されたり、launchSettings.json に Docker関連の設定が追加されたりします(今回はとりあえずこれらのファイルを編集する必要はありません)。

f:id:kiyokura:20161018163518p:plain

 

ツールバーデバッグ実行先を確認すると、IIS Expressやセルフホストに加えてDockerが存在することが確認できると思います。Dockerを選択し、デバッグ実行時に起動するブラウザを選択したら準備は完了です。 f:id:kiyokura:20161018163531p:plain

 

F5でデバッグ実行(ビルドエラー編)

実際にデバッグ実行を行ってみます。 適当にアクションメソッドにブレークポイントを張って、F5キーを押します。

f:id:kiyokura:20161018163538p:plain

 

ビルドが進んで、いざデプロイ…と思ったら、エラーが出ました。 f:id:kiyokura:20161018163555p:plain

 

メッセージを確認すると、「Unable to validate volume mapping 」「Docker Toolsのトラブルシューティングを見ろ」と書いてるので、まずは確認してみます。

Troubleshooting Docker Client Errors on Windows Using Visual Studio | Microsoft Azure

Volume mapping is required to share the source code and binaries of your application with the app folder in the container. Specific volume mappings are contained within the docker-compose.dev.debug.yml and docker-compose.dev.release.yml files. As files are changed on your host machine, the containers reflect these changes in a similar folder structure.

なるほど、『Docker for WindowsのShared Drivesの設定がされていない』ことが原因のようです。よくよく見ると、Visual Studio Tools for DockerのPrerequisitesの項目にも赤字で『IMPORTANT: Configure Shared Drives under the settings for Docker For Windows as Shared Drives are requried for F5 Debugging.』と注意書きされていました(オフィシャルのドキュメントはよく読みましょう)。

 

素直に設定してみます。 f:id:kiyokura:20161018163602p:plain

 

F5でデバッグ実行(再チャレンジ)

気を取り直して、再度チャレンジします。 念のため一度クリーンしてから、再度F5キーでデバッグ実行を行います。

すると、今度はデプロイが成功しブラウザが起動、ブレークポイントでもちゃんと停止することが確認できました。 f:id:kiyokura:20161018163612p:plain

 

まとめ

こんな感じで、Dockerコンテナを使ってLinuxにホストした状態でのデバッグ実行を非常に簡単に、そしてシームレスに行うことができました。Docker for Windowsさえ設定されていれば、IIS Expressでデバッグ実行を行うのと何ら変わりない感じで使えそうです。

SQL Server LocalDBのインスタンスを任意の名前で作成する

特定の名前&バージョンのSQL Server LocalDBのインスタンスを作成する必要があったので、メモ。

 

コマンド ラインで SqlLocalDB.exe の create オプションで作成可能でした*1

SqlLocalDB create "<インスタンス名>" バージョン

 

例えば、 バージョン12.0*2インスタンスを SomeInstanceV12 という名前で 作りたい場合は、以下のよにしてやればOKです。

> SqlLocalDB create "SomeInstanceV12" 12.0

 

実行結果はこんな感じです。

f:id:kiyokura:20160608191438p:plain

f:id:kiyokura:20160608191445p:plain

参考(MSDN): コマンド ライン管理ツール: SqlLocalDB.exe

*1:作成したいバージョンのSQL Server Express LocalDBがインストールされていることが前提です

*2:12.0はSQL Server 2014の内部バージョン

SSDTの「スナップショット プロジェクト」機能は割と使える気がしました

私はSSDT(SQL Server Data Tools)を普段から使っているのですが、多機能なこともあり普段使ってない機能はまったく触れずに過ごしています。そのため、”実はよく知らない機能”がまだまだあります。

先日不意に、ソリューションエクスプローラーのコンテキストメニューの上のほうにいつも表示されている『スナップショット プロジェクト』ってなんやねん、というのが気になってしまったので、どんな機能か少し試してみました。

f:id:kiyokura:20160606232232p:plain

 

機能の説明

「スナップショット プロジェクト」機能が何をするかについては、以下がすべてのようです。

  • 現在のデータベースプロジェクトのオブジェクトの定義情報のスナップショットを取得する
  • 取得したスナップショットはdacpacファイルで保存される

……そのまんまです。

実際にやってみると、ソリューションエクスプローラ内にSnapshotフォルダが作成され、その中にタイムスタンプ付きのファイル名でdacpacファイルが作成されました。

f:id:kiyokura:20160606232440p:plain

 

ちなみにdacpacファイルですが、ざっくいえばデータベースのオブジェクト定義情報をXML形式で記録してzipで固めたファイルです。 詳しくは以下のMSDNドキュメントを見てみてください:データ層アプリケーション

 

何が嬉しいの?

この機能、前述のとおりプロジェクトのソースコードの現時点のスナップショットファイルが作成されるだけ、といえばそれだけです。もしソースコードのバージョン管理を何もやっていないのであれば、これは有効なソリューションかもしれません。しかしSSDTを利用して開発しているのであれば、通常は何らかのVCS*1を利用しているケースが多いはずです。であるなら、この機能はあまりうまみが無いように思いました。

 

ですが、少し触ってみると、利点も見えてきました。 個人的に感じた一番の利点は、「スキーマ比較機能で簡単に比較・差分更新が出来る」という点です。

SSDTのスキーマ比較機能は、プロジェクトやデータベースインスタンスなどのスキーマ同士を比較し、差分の検出や差分を埋めるための更新(スクリプトの生成と実行)を行ってくれる非常に便利な機能です。このスキーマ比較では、比較のソースとしてプロジェクトやデータベースインスタンスのほかに、『データ層アプリケーションファイル』、すなわちdacpacファイルががそのまま利用できます。

f:id:kiyokura:20160606233357p:plain

この機能とスナップショットを組み合わせると、任意のタイミングのスナップショットと現状のスキーマを比較して、「特定のオブジェクトだけ変更を元に戻す」というような操作も簡単にできます。

もちろんVSCを利用してバージョン管理されていれば、変更履歴から戻すことは可能です。しかし、(コミットの粒度やツールなどにも依存するとは思いますが)一度コミットした変更を履歴をさかのぼって戻すのはそれなりに煩雑だったりしますし、コミット全体ではなく『特定のオブジェクトの変更のみを戻したい』という場合にはさらに面倒になるかもしれません。

 

利用シーン(?)

全体的な作業の進め方によっても利用シーンは変わってくるとは思いますが、例えば以下のような使い方が出来るように思います(VCSとしてgitを想定しています)。

  1. 作業ブランチを作成してチェックアウト
  2. とりあえずスナップショットを作成
  3. 試行錯誤しながら作業(必要があればスナップショットから戻したりし再度スナップショットをとったりしつつ)
  4. ある程度作業がまとまったらコミット、マージ

なお、あらかじめ.gitignoreを利用するなどして、スナップショットファイルがリポジトリに含まれないようにしておくと楽な気がします*2

 

注意点

一つ注意しておかなければならないと思ったのは、『DBプロジェクトがエラーのない状態である必要がある』点です。dacpacが作成されるときに内部でビルドが行われるのですが、この際にエラーがあるとdacpacの生成に失敗します。 ですので、『いじっている最中でまだコンパイルがうまく通らない』という状態のDBオブジェクトがある場合はスナップショットが作成できません。

 

まとめ

SSDTの「スナップショット プロジェクト」機能はシンプルな機能ですが、作業の進め方によっては十分に便利な機能です。VCSによるバージョン管理とも決して排他ではなく、組み合わせることでより便利で柔軟な開発作業を行う道具として利用できる可能性がある機能だと思いました。

*1:version control system, gitとかtfsとかsvnとか……

*2:スナップショットを追加するとsqlprojファイルにも変更がかかったように見えますが、dacpacのエントリが追加されているわけではないようです

HoloLens おさわり会を岡山で開催しました

少し間が空いてしまいましたが、5/21(土)に HoloLens おさわり会 with OITECを開催しました*1。 その名の通り、MicrosoftのMR(Mixed Reality)デバイス『HoloLens』を体験できる会です。

f:id:kiyokura:20160521131346j:plain

HoloLensがどんなものかは 以下のオフィシャルサイト他、検索してもらえれば記事や動画がいろいろ出てくると思います。

www.microsoft.com

この会を開催するにあたって当然HoloLensの現物が必要になるわけですが、これは合同会社 silkyfeelの泉本優輝さんが所有されているものを岡山まで持ってきてもらうことで実現しました!

またKLab株式会社 岡山事業所様のご厚意により会場を準備いただきました。ありがとうございました。

実際どうよ

多少は予備知識があったのですが、期待以上でした。 ※全部個人の感想です。

  • 位置合わせ?ピシッと装着?に最初は苦労した
    • 特に上下の範囲が狭いので上下が見切れないように装着する感じ
    • 視野角が狭いと言われるけど慣れると気にならなく
  • 「ポインタ(≒マウスカーソル)」を顔の向きで動かす
    • 目を固定して首や体の向き・移動で見るものを変える、という動作が必要
    • 顔の正面にポインタが固定されているので、目だけ動かしてもポインタが動かない
    • 割とすぐ慣れた
    • もし将来的に視線トラッキングでポインタが動くようになれば、より自然に操作できそうな気がす
  • 慣れると自然。音も自然。スマホ3DSのARの「なんか浮いてる偽物感」が無い
    • ふっと足元を見るとそこにある、みたいな
  • 置いたオブジェクトの上下左右に回り込める
    • 空間に固定したウィンドウを裏から見れる
    • 床に置いたオブジェクトを真上から見たり
    • オブジェクトと自分の間を人が横切ったらオブジェクトも消えるよ
    • 空間にウィンドウが煩雑に並ぶさまは「機動戦艦ナデシコのオモイカネ」を彷彿とさせて良い(古い
  • 音も空間に追従する
    • 音が鳴ってるオブジェクトがあると、その方向から音が聞こえる
      • 右にあれば右から、後ろにあれば後ろから音が鳴ってるように聞こえる
      • 近づけば当然音が近くなる
  • サンプルに壁ぶち破って敵が出てくるシューティングゲームがあって、実際にすごかった
  • 探偵もの?みたいなサンプルゲームがあって、「ああ、HoloLensでアドベンチャーゲームやるとこうなるのね、とうかスゲー」という感想
  • これでホラーゲーム(零シリーズとか)やると死ねそう
  • VRとは違うベクトルのもの、というのがより実感できた

OITECのスタッフや会場のお世話をしていただいたKLabさんのスタッフの方も含めて20人以上いましたが、時間も4時間強と結構な時間があったため、思い思いに堪能できたんじゃないかと思います。

これが製品として売られるころにはどんなモノが出てくるんだろう、とか、こんなこと実現できそう、とか、こんなことやってみたい、とかいろいろと妄想が膨らむ素敵アイテムでした。

今後の HoloLens おさわり会とか

実際体験してみて、やはりこの手のデバイスは実際に体感しないことには本当のところが解らない、というのにつきました。 今後も名古屋、九州*2、松山等などで開催される予定です。

そのほかにも今後勉強会なども企画されていくらしいので、興味がある方はHoloMagiciansをチェックしてみてください。

*1:自分が体調崩して死んでたりり子供が体調崩してバタバタしてたりでてんやわんやだったというか実は当日も子供が高熱出して出たりで色々とアレ(

*2:倒れたり忙殺されてる間にこのあたりは終わってた

VS 2015 の SSDTの接続先設定ダイアログが使いやすくなっていて大変うれしい件

VS2015 の SQL Server Data Tools(SSDT)が細かなところで使い勝手が良くなっていて大変うれしかったので。

SSDTではそのツールの性質上、接続さきのDBを選択する場面が多々出てきます。VS2013までは、Visual StudioSQL Server を使っていればどこまで見たことがある例の接続ダイアログでした。

VS2015でどうなったかというと……。

 

サーバを選択するダイアログが使いやすくなった

以前はドロップダウンからサーバを選択する感じで、LAN上のサーバがリストアップされるだけ、あとは手打ち入力する必要がありました。

しかし今回からはツリービューで選択でき、ネットワークだけではなく自分のPCのローカル(localdbも含む)やAzure上のSQL Databaseも選択できるようになりました。

f:id:kiyokura:20160421124222p:plain

特に私はlocaldbを利用する場合の書き方をよく忘れ、SQL Server オブジェクトエクスプローラーで探してプロパティーからコピペすることが多かったので手間が省けて大変助かります。素敵。

 

履歴でピン止めできるようになった

以前は、過去に利用したことのある接続履歴数個がドロップダウンに表示されていました。数少ない場合ばいいのですが、多くのDBインスタンスにいろいろ接続しているときは、利用したい接続情報がすぐに履歴から追い出されてしまって面倒な思いをしていました。

今回から、よく使う接続はお気に入りとしてピン止めできるようになりました。超素敵。

f:id:kiyokura:20160421124221p:plain

 

 

これからもSSDTには進化を続けていってもらいたいですね!