tech.guitarrapc.cóm

Technical updates

C#

NuGetのロックファイルは使うべきなのか

C#

NuGetにはロックファイル(packages.lock.json)を用いてリストアする機能があります。npmではpackage-lock.jsonが当たり前に使われていますが、C#のプロジェクトでロックファイルを使っている例はあまり見かけません。 最近SBOMについて調べる中で、なぜNuGet…

AWS Lambdaの.NET10対応とC#のファイルベースプログラムのサポート

2025年11月に.NET 10がリリースされましたが、2026年1月6日にAWS Lambdaが.NET 10をサポートしました。 これに伴いファイルベースプログラムのC# Lambda関数もサポートされ、.csファイルだけ用意すればLambda関数をデプロイできるようになりました。 AWS Lam…

Riderのブレークポイントログと同様の機能をVisual Studioのトレースポイントで行う

Riderのブレークポイントログについての記事を読んだのですが、Visual Studioにも同様の機能があります。Visual Studioでも同じことができないか、と悩んでいる人に向けての紹介です。 Unityで開発していると「ちょっとここの値を確認したいな」と思って、ロ…

.NET 10のファイルベースプログラムをパイプ入力やGitHub Actionsで使う

以前にも軽く紹介する記事を書いているのですが、.NET 10から、C#のファイルベースプログラム実行機能が追加されました。C#にファイルベースプログラムが来ても.csファイルを用意して実行することを考えがちでしたが、そういえばパイプ入力でコードを渡して…

C# NativeAOTをDockerでビルドする

NativeAOTは、.NETアプリケーションをネイティブコードにコンパイルする技術です。 NativeAOTはJITではなくAOTでコンパイルすることで、いくつかのメリットがあります。スタートアップが速くなり、メモリ使用量も少なくなります。また、動作環境にランタイム…

(続) C#でCPUモデルを取得する

C#

以前の記事でC#からCPUモデルを取得する方法を紹介しましたが、ARM64環境に対する手当が不十分でした。今回はARM64環境も含めてC#でCPUモデルを取得する方法を紹介します。 アーキテクチャとOSごとのCPUモデル取得方法 C#での実装例 動作確認 まとめ 参考 ア…

SkiaSharp.QrCodeをフルリファクタしてC#最速のQRコード生成ライブラリにした

C#

SkiaSharp.QrCodeはC#でQRコードを生成するためのライブラリです。コードは大きく「QRコードデータの生成処理」と「SkiaSharpによるレンダリング統合」の2要素で成り立っています。 今回、QRコードデータ生成部分をフルリファクタリングしてC#で最速のQRコー…

PulumiでIgnoreChangesを使う際の注意点

Terraformはリソースの特定のプロパティの変更を無視するのにignore_changes: [array]を用いますが、これと同様のことがPulumiのIgnoreChangesオプションで可能です。 PulumiのIgnoreChangesはドキュメントで解説されているのですが、Pulumiで入れ子のキーを…

C#サーバーをなぜLinuxで動かすのか

C#

C#は様々な用途に利用できる言語ですが、.NETになってからはサーバーサイドとしてはLinuxで動かすのが自然な選択肢になっています。なぜLinuxで動かすのか理由をいくつか挙げてみます。 もしかすると C#はWindows向けに開発された言語、.NET Framework (.NET…

.NET10のdotnet run app.csでファイルベースプログラムを実行する

C#

現在プレビュー提供中の.NET 10から、dotnet runコマンドでファイルベースのプログラムを実行できるようになりました。これにより、dotnet run app.csのように、C#ファイルを直接実行できるようになります。 本日発表されたファイルベースプログラムの実行方…

Visual Studio 2022で使っている拡張機能 2025年版

以前Visual Studio 2022で使っている拡張機能を紹介しましたが、さすがにいろいろ変わりました。 2025年版です。 一覧 .NET Upgrade Assistant Copy Nice Git Diff Margin Solution Error Visualizer 2022 Time Stamp Margin 2022 VSColorOutput64 GitHub Co…

Amazon EFSのファイルコンテンツをS3にバックアップする

Amazon EFSといえば、ECS/EKS/EC2問わず複数マシンで単一ボリュームを参照できて非常に便利です。 EFS自身はAWS Backupでバックアップできるのですが、EFSの中身を直接見ることは出来ず不便なことも多いでしょう。 今回は、EFSの中身をS3にバックアップする…

AWS IAM Identity CenterをPulumiで構成する

AWS IAM Identity CenterをTerraformで構成するときはaws-ia/terraform-aws-iam-identity-centerが便利です。 同様にPulumiでも構成してみましょうという回です。 どのような構成にするのか グループと権限セットはアカウントごとに分ける 管理アカウントで…

AWS SSOで取得した一時認証をC#で利用する

IAM Userを利用してC#からAWSのリソースにアクセスする場合、AccessKeyやAccessSecretKeyを直接利用して認証します。AWS IAM Identity Center(旧AWS SSO)でも同様にAccessKeyやAccessSecretKeyを取得して利用できますが、SSOログインした一時認証情報を取得…

Ansibleで任意の.NET SDKをUbuntuにインストールする

Ubuntuへの.NET SDKのインストール方法はいろいろあります。ただ数年WSLにAnsibleでインストールしてきた結果、やり方が落ち着いたのでメモ。 Linuxへの.NET SDKインストール Ansibleで.NET SDKをインストール 実行してみる まとめ 参考 Linuxへの.NET SDKイ…

