はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

C#

【C#】.NET 6で追加されたstring.Create(internalであるstring.FastAllocateStringを利用できるメソッド)を用いて高速にstringを生成する

C#

はじめに 今回はstring.Createを用いて高速にstringを生成する方法を紹介したいと思います。learn.microsoft.com はじめに 概要 使い方 ちなみに 実験 追記 注意点 参考 概要 string.FastAllocateStringというinternalなメソッドが.NETにはあり、これを利用…

【C#】GitHub Actionsで.NETのビルド&テストを行う方法(スターターワークフローがあるので簡単)

はじめに 今回はGitHub Actionsで.NETのビルド&テストを実行する方法を紹介したいと思います。 はじめに やり方 実験 ファイルを用意 ローカルで動作確認する GitHub Actionsが動作するか確認する ワークフローの中身 参考 やり方 .NETのビルド&テストをする…

【C#】FastEnumというライブラリを用いて列挙型関連のメソッドを爆速+ゼロアロケーションで実行させる(Static Type Cachingによる高速化)

C#

はじめに 今回は列挙型関連のメソッドを爆速+ゼロアロケーションで実行できるFastEnumというライブラリを紹介したいと思います。 .NETメソッドとの比較結果 はじめに 概要 インストール方法 使い方 列挙型のName・Value・FieldInfoなどを一度に取得したい場…

【C#】dotnet newコマンドでプロジェクトを作成できるようなテンプレートを作成する方法

C#

はじめに 今回はdotnet new 〇〇コマンドでプロジェクトを作成できるようなテンプレートの作成方法を紹介したいと思います。 $ dotnet new stringext テンプレート "Example templates: string extensions" が正常に作成されました。 テンプレートからプロジ…

【C#】C#10(.NET6)から登場したCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する

C#

はじめに 今回はCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに 概要 使い方 おまけ 概要 CallerArgumentExpressionを用いることで、メソッドの引数で渡した真の意味での文…

【C#】TypeがKeyなDictionaryをStatic Type Cachingに置き換えて処理の高速化させる(実験付き)

C#

はじめに 今回はTypeをKeyにとるDictionaryをStatic Type Cachingに変えて処理を高速化させる方法について紹介したいと思います。Static Type Cachingについては以下のスライドのp46~触れられています。 www.slideshare.net はじめに 概要 バイナリサイズを…

【GCP, C#】Google Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いてSlack通知ツールを作る

はじめに 今回はGoogle Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いて定期的にSlackにメッセージを投稿するシステムを作ってみようと思います。 実際に動作させている様子 はじめに 概要 Slackでの操作 Slackアプリを作成する GCPでの操…

【C#】噂のMD5が同じになる72文字で1文字しか変わらない文字列が本当か試してみる

C#

はじめに Xを見ていたら以下のような投稿を見かけました。Here is a 72-byte alphanum MD5 collision with 1-byte difference for fun: md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")=md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd…

【C#】BenchmarkDotNetを用いて処理速度・メモリ確保量を計測する

C#

はじめに 今回はBenchmarkDotNetというライブラリを利用して処理速度・メモリ使用量を計測する方法を紹介したいと思います。github.com はじめに 概要 インストール 使い方 1. classを用意 2. Benchmark属性をつけたメソッド定義 3. BenchmarkRunner.Runを行…

【C#】.NETでGoogle Cloud Functionsを作成してデプロイをする方法メモ

はじめに 今回はGoogle Cloud Functionsに.NETを利用した関数をデプロイする方法について書きたいと思います。内容的には以下の公式ドキュメントをミックスした感じです。 cloud.google.com cloud.google.com codelabs.developers.google.com先に書いておく…

【C#】StringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみる

C#

はじめに 今回はStringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみたいと思います。learn.microsoft.comlearn.microsoft.com大抵のStringBuilderの利用シーン、new StringBuilderの代わりにnew DefaultInterpolatedString…

【C#】ThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する

C#

