ひでぼ~blog

C#ときどきゲーム

C#

WebApplicationFactoryを使ってASP .NET Core WebAPIでE2Eテストを試す

実行環境 .NET 8 Visual Studio 17.8.3 xUnit 2.4.2 準備 ASP .NET Core WebAPIのプロジェクトとユニットテストのプロジェクトを作成し、ユニットテストのプロジェクトからWebAPIのプロジェクトを参照するように設定しておきます。 また、Program.csはトップ…

検証属性付きのrecordからswagger.jsonを生成するときの悩み

ASP.NET Coreでリクエストパラメータにrecordを使った場合に出力されるswagger.jsonにRequired等の属性が反映されない問題があったのでまとめました。 問題になっているのはだいたい次のIssueと同じ内容です。 github.com 最近はエンドポイントのリクエスト…

VS2022のhttpファイルで環境毎のパラメータを用意する

実行環境 VS2022 17.8.3 .NET 8 httpファイルを用意する 適当なhttpファイルを用意します。HostAddressとParameterは後述の別ファイルで定義します。 GET {{HostAddress}}?q={{Parameter}} httpenv.jsonを用意する httpenv.jsonを作成してhttpファイルと同じ…

FakeTimeProviderを試す

C#

.NET 8からDateTimeに依存した処理のテストに役立つTimeProviderとFakeTimeProviderという仕組みが追加されたので試していきます。 実行環境 VS2022 17.8.1 .NET 8 準備 NuGetパッケージをインストールします。これでFakeTimeProviderが使えるようになります…

コードを書くためにサブスクライブしているもの

C#でASP.NET Coreを使ったWeb開発をメインでやっている私がコードを書くためにサブスクライブしているものをあげていきます。 ReSharper 言わずと知れたVisual Studioの拡張機能です。本家よりも強力なIntelliSence、括弧の自動補完などなどいろんな機能に助…

Swashbuckle.AspNetCore.Cliでswagger.jsonを出力する

CI/CDでswagger.jsonを出力したかったのでやってみました。 実行環境 VS2022 17.7.4 .NET 7 Swashbuckle.AspNetCore.Cli 6.5.0 Swashbuckle.AspNetCore.Cliをインストールする プロジェクトのルートで.NET ツールをインストールします。 dotnet new tool-man…

EFCoreのTimestampで楽観的排他制御を行う

