クロスプラットフォームでWebアプリ開発
ASP.NET Coreの基本から、実践的・発展的内容まで、丁寧かつ網羅的に解説。順を追い、MVCの基礎とScaffolding機能、ビューエンジンRazorの利用、LINQを使ったモデル開発、モデルバインド/フィルターなどのコントローラー開発、ミドルウェアやサブフレームワークの活用...と扱う内容は盛りだくさん。
各章、解説、練習問題、理解度チェックの3ステップでしっかり学べます。
更新履歴
- FAQ情報:2024年7月5日 更新
目次
- 第1章 イントロダクション
- 1.1 ASP.NET Coreの全体像
- 1.1.1 .NET環境
- 1.1.2 ASP.NET Coreの全体像
- 1.1.3 ASP.NET Coreの学習指針
- 1.2 ASP.NET Core利用のための環境設定
- 1.2.1 ASP.NET Coreプログラミングに必要なソフトウェア
- 1.2.2 .NET SDKのインストール
- 1.2.3 Visual Studio Codeのインストール
- 1.2.4 SQL Serverのインストール
- この章の理解度チェック
- 第2章 ASP.NET Core MVCの基本
- 2.1 ソリューション/プロジェクトの作成
- 2.2 コントローラーの基本
- 2.2.1 コントローラークラスの作成
- 2.2.2 ルーティングの基本
- 2.3 ビューの基本
- 2.3.1 Razorテンプレートの基本
- 2.3.2 レイアウトの基本
- 2.4 モデルの基本
- 2.4.1 Entity Framework Coreとは?
- 2.4.2 EF Core利用のための準備
- 2.4.3 データモデルの生成
- 2.4.4 データベースの作成
- 2.4.5 データアクセスの基本
- 2.4.6 [補足]デバッグの基本
- この章の理解度チェック
- 第3章 Scaffolding機能
- 3.1 Scaffolding機能の実行
- 3.2 一覧画面の実装
- 3.2.1 Indexアクション
- 3.2.2 Index.cshtmlテンプレート
- 3.3 詳細画面の実装
- 3.3.1 Detailsアクション
- 3.3.2 Details.cshtmlテンプレート
- 3.4 新規登録画面の実装
- 3.4.1 Createアクション/Create.cshtmlテンプレート(フォームの生成)
- 3.4.2 Createアクション(入力値の登録)
- 3.5 編集画面の実装
- 3.5.1 Editアクション
- 3.5.2 Edit.cshtmlテンプレート
- 3.6 削除画面の実装
- 3.6.1 Delete/DeleteConfirmedアクション
- この章の理解度チェック
- 第4章 ビュー開発
- 4.1 Razorの基本文法
- 4.1.1 Razor式(@...)
- 4.1.2 @...式による属性値の生成
- 4.1.3 予約文字「@」の扱い
- 4.1.4 コードブロック
- 4.1.5 ディレクティブ
- 4.1.6 サーバーコメント
- 4.2 タグヘルパー/ビューヘルパー
- 4.2.1 選択ボックスを生成する―Selectタグヘルパー
- 4.2.2 データ型に応じて出力を切り替える―DisplayForビューヘルパー
- 4.2.3 データ型に応じて入力要素を切り替える―Inputタグヘルパー
- 4.2.4 ハイパーリンクを生成する―Anchorタグヘルパー
- 4.2.5 HTMLエンコードを無効化する―Rawビューヘルパー
- 4.2.6 Cache Busting対応の画像を生成する―Imageタグヘルパー
- 4.2.7 JavaScriptライブラリをインポートする―Scriptタグヘルパー
- 4.2.8 スタイルシートをインポートする―Linkタグヘルパー
- 4.2.9 環境に応じて出力を分岐する―Environmentタグヘルパー
- 4.2.10 ページの特定の領域だけをキャッシュする―Cacheタグヘルパー
- 4.3 ビューヘルパー/タグヘルパーの自作
- 4.3.1 シンプルなビューヘルパー
- 4.3.2 拡張メソッドによるヘルパー定義
- 4.3.3 HTML文字列を生成するビューヘルパー
- 4.3.4 [例]ラジオボタンリストの生成
- 4.3.5 [補足]@functionsディレクティブ
- 4.3.6 タグヘルパーの基本
- 4.3.7 [例]モデルから画像付きリンクを生成する
- 4.3.8 [補足]タグヘルパーの小さなテクニック
- 4.3.9 タグヘルパーコンポーネントの基本
- 4.4 レイアウト
- 4.4.1 レイアウトを適用するさまざまな方法
- 4.4.2 レイアウトに複数の領域を用意する―セクション
- 4.4.3 レイアウトを入れ子に配置する
- 4.4.4 特定のテンプレートにのみ適用されるスタイルを定義する―Scoped CSS
- 4.5 部分ビュー/ビューコンポーネント
- 4.5.1 部分ビューの基本
- 4.5.2 ビューコンポーネントの基本
- 4.5.3 [例]要素を動的に生成する
- 4.5.4 テンプレート化されたRazorデリゲート
- この章の理解度チェック
- 第5章 モデル開発
- 5.1 エンティティの定義
- 5.1.1 ナビゲーションプロパティの定義
- 5.1.2 ナビゲーションプロパティへのアクセス
- 5.1.3 Null許容参照型とエンティティ
- 5.1.4 アノテーションによる規約のカスタマイズ
- 5.1.5 Fluent APIによる規約のカスタマイズ
- 5.2 マイグレーション
- 5.2.1 マイグレーションの仕組み
- 5.2.2 マイグレーションファイルの構造
- 5.2.3 [補足]マイグレーションで利用できる主なメソッド
- 5.2.4 dotnet efコマンドのさまざまな用法
- 5.3 LINQ to Entities
- 5.3.1 クエリ構文とメソッド構文
- 5.3.2 データの検索条件を指定する―Whereメソッド
- 5.3.3 データを並べ替える―OrderByメソッド
- 5.3.4 特定のプロパティだけを取得する―Selectメソッド
- 5.3.5 特定範囲のデータを取り出す―Skip/Takeメソッド
- 5.3.6 データをグループ化する―GroupByメソッド
- 5.3.7 グループ化した結果を絞り込む―GroupBy+Whereメソッド
- 5.3.8 エンティティ同士を結合する―Joinメソッド
- 5.4 データの登録/更新/削除
- 5.4.1 複数のレコードをまとめて登録する
- 5.4.2 複数のレコードをまとめて更新/削除する
- 5.4.3 エンティティの関係を追加/更新する
- 5.4.4 トランザクション処理を実装する
- 5.4.5 同時実行制御を実装する
- 5.4.6 エンティティを操作した前後の処理を実装する―インタセプター
- 5.5 入力値の検証
- 5.5.1 検証の基本
- 5.5.2 その他の検証属性
- 5.5.3 検証属性の自作―サーバーサイドの実装
- 5.5.4 検証属性の自作―クライアントサイドの実装
- この章の理解度チェック
- 第6章 コントローラー開発
- 6.1 IActionResultオブジェクト
- 6.1.1 テンプレートで出力を生成する―ViewResultクラス
- 6.1.2 ページを部分更新する―PartialViewResultクラス
- 6.1.3 ページをリダイレクトする―RedirectResultクラス
- 6.1.4 ステータスコードだけを出力する―HttpStatusCodeResultクラス
- 6.1.5 テキストのコンテンツを出力する―ContentResultクラス
- 6.1.6 指定されたファイルを出力する―VirtualFileResultクラス
- 6.1.7 バイナリ形式のデータを応答する―FileXxxxxResultクラス(1)
- 6.1.8 iText7で動的にPDFデータを作成する―FileXxxxxResultクラス(2)
- 6.1.9 IActionResult実装クラスの自作
- 6.2 モデルバインド
- 6.2.1 モデルバインドの仕組み
- 6.2.2 リスト/辞書へのバインド
- 6.2.3 ファイルをアップロードする(1)―ファイルシステムへの保存
- 6.2.4 ファイルをアップロードする(2)―データベースへの保存
- 6.2.5 値プロバイダー
- 6.2.6 モデルバインダーの自作
- 6.3 フィルター
- 6.3.1 フィルターの分類
- 6.3.2 フィルターの基本
- 6.3.3 フィルターの非同期化
- 6.3.4 フィルターの実行順序
- 6.3.5 依存性注入を伴うフィルター
- 6.4 標準のフィルター属性
- 6.4.1 クロスサイトリクエストフォージェリ脆弱性を対策する―ValidateAntiForgeryToken属性
- 6.4.2 応答キャッシュを有効にする―ResponseCache属性
- 6.4.3 アクションに認証機能を付与する―Authorize属性
- 6.5 セレクター属性
- 6.5.1 HTTPメソッドに応じてリクエストを振り分ける―HttpXxxxx属性
- 6.5.2 アクションメソッドを無効化する―NonAction属性
- 6.5.3 セレクター属性の自作
- この章の理解度チェック
- 第7章 ASP.NET Coreアプリの構造
- 7.1 サービスと依存性注入
- 7.1.1 標準サービスの注入
- 7.1.2 自作サービスの登録
- 7.1.3 サービスのスコープ(有効期間)
- 7.1.4 AddSingleton/AddScoped/AddTransientメソッドのオーバーロード
- 7.1.5 [補足]特殊なサービス登録メソッド
- 7.2 ミドルウェアとパイプライン
- 7.2.1 ミドルウェアの順序
- 7.2.2 ミドルウェアの作成(Use/Runメソッド)
- 7.2.3 ミドルウェアの自作(Mapメソッド)
- 7.2.4 ミドルウェアクラスの作成
- 7.3 アプリの構成
- 7.3.1 構成情報の取得
- 7.3.2 構成値を自作のクラスにマッピングする―Optionsパターン
- 7.3.3 構成プロバイダー
- 7.3.4 シークレット情報の管理
- 7.4 ロギング
- 7.4.1 ログの基本
- 7.4.2 ログの出力レベルを変更する
- 7.4.3 LogXxxxxメソッドのさまざまな記法
- 7.4.4 ログプロバイダーを追加/削除する
- 7.4.5 ログプロバイダーの自作
- この章の理解度チェック
- 第8章 ミドルウェア
- 8.1 ルーティング
- 8.1.1 URLパターン
- 8.1.2 ルートパラメーターの制約
- 8.1.3 制約条件の自作
- 8.1.4 属性ルーティング
- 8.1.5 エリア
- 8.2 状態管理
- 8.2.1 クッキーを読み書きする
- 8.2.2 セッションを利用する
- 8.2.3 一時データを保存する
- 8.2.4 [補足]HttpContext.Items変数
- 8.3 エラーページ
- 8.3.1 エラーページの基本
- 8.3.2 エラーステータスに応じてページを表示する
- 8.4 静的リソース
- 8.4.1 StaticFileMiddlewareミドルウェアのオプション
- 8.4.2 フォルダー参照、既定のファイルを有効にする
- 8.5 国際化対応
- 8.5.1 国際化対応の基本
- 8.5.2 国際化対応ページの挙動
- 8.5.3 リソースファイルのさまざまな定義方法
- この章の理解度チェック
- 第9章 ASP.NET Coreの主なサブフレームワーク
- 9.1 Razor Pages
- 9.1.1 Razor Pagesアプリの作成
- 9.1.2 プロジェクト既定のファイルを確認する
- 9.1.3 Razor PagesでのScaffolding
- 9.1.4 Scaffoldingされたアプリの確認
- 9.1.5 Razor Pagesのフィルター
- 9.2 ASP.NET Core Web API
- 9.2.1 ASP.NET Core Web APIの基本
- 9.2.2 プロジェクト既定のファイルを確認する
- 9.2.3 Web APIでのScaffolding
- 9.2.4 Scaffoldされたアプリの確認
- 9.2.5 応答フォーマットの制御
- 9.2.6 フォーマッターのカスタマイズ
- 9.2.7 ドキュメントページのカスタマイズ
- 9.2.8 Minimal API
- 9.3 SPAプロジェクト
- 9.3.1 SPAプロジェクトの作成
- 9.3.2 オリジン間リソース共有(CORS)
- この章の理解度チェック
- 付録A 本番環境への移行
- A.1 Microsoft Azureとは?
- A.2 Azureデプロイの準備
- A.3 アプリのデプロイ
- A.4 Azure SQL Databaseの利用
- Column ASP.NET CoreアプリからSQLiteを利用するには?
- Column 単体テストの自動化
- Column 本家サイトを活用する
- 付録B 「練習問題」「この章の理解度チェック」解答
正誤表
現在、正誤情報はありません。
FAQ
Visual Studioのライセンスモデルに従います。Visual Studio Communityと同じく、個人用途をはじめ、学術機関、オープンソース開発には無償で利用できます。ライセンスの詳細については、以下のページを参照してください。
https://marketplace.visualstudio.com/items/ms-dotnettools.csdevkit/license
https://marketplace.visualstudio.com/items/ms-dotnettools.csdevkit/license
更新日: 2024.07.05
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。