はじめに 今回はThreadStaticを利用してスレッドによって異なるインスタンスが生成される静的フィールドを作成する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 初期値をつけてはダメ staticでないフィールドはダメ やり方 [ThreadStat…

【C#】string.FormatとDefaultInterpolatedStringHandlerで処理速度・GC.Allocの差を計測してみる(string.Formatはボックス化の可能性あり)

C#

はじめに 今回はstring.FormatとDefaultInterpolatedStringHandlerで処理速度・Allocationの優劣を調べてみようと思います。learn.microsoft.comlearn.microsoft.com結論から言うとDefaultInterpolatedStringHandlerが優秀です。(C#10から補完文字列(interpo…

【C#】.NET CLIの"dotnet tool restore"と".config/dotnet-tools.json"でローカルで使用するツールのバージョンを固定する(t4のバージョンをプロジェクトごとに固定したり)

C#

はじめに 今回はdotnet tool restoreとdotnet-tools.jsonを用いて"現在のディレクトリとサブディレクトリ"で使用するツールのバージョンを固定する方法を紹介したいと思います。↓ マニフェストファイル(.config/dotnet-tools.json)のサンプル { "version": 1…

【C#】System.Text.JsonのJsonNodeを用いてスキーマレスなJsonにプロパティを追加する方法

C#

はじめに 今回はSystem.Text.JsonでスキーマレスなJsonに対してプロパティを追加する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 参考 やり方 JsonDocumentは読み取り専用なので、JsonDocumentではなくJsonNodeを用いることで容易に実…

【Blazor】BlazorでASP.NET Coreを使用した最初のWebアプリをビルドする公式ドキュメントを読んだメモ①

はじめに ふと興味本位でBlazorを触ってみようと思い、以下の公式のラーニングパスをやってみてます。 learn.microsoft.comそのときに学んだことをメモがてらに残しておきたいと思います。正直自分宛のメモなので、気になる方は公式のものをみてください。 …

【Unity】Unity公式パッケージ「Code Coverage」を利用してTest Frameworkのコードカバレッジを計測する

はじめに 今回はUnity公式パッケージであるCode Coverageを利用してTest Frameworkで実行したテストのコードカバレッジを計測する方法を紹介したいと思います。docs.unity3d.com 実際に生成したレポート はじめに Code Coverageとは 概要 環境 インストール…

【C#】MS製のLoggingライブラリである「Microsoft.Extensions.Logging」の基礎的な使い方

C#

はじめに 前回messagetemplates-csharpというMessageTemplateを扱えるようにするライブラリを紹介しました。www.hanachiru-blog.com今回はMS製のMicrosoft.Extensions.LoggingというLoggingライブラリについて紹介したいと思います。(Microsoft.Extensions.L…

【C#】「messagetemplates-csharp」を用いてC#でMessageTemplateを扱う

C#

はじめに 今回はmessagetemplates-csharpというC#用のMessageTemplateライブラリを紹介したいと思います。github.com はじめに 概要 MessageTemplateとは より詳細の設定 messagetemplates-csharp 概要 インストール方法 利用方法 詳細な仕様 さいごに 概要 …

【C#】C#7より追加された型によるswitch と C#8より追加された複数の値をまとめてswitchする 機能について

C#

はじめに 今回はC#7より追加された型によるswitch と C#8より追加された複数の値をまとめのswitchについて取り上げたいと思います。 はじめに 概要 型スイッチ 複数の値をまとめてswitchする 概要 型スイッチ C#7より型によるswitchができるようになりました…

【C#】Dictionary.Addとインデクサーによる要素の追加で挙動がどう異なるか(重複するキーの場合にArgumentExceptionか上書き)

C#

はじめに Dictionaryに要素を加える際に、Dictionary.Addとインデクサーによる要素追加で少し挙動が異なります。 Dictionary<string, int> dictionary = new Dictionary<string, int>(); // Dictionary<TKey,TValue>.Add(TKey, TValue) // 既存のキーを指定した場合にはエラー(System.ArgumentExcept</tkey,tvalue></string,></string,>…

【Unity】Unity Test Frameworkで特定の例外がスローされることをAssertする方法(Assert.Throws, Assert.Catch, Throws.TypeOf, Throws.InstanceOf)

はじめに 今回はUnity Test Frameworkでエラーのテストをする方法について紹介したいと思います。docs.nunit.org はじめに Assert.Throws Assert.Catch Assert.Thatを利用する 小ネタ Assert.Throws Assert.Throwsを利用することで特定の例外がスローされる…

【Unity】System.Text.Json v8.0.1をUnityで動かすまでの手順

はじめに 今回はSystem.Text.Jsonのv8.0.1をUnityで動作させる手順について紹介したいと思います。またSystem.Text.JsonをUnityの型に対応させる記事を前に書いたので、気になる方はそちらもチェックしてみてください。 engineering.dena.com はじめに その…

【Unity】Unityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法(Mac)

はじめに 今回はUnityが利用しているMicrosoft.CodeAnalysis.CSharpのバージョンの確認方法を紹介したいと思います。Roslyn AnalyzerやSource Generatorを利用する場合はMicrosoft.CodeAnalysis.CSharpのバージョンによって利用できるバージョンが異なるため…

【C#】パフォーマンス・バイナリサイズともに優れたシリアライザー「MessagePack for C#」の基礎的な使い方

C#

はじめに 今回はC#用のMessagePackシリアライザーであるMessagePack for C#の基礎的な使い方を紹介したいと思います。github.com はじめに 概要 環境 インストール方法 使い方 Keyのインデックスについて 配列かマップ(辞書)か シリアライズの前・デシリアラ…

【C#】Google.ProtoBufを利用してProtocol Buffersを扱う方法

C#

はじめに 先日protobuf-netの利用方法についての記事を書いたのですが、今回はGoogle製のライブラリGoogle.ProtoBugの利用方法について書きたいと思います。www.nuget.org github.com protobuf.dev はじめに 概要 サポート 環境 インストール方法 おまけ : R…

【C#】protobuf-netという非公式ライブラリを利用してProtocolBuffersを扱う方法

C#

はじめに 今回はprotobuf-netというライブラリを利用して.NET上でprotocol buffersを扱う方法を紹介したいと思います。www.nuget.org github.com はじめに 概要 サポートされているバージョン 環境 インストール方法 Riderプラグインの導入 使い方 .protoを…

【C#, Unity】Test FrameworkにてType判定するときのIs.TypeOfとIs.InstanceOfの挙動の違いについて

はじめに 今回はNUnit.Framework.Is.TypeOfとNUnit.Framework.Is.InstanceOfで挙動が異なることについて書きたいと思います。 private abstract class HogeBase { } private class Hoge : HogeBase { } [Test] public void SampleTestSimplePasses() { Hoge …

【Unity】gree/unity-webviewを用いてUnityでWebViewを実装する

はじめに 今回はgree/unity-webviewというgreeがOSSとして公開しているWebViewをUnityアプリ上で表示するプラグインを紹介します。 unity-webview is a plugin for Unity 5 that overlays WebView components on Unity view. // DeepL翻訳 unity-webviewはUn…

【Unity】Debug.Logはもう古い!? Unity公式のLoggingパッケージ「Unity Logging」の使い方まとめ

はじめに これはUnity Advent Calendar 2023の15日目の記事です。 qiita.com この記事ではUnity公式のLoggingパッケージであるUnity Loggingを紹介したいと思います。 はじめに 概要 導入 環境 基本的な使い方 LogLevel ログ出力 Default Configure Custom C…