C# (.NET 8) で DynamoDB に書き込む方法|Windows フォーム + AWS SDK

DynamoDB に書き込む

Visual Studio 2022 + Windows フォームアプリで AWSSDK.DynamoDBv2 を使い、C# (.NET 8) からAWS DynamoDB にデータを書き込む実装例を紹介します。

💡 AWS_ACCESS_KEY_ID などの認証情報をアプリ内でユーザー入力するケースを想定


🔰 前提条件

以下の環境を想定しています:

  • Windows 11 / 10
  • Visual Studio 2022
  • .NET 8(Windows Forms アプリ)
  • AWS IAM ユーザーのアクセスキー保有済み
  • DynamoDB テーブルが作成済み(例:MySampleTable

🛠 NuGet パッケージのインストール

まずは必要な AWS SDK パッケージをインストールしましょう。

1. AWSSDK.DynamoDBv2 の追加

Visual Studio の「ソリューションエクスプローラー」→「NuGet パッケージの管理」→「参照」タブで、以下のパッケージをインストールします:

AWSSDK.DynamoDBv2

またはパッケージマネージャーコンソールで:

Install-Package AWSSDK.DynamoDBv2

🖼 フォームのUI想定

フォームに以下の UI を設置します:

コントロールName備考
TextBoxtxtAccessKeyAWS_ACCESS_KEY_ID
TextBoxtxtSecretKeyAWS_SECRET_ACCESS_KEY
TextBoxtxtSessionTokenAWS_SESSION_TOKEN(省略可)
TextBoxtxtRegionAWS_DEFAULT_REGION
ButtonbtnRun書き込み実行ボタン

※ セキュリティ上、UseSystemPasswordChar = true 推奨

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html


💻 実装コード例

ボタンクリックで DynamoDB に書き込む処理

using Amazon;
using Amazon.Runtime;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

private async void btnRun_Click(object sender, EventArgs e)
{
    var accessKey = txtAccessKey.Text.Trim();
    var secretKey = txtSecretKey.Text.Trim();
    var sessionToken = txtSessionToken.Text.Trim();
    var regionString = txtRegion.Text.Trim();

    if (string.IsNullOrEmpty(accessKey) || string.IsNullOrEmpty(secretKey) || string.IsNullOrEmpty(regionString))
    {
        MessageBox.Show("必要な情報が入力されていません。");
        return;
    }

    RegionEndpoint region;
    try
    {
        region = RegionEndpoint.GetBySystemName(regionString);
    }
    catch
    {
        MessageBox.Show("リージョン名が不正です。例: ap-northeast-1");
        return;
    }

    AWSCredentials credentials = string.IsNullOrEmpty(sessionToken)
        ? new BasicAWSCredentials(accessKey, secretKey)
        : new SessionAWSCredentials(accessKey, secretKey, sessionToken);

    using var client = new AmazonDynamoDBClient(credentials, region);

    var request = new PutItemRequest
    {
        TableName = "MySampleTable",
        Item = new Dictionary
        {
            { "Id", new AttributeValue { S = Guid.NewGuid().ToString() } },
            { "Name", new AttributeValue { S = "テストユーザー" } }
        }
    };

    try
    {
        var response = await client.PutItemAsync(request);
        MessageBox.Show("DynamoDB に書き込み成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("書き込みエラー: " + ex.Message);
    }
}

AWS_ACCESS_KEY_ID 保存場所

今回の例では環境変数を使わずにアプリ内で直接渡しています
そのため .aws/credentials や OSの環境変数には保存されません。


DynamoDB テーブルが存在しないときは?

PutItemAsync 実行時に「ResourceNotFoundException」が発生します。
テーブルが存在することを事前に確認しましょう(または CreateTableAsync を使って自動作成も可能です)。


🔐 セキュリティに関しての注意

この実装では AWS 認証情報を直接テキストボックスから入力しています。本番利用時には認証情報をハードコードしたりログに出力したりしないよう注意してください。


✅ まとめ

C# (.NET 8) + Windows Forms アプリケーションから AWS DynamoDB にデータを書き込むのは、AWSSDK.DynamoDBv2 と適切なクレデンシャルクラスを使うことで簡単に実現できます。


改行・カンマを含むCSVを正しく読み込む2つの方法

DateTimeを日本時間でISO 8601形式に変換する方法

ファイルから重複行を削除する2つの方法

Selenium remote WebDriver server for URL http://localhost:xxxx/session timed out after 60 seconds

The HTTP request to the remote WebDriver server for URL http://localhost:51216/session timed out after 60 seconds.

2025年04月末 Chrome ブラウザバージョン 136.0.7103.49最新版で

Selenium 接続時下記のエラーが出た

The HTTP request to the remote WebDriver server for URL http://localhost:51216/session timed out after 60 seconds.

Selenium が WebDriver(おそらく ChromeDriver)に対してセッションを作成しようとした。

60秒待っても応答が返ってこなかった というエラーらしい。

Selenium が ChromeDriver を起動して接続する場合、 私の記憶では WebSocket だったように思える

ブラウザの詳細ログをファイルに吐き出せるように設定

var options = new ChromeOptions();
options.AddArgument("--verbose"); // 詳細ログを出す

var driver = new ChromeDriver(options);

var service = ChromeDriverService.CreateDefaultService();
service.LogPath = "chromedriver.log";
service.EnableVerboseLogging = true;

var driver = new ChromeDriver(service, new ChromeOptions());

調査してみると WebDriver.StartSession() の段階、ChromeDriver プロセスは起動したが、Selenium がブラウザとセッションを開始できなかったようだった

–user-data-dirと–profile-directoryをオプションから外すとうまく動作した
プロファイルを引き続き使えないのは不便。

Chromeブラウザのバグであれば直してほしい。

IWindow.Size はSystem.Drawing.Sizeが設定できる

–start-maximizedをオプション設定しなくともWindowsの場合
driver.Manage().Windowは OpenQA.Selenium.IWindow でSystem.Drawing.Sizeがセットできる

var options = new ChromeOptions();
var driver = new ChromeDriver(options);

// ディスプレイ全体のサイズに合わせる(例:1920x1080)
driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);

// または最大化
driver.Manage().Window.Maximize();

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Visual Studio 2022でWinUI 3アプリ開発:空のアプリとパッケージプロジェクトの違いと選び方

空白のアプリ、Windows アプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)

