ASP.NET Core フレームワークを用いて文献管理システムを作る 【番外編 MacOSで開発する#1】

1. MacOS でも Core を動かしたい

たまたま MacOS の環境があったので、Core を動かしていきたいと思います。(ASP.NET Core と書くと長いので今後は Core と書きます。)
さて、先日まで文献管理システムを Linux で動かしていましたが、Mac でも同じように開発できるかと疑問に思っていました。友人の話によると Identity (認証ページ) を生成する画面が出ないとのことなので、自分の環境でも作ってみます。環境はこちら。 f:id:takunology:20190625015623j:plain

2. 環境構築

まずは Core を実行するための dotnet コマンドを動かせるようにします。と思ったら、Visual Studio for Mac を導入するときに、.NET Core を選択していれば勝手に環境構築されてます。バージョンは画像の通りです。 f:id:takunology:20190625020053p:plain

環境構築終了。あとはデータベースですが、この記事を参考にしてください。

takunology.hatenablog.jp

3. プロジェクトの作成

VS を起動して Core の中にある Webアプリケーション(モデル ビュー コントローラ) を選択して作ってみます。 f:id:takunology:20190625020249p:plain

プロジェクト名は適当につけてみます。 f:id:takunology:20190625020443p:plain

これで作成すると、Windows 版では 認証ページを設定できるのですが... f:id:takunology:20190625020934p:plain

プロジェクトが作成されますね。とりあえず実行してみます。 f:id:takunology:20190625021256p:plain

問題なく動きましたね。ただ、認証ページは Windows版と異なる方法で導入しないといけないようです。

4. ユーザ認証機能の導入とプロジェクト作成

どうやら、アプリから作ろうとするとだめらしいですね。仕方ないのでコマンドから生成していきます。私はわかりやすい場所にデスクトップを選択しました。カレントディレクトリに生成されるので注意してください。

takunorojiinoMac:desktop takunology$ dotnet new mvc -o BooksDatabase -uld --auth Individual
テンプレート "ASP.NET Core Web App (Model-View-Controller)" が正常に作成されました。
このテンプレートには Microsoft 以外からのテクノロジが含まれています。詳細については https://aka.ms/aspnetcore-template-3pn-210 をご覧ください。

作成後のアクションを処理しています...
'dotnet restore' を BooksDatabase/BooksDatabase.csproj で実行しています...
  /Users/takunology/Desktop/BooksDatabase/BooksDatabase.csproj の復元が 1.31 sec で完了しました。

正常に復元されました。

コマンドについてですが、

オプション 意味
new プロジェクトの新規作成
mvc プロジェクトの種類 (mvcモデル)
-o アウトプット
BooksDatabase BooksDatabase というプロジェクト名で作成
-uld LocalDB を使用する
-auth 認証の種類
Individual ユーザ認証タイプで生成

という意味らしいです。参考サイト

docs.microsoft.com


さて、デスクトップに BooksDatabase というフォルダができています。 f:id:takunology:20190625022415p:plain

中身はプロジェクトフォルダになっています。その中にある BooksDatabase.csproj を開くとプロジェクト (Visual Studio) が立ちあがります。 f:id:takunology:20190625022711p:plain

Migrations には ApplicationDbContext が入っており、これが認証用データベースの移行データです。また、Areas には Identity つまり認証ページに関する情報が入るようになっています。前回の記事を見たことある人はこの後の展開はわかると思います。データベースの更新ですね。プロジェクト本体のディレクトリに移動してコマンドを打ちます。

takunorojiinoMac:BooksDatabase takunology$ dotnet ef database update

f:id:takunology:20190625024606p:plain

はい、無事にエラーです。LocalDB は Mac に対応していません。よって前回の記事で紹介した MySQL が役にたつわけです。

5. MySQL データベースへの接続と更新

appsettings.json にある接続文字列を自分のデータベースの環境に替えます。 f:id:takunology:20190625024815p:plain

私は次のように変更しました。パスワードは各自で設定してください。 f:id:takunology:20190625025103j:plain

さて、これでデータベースへの接続文字列を変更できました。次にStartup.cs の .UseSqlServer を .UseMySql に変更します。 f:id:takunology:20190625033943j:plain

設定ができたら保存がてらビルドしてエラーチェックを行います。

dotnet build
takunorojiinoMac:BooksDatabase takunology$ dotnet build
.NET Core 向け Microsoft (R) Build Engine バージョン 16.1.76+g14b0a930a7
Copyright (C) Microsoft Corporation.All rights reserved.

  /Users/takunology/Desktop/BooksDatabase/BooksDatabase.csproj の復元が 61.06 ms で完了しました。
  BooksDatabase -> /Users/takunology/Desktop/BooksDatabase/bin/Debug/netcoreapp2.1/BooksDatabase.dll
  BooksDatabase -> /Users/takunology/Desktop/BooksDatabase/bin/Debug/netcoreapp2.1/BooksDatabase.Views.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:01.70

成功したのでエラーはないです。この状態でデータベースを更新します。

LocalDB is not supported on this platform.

同じエラーですね。なぜなら SQL 接続するための機能が不足しているためです。ここで、その機能を導入します。 BooksDatabase > 追加 > Nuget パッケージのインストール を開きます。 f:id:takunology:20190625025835j:plain

検索窓に Pomelo.EntityFrameworkCore.MySql と入力してパッケージを追加します。バージョンは 2.1.0 にしてください。 f:id:takunology:20190625030212p:plain

追加できると依存関係に生成されます。 f:id:takunology:20190625030450p:plain

導入できたら restore で一度 NuGet を復元して、ビルドします。リストア のコマンドは以下の通りです。

dotnet restore

ビルドが完了したらデータベースを更新します。 f:id:takunology:20190625032218p:plain

Done. と表示されれば OK です。
MySQL データベースを確認してみます。

mysql> show databases;
+----------------------+
| Database             |
+----------------------+
| ApplicationDbContext |
| information_schema   |
| mysql                |
| performance_schema   |
| sys                  |
+----------------------+
5 rows in set (0.00 sec)

ApplicationDbContext が生成されていることが確認できました。

6. ユーザ認証を試す

早速実行して登録とログインをしてみます。 Visual Studio から直接実行してもいいですが、ログが見れるようにターミナルで実行してみます。

7. まとめ

Windows版と違い、ユーザ認証機能を用いる場合はターミナルからプロジェクトを作成する必要がありました。しかし、そのあとの動きについてはほぼ同じです。データベースの種類が異なるくらいで同じ動きをさせることができました。次回は日本語化する前に文献管理用のデータベースを作ってみたいと思います。

お疲れさまでした。