1. MacOS でも Core を動かしたい
たまたま MacOS の環境があったので、Core を動かしていきたいと思います。(ASP.NET Core と書くと長いので今後は Core と書きます。)
さて、先日まで文献管理システムを Linux で動かしていましたが、Mac でも同じように開発できるかと疑問に思っていました。友人の話によると Identity (認証ページ) を生成する画面が出ないとのことなので、自分の環境でも作ってみます。環境はこちら。
2. 環境構築
まずは Core を実行するための dotnet コマンドを動かせるようにします。と思ったら、Visual Studio for Mac を導入するときに、.NET Core を選択していれば勝手に環境構築されてます。バージョンは画像の通りです。
環境構築終了。あとはデータベースですが、この記事を参考にしてください。
3. プロジェクトの作成
VS を起動して Core の中にある Webアプリケーション(モデル ビュー コントローラ) を選択して作ってみます。
プロジェクト名は適当につけてみます。
これで作成すると、Windows 版では 認証ページを設定できるのですが...
プロジェクトが作成されますね。とりあえず実行してみます。
問題なく動きましたね。ただ、認証ページは 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 | ユーザ認証タイプで生成 |
という意味らしいです。参考サイト
さて、デスクトップに BooksDatabase というフォルダができています。
中身はプロジェクトフォルダになっています。その中にある BooksDatabase.csproj を開くとプロジェクト (Visual Studio) が立ちあがります。
Migrations には ApplicationDbContext が入っており、これが認証用データベースの移行データです。また、Areas には Identity つまり認証ページに関する情報が入るようになっています。前回の記事を見たことある人はこの後の展開はわかると思います。データベースの更新ですね。プロジェクト本体のディレクトリに移動してコマンドを打ちます。
takunorojiinoMac:BooksDatabase takunology$ dotnet ef database update
はい、無事にエラーです。LocalDB は Mac に対応していません。よって前回の記事で紹介した MySQL が役にたつわけです。
5. MySQL データベースへの接続と更新
appsettings.json にある接続文字列を自分のデータベースの環境に替えます。
私は次のように変更しました。パスワードは各自で設定してください。
さて、これでデータベースへの接続文字列を変更できました。次にStartup.cs の .UseSqlServer を .UseMySql に変更します。
設定ができたら保存がてらビルドしてエラーチェックを行います。
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 パッケージのインストール を開きます。
検索窓に Pomelo.EntityFrameworkCore.MySql と入力してパッケージを追加します。バージョンは 2.1.0 にしてください。
追加できると依存関係に生成されます。
導入できたら restore で一度 NuGet を復元して、ビルドします。リストア のコマンドは以下の通りです。
dotnet restore
ビルドが完了したらデータベースを更新します。
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版と違い、ユーザ認証機能を用いる場合はターミナルからプロジェクトを作成する必要がありました。しかし、そのあとの動きについてはほぼ同じです。データベースの種類が異なるくらいで同じ動きをさせることができました。次回は日本語化する前に文献管理用のデータベースを作ってみたいと思います。
お疲れさまでした。