Visual Studio 2022でWinUI 3を使ったデスクトップアプリケーションを開発する際、多くの開発者が最初に直面するのが「どのテンプレートを選択すべきか?」という問題です。特に「空のアプリ、パッケージ化(デスクトップのWinUI 3)」と「空白のアプリ、Windows アプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)」の違いについては、初心者から中級者まで迷うポイントです。この記事では、これら2つのテンプレートの違いと、それぞれのテンプレートがどのような場合に適しているかを詳しく解説します。

WinUI 3とは?

まず、WinUI 3とは、Microsoftの最新のユーザーインターフェース(UI)ライブラリであり、デスクトップアプリケーション開発において使われるUIフレームワークです。WinUI 3は、Windows 10およびWindows 11向けのネイティブアプリケーションを開発するための強力なツールで、Modern Windows UIのデザインに基づいたシンプルで美しいアプリケーションを構築することができます。

WinUI 3は、Windows App SDKの一部として提供されており、Windowsデスクトップアプリケーションに必要なすべてのコンポーネントを含んでいます。これにより、開発者は最新のUIコンポーネントやコントロールを利用して、視覚的に魅力的で高性能なアプリケーションを構築することができます。

「空のアプリ、パッケージ化(デスクトップのWinUI 3)」と「空白のアプリ、Windowsアプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)」の違い

Visual Studio 2022 WinUI 3 新規プロジェクト

1. 空のアプリ、パッケージ化(デスクトップのWinUI 3)

“Windows UIライブラリ(WinUI 3)に基づいてデスクトップ アプリを作成するためのプロジェクトテンプレートと、Microsoft Store を介したサイドローディングまたは配布用のMSIXパッケージです。”

