はなちるのマイノート

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

2024-01-01から1年間の記事一覧

【Actions】「dorny/paths-filter」を用いてジョブ単位でのpathsを実現する

はじめに GitHub Actionsで特定のフォルダ以下のファイルが変更されたときのみワークフローを実行するにはpathsを使うと思います。 # srcフォルダ以下のファイルが変更されたときのみ実行する on: pull_request: paths: 'src/**.cs' ただjob単位で条件をつけ…

【C#, Actions】coverlet.collector + octcovを用いてプルリクを出した際にコードカバレッジの増減をCIで表示する

はじめに 今回はC#でプロジェクトを構築している前提でPRを出した際にコードカバレッジの増減を表示してくれるCIの作り方を紹介したいと思います。 コードカバレッジの増減表示具体的にはcoverlet.collectorとoctcovというOSSを利用して実現していきます。gi…

【Unity】YetAnotherHttpHandlerを用いてHTTP/2を扱えるHttpClientを作成する

はじめに 今回はYetAnotherHttpHandlerを用いてUnityでHTTP/2を扱う方法を紹介したいと思います。 はじめに 背景 概要 環境 インストール方法 使い方 さいごに 背景 まず.NETが提供するHttpClientですが、.NET Core3.0以降であればHTTP/2に対応しています。 …

【C#】record (class)・record struct・readonly record structがどういう実装になるのかSharpLabでデコンパイルして覗いてみる

C#

はじめに record (class)やrecord struct、readonly record structはとても便利な機能なのですが、たまにEqualの処理どうなってたっけ・プロパティのアクセシビリティなんだっけと私はよくなります。 // record : record classと同じ意味 public record Reco…

【Actions】ステータスチェックジョブを作成してBranch Protectionで指定したjobが通らないとマージできないようにする

はじめに 今回は指定したジョブが成功したかを監視するステータスチェックジョブを作成してBranch Protectionに指定する方法を紹介したいと思います。複数のジョブがあったときに、一つでも失敗してしまうとマージができなくなるようにしていきます。 はじめ…

【Unity】UI ToolkitのTwoPaneSplitViewをコードから動的に生成せずに利用する方法

はじめに UI ToolkitのTwoPaneSplitViewというVisualElementがあるのですが、それがめちゃくちゃ便利です。2つの要素をリサイズできるようにしつつ分割して表示してくれるものになります。 docs.unity3d.com TwoPaneSplitViewよくコードからTwoPaneSplitView…

【Unity】.asmrefはCore CLRがくると動作しなくなるよという話

はじめに UnityはMonoからCore CLRへの移行を進めていますが、Core CLRがくると.asmrefが使えなくなるみたいです。そのあたりを軽く調べてみたので、そのまとめを書き残しておきたいと思います。また現時点ではまだ開発中なので、今後変わるかも知れないので…

【GCP, terraform】Cloud Runをterraformで構築して.NETで構築した最小構成のウェブサーバーをデプロイする

はじめに 今回はterraformを利用してCloudRunを構築しminimal API(ASP.NET Core + .NET 8)で構築したWebサーバーをデプロイする方法を紹介したいと思います。具体的には以下の操作をしていきます。 terraformによるCloud Run構築 ASP.NET Coreによるプロジェ…

【C#】System.Text.Jsonで[JsonRequired]を用いて、デシリアライズの際にプロパティが存在しないとJsonExceptionを投げさせる

C#

はじめに 今回はSystem.Text.Jsonの[JsonRequired]について書きたいと思います。www.nuget.orglearn.microsoft.com はじめに 前提 [JsonRequired]について 前提 System.Text.Jsonでデシリアライズする際に、[JsonRequired]が付与されていないプロパティに対…

【Unity】RiderのBreakpointにてEvaluate and logが出力に表示されないときの対処法(Breakpoint Trace message outputを設定する必要あり)

はじめに RiderにはBreakpointにてEvaluate and log(評価して記録)というブレークポイントに到達したときに値の評価しログ出力できる機能があります。 Evaluate and log JetBrains Rider では、任意の行、メソッド、例外ブレークポイントをトレースポイント…

【Rider】gitignoreで.ideaフォルダ以下を全部ignoreするのはどうやら違うらしい

