SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET最新版でASP.NET Core

.NET 6でASP.NET CoreのRazor Pagesアプリケーションにデータ処理を絡めた機能拡張を施す

.NET最新版でASP.NET Core 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

データベースのマイグレーションを行う

 モデルクラスやデータベースコンテキストの作成は行いましたが、データベースそのものはまだ作成されていません。データベースの作成は、マイグレーション(migration)という作業で行います。マイグレーションとは移住といった意味で、ソフトウェア開発の世界ではある環境から別の環境へのプログラムやデータの移行を指します。

 データベースにおいては、モデルクラスで定義されたプロパティをもとに、データベースのテーブル定義を行う作業を意味します。モデルの定義とテーブルの定義をそれぞれ行うのではなく、モデルの定義だけを行えばテーブルの定義は自動化されるので、データベースを直接触る必要もなく、アプリケーション開発が効率化されます。

 では、マイグレーションを行いましょう。マイグレーションは、2つのステップで行います。マイグレーションファイルの作成と、それによるデータベースへの反映です。それぞれ、dotnet ef migrationsコマンドとdotnet ef databaseコマンドで行います。以下のコマンドをプロジェクトのルートフォルダにて実行してください。

% dotnet ef migrations add InitialCreate
…略…
% dotnet ef database update
…略…

 dotnet ef migrationsコマンドの引数InitialCreateは任意です。これが、マイグレーションファイルの名前に使われます(Migrations/20220310123532_InitialCreate.csなど)。何を目的としたマイグレーションファイルなのかわかるような名前にすると良いでしょう。

 なお、マイグレーションファイルはプロジェクトのルート直下のMigrationsフォルダ以下に作成されます。通常は、マイグレーションファイルの中身を編集する必要はないですが、中身を軽く見ておくことにしましょう。

リスト2:Migrations/20220310123532_InitialCreate.cs
…略…
public partial class InitialCreate : Migration	(1)
{
    protected override void Up(MigrationBuilder migrationBuilder)	(2)
    {
        migrationBuilder.CreateTable(	(3)
            name: "Footmark",
            columns: table => new
            {
              ID = table.Column<int>(type: "INTEGER", nullable: false)
                  .Annotation("Sqlite:Autoincrement", true),
              YourName = table.Column<string>(type: "TEXT", nullable: false),
              Message = table.Column<string>(type: "TEXT", nullable: false),
              VisitTime = table.Column<DateTime>(type: "TEXT", nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Footmark", x => x.ID);
            });
    }

    protected override void Down(MigrationBuilder migrationBuilder)	(4)
    {
        migrationBuilder.DropTable(	(5)
            name: "Footmark");
    }
}

 見ての通り、マイグレーションファイルとはクラスファイルです。クラスは、Migrationクラスを継承した、dotnet ef migrationsコマンドの引数で指定される名前になります(1)。クラスには、メソッドが2個あります。(2)のUpメソッド、(4)のDownメソッドです。それぞれ、マイグレーションを実行するとき、マイグレーションを取り消す(ロールバックする)ときに実行されます。実行では(3)のCreateTableでテーブル作成、取消では(5)のDropTableでテーブル削除が行われます。

 すなわちマイグレーションとは、マイグレーションファイルに書かれたUpメソッド、Downメソッドを実行することと言えます。実際に行わせたいことは、それぞれのメソッドの中に書いておけばいいわけです。

 dotnet ef database updateコマンドは、マイグレーションファイルをもとにテーブルの作成・更新・削除を実行します。

 これらのコマンドを実行したあとにプロジェクトのルートフォルダを見ると、RazorPagesFootmarkContext-7671a142-….dbといったSQLiteのデータベースファイルが作成されていることがわかります。

アプリケーションの実行

 データベースが作成されたので、今度こそアプリケーションが実行できるようになりました。作成・変更されたファイルの中身を見るのは次回にして、まずはアプリケーションを実行してみます。[Ctrl]+[F5]で実行しますが、このままだと第2回で作成したサンプルアプリケーションのトップ画面が表示されるだけです。今回はモデルを追加してScaffoldingを行ったので、モデルとアクションに基づくURL(https://localhost:7040/Footmarks/Index)を再指定してページを開き直します。図4のような一覧画面になればこれまでの作業は成功です。

足あとアプリの一覧画面

図4:足あとアプリの一覧画面

 当然のことながら、まだ足あとはありませんので、[Create New]リンクをクリックして足あとを登録しましょう。ページがhttps://localhost:7040/Footmarks/Createに移動するので、名前とメッセージ、現在日時を入力して[Create]をクリックすると、一覧画面に戻ります。入力した足あとが表示されていることを確認してください。足あとの右に表示されている[Edit][Detail][Delete]のリンクをクリックして、いろいろと操作してみてください。

足あとの新規入力画面

図5:足あとの新規入力画面

新規入力が範囲された一覧画面

図6:新規入力が範囲された一覧画面

 これまでの作業で、CRUDページを持った足あとアプリができあがりました。特にウィザードなどを使わなくても、コマンド操作と少しのファイル作成でこれだけのことができるのは素晴らしいですね。

まとめ

 今回は、ページ指向のフレームワークであるRazor Pagesのアプリケーションにモデルを追加し、ScaffoldingによってCRUDページを作成して実際に動作させてみました。シンプルな手順でRazor Pagesアプリケーションの基本機能を作成できることを理解していただけたのではないかと思います。次回は、Razor Pagesの締めくくりとして、作成されたファイルの解説とカスタマイズを行っていきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
.NET最新版でASP.NET Core連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15906 2023/05/26 17:21

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング