「Photino.Blazor - プロジェクト構成」の版間の差分
(→Data/) |
|||
(同じ利用者による、間の5版が非表示) | |||
15行目: | 15行目: | ||
├── Pages/ # Blazorのページコンポーネント | ├── Pages/ # Blazorのページコンポーネント | ||
├── Shared/ # 共有コンポーネント | ├── Shared/ # 共有コンポーネント | ||
├── Properties/ # プロジェクト設定 | ├── Properties/ # プロジェクト設定 | ||
├── _Imports.razor # 共通インポート | ├── _Imports.razor # 共通インポート | ||
38行目: | 37行目: | ||
複数のページで共有されるコンポーネント (ナビゲーションメニュー、レイアウト等) を格納する。<br> | 複数のページで共有されるコンポーネント (ナビゲーションメニュー、レイアウト等) を格納する。<br> | ||
<br> | <br> | ||
==== | ==== Properties/ ==== | ||
アプリケーションのプロパティやビルド設定が含まれる。<br> | |||
<br> | |||
Properties/ディレクトリはASP.NET CoreのWebアプリケーションで使用され、開発環境での起動設定 (ポート番号、環境変数等) を定義する。<br> | |||
<br> | |||
Photino.Blazorはデスクトップアプリケーションであるため、Webサーバ設定 (ポート番号やURL等) は不要である。<br> | |||
そのため、Properties/ディレクトリが無くても問題なく動作する。<br> | |||
<br> | <br> | ||
Photino.Blazorでは、appsettings.jsonファイルやProgram.cs内での設定により、必要な構成を行うことができる。<br> | |||
<br> | <br> | ||
==== _Imports.razor ==== | ==== _Imports.razor ==== | ||
プロジェクト全体のRazorファイルで共通して使用する名前空間をインポートする。<br> | |||
<br> | |||
主な役割<br> | |||
* 共通の名前空間をプロジェクト全体で使用可能にする。 | |||
* 各Razorファイルで毎回同じ名前空間を記述する手間を省く。 | |||
* <code><プロジェクトの名前空間></code>の部分は、実際のプロジェクト名に置き換える。 | |||
<br> | |||
<syntaxhighlight lang="xml"> | |||
@using System.Net.Http | |||
@using Microsoft.AspNetCore.Components.Forms | |||
@using Microsoft.AspNetCore.Components.Routing | |||
@using Microsoft.AspNetCore.Components.Web | |||
@using Microsoft.JSInterop | |||
@using <プロジェクトの名前空間>.Shared | |||
@using <プロジェクトの名前空間>.Models | |||
@using <プロジェクトの名前空間>.Services | |||
</syntaxhighlight> | |||
<br> | <br> | ||
==== App.razor ==== | ==== App.razor ==== | ||
Blazorアプリケーションのルートコンポーネントであり、ルーティングの設定等が含まれている。<br> | |||
<br> | |||
主な役割<br> | |||
* Router | |||
*: ルーティング設定の定義 | |||
* Found | |||
*: 有効なルートが見つかった場合の表示 | |||
* NotFound | |||
*: 無効なルートの場合の表示 | |||
*: 一般的には、MainLayoutをデフォルトレイアウトとして設定 | |||
<br> | |||
<syntaxhighlight lang="xml"> | |||
<Router AppAssembly="@typeof(Program).Assembly"> | |||
<Found Context="routeData"> | |||
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> | |||
</Found> | |||
<NotFound> | |||
<LayoutView Layout="@typeof(MainLayout)"> | |||
<p>Sorry, there's nothing at this address.</p> | |||
</LayoutView> | |||
</NotFound> | |||
</Router> | |||
</syntaxhighlight> | |||
<br> | <br> | ||
==== Program.cs ==== | ==== Program.cs ==== | ||
アプリケーションのエントリーポイントであり、Photinoウィンドウの初期化とBlazorの統合を行う。<br> | |||
<br> | <br> | ||
主な役割<br> | |||
* アプリケーションのエントリーポイント | |||
* DI (依存性注入) コンテナの設定 | |||
* Photinoウィンドウの初期化と構成 | |||
* Blazorフレームワークとの統合 | |||
* アプリケーション全体の設定とライフサイクル管理 | |||
<br> | |||
<syntaxhighlight lang="c#"> | |||
using System; | |||
using System.Threading.Tasks; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using Microsoft.Extensions.Configuration; | |||
using Photino.Blazor; | |||
using <プロジェクトの名前空間>.Data; | |||
namespace <プロジェクトの名前空間> | |||
{ | |||
class Program | |||
{ | |||
/// <summary> | |||
/// アプリケーションのエントリーポイント | |||
/// STAThreadは単一スレッドのアパートメントモデルを指定 | |||
/// </summary> | |||
/// <param name="args">コマンドライン引数</param> | |||
[STAThread] | |||
private static void Main(string[] args) | |||
{ | |||
// デフォルト設定でPhotinoBlazorアプリケーションビルダーを作成 | |||
var appBuilder = PhotinoBlazorAppBuilder.CreateDefault(args); | |||
// 設定ファイル (appsettings.json) を読み込む | |||
// optional : trueは、ファイルが存在しない場合もエラーにしない設定 | |||
appBuilder.Configuration.AddJsonFile("appsettings.json", optional: true); | |||
// DIコンテナにサービスを登録 | |||
appBuilder.Services | |||
.AddLogging() // ロギングサービスの登録 | |||
.AddSingleton<WeatherForecastService>(); // アプリケーション固有のサービスを登録 | |||
// Blazorアプリケーションのルートコンポーネント (最上位のコンポーネント) とセレクタの登録 | |||
// <App>は、App.razorファイルで定義されたコンポーネントを参照する | |||
// "app"は、HTML内のセレクタを指定する | |||
// HTMLファイル (一般的には、wwwroot/index.html) 内にある<app></app>または<div id="app"></div>のような要素に対して、 | |||
// Blazorのルートコンポーネントを配置するよう指示する | |||
// | |||
// Appコンポーネントが"app"というセレクタに割り当てられる | |||
appBuilder.RootComponents.Add<App>("app"); | |||
// アプリケーションのビルド | |||
var app = appBuilder.Build(); | |||
// appsettings.jsonから設定を取得 | |||
var appSettings = app.Configuration.GetSection("ApplicationSettings"); | |||
var windowTitle = appSettings["WindowTitle"] ?? "Photino.Blazor App"; | |||
// ウィンドウのカスタマイズ | |||
app.MainWindow | |||
.SetIconFile("favicon.ico") // アイコンファイルの設定 | |||
.SetTitle(windowTitle) // ウィンドウタイトルの設定 | |||
.SetSize( // ウィンドウサイズの設定 | |||
int.Parse(appSettings["WindowWidth"] ?? "800"), | |||
int.Parse(appSettings["WindowHeight"] ?? "600") | |||
) | |||
.Center(); // ウィンドウを中央に配置 | |||
// JavaScript -> C#の通信用のメッセージハンドラを登録 | |||
app.MainWindow.RegisterWebMessageReceivedHandler((s, e) => | |||
{ | |||
Console.WriteLine($"Message received: {e}"); | |||
}); | |||
// 未処理の例外をグローバルにハンドリング | |||
AppDomain.CurrentDomain.UnhandledException += (sender, error) => | |||
{ | |||
// エラーが発生した場合、メッセージボックスで表示 | |||
app.MainWindow.ShowMessage("エラー", error.ExceptionObject.ToString()); | |||
}; | |||
// アプリケーションの実行 | |||
// ウィンドウの表示と終了までのイベントループを管理 | |||
app.Run(); | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<code>appBuilder.RootComponents.Add<App>("app");</code>において、<br> | |||
この仕組みにより、BlazorコンポーネントとHTMLの橋渡しが行われる。<br> | |||
<br> | |||
Blazorフレームワークは指定されたセレクタをDOMから探して、そこにコンポーネントツリーを配置する。<br> | |||
Appコンポーネントは、一般的にルーティングや全体のレイアウト等のアプリケーションの基本構造を定義する。<br> | |||
<br> | |||
また、複数のルートコンポーネントを別々のセレクタに登録することも可能である。<br> | |||
<br> | |||
この仕組みはBlazorの<u>クライアントサイドレンダリングモデル</u>の中核部分で、SPA (シングルページアプリケーション) としての機能を可能にしている。<br> | |||
<br> | |||
==== appsettings.json ==== | ==== appsettings.json ==== | ||
アプリケーションの設定を格納するJSONファイルである。<br> | アプリケーションの設定を格納するJSONファイルである。<br> |
2025年3月16日 (日) 01:54時点における最新版
概要
Photino Blazorのプロジェクト構成は、標準的なBlazorプロジェクトの構成に似ている。
しかし、Photinoを使用してデスクトップアプリケーションとして実行される点が特徴である。
プロジェクト構成
基本的なプロジェクト構成を、以下に示す。
PhotinoBlazorApp/ │ ├── wwwroot/ # 静的ファイル (CSS, JavaScript, 画像等) │ ├── css/ │ ├── js/ │ └── images/ ├── Pages/ # Blazorのページコンポーネント ├── Shared/ # 共有コンポーネント ├── Properties/ # プロジェクト設定 ├── _Imports.razor # 共通インポート ├── App.razor # アプリケーションのルート ├── Program.cs # アプリケーションのエントリーポイント └── appsettings.json # アプリケーション設定
各ディレクトリ / ファイルの役割
Photino Blazorアプリケーションでは、Program.csが重要であり、PhotinoウィンドウとBlazorの統合が設定される場所である。
PhotinoはネイティブUIレイヤーを提供し、BlazorのWebViewとして機能する。
wwwroot/
静的ファイルを格納するディレクトリである。
CSS、JavaScript、画像等が含まれる。
Pages/
Blazorのページコンポーネントを格納する。
各ページは通常、.razor拡張子を持つ。
複数のページで共有されるコンポーネント (ナビゲーションメニュー、レイアウト等) を格納する。
Properties/
アプリケーションのプロパティやビルド設定が含まれる。
Properties/ディレクトリはASP.NET CoreのWebアプリケーションで使用され、開発環境での起動設定 (ポート番号、環境変数等) を定義する。
Photino.Blazorはデスクトップアプリケーションであるため、Webサーバ設定 (ポート番号やURL等) は不要である。
そのため、Properties/ディレクトリが無くても問題なく動作する。
Photino.Blazorでは、appsettings.jsonファイルやProgram.cs内での設定により、必要な構成を行うことができる。
_Imports.razor
プロジェクト全体のRazorファイルで共通して使用する名前空間をインポートする。
主な役割
- 共通の名前空間をプロジェクト全体で使用可能にする。
- 各Razorファイルで毎回同じ名前空間を記述する手間を省く。
<プロジェクトの名前空間>
の部分は、実際のプロジェクト名に置き換える。
@using System.Net.Http
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.JSInterop
@using <プロジェクトの名前空間>.Shared
@using <プロジェクトの名前空間>.Models
@using <プロジェクトの名前空間>.Services
App.razor
Blazorアプリケーションのルートコンポーネントであり、ルーティングの設定等が含まれている。
主な役割
- Router
- ルーティング設定の定義
- Found
- 有効なルートが見つかった場合の表示
- NotFound
- 無効なルートの場合の表示
- 一般的には、MainLayoutをデフォルトレイアウトとして設定
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
Program.cs
アプリケーションのエントリーポイントであり、Photinoウィンドウの初期化とBlazorの統合を行う。
主な役割
- アプリケーションのエントリーポイント
- DI (依存性注入) コンテナの設定
- Photinoウィンドウの初期化と構成
- Blazorフレームワークとの統合
- アプリケーション全体の設定とライフサイクル管理
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Photino.Blazor;
using <プロジェクトの名前空間>.Data;
namespace <プロジェクトの名前空間>
{
class Program
{
/// <summary>
/// アプリケーションのエントリーポイント
/// STAThreadは単一スレッドのアパートメントモデルを指定
/// </summary>
/// <param name="args">コマンドライン引数</param>
[STAThread]
private static void Main(string[] args)
{
// デフォルト設定でPhotinoBlazorアプリケーションビルダーを作成
var appBuilder = PhotinoBlazorAppBuilder.CreateDefault(args);
// 設定ファイル (appsettings.json) を読み込む
// optional : trueは、ファイルが存在しない場合もエラーにしない設定
appBuilder.Configuration.AddJsonFile("appsettings.json", optional: true);
// DIコンテナにサービスを登録
appBuilder.Services
.AddLogging() // ロギングサービスの登録
.AddSingleton<WeatherForecastService>(); // アプリケーション固有のサービスを登録
// Blazorアプリケーションのルートコンポーネント (最上位のコンポーネント) とセレクタの登録
// <App>は、App.razorファイルで定義されたコンポーネントを参照する
// "app"は、HTML内のセレクタを指定する
// HTMLファイル (一般的には、wwwroot/index.html) 内にある<app></app>または<div id="app"></div>のような要素に対して、
// Blazorのルートコンポーネントを配置するよう指示する
//
// Appコンポーネントが"app"というセレクタに割り当てられる
appBuilder.RootComponents.Add<App>("app");
// アプリケーションのビルド
var app = appBuilder.Build();
// appsettings.jsonから設定を取得
var appSettings = app.Configuration.GetSection("ApplicationSettings");
var windowTitle = appSettings["WindowTitle"] ?? "Photino.Blazor App";
// ウィンドウのカスタマイズ
app.MainWindow
.SetIconFile("favicon.ico") // アイコンファイルの設定
.SetTitle(windowTitle) // ウィンドウタイトルの設定
.SetSize( // ウィンドウサイズの設定
int.Parse(appSettings["WindowWidth"] ?? "800"),
int.Parse(appSettings["WindowHeight"] ?? "600")
)
.Center(); // ウィンドウを中央に配置
// JavaScript -> C#の通信用のメッセージハンドラを登録
app.MainWindow.RegisterWebMessageReceivedHandler((s, e) =>
{
Console.WriteLine($"Message received: {e}");
});
// 未処理の例外をグローバルにハンドリング
AppDomain.CurrentDomain.UnhandledException += (sender, error) =>
{
// エラーが発生した場合、メッセージボックスで表示
app.MainWindow.ShowMessage("エラー", error.ExceptionObject.ToString());
};
// アプリケーションの実行
// ウィンドウの表示と終了までのイベントループを管理
app.Run();
}
}
}
appBuilder.RootComponents.Add<App>("app");
において、
この仕組みにより、BlazorコンポーネントとHTMLの橋渡しが行われる。
Blazorフレームワークは指定されたセレクタをDOMから探して、そこにコンポーネントツリーを配置する。
Appコンポーネントは、一般的にルーティングや全体のレイアウト等のアプリケーションの基本構造を定義する。
また、複数のルートコンポーネントを別々のセレクタに登録することも可能である。
この仕組みはBlazorのクライアントサイドレンダリングモデルの中核部分で、SPA (シングルページアプリケーション) としての機能を可能にしている。
appsettings.json
アプリケーションの設定を格納するJSONファイルである。
主な設定項目
- Logging
- ログ出力の詳細レベル設定
- AllowedHosts
- アプリケーションにアクセスできるホスト
- ApplicationSettings
- Photinoウィンドウの設定 (タイトル、サイズ等)
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ApplicationSettings": {
"WindowTitle": "Photino.Blazor App",
"WindowWidth": 800,
"WindowHeight": 600
}
}