このテンプレートは、WinUI 3を使ったシンプルなデスクトップアプリケーションを作成するための基本的なテンプレートです。通常、最小限の構成で、開発者が自分でUIやロジックを追加する形になります。主に以下のような特徴があります。

特徴

  • 単一のプロジェクト構成: アプリケーションのソースコードと設定ファイルがすべて1つのプロジェクトに含まれます。
  • パッケージ化: アプリケーションはMSIX形式でパッケージ化され、デスクトップアプリとして配布するための準備が整っています。
  • 簡単なスタート: このテンプレートは、開発を始めるための最小限のセットアップを提供するので、すぐにアプリの構築を開始できます。

使用シーン

  • シンプルなデスクトップアプリケーションの開発
  • 最初から複雑な構成を必要とせず、軽量で素早くアプリを作りたい場合
  • 少ない依存関係でアプリを作成したい場合

2. 空白のアプリ、Windowsアプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)

“Windows UIライブラリ(WinUI 3)に基づいてデスクトップ アプリを作成するためのプロジェクトテンプレートです。Microsoft Store を介してサイドローディングまたは配布するための MSIX パッケージを作成するために Windows アプリケーションパッケージ(WAP)プロジェクトが含まれています。”

このテンプレートは、より複雑なアプリケーションを作成する際に適しています。特に、複数のプロジェクトを一元管理したい場合に便利です。このテンプレートを使用する場合、アプリケーションのソースコードはもちろん、パッケージングに関する設定やマニフェストファイルなどを管理するための複数のプロジェクト構成が含まれます。

特徴

  • 複数プロジェクトの構成: アプリケーション本体とパッケージング用のプロジェクト(.wapprojファイル)が別々のプロジェクトとして管理されます。
  • パッケージのカスタマイズ: 複数のプロジェクトをまとめてMSIXパッケージにするため、パッケージの構成やマニフェストのカスタマイズが可能です。
  • 拡張性: より大規模なアプリケーションに対応できる構成になっています。

使用シーン

  • 複雑なデスクトップアプリケーションの開発
  • 複数のアプリケーションやライブラリを1つのMSIXパッケージにまとめたい場合
  • パッケージマニフェストを個別にカスタマイズしたい場合
  • 複数のプロジェクトを一元的に管理する必要がある場合
空白のアプリ、Windows アプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)

主な違い

項目空のアプリ、パッケージ化空白のアプリ + パッケージプロジェクト
構成単一プロジェクト複数プロジェクト(本体 + パッケージ)
カスタマイズ性限定的高い(マニフェスト含む)
用途小規模~中規模のアプリ向け中~大規模のアプリ向け
拡張性少ない高い

どちらを選ぶべきか?

1. シンプルなアプリケーションの開発を始めたい場合

もし、素早くシンプルなアプリケーションを作成したいのであれば、「空のアプリ、パッケージ化(デスクトップのWinUI 3)」テンプレートが最適です。このテンプレートを使用すれば、最小限のコードと設定で、すぐにアプリケーション開発を開始できます。

2. 複数のプロジェクトを管理したい場合

もし、アプリケーションが複雑で、複数のプロジェクトやライブラリを一元的に管理する必要がある場合や、パッケージングに関する細かなカスタマイズが必要な場合は、「空白のアプリ、Windowsアプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)」テンプレートを選択することをおすすめします。

まとめ

WinUI 3を使用したデスクトップアプリケーションの開発には、「空のアプリ、パッケージ化(デスクトップのWinUI 3)」と「空白のアプリ、Windowsアプリケーション パッケージプロジェクトでパッケージ化(デスクトップのWinUI 3)」の2つのテンプレートがあります。どちらのテンプレートもMSIXパッケージでのアプリケーション配布に対応していますが、プロジェクト構成において大きな違いがあります。自分の開発したいアプリケーションの規模や複雑さに応じて、適切なテンプレートを選択することが重要です。

WinUI 3 / XAML の Grid.Width 設定方法

WinUI 3「空白のウィンドウ」と「空白のページ」の違い

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法