はじめに 今まで.gitignoreで.ideaフォルダ以下のものはGitにあげないようにしていました。 # gitignore /.idea/ただ最近知ったのですが、どうやら一部はGitにあげたほうが良いらしいです。今回はそのことについて書きたいと思います。 はじめに .ideaとは g…

【C#】.NET Toolとしてローカルにあるnupkgからインストール&利用する方法

C#

はじめに 今回はローカルにあるnupkgから.NET Toolとしてインストールをして利用する方法を紹介したいと思います。 はじめに 概要 nupkgの作成方法 nuget.configの作成方法 dotnet tool installを行う 参考 概要 nuget.orgからインストールする際にはあまり…

【Unity】UI ToolkitでWindow画面いっぱいに表示ができないときの対処法(Unityが自動生成するTemplateContainerの影響)

はじめに 今回はUI Toolkitで画面いっぱいに何かを表示したいときの方法を紹介したいと思います。 画面いっぱいに表示している様子 はじめに UI Builderと実際の見た目が異なる 原因 対処法 参考 UI Builderと実際の見た目が異なる BackgroudColorを赤色に設…

【C#】Incremental SourceGeneratorを利用した爆速Enumユーティリティライブラリを作成した話

はじめに 先日、SourceGeneratorを利用したパフォーマンスの良いEnumユーティリティを提供するライブラリを公開しました。 github.com.NET標準API や 世界最速のenumライブラリ FastEnum よりもパフォーマンスが良いライブラリ RapidEnum リリースしました!…

【Actions】GITHUB_OUTPUTに書き込む際は「>> $GITHUB_OUTPUT」ではなく「| tee -a $GITHUB_OUTPUT」がおすすめ

はじめに 今回はGITHUB_OUTPUTに書き込む際に>>ではなく| tee -aを用いることでログに書き出せることについて書きたいと思います。めっちゃ小ネタです。 はじめに 概要 説明 概要 タイトルにもある通り、GitHub ActionsでGITHUB_OUTPUTに書き込む際に| tee -…

【C#】BOM無しのUTF-8でファイルに書き込む方法

C#

はじめに 今回はBOM無しのUTF-8でファイルに書き込む方法について紹介したいと思います。 はじめに やり方 やり方 encoderShouldEmitUTF8Identifierをfalseに指定したUTF8Encodingを利用します。 learn.microsoft.com // BOM付きUTF-8で書き出す File.WriteA…

【C#】NuGet.Versioningを用いてNuGetのパッケージバージョンなどで使われるSemantic Versioningを扱う

C#

はじめに 今回はSemantic Versioningを簡単に扱えるようになるMS製ライブラリのNuGet.Versioningを紹介したいと思います。 www.nuget.org はじめに 概要 使い方 概要 Semantic Versioningをプログラムで扱うためにはNuGet.Versioningを推奨されています。 Nu…

【Rider】Rider2024.2から登場したExtracting common codeを用いて重複したコードを抜き出す

はじめに 今回はRider2024.2から登場したExtracting common codeについて紹介したいと思います。blog.jetbrains.com はじめに 概要 おまけ やり方 概要 Extracting common codeを用いることで、重複したコードを抜き出してよしなにコードを綺麗にすることが…

【C#】SourceGeneratorでAttributeArgumentSyntaxがNameColonを持つ場合とnullな場合の違い

C#

はじめに 今回はSourceGeneratorにてAttributeArgumentSyntax.NameColonがnullな場合と値が格納されている場合の違いについて書きたいと思います。learn.microsoft.com はじめに その前に 取得するには 違い 補足 その前に まず前提としてSyntaxTreeは構文解…

【C#】MessagePack-CSharpでCustom Formatterを定義して、独自の型やサードパーティー製ライブラリに含まれる型に対応する方法

はじめに 今回はMessagePack-CSharpでCustom Formatterを作成する方法を紹介したいと思います。github.com はじめに 概要 環境 やり方 Custom Formatterの作成 Resolverの作成 よりパフォーマンスを上げるために MessagePackSerializerOptionsへの設定 実験 …

【Rider】 Immediate Windowを用いてデバッグ中に使用可能なオブジェクト・機能にアクセスしデバッグ効率をあげる方法