EFCoreのTimestampを使って楽観的排他制御をやってみます。 実行環境 VS2022 17.6.5 EFCore 7.0.10 SQL Server 2022 Entityを用意する 次のようなEntityを用意しました。 public record Todo { public int Id { get; set; } public string? Content { get; s…

EFCoreでChangeTrackerの内容を確認する

EFCoreのChangeTrackerについて今まで雰囲気で分かった気になっていたので、理解を深めるためにDbContextのデータをいろいろ操作しながらChangeTrackerの内容を確認してみます。 実行環境 VSCode + C# Dev Kit .NET 7 Microsoft.EntityFrameworkCore.InMemor…

Azure Communication Servicesのメール送信を試してみる

Azureでメールが送れるサービスが使えるようになったとのことで試してみました。 Azureでリソースを作成する Azure Portalから以下3つのリソースを作成します。 Communication Services Email Communication Services ドメイン Communication Servicesの作成…

C#でChatGPTとのお喋りを試してみる

ChatGPTが非常に流行っているので試してみることにしました。 ここではC#のコンソールアプリケーションでChatGPTと会話ができるように実装し、その過程と結果を紹介します。 実行環境 Visual Studio 2022 17.5.3 .NET 7 OpenAIのAPIはこちらのライブラリを使…

EFCore 7.0の一括更新・一括削除を試す

久しぶりにEFCoreを触ってみたら 一括更新・一括削除( ExecuteUpdate / ExecuteDelete ) という良さげな機能が追加されていたので試してみました。 今までは一度SELECTした後にUPDATEなりDELETEしていたのがSELECTしなくても良くなりました。 実行環境 Visua…

Visual Studio 2022のIntegrated Http Clientを試す

Visual Studio 2022のバージョン17.5から、VSCodeの拡張機能REST Clientと同じようなHTTPリクエストを実行できる機能が追加されたそうなので試してみました。 marketplace.visualstudio.com 実行環境 Visual Studio 2022 17.5 WebAPIを準備する MinimalAPIで…

ASP.NET Core 7のIParsableを試す

ASP.NET Core 7から使えるようになったIParsableを使ってモデルバインドをしてみます。 やること コントローラのアクションで、"2022/12/31,2023/01/01"のような文字列をDateRangeという日付の区間を表すクラスにバインドして受け取れるようにしてみます。 /…

xUnit.netのTheoryDataを試す

C#

xUnit.netのTheoryDataを使ってテストコードを書いてみます。 実行環境 Visual Studio 2022 17.2.0 .NET 6 xUnit 2.4.1 このような名前と年齢を結合した文字列を返すメソッドのテストコードを書いてみます。 public string GetFullNameWithAge(string lastNa…

C#11のrequiredメンバーを試す

C#

.NET7のRC版がリリースされてC#11を試せるようになったみたいなので新しく使えるようになったrequiredメンバーを触ってみます。 準備 .NET 7をインストールしておきます。この記事を書いてる時点では7.0.100-rc.1というバージョンでした。 dotnet.microsoft.…

MinecraftConnectionを試す

C#

C#でマイクラがアツイという噂を聞いたので試してみます。 準備 サーバー マインクラフトのサーバーをあらかじめ用意しておきます。 Dockerで動かすのが一番ラクそうだったのでこちらのDockerイメージを使ってサーバーを動かしました。 hub.docker.com docke…

Docker環境でC#プログラム実行時にローカルのAWS認証情報を渡す

AWS SDKのAPIを使ってAWSのサービスを使う際、ユーザーのホームディレクトリにある.aws/credentialsを使って認証されますが、ローカルのDockerで実行時にはこれが無いためAPIの呼び出しに失敗します。 docker-compose.ymlで認証情報を共有できるようにします…

「あいうえお表」を作れ (制限時間 : 10 分)をやってみた

C#

先日こちらのイベントで出題された問題を自分でもやってみました。 togetter.com 次のようなあいうえおの文字列を加工して、 const string aiueo = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもや ゆ よらりるれろわ をん"; 最…

GAKKOU並び替え問題をC#で解いてみる

C#

小田急である広告の前でだけ学生数人がノート出してて何事かと思ったらこの広告が原因だった。解いたらスッキリする答えが出てきて、答え合わせできないけど確実に正解なのが分かった pic.twitter.com/bszZ0QQQJ5— 電電猫猫|高橋直希@CoeFont (@nya3_neko2) …

ViGEm.NETを使って仮想ゲームコントローラを作る

C#

ViGEm.NETというライブラリを使ってC#で簡単な仮想ゲームコントローラを作ってみます。 ViGEmはVirtual Gamepad Emulator Frameworkの略だそうです。読み方は謎です。C#用のライブラリが公開されているので使っていきます。 github.com 実行環境 Windows 10…

VSCodeのデバッグコンソールでdll読み込みメッセージを非表示にする

VSCodeでC#のコンソールアプリをデバッグ実行したとき、dllを読み込むメッセージがたくさん表示されます。 設定前のデバッグコンソール アプリから出力したメッセージが埋もれてしまって見にくいので、これを表示しないようにしてみます。 .vscode/launch.js…

ProcessXを使ってシェルスクリプトを実行してみる

C#

CySharpから出ているProcessXが良いらしいぞという噂を聞いたので試してみました。 ProcessXはcmdやPowerShellで実行するコマンドたちをC#から呼びやすくするライブラリのようです。 github.com やってみる 試しにdotnetコマンドを実行してバージョン情報を…

Azure Static Web Appsのステージング機能を試す

ステージング機能が気になった&良さそうだったので試してみました。 そもそもステージング機能とは Azure Static Web Appsを使ったWebアプリケーションは、GitHubのリポジトリに変更があるとCI/CDが走って本番環境が更新されるようになっています。 例えばd…

FFXIVQuickLauncherのソースを読んでみる

C#

サードパーティ製のFF14のランチャーにFFXIVQuickLauncherというものがあります。 公式のランチャーよりもシンプルで、クライアントの起動が速い、Discordとの連携機能があるとかいろいろと便利らしいです。 FFXIVQuickLauncherを起動した直後の画面 公式の…

C#8.0のRange構文を試す

文字列の整形をするときにRange構文を使ってみたらかなり体験が良かったのでまとめました。 C#8.0から配列などに対してarray[x..n]のような書き方ができるようになりました。配列のxからnの範囲を取得するような感じです。 ハイフンなしの郵便番号をアタマ3…

BlazorでlocalStorageを使ってデータを保存する

つい先日、「Kakuge Lounge Finder」というBlazor WebAssemblyで作ったWebアプリを公開しました。 www.kakuge-lounge.com 格ゲーでオンラインの対戦相手を募集する際に、希望の対戦相手の条件などをツイートしてTwitter上で募集するという文化があるのですが…

Blazorで作ったWebアプリをAzure Static Web Appsにデプロイしてみる

BlazorとAzure Static Web Appsが気になってたのでやってみました。 GitHubにリポジトリ作成 Azure Static Web Appsにデプロイする際のソースとしてGitHubのリポジトリを使うので、Blazorで作った WebアプリのソースをGitHubに上げておきます。 今回はBlazor…

ValueTupleで変数をスワップする

C#

ValueTupleを使うと一時変数を使わずに変数のスワップができるというのを聞いたので試してみました。 とりあえずやってみる 言われるがままにintの変数を2つ用意してスワップしてみました。 var a = 1; var b = 3; // スワップ前 // a = 1, b = 3 Console.Wr…

FFXIVACTプラグインのサンプルを作った

C#

FFXIVで戦闘系エンドコンテンツを攻略する人にとってはおなじみのAdvanced Combat Tracker(以下ACT)という便利ツールがあります。 advancedcombattracker.com C#でプラグインを自分で作ってインポートできるようになっているのですが、 プラグインを作る際…

C#のrecordとclassとstructを比較した

C#

C#9から登場したrecordで型が定義できるようになって、record、class、structなどよく分からなくなってきたので、いろいろ比較しつつ整理してみました。 class struct record 参照型 or 値型 参照型 値型 参照型 継承 できる できない できる Equals() 参照…