SHOEISHA iD

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

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

マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~

.NET MAUIアプリ構築で、より安全なプロキシ方式を実装する

マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~ 第7回

動作確認

 すべての実装が完了したら、動作を確認してみましょう。

エンドポイントの動作確認

 まず、APIエンドポイントが正しく動作するか確認します。今回は、Visual Studioに備わるHTTPクライアント機能を利用してみます。ImageGenerator.Webプロジェクトに、「HTTPファイル」テンプレートを使って、ImageGenerator.Web.httpという名前のファイルを新規作成します。そのファイルに次の画像生成エンドポイント用のリクエストを記述します。

[リスト5]ImageGenerator.Web.http
POST https://localhost:7299/api/generate-image
Content-Type: application/json

{
  "prompt": "レンガの壁の前に停められた赤い自転車",
  "quality": 0,
  "size": 0
}

 .httpファイルは、Visual StudioのHTTPクライアント機能で使用するファイル形式で、HTTPリクエストを記述してそのまま送信できます。Postmanなどの外部ツールを使わずに、ソリューション内でAPIの動作確認ができます。

 執筆時点のVisual Studio 2026では、このファイルを開くと、POSTリクエストのすぐ上に「要求の送信」と「デバッグ」というリンクが表示されます。「デバッグ」をクリックすれば、デバッグ実行された後にリクエストが送信され、エディタ横のペインにレスポンスが表示されます。プロジェクトが起動済みの場合は「要求の送信」でPOSTリクエストができます。

 このPOSTリクエストが成功した場合は、ステータスコード200とともに、次のJSONが返されます。

{
  "imageUrl": "https://oaidalleapiprodscus.blob.core.windows.net/..."
}
リクエストとレスポンス(正常時)
リクエストとレスポンス(正常時)

 promptを空文字列にして送信すると、ステータスコード400とProblemDetails形式のエラー応答が返ります。

{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "Bad Request",
  "status": 400,
  "detail": "プロンプトを入力してください"
}
リクエストとレスポンス(異常時)
リクエストとレスポンス(異常時)

MAUIアプリでの確認

 前回と同様に、ターミナルから、ImageGenerator.Webプロジェクトのフォルダに移動し、「dotnet run --launch-profile https」で起動しておきます。そして、Visual StudioでImageGeneratorプロジェクトをAndroidエミュレータで起動します。

 画面の見た目や操作手順は前回までと変わらず、同じように画像が生成・表示されれば成功です。IImageGenerationServiceというインターフェイスを介して実装を抽象化しているため、内部処理をサーバー経由方式に差し替えても、UI側のコードはまったく変更する必要がありません。

エミュレータでの動作画面
エミュレータでの動作画面

トラブルシューティング

 接続エラーやHTTPS証明書のエラーについては、前回の対処方法を参照してください。

セキュリティに関する注意

 今回の実装で、サーバーのみでAPIキーを使用する形になりました。しかし、現状では/api/generate-imageエンドポイントに認証がないため、URLを知っている人は誰でも画像生成を実行できてしまいます。本番環境へ進むうえでは、次の対策が必要です。

  • 認証・認可の追加(JWT認証、デバイス認証など)
  • レート制限の実装(1ユーザーあたりの呼び出し回数制限)
  • 入力値の検証強化

 いずれも、ASP.NET CoreやAzureが標準機能として提供しているしくみで実装できます。必要に応じて、Microsoftの公式ドキュメントなどを参照して試してみてはいかがでしょうか。

GPT Imageモデルへの差し替えについて

 第3回で触れたとおり、本連載では画像生成APIに「DALL-E 3」を使用してきました。現在のGPT Imageモデルに差し替える場合は、戻り値が画像URLではなく、base64エンコードされた画像データ(b64_json)になる点に注意してください。

 本連載のようにURL文字列をそのままimg要素のsrcに渡す設計では動作しないため、エンドポイントの戻り値とクライアント側の表示処理を、base64またはバイナリデータに対応させる必要があります。なお、サーバー経由でAPIキーを保護する考え方は、そのまま利用できます。

次のページ
補足:Webアプリのレンダリングモード

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

マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/24585 2026/06/26 09:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング