ひでぼ~blog

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はトップ…

Dockerを使ったパルワールド専用サーバの構築方法

パルワールドの専用サーバを建ててみたかったのでDockerコンテナを使ってやってみました。 実行環境 Docker Desktop for Windows 専用サーバの準備 docker composeで簡単に専用サーバのコンテナを作ってくれるRepositoryがあったのでありがたく使わせてもら…

検証属性付きの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のSaveChangesAsyncをoverrideして共通処理を差し込む

DBなどの永続化層のデータを更新する際に作成日や更新日などの日付を更新したいことがよくあります。そのあたりの処理を共通化してみたいと思います。 実行環境 VS 2022 17.6.5 .NET 7 EF Core 7.0.4 Entityを用意する ITimeStampというインタフェースを持つ…

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で…

CSSの三角関数を試す

CSSでサイン、コサイン、タンジェントが使えるようになると聞いたので試してみました。 現時点ではまだ一部のブラウザしか対応していないようです。今回はFireFoxを使います。 caniuse.com 次のようなHTMLを書いてみました。ボックスの中にボールが3つ縦に並…

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…

税金の支払いを催促する詐欺サイトのソースコードを読んでみる

国税庁になりすまして税金の支払いをさせようとするSMSが届いたのでURLを開いてサイトのソースコードを読んでみました。 www.ipa.go.jp とりあえずサイトにアクセスしてみる PCからGoogle Chromeのシークレットモードでサイトにアクセスしてみます。 PCでア…

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で認証情報を共有できるようにします…

TypeScriptでAzure Functionsを試す

TypeScriptでAzure Functionsを作ってみます。 準備 VSCodeで開発します。拡張機能でAzure Functionsをインストールしておきます。 プロジェクトの作成 コマンドパレットからAzure FunctionsのCreate Projectを実行します。 対話形式でプロジェクトの設定を…

SWA CLIを試してみる

Azure Static Web App CLI (SWA CLI)が正式にリリースされたので試してみます。 インストール npmでグローバルインストールします。 npm install -g @azure/static-web-apps-cli 静的サイトの作成 SWAに乗っける静的サイトを作成します。 今回はAngularでSPA…

p5.jsのSoundFileを試す

準備 p5.jsをダウンロードしておきます。 公式サイトからComplete Libraryをダウンロードし、zipファイルを解凍して出来るファイル群の中にあるp5.jsとp5.sound.jsを使います。 p5js.org HTMLで先ほどのファイルを読み込むようにしておきます。 <html> <head> <script src="libs/p5.js"></script> <script src="libs/p5.sound.js"></script> <script src="app.js"></script> </head> <body> <main> <h1>p5 d</h1></main></body></html>…

ARMテンプレートでAppServiceを作成してみる

Azureのリソースを作るときはわりとAzure PortalからGUIをぽちぽちしながらやっています。が、AppService名を間違えるなどでリソースの作り直しが必要になることがわりとあって、その度にGUIからリソースの設定をポチポチするのが面倒なのでARMテンプレート…

「あいうえお表」を作れ (制限時間 : 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コマンドを実行してバージョン情報を…