はじめに 今回は個人的にデバッグをする上で覚えておきたい機能一位であるImmediate Windowを紹介したいと思います。pleiades.io Immediate Windowを利用している様子 はじめに 概要 使い方 1. デバッグ実行する 2. プログラムが一時停止する 3. Immediate W…

【C#】RawStringLiteralにC#の構文を対象にハイライトを付ける方法

C#

はじめに Xを見ていたらこのようなものを見つけました。TIL: you can add C# syntax highlighting to a string literal by adding /* lang=c#-test */ above it: https://t.co/Tr7A8UzUY1 pic.twitter.com/WLcDDz8mhz— Daniel Cazzulino (@kzu) 2024年7月24…

【Unity】SourceGeneratorにてRegisterPostInitializationOutputでAttributeを定義した際に特定のアセンブリにしか含めたくない場合は、asmdefのVersion Definesを用いると実現できる

はじめに SourceGeneratorにてRegisterPostInitializationOutputを用いてAttributeを定義するのは、公式も紹介しているようなよくある手法です。 RegisterPostInitializationOutput:... It is particularly useful for adding attribute definitions to the …

【C#, Unity】VYamlを用いてYAML(Unityで利用される特殊な形式を含む)をシリアライズ・デシリアライズする方法

はじめに 今回はVYamlを用いてYAML(Unityで利用される特殊な形式を含む)をシリアライズ・デシリアライズする方法を紹介したいと思います。github.com はじめに UnityとYAML VYamlとは インストール方法 Unityの場合 基本的な使い方 命名規則 あらかじめSchem…

【C#】ISymbol.ToDisplay(SymbolDisplayFormat.FullyQualified)を用いてSymbolの完全修飾名を取得する(プロパティなどのメンバーシンボルでは取得できないので注意)

C#

はじめに 今回はISymbol.ToDisplay(SymbolDisplayFormat.FullyQualified)を用いてSymbolの完全修飾名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに やり方 実験 動作しないケース やり方 ISymbol.ToDisplay(SymbolDisplayFormat.Ful…

【C#】オーバーフローが発生したときに例外を発生させるかをchecked・uncheckedにて制御する

C#

はじめに 今回はchecked・uncheckedキーワードについて取り上げたいと思います。 unchecked { int x = int.MaxValue; // -2147483648 int y = x + 1; Console.WriteLine(y); long a = -100; // 18446744073709551516 ulong b = (ulong)a; Console.WriteLine(…

【C#, Rider】SourceGeneratorに対してブレークポイントを用いてデバッグするにはlaunchSettings.jsonが大切

はじめに 今回はSourceGeneratorでブレークポイントを用いたデバッグをRiderでする方法を紹介したいと思います。Rider公式で紹介されていて、今まで頑張ってテストコード書いてデバッグしてましたがもっと手軽にできることを知って衝撃を受けました。もっと…

【Unity】UnityでSourceGeneratorのAdditionalFilesを用いてファイル読み込みをしたい場合はcsc.rspをasmdefと同階層に配置する

はじめに 今回はUnityでIncremental Source GeneratorのAdditionalTextsProviderを利用する方法を紹介したいと思います。 はじめに その前に AdditionalFilesを利用してファイルを読み込む Unityでの場合 ちょっとした裏技(?) その前に どこかのバージョン…

【Rider】Riderの日本語言語パックを利用して表示を日本語にする(Japanese Language Pack / 日本語言語パック)

はじめに 今回はRiderを日本語化しようという記事になります。 日本語化した状態 はじめに やり方 参考 やり方 Riderを開き、メニューバーよりFile -> Settingsを選択。 File -> SettingsタブバーからPluginsを選択し、Japanese Language Packを検索しインス…

【Rider】Shiftを2回押すことで"どこでも検索(Search Everywhere)"というあらゆるものを検索できる検索ボックスを開く

はじめに 今回はRiderのショートカットである"どこでも検索(Search Everywhere)"について紹介したいと思います。 pleiades.io Shift2回を押してどこでも検索を利用している様子個人的にRiderで覚えて欲しい機能一位でして、これがないともうコード書けません…