新しいソリューションファイルSLNX形式を使う

C#

C#のプロジェクト構成といえば、プロジェクトファイル(.csrpoj)とそれを束ねるソリューションファイル(.sln)が定番です。 現在プレビュー提供されているSLNX形式と呼ばれる新しいソリューションファイルが、.NET SDK 9.0.200から利用しやすくなりました。 い…

C#で未使用のプライベートメソッドがグレーアウトされるのを無効化する

C#

Visual StudioでC#コードを書いていて、未使用のプライベートメソッドがグレーアウトするのを無効化したい。という時のメモです。 どのような状況 グレーアウトしないように対処する 参考 どのような状況 たとえばコンソールアプリケーションを作って、以下…

dotnet publishでコンテナイメージを作成する

.NETは組み込みコンテナサポートを持っておりdotnet publishでコンテナイメージを作成できます。このようなDockerfileなしのコンテナ作成はJibやBuildpacksを思い起こしますが、dotnet publishという標準コマンドで提供しているのが大きな違いです。 Dockerf…

.NETのコンテナイメージをマルチプラットフォーム対応する

C#をLinuxやコンテナで動かせるようになって久しくC#をコンテナで実行している人も多いでしょう。 C#はlinuxのamd64(x86_64)とarm64の両方に対応しているので、ライブラリや実装コードに気を払えば「同一コードベースでマルチプラットフォーム動作」が可能で…

Pulumi DockerBuildを使ったマルチプラットフォームDocker Image作成

Pulumiでマルチプラットフォーム対応のDocker Imageを作成する時はdocker-buildパッケージを使うのがオススメです。ただ注意点として、1年余りプレビュー状態が続いており、これまでのdockerパッケージから見ると挙動の違いに注意が必要です。 今回はPulumi…

Target-typed newと暗黙的型変換を期待するAPI

C# 91から利用できるTarget-typed newは使い方によっては非常に便利です。 ただ、ライブラリのAPI設定次第で使いたいときに使えないというシーンもあるのでメモです。 暗黙的型変換を期待するAPIではTarget-typed Newは使えない Pulumi C#で頻出のAPIパター…

DatadogへのCloudWatch Metric Streamを使ったメトリクス送信をPulumi C#で書く

前回の記事でDatadogにCloudWatch Metric Streamを使ってメトリクスを送信するCloudFormation StackをPulumi/Terraformから呼び出す方法を書きました。今回は、CloudFormation StackでやっていることをPulumi C#にポートします。 なぜポートするのか Pulumi …

AWS CloudWatch Metric Streamを使ったDatadogメトリクス送信とPulumiやTerraformからのCloudFormation Stack呼び出し

DatadogはAWSのCloudWatchメトリクスの取り込みをPull方式とPush方式の両方サポートしています。いわゆるDatadog AWS IntegrationはPull方式でCloudWatchメトリクスを10分程度のレイテンシーで取り込みます。一方で、AWS CloudWatch Metric StreamはPush方式…

C#で隣接するIPv4 CIDRを集約表記にする

C#

隣接するIPv4のCIDRを集約表記にする処理を書いたのでメモです。 IPv4 CIDRをまとめるとは C#で隣接するIPv4 CIDRを集約表記にする アドレスがまとまる様子 Pythonならipaddress.collapse_addressesを使う まとめ IPv4 CIDRをまとめるとは CIDRはIPアドレス…

setup-dotnetと同じglobal.jsonの解釈をC#で用意する

C#

GitHub Actionsのsetup-dotnetアクションは、global.jsonを解釈して.NET SDKをインストールできます。ただ、global.jsonサポートは限定的でバージョン直指定かrollForwardlatestFeatureのみ対応しています。 気まぐれでC#でもサクッと同じものを用意したので…

.NET SDKのバージョンをglobal.jsonで固定するのが有効なシーンを考える

C#

.NETはglobal.jsonファイルを使って、利用する.NET SDKのバージョンの制限を表現できます。 あまりglobal.jsonを有効に機能させられるシーンはないと考えていたのですが、ワークアラウンドを見てなるほど思ったので.NET SDKのバージョンを固定することが有効…

LINQPadでBenchmarkDotNetを使う

C#

dotnet/BenchmarkDotNetは.NETコードのベンチマークライブラリで、デファクトスタンダードとして使われています。クラスやアセンブリ単位に実行したり、ベンチマークの試行回数調整やパラメーターセットアップも容易で非常に使いやすく、私自身もよく使って…

TargetFrameworksを指定しつつDockerビルドしたい

TargetFrameworksを用いると複数のフレームワークに対応したライブラリを作成できます。今回は、このTargetFrameworksを指定しつつDockerビルドする方法を紹介します。 なお、コンテナで複数ランタイムを持つ意義はほぼないので、この記事はただの興味本位で…

C#のコード設定を.editorconfigで統一する

C#

.editorconfigは様々な言語でコードの設定を統一するための設定ファイルです。C#も.editorconfigを使うとコードフォーマットやアナライザーの設定できます。今回は私がこれまでC#で.editorconfigを使ってきておすすめ設定と避けたほうがいいと考えている設定…

ラッパーコマンドをConsoleAppFramework v4からv5へ移行する

C#

前回の記事でラッパーコマンドの場合、ConsoleAppFramework v5へ移行する悩みを書きました。その後ConsoleAppFramework 5.4.0がリリースされ、ラッパーコマンドへの引数を渡しがサポートされました。これによってConsoleAppFramework v5でもラッパーコマンド…