chevron_left

メインカテゴリーを選択しなおす

cancel
はなちる
フォロー
住所
未設定
出身
未設定
ブログ村参加

2020/03/05

arrow_drop_down
  • 【Docker, C#】Docker buildで「--platform linux/amd64」を指定した際にdotnet restoreでスタックしてしまう対策

    はじめに Cloud RunにDocker Imageをアップロードしようとしたところ、M1 Macでビルドする際には以下のオプションを利用しないとダメなことに気が付きました。 $ docker build ./ -t hoge --platform linux/amd64 ただし以下のDockerfileだとdotnet restoreでずっとビルドが進まなくなってしまいました。 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env WORKDIR /App COPY . ./ RUN dotnet restore RUN dotnet pub…

  • 【C#】「Unhandled exception. System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: .../libgrpc_csharp_ext.arm64.dylib」というエラーの対処法

    はじめに M2 MacでGrpc.Coreを利用を利用しようとしたところ以下のエラーが出てきてしまいました。 www.nuget.org Unhandled exception. System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: .../libgrpc_csharp_ext.arm64.dylib これはM1~のMacだとarmなので追加でライブラリが必要になってきます。その対処法を書き残しておきます。 はじめに 対処法 対処法 以…

  • 2024年振り返り、ブログとか技術とか創作とか好きなゲームとか

    はじめに 毎年振り返り記事を書いていたのですが、今年も書いていこうと思います。見返すと大分長いこと続けてました。【2023年を振り返り】大学院修了したり、新社会人になったり、Googleにインタビューされたり - はなちるのマイノート 2022年を振り返り、大学院生TRPGやSwitchリリース、アプリリリースなど - はなちるのマイノート 2021年を振り返り、アプリやSwitchリリース・インターンなど - はなちるのマイノート 2020年を振り返ってみる - はなちるのマイノート 2019年を振り返ってみる - はなちるのマイノート はじめに ブログ 技術 C# CI/CD クラウド ド…

  • 【Actions】GitHub REST APIを用いてブランチを作成する方法

    はじめに 今回はGitHub ActionsからGitHub REST APIを利用してブランチを作成する方法を紹介したいと思います。 はじめに 概要 やり方 最新コミットSHAの取得 公式ドキュメントの例 新しいブランチの作成 公式ドキュメント例 ちなみに 概要 GitHub REST APIを利用することで、Repositoryの情報取得・Issue管理・PullRequestの管理・CommitやBranch管理などなど、GitHubの様々な操作を自動化できます。 docs.github.com詳細は公式ドキュメントを参照してみてください。 やり方 name: test on: work…

  • 【Unity】UI ToolkitのScrollViewを強制的に再描画させる方法

    はじめに UI Toolkitを使用していて、ScrollViewのScrollbarを再描画したいと思い以下のコードを書きました。 var scrollView = uxml.Q("SampleScrollView"); scrollView.MarkDirtyRepaint(); 割と名前から推測してしまっていますが、これだと特に動作しないようです。なかなか情報が見つからず大変でしたが、解決方法を見つけたので書き残しておきたいと思います。 はじめに 解決方法 解決方法 以下のメソッドを定義して呼び出せばOKです。 private static void ForceUpdate(Scroll…

  • 【ReShaper】コードアノテーション属性の「UsedImplicitly」でRider(ReShaper)にメソッドが使用されることをマークする

    はじめに Rider(ReShaper)は、利用されていないメソッド等に対してはコメントを表示してくれます。(自身で警告にしたりと設定可能) Riderがメソッド未使用を教えてくれている様子ただリフレクションや外部ライブラリから利用されるので、検出の対象外にしてほしいケースが多々あります。そんな場合に活用できるのは今回紹介するUsedImplicitlyになります。 はじめに 概要 内部実装 あとがき 概要 [UsedImplicitly]を用いることで、ReShaperにこのメソッドは利用されると認識させることができ、検出の対象外にしてくれます。 www.nuget.org マークされたシン…

  • 【VS Code】VS CodeでもShift ShiftでIntelliJ IDEAのSearch Everywhereのような挙動にさせたい

    はじめに 私は普段IntelliJのRiderを利用しているのですが、Shift ShiftによるSearch Everywhereを高頻度で活用させてもらっています。もう困ったらとりあえず叩くレベルです。 Search Everywhereの公式サンプル このコマンドを使用して、タイプ、シンボル、ファイル、最近のファイル、出現するテキスト、アクション、ツールウィンドウ、実行構成、設定、Git ブランチ、コミット、タグ、メッセージなどの宛先に移動します。この機能を呼び出すとすぐに提案のリストが表示され、最初に最近のファイルが含まれます。 どこでも検索 JetBrains Rider ドキュ…

  • 【Unity2024 Advent Calendar】Unityのコードメトリクスを可視化するための分析基盤の作り方(CodeCoveragePackage + coverlet.collector + octocov + BigQuery + Looker Studio)

    はじめに こちらはUnity2024 Advent Calendarの12/20記事になります。是非他の方の記事もチェックしてみてください。 qiita.com今回はUnityでのコードメトリクスを可視化するための分析基盤の作り方について紹介したいと思います。 PRのコメントでコードメトリクスを表示してくれるコードメトリクスの遷移を可視化した様子 はじめに Code Coverageとは 構成概要 Unity公式パッケージ「CodeCoverage」 セットアップ方法 実行方法 アセンブリをフィルタする HTML Reportを生成する octocovを利用してGitHubに通知を行う 設定フ…

  • 【C#】C#12から追加されたコレクション式を自身が定義した型も対応できるようにする方法

    はじめに C#12(.NET8)からコレクション式というものが導入されました。 int[] array = [1, 2, 3]; List<int> list = [1, 2, 3]; Span<int> span = [1, 2, 3]; ReadOnlySpan<int> ros = [1, 2, 3]; ImmutableArray<int> immutable = [1, 2, 3]; [1, 2,3]のようにして配列などのコレクションを初期化できる機能ですね。 コレクション式を使用して、共通のコレクション値を作成できます。 コレクション式は、評価時に、さまざまなコレクション型に割り当…

  • 【C#】MSBuildで環境変数によってDefineConstantsを用いてコードを切り替える方法

    はじめに 今回はMSBuildで環境変数によってDefineConstantsを用いてコードを切り替える方法を紹介したいと思います。 はじめに 概要 やり方 実験 概要 環境変数によってC#コードを変更したいこともあるかなと思います。 // 環境変数「HOGE_VERSION」が「1.0.0」以上の場合に「HOGE_1_0_0_OR_NEWER」を定義したい #if HOGE_1_0_0_OR_NEWER Console.WriteLine("v1.0.0以上のバージョンです。"); #else Console.WriteLine("v1.0.0未満のバージョンです。"); #endif MS…

  • 【C#】.protoに記載されているコメントをランタイムで取得する方法(--descriptor_set_outを用いてFileDescriptorSetを活用する)

    はじめに 今回は.protoに記載されているコメントをランタイムで取得する方法を紹介したいと思います。 // example.proto syntax = "proto3"; import "google/protobuf/descriptor.proto"; option csharp_namespace = "Protobuf.Sample"; // メッセージ定義にカスタムオプションを追加 extend google.protobuf.MessageOptions { string my_option = 50000; } // メッセージ定義 <= ここらへんのコメントをランタイムで取…

  • 【C#】どうやらMicrosoft.Extensons.LoggingはMessageTemplateのIndexによる順序の制御に対応していないらしい

    はじめに Microsoft.Extensions.LoggingはMessageTempalteを用いています。 messagetemplates.org // MessageTempalteを用いたログ出力 string p1 = "param1"; string p2 = "param2"; // Parameter values: param1, param2 logger.LogInformation("Parameter values: {p2}, {p1}", p1, p2); 各ログ API では、メッセージ テンプレートが使用されます。 メッセージ テンプレートには、指定され…

  • 【C#】coverlet.collectorで生成されたファイルなどの特定ファイルをコードカバレッジ収集対象外にする

    はじめに 今回はcoverlet.collectorで生成ファイルなどの特定のファイルをコードカバレッジ収集対象外にする方法を紹介したいと思います。 はじめに やり方 コマンド引数を用いる runsettingsを用いる 参考 やり方 以下の2種類の方法があります。 コマンド引数(ExcludeByFileなど)を用いる coverlet.runsettingsを用いる コマンド引数を用いる # Generatedフォルダに含まれる.csファイルはコードカバレッジ収集対象外に $ dotnet test --collect:"XPlat Code Coverage;ExcludeByFile=…

  • 【C#】recordの一部プロパティだけで等価かどうかを判定するように変更(Equals・GetHashCode置き換え)する方法

    はじめに recordはとても便利な糖衣構文ですが、例えば一部のプロパティだけで等価かどうか判定したいような場合がありました。例えばDDDのEntityとかですね。実際にrecordがどういう実装がされているのかは以下の記事を見ると分かると思います。 www.hanachiru-blog.com今回は一部プロパティだけで等価か判定させる方法を紹介したいと思います。 はじめに やり方 内部実装 ちなみに やり方 GetHashCodeとEqualsを実装してあげます。 // 本来はIdとNameが一致しているかで判定されているが、Idだけの判定の置き換える public readonly rec…

  • 【Unity】com.unity.search.extensionsに依存しているとEditMode TestがFailする話

    はじめに 先日Unityが公開している(といってもOfficialではない)パッケージであるcom.unity.search.extensionsに依存しているプロジェクトのEditMode TestがFailしてしまうことに気が付きました。 EditMode Testが失敗している様子ValidateCustomIndexation(t:shader sh_rendertype=opaque [Assets/Materials/SurfaceShader.shader] => 1 ) (0.013s) --- Query t:shader sh_rendertype=opaque yield…

  • 【Rider】「実行 / デバッグ構成(Run/Debug Configurations)」を用いて引数を与えながらデバッグ実行をする

    はじめに Riderのデバッガーはとても有用ですが、恥ずかしながら引数を渡しながらデバッグ実行する方法を最近まで知りませんでした。 デバッガーを利用している様子そのやり方を今回は紹介したいと思います。 はじめに やり方 実行構成の編集 他の人と共有できるようにする やり方 実行 / デバッグ構成(Run/Debug Configurations)を用いることで実現できます。 実行 / デバッグ構成は、現在のソリューションでコードを実行およびデバッグする方法を定義する一連のプロパティです。各ソリューションに複数の実行 / デバッグ構成を設定して、さまざまな方法でコードを起動することができます。 …

  • 【C#】NuGetでGoogle.Protobuf.Toolsをインストールした際のprotoc実行バイナリのパスについて

    はじめに protobufを利用する際に、protocを取得する手段の一つとしてGoogle.Protobuf.Toolsを利用するのは割とある方法だと思います。www.nuget.orgしかし毎回その実行バイナリのパスを忘れてしまうのでメモがてらに書き残しておきたいと思います。 はじめに パス VersionNameについて PlatformNameについて 具体例 csprojで取得する パス NuGetでインストールされたものはcsprojでは$(NuGetPackageRoot)で取得することができます。その中の以下のパスにバイナリがあります。 google.protobuf.tool…

  • 【C#】C#13から登場した「OverloadResolutionPriority」を用いてオーバーロードの優先順位を指定する

    はじめに C#13で新しくSystem.Runtime.CompilerServices.OverloadResolutionPriorityAttributeが追加されました。 namespace System.Runtime.CompilerServices; [AttributeUsage(AttributeTargets.Method AttributeTargets.Constructor AttributeTargets.Property, AllowMultiple = false, Inherited = false)] public sealed class Over…

  • 【Blazor+GCP+terraform】Blazor ServerをCloud Runで動作させてGCSマウントしたファイル一覧を表示する

    はじめに 今回はBlazor ServerをCloud Run上で動作させてマウントさせたGCS上のファイルを一覧で表示する簡易サイトの作り方を紹介したいと思います。 実際に動作している様子 はじめに 概要 作り方 .NET 8 Blazor web applicationを作成する GCSのマウントしたファイルを読み込めるようにする サーバーのURL指定 ポート番号を設定する launchSettings.jsonを用いてデバッグ可能にする プロジェクトをビルドする Dockerfileを用意する Artifact Registoryにアップロードする terraformによりCloudRu…

  • 【PowerShell】PesterというPowerShell用のテストフレームワークを用いてテストを実装する方法

    はじめに 今回はPesterというPowerShell用のテストフレームワークを紹介したいと思います。 $ Invoke-Pester -Output Detailed ./Sandbox.Test.ps1 Pester v5.6.1 Starting discovery in 1 files. Discovery found 3 tests in 2ms. Running tests. Running tests from '/---/Sandbox.Test.ps1' Describing Get-AddNum [+] 1 + 2 = 3 1ms (1ms 0ms) [+] -5 + 5 …

  • 【C#】マークダウンとC#で数行コードを書くだけで静的サイトが作れる「Statiq Web」を紹介

    はじめに .NETの最新情報を毎週投稿してくれるWeekRef.NET: 週刊 .NETですが、どうやらStatiq Web + GitHub Pagesを用いて構築されていることを知りました。 weekref.net気になり調べたところ、C#コードを数行書くだけで、記事を.mdで書くといい感じにサイトを構築してくれることが分かりました。結構便利そうだったので、今回は紹介したいと思います。 はじめに Statiq Webの紹介 ローカルで利用してみる プロジェクトテンプレートよりプロジェクトを作成する Statiq.Webをインストールする Program.csを編集する コンテンツを追加する…

  • 【PowerShell】いつも書くおまじないメモ(shebang, version指定, errorの扱い)

    はじめに 私はPowerShellを書くときに、以下のコードをおまじない的にいつも記述しています。 #!/usr/bin/env pwsh #Requires -Version 7.4 # Paramに関する記述 $PSNativeCommandUseErrorActionPreference = $true $ErrorActionPreference = "Stop"このコードのついて今回は書いていきます。 はじめに 解説 #!/usr/bin/env pwsh #Requires -Version 7.4 $PSNativeCommandUseErrorActionPreference …

  • 【C#】ExcludeFromCodeCoverageAttributeを用いてコードカバレッジ収集の対象外にする

    はじめに 今回はdotnet testでコードカバレッジを収集する際にExcludeFromCodeCoverageAttributeを用いて対象外にする設定をする方法を紹介したいと思います。 learn.microsoft.com はじめに コードカバレッジ収集について コードカバレッジの収集対象外に設定する 実験 coberturaの変化 ExcludeFromCodeCoverageAttributeを付与しない場合 ExcludeFromCodeCoverageAttribute付与した場合 コードカバレッジ収集について コードカバレッジ収集はcoverlet.collectorを利用…

  • 【GCP + terraform】terraformを使用してCloud RunでGCSをMountして利用する(C#)

    はじめに 今回Cloud RunにてCloud Storageのバケットをterraformを使用してマウントする方法を紹介したいと思います。 はじめに 概要 GCSの構築 IAM・サービスアカウントの設定 Cloud Runの定義 GCS上のファイルを表示するC#コード 実際に動作している様子 概要 公式ドキュメントには以下のやり方が載っています。 resource "google_cloud_run_v2_service" "default" { name = "cloudrun-service" location = "us-central1" deletion_protection =…

  • 【PowerShell】PowerShellならVSCodeでBreakpointもImmediate Windowも利用できる

    はじめに PowerShellを推している理由の一つとして、デバッグ機能が充実している点が挙げられます。特に以下の2つは神機能です。 Breakpoint Immediate Window 今回はこの2つの機能をVS Codeで扱う方法を紹介したいと思います。 はじめに その前に Breakpointのやり方 Immediate Windowのやり方 あとがき その前に VS CodeにPowerShellの拡張機能が入っている前提で話をすすめていきます。 VS Code拡張Microsoftが純正のものを出しています。 Breakpointのやり方 コードの左側に赤色の丸をつけることができる…

  • 【C#】CoconaでMicrosoft.Extensions.DependencyInjectionを用いてDIを行う方法

    はじめに 今回はCoconaに標準で入っているMicrosoft.Extensions.DependencyInjectionを用いてDIを行う手法を紹介したいと思います。github.comhttps://github.com/mayuki/Cocona/blob/master/samples/InAction.DependencyInjection/Program.cs はじめに やり方 下準備 CoconaAppBuilderで設定を行う コマンド作成 エントリポイント作成 あとがき やり方 下準備 まずは雑にそれっぽいファイルを用意しました。 $ tree . ├── Command …

  • 【Unity】生成したコードをPrefabに自動でアタッチする方法

    はじめに 今回は生成したコードをPrefabに自動アタッチする方法を紹介したいと思います。 はじめに 概要 コンパイル後にアタッチする 実験 概要 PrefabへのアタッチにはPrefabUtilityを利用すると簡単に実現できます。 docs.unity3d.com private static void AddComponent(string prefabPath, IReadOnlyList<string> scriptPaths) { if (string.IsNullOrEmpty(prefabPath)) return; if (scriptPaths == null) retur…

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

    はじめに GitHub Actionsで特定のフォルダ以下のファイルが変更されたときのみワークフローを実行するにはpathsを使うと思います。 # srcフォルダ以下のファイルが変更されたときのみ実行する on: pull_request: paths: 'src/**.cs' ただjob単位で条件をつけようとすると、結構面倒です。 # 特定のファイルが変更されたときだけjobを実行したいなら以下のように if で書く # ただしワイルドカードが利用できないので、フォルダ以下の全てのファイルが対象だとかなり大変 jobs: hoge: runs-on: ubuntu-latest if: co…

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

    はじめに 今回はC#でプロジェクトを構築している前提でPRを出した際にコードカバレッジの増減を表示してくれるCIの作り方を紹介したいと思います。 コードカバレッジの増減表示具体的にはcoverlet.collectorとoctcovというOSSを利用して実現していきます。github.com github.com はじめに coverlet.collectorを用いたテスト実行 + コードカバレッジ取得 概要 プロジェクトに導入する コマンド利用方法 取得範囲を絞る octcovを用いてプルリクの際にコードカバレッジ差分を表示する 概要 設定ファイルの作成 actionsを作成する 結果 考察…

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

    はじめに 今回はYetAnotherHttpHandlerを用いてUnityでHTTP/2を扱う方法を紹介したいと思います。 はじめに 背景 概要 環境 インストール方法 使い方 さいごに 背景 まず.NETが提供するHttpClientですが、.NET Core3.0以降であればHTTP/2に対応しています。 HttpClient クラス (System.Net.Http) Microsoft Learn var client = new HttpClient { BaseAddress = new Uri("https://localhost:5001"), DefaultReques…

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

    はじめに record (class)やrecord struct、readonly record structはとても便利な機能なのですが、たまにEqualの処理どうなってたっけ・プロパティのアクセシビリティなんだっけと私はよくなります。 // record : record classと同じ意味 public record Record(string Name, int Age) { public bool IsValid() => !string.IsNullOrEmpty(Name) && Age > 0; } // record class : recordと同じ意味 public …

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

    はじめに 今回は指定したジョブが成功したかを監視するステータスチェックジョブを作成してBranch Protectionに指定する方法を紹介したいと思います。複数のジョブがあったときに、一つでも失敗してしまうとマージができなくなるようにしていきます。 はじめに ワークフローの作成 Branch Protectionを作成する 実験 ワークフローの作成 今回は例として .NET用のテスト と TypeScript用のテスト を用意し、それらが成功するかを調べるジョブを作成します。 name: test on: workflow_dispatch: pull_request: jobs: # .N…

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

    はじめに UI ToolkitのTwoPaneSplitViewというVisualElementがあるのですが、それがめちゃくちゃ便利です。2つの要素をリサイズできるようにしつつ分割して表示してくれるものになります。 docs.unity3d.com TwoPaneSplitViewよくコードからTwoPaneSplitViewを生成する方法が紹介されていますが、実用するうえではUXMLに直書きしたい場合の方が多いのではないのかなと思います。しかしUnityのデフォルトではLibrary/Standardにはありません。(Unity2022.3.22f1時点で確認) Library/Stand…

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

    はじめに UnityはMonoからCore CLRへの移行を進めていますが、Core CLRがくると.asmrefが使えなくなるみたいです。そのあたりを軽く調べてみたので、そのまとめを書き残しておきたいと思います。また現時点ではまだ開発中なので、今後変わるかも知れないのでご注意ください。 はじめに 話題の議論 代替案 話題の議論 Unity DiscussionsでUnity Future .NET Development StatusというタイトルでユーザーとUnity中の人が議論している様子を見ることができます。 https://discussions.unity.com/t/unity-…

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

    はじめに 今回はterraformを利用してCloudRunを構築しminimal API(ASP.NET Core + .NET 8)で構築したWebサーバーをデプロイする方法を紹介したいと思います。具体的には以下の操作をしていきます。 terraformによるCloud Run構築 ASP.NET Coreによるプロジェクト作成 作成したプロジェクトを実行するDockerfileを作成 Artifact RegistoryにDocker Imageをアップロード はじめに Cloud Runの構築 Cloud RunにアクセスできるURIを出力する その他のterraformコード サイト…

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

    はじめに 今回はSystem.Text.Jsonの[JsonRequired]について書きたいと思います。www.nuget.orglearn.microsoft.com はじめに 前提 [JsonRequired]について 前提 System.Text.Jsonでデシリアライズする際に、[JsonRequired]が付与されていないプロパティに対してはjsonに値がなくてもエラーが吐かれることはなく、デフォルト値が代入されます。 public class Program { public static void Main(string[] args) { var json = "{ }"u8…

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

    はじめに RiderにはBreakpointにてEvaluate and log(評価して記録)というブレークポイントに到達したときに値の評価しログ出力できる機能があります。 Evaluate and log JetBrains Rider では、任意の行、メソッド、例外ブレークポイントをトレースポイントに変換できます。トレースポイントメッセージは、デバッグ出力(デバッグウィンドウのデバッグ出力タブ)に記録されます。 pleiades.ioただ最近のRider(例. Rider 2024.1.5)だと何故かこれがログに表示されないという現象が起きるみたいです。その対処法を書いていきたいと思いま…

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

    はじめに 今まで.gitignoreで.ideaフォルダ以下のものはGitにあげないようにしていました。 # gitignore /.idea/ただ最近知ったのですが、どうやら一部はGitにあげたほうが良いらしいです。今回はそのことについて書きたいと思います。 はじめに .ideaとは gitに上げるべきもの ちなみに .ideaとは .ideaフォルダには IntelliJ のプロジェクト固有の設定ファイルが含まれています。 The .idea folder (hidden on OS X) in the solution root contains IntelliJ’s project s…

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

    はじめに 今回はローカルにあるnupkgから.NET Toolとしてインストールをして利用する方法を紹介したいと思います。 はじめに 概要 nupkgの作成方法 nuget.configの作成方法 dotnet tool installを行う 参考 概要 nuget.orgからインストールする際にはあまり意識したことはないかもしれませんが、GitHub Packagesのprivateなpackageなどそれ以外の場所からpackage取得するにはnuget.configが重要になります。nuget.configにはどこからパッケージを取得できるようにするかを設定ができます。また認証情報が必要…

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

    はじめに 今回はUI Toolkitで画面いっぱいに何かを表示したいときの方法を紹介したいと思います。 画面いっぱいに表示している様子 はじめに UI Builderと実際の見た目が異なる 原因 対処法 参考 UI Builderと実際の見た目が異なる BackgroudColorを赤色に設定したVisual Elementを配置し、flex-growを1に設定してあげるとUIBuilderのWindowいっぱいに表示されます。 UI Builder上の表示ただしUnityエディタ上で実際にWindowを立ち上げても、何故かWindowいっぱいに表示されません。 実際の見た目が異なる 原因 U…

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

    はじめに 先日、SourceGeneratorを利用したパフォーマンスの良いEnumユーティリティを提供するライブラリを公開しました。 github.com.NET標準API や 世界最速のenumライブラリ FastEnum よりもパフォーマンスが良いライブラリ RapidEnum リリースしました!!手元で計測したところ、.NET APIより数十~数万倍良い計測結果がでてましたUnity Package Managerにも対応してるので、Unity勢も手軽に導入できますhttps://t.co/8miqpRUo0r pic.twitter.com/FOztfAYD5f— はなちる@ゲーム制…

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

    はじめに 今回はGITHUB_OUTPUTに書き込む際に>>ではなく tee -aを用いることでログに書き出せることについて書きたいと思います。めっちゃ小ネタです。 はじめに 概要 説明 概要 タイトルにもある通り、GitHub ActionsでGITHUB_OUTPUTに書き込む際に tee -aを用いるとおすすめです。 name: test on: workflow_dispatch jobs: test: runs-on: ubuntu-latest steps: - run: # ログに出力されない echo "tmp=10" >> $GITHUB_OUTPUT # ログに出力…

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

    はじめに 今回はBOM無しのUTF-8でファイルに書き込む方法について紹介したいと思います。 はじめに やり方 やり方 encoderShouldEmitUTF8Identifierをfalseに指定したUTF8Encodingを利用します。 learn.microsoft.com // BOM付きUTF-8で書き出す File.WriteAllText(path, "Hello, World", Encoding.UTF8); // ef, bb, bf がUTF-8のBOM // ef, bb, bf, 48, 65, 6c, 6c, 6f, 2c, 20, 57, 6f, 72, 6c,…

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

    はじめに 今回はSemantic Versioningを簡単に扱えるようになるMS製ライブラリのNuGet.Versioningを紹介したいと思います。 www.nuget.org はじめに 概要 使い方 概要 Semantic Versioningをプログラムで扱うためにはNuGet.Versioningを推奨されています。 NuGet パッケージのバージョンをプログラムで使用する場合は、パッケージの NuGet.Versioning を使用することを強くお勧めします。 静的メソッド NuGetVersion.Parse(string) はバージョン文字列を解析するために使用でき、Versi…

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

    はじめに 今回はRider2024.2から登場したExtracting common codeについて紹介したいと思います。blog.jetbrains.com はじめに 概要 おまけ やり方 概要 Extracting common codeを用いることで、重複したコードを抜き出してよしなにコードを綺麗にすることができます。例えば↓のコードで実験してみます。 var sb = new StringBuilder(); if (DateTime.Now.Day > 20) { sb.AppendLine("a"); sb.AppendLine("1"); sb.AppendLine("2");…

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

    はじめに 今回はSourceGeneratorにてAttributeArgumentSyntax.NameColonがnullな場合と値が格納されている場合の違いについて書きたいと思います。learn.microsoft.com はじめに その前に 取得するには 違い 補足 その前に まず前提としてSyntaxTreeは構文解析によって得られた情報であり、解析対象の文字列に含まれていないものは取得できません。今回もそれが原因になってます。またNameColonは何かというと、AttributeArgumentSyntaxの場合はAttributeのコンストラクタの引数名を表しています。 // …

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

    はじめに 今回はMessagePack-CSharpでCustom Formatterを作成する方法を紹介したいと思います。github.com はじめに 概要 環境 やり方 Custom Formatterの作成 Resolverの作成 よりパフォーマンスを上げるために MessagePackSerializerOptionsへの設定 実験 コード全文 参考 概要 Custom Formatterを作成することで、独自に定義した型・サードパーティ製ライブラリで定義された型などのMessagePack-CSharpが対応していない型に対してシリアライズ・デシリアライズ処理を記述することで対応さ…

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

    はじめに 今回は個人的にデバッグをする上で覚えておきたい機能一位であるImmediate Windowを紹介したいと思います。pleiades.io Immediate Windowを利用している様子 はじめに 概要 使い方 1. デバッグ実行する 2. プログラムが一時停止する 3. Immediate Windowを活用する 値を調べる 値を代入する 新しい変数を用意する メソッドを実行する 概要 Immediate Windowはデバッガーによりプログラムが一時停止状態のときに処理を挟み込むことができる機能です。例えば変数の中身を調べたり、変数に別の値を代入してみたり、メソッドを呼んでみ…

  • 【C#】RawStringLiteralに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日 どうやらRaw String Literalに言語設定をしてあげることでハイライトできるみたいです。その方法を紹介します。 はじめに やり方 参考資料 やり方 以下の…

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

    はじめに SourceGeneratorにてRegisterPostInitializationOutputを用いてAttributeを定義するのは、公式も紹介しているようなよくある手法です。 RegisterPostInitializationOutput:... It is particularly useful for adding attribute definitions to the users' source code. These can then be applied by the user in their code, and the generator may find …

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

    はじめに 今回はVYamlを用いてYAML(Unityで利用される特殊な形式を含む)をシリアライズ・デシリアライズする方法を紹介したいと思います。github.com はじめに UnityとYAML VYamlとは インストール方法 Unityの場合 基本的な使い方 命名規則 あらかじめSchemaの決まっていないYAMLを読み取る Unityでprefabを読み取る UnityとYAML Unityでは.unityや.prefab, .assetなどをYAMLにシリアライズして保存しています。以下はPrefabをシリアライズしたYAMLの例です。 %YAML 1.1 %TAG !u! tag…

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

    はじめに 今回はISymbol.ToDisplay(SymbolDisplayFormat.FullyQualified)を用いてSymbolの完全修飾名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに やり方 実験 動作しないケース やり方 ISymbol.ToDisplay(SymbolDisplayFormat.FullyQualified)を利用することで、完全修飾名を取得することができます。 // global::SourceGenerators.Sample.SampleClass ISymbol symbol = namedSymbol; …

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

    はじめに 今回は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(b); } checked { int x = int.MaxValue; // System.OverflowException: Arithmetic operation re…

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

    はじめに 今回はSourceGeneratorでブレークポイントを用いたデバッグをRiderでする方法を紹介したいと思います。Rider公式で紹介されていて、今まで頑張ってテストコード書いてデバッグしてましたがもっと手軽にできることを知って衝撃を受けました。もっと早く知りたかった...。 blog.jetbrains.comテストコードは生成されたコードに対して行うくらいが楽ですし、十分なのではと個人的に思います。(依存先のアセンブリを拾ってくるのがめっちゃ面倒…) はじめに やり方 launchSettings.jsonの配置 ブレークポイントの設定と実行 やり方 launchSetting…

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

    はじめに 今回はRiderを日本語化しようという記事になります。 日本語化した状態 はじめに やり方 参考 やり方 Riderを開き、メニューバーよりFile -> Settingsを選択。 File -> SettingsタブバーからPluginsを選択し、Japanese Language Packを検索しインストールします。 日本語言語パックをインストールインストール後、Riderを再起動すると日本語になっているはずです。 日本語化した状態 参考 Install plugins JetBrains Rider Documentation Rider EAP 版で日本語言語パック対応を…

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

    はじめに 今回はUnityでIncremental Source GeneratorのAdditionalTextsProviderを利用する方法を紹介したいと思います。 はじめに その前に AdditionalFilesを利用してファイルを読み込む Unityでの場合 ちょっとした裏技(?) その前に どこかのバージョンから?かSource GeneratorでSystem.IOを利用できなくなったみたいです。 context.RegisterSourceOutput(sampleProvider, (context, syntax) => { // 「アナライザーに対して禁止された API…

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

    はじめに 今回はRiderのショートカットである"どこでも検索(Search Everywhere)"について紹介したいと思います。 pleiades.io Shift2回を押してどこでも検索を利用している様子個人的にRiderで覚えて欲しい機能一位でして、これがないともうコード書けません。 はじめに 概要 参考 概要 究極のショートカットはSearch Everywhere(どこでも検索)です。Shiftキーを2回押すと、あらゆるものを検索できる検索ボックスが開きます。 Findアクションと同様、このショートカットを使って設定を変更できます。 検索ボックスにはデフォルトで最近のファイルが表示…

  • 【C#】RuntimeでcsファイルをRoslynで解析してリフレクションで実行する

    はじめに 今回はRuntimeでcsファイルをRoslynで解析をしてリフレクションで実行する方法を紹介したいと思います。github.com はじめに 概要 インストール 今回の流れ 構文木を生成する Syntax Treeの走査 C#のバージョン指定 コンパイル MetadataReferenceで依存先のアセンブリを追加 CSharpCompilationOptionsでコンパイル後のアセンブリの種類を設定 コンパイル結果を調べる Unityで扱う場合 参考 概要 .NET Compiler Platform SDK(通称Roslyn)は、C#で開発されたC#コンパイラープラットフォーム…

  • 【C#】SourceGeneratorで実際にファイルを吐かせるようにする方法

    はじめに 今回はSourceGeneratorで実際にファイル出力させる方法について紹介したいと思います。 はじめに やり方 参考 やり方 SourceGeneratorで生成したコードが含まれる側の.csprojに対して(SourceGeneratorのコードが含まれる.csprojでないので注意)、EmitCompilerGeneratedFiles・CompilerGeneratedFilesOutputPathを記述します。 EmitCompilerGeneratedFiles : ファイルを出力するかどうか CompilerGeneratedFilesOutputPath : 出力先…

  • 【C#】MSBuildでdotnet buildが終了したあとにdllを特定の場所にコピーする方法

    はじめに 今回はMSBuildでdotnet buildが終了した後にdllを特定の場所にコピーする方法を紹介したいと思います。特にUnityの場合では、Roslyn AnalyzerやSourceGeneratorを利用する場合は手作業でdllをコピーするのはとても面倒です。そんなときはMS Buildで自動化しちゃいましょう。 はじめに やり方 共通のプロパティおよびパラメーター 参考 やり方 .csprojに以下を追加します。 <Target Name="DllCopy" AfterTargets="AfterBuild"> <Copy SourceFiles="$(OutputPath…

  • 【Rider】変数名やクラス名、構造体の名前などはGitHub Copilot Chatに考えてもらおう

    はじめに 今回は小ネタですが、GitHub Copilot Chatに変数名を考えてもらうとめっちゃ良かったという話をしたいと思います。 C#13の情報がぼちぼち出てるのにC#10のまとめ記事執筆を勧めてくるCopilot君 はじめに 前提 使い方 さいごに 前提 GitHub CopilotをRiderに連携させておかないと利用することができませんので注意してください。 plugins.jetbrains.com 使い方 右側のGitHub Copilot Chatボタンを押すことで、チャットでやり取りがすることができます。 GitHub Copilot Chatどういう質問の仕方が良いのか…

  • 【C#】privateコンストラクタしかないclassを無理やりリフレクションで生成する

    はじめに 今回はPrivateコンストラクタしかないclassを無理やりリフレクションで作成する方法を紹介したいと思います。 public class Hoge { // privateコンストラクタしかないと正攻法だと外から生成できない private Hoge() { } } はじめに やり方 引数がない場合 引数がある場合 やり方 引数がない場合 Activator.CreateInstanceのnonPublicがあるオーバーロードを利用することで実現できます。 public static object? CreateInstance (Type type, bool nonPubli…

  • 【C#】protobufのカスタムオプションを取得する方法

    はじめに 今回はprotobufのカスタムオプションをC#で取り出す方法を紹介したいと思います。 protobuf.dev // カスタムオプションを定義 extend google.protobuf.MessageOptions { string my_option = 50000; } message MyMessage { // "Hello, world!"をC#上で取り出したい option (my_option) = "Hello world!"; string message = 1; } はじめに カスタムオプションの定義 コンパイル カスタムオプションを取得する 参考 カスタ…

  • 【C#】Coconaを利用してSystem.CommandLineなどを利用せずに簡単にConsoleアプリケーションを作成する

    はじめに 今回はCoconaというOSSを紹介したいと思います。github.com はじめに 概要 インストール 使い方 基本 Optionsについて Argumentsについて Sub-commands パラメーターの共通化 Validation Microsoft.Extensions.*の利用 Logging DI さいごに 概要 よくあるSystem.CommandLineを利用してコンソールアプリケーションを作る例を書いてみました。 learn.microsoft.com // System.CommandLineを利用した例 public class Program { publ…

  • 【Unity】EditorWindowでEditorGUILayout.PropertyField&SerializedObject.FindPropertyをしてもデフォルト値にクリアされてしまう問題の対処法

    はじめに 以下のコードを書いていたところ、Unity2022.3.10f1では正しく動作しないことに気がつきました。(Unity6では正しく動作していました) using UnityEditor; using UnityEngine; public class SampleWindow : EditorWindow { [SerializeField] private string[] _texts; [MenuItem("Tools/SampleWindow")] public static void Open() { GetWindow<SampleWindow>(); } private…

  • 【Unity】Player SettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法

    はじめに 今回はPlayerSettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法について紹介をしたいと思います。 ProjectSettings/Player/OtherSettings/Script Compilationより設定可一応補足ではありますが、スクリプトからでなければProjectSettings/Player/OtherSettings/Script Compilationから設定可能になります。 はじめに 取得方法 設定方法 補足 取得方法 PlayerSettings.GetScriptingDefineSymbolsForGro…

  • 【Terraform】Docker Providerを利用してローカルでインフラ環境を構築してみる

    はじめに Terraformを触っていたら、Docker Providerなるものがあることを見つけました。registry.terraform.iogithub.com面白そうだったので触ってみたメモを残しておきたいと思います。 はじめに Docker Providerとは tfファイルの記述 Terraformの実行 結果確認 後片付け 参考 Docker Providerとは Docker ProviderはDockerコンテナやイメージとやり取りをするためのProviderです。 The Docker provider is used to interact with Docker c…

  • 【C#】Dockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築する

    はじめに 今回はDockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築してみたいと思います。 はじめに プロジェクトを用意する Dockerfileを定義する イメージをビルド コンテナを起動 参考 プロジェクトを用意する まずはプロジェクトを作成します。minimal API用のテンプレートが用意されているので、それを利用していきます。 $ dotnet new web -o DockerTest -f net8.0 .NET 8がインストールされていれば無事にプロジェクトが作成されるはずです。 bin/ obj/ apps…

  • 【C#】minimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる

    はじめに 今回はminimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる方法を書いていきます。 はじめに プロジェクトを作成する Dockerfileについて Cloud Runにデプロイする Artifact Registry 参照 プロジェクトを作成する まずはminimal APIを利用したプロジェクトを作成します。テンプレートがプレインストールされているので、それを利用してプロジェクトを作成します。 $ dotnet new web -o CloudRunSample -f net8.0 テンプレート "AS…

  • 【Unity】UnityでCallerArgumentExpression属性, required修飾子, initアクセサを利用する方法(自分で定義する必要があり)

    はじめに 現在のUnityで利用できるC#のバージョンはC#9までになってます。ただ少し裏技?を使うことで実質C#11まで利用することが可能になっています。zenn.devただ注意点としてはasmdefが絡んでくるとよく知られているCsprojModifierを用いる手法だけだといけなかったはずです。(CsprojModifierでやっていることはAssetPostprocessor.OnGeneratedCSProjectを用いてcsprojに変更を加える)github.com本題のCallerArgumentExpressionなのですが、C#10から登場した属性です。Unityに対してC…

  • 【C#】インターンプールを用いてstring生成によるヒープのメモリ確保を防ぐ方法(メモリを占有しつづけるのでそこは注意)

    はじめに 今回はなるべくstringでヒープへのメモリ確保を抑えるためにインターンプールを利用する方法について紹介したいと思います。 はじめに 概要 string.Internとstring.IsInterned 明示的に登録しなくても登録される場合 注意点 参考 概要 通常stringはヒープにメモリが確保され、ガベージコレクションの対象になります。ただし同一の文字列なら同一のメモリ領域を利用した方が良いのではということで利用されるのがインターンプールです。 new stringで生成した文字列は、文字列の値として同一のものも、異なるメモリ領域に確保しています。ただし定数文字列のみ、インター…

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

    はじめに 今回はstring.Createを用いて高速にstringを生成する方法を紹介したいと思います。learn.microsoft.com 概要 string.FastAllocateStringというinternalなメソッドが.NETにはあり、これを利用することで高速に文字列領域を確保することができます。 通常のオブジェクトと同じようにオブジェクトヘッダを持ちヒープ領域に確保され、同様に、原則new stringのみで生成可能です。StringBuilder.ToStringやEncoding.GetStringなども、最終的にnew stringを呼んで、新たな文字列を確保していま…

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

    はじめに 今回はGitHub Actionsで.NETのビルド&テストを実行する方法を紹介したいと思います。 はじめに やり方 実験 ファイルを用意 ローカルで動作確認する GitHub Actionsが動作するか確認する ワークフローの中身 参考 やり方 .NETのビルド&テストをするワークフローはよくある典型なので、公式で用意してくれています。それを用いればとても簡単に設定できます。 リポジトリ名の下にあるActionsをクリック dotnetを検索 .NETのConfigureを選択 .NETのスターターワークフローを探す4. .NETのバージョンやワークフローが実行されるタイミングなど…

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

    はじめに 今回は列挙型関連のメソッドを爆速+ゼロアロケーションで実行できるFastEnumというライブラリを紹介したいと思います。 .NETメソッドとの比較結果 はじめに 概要 インストール方法 使い方 列挙型のName・Value・FieldInfoなどを一度に取得したい場合 列挙型に情報を付与する 制約 実験 早い理由 概要 FastEnumを用いることでゼロアロケーションで高速に列挙型関連のメソッドを動作させることができます。 FastEnum is the fastest enum utilities for C#/.NET. It's much faster than .NET Co…

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

    はじめに 今回はdotnet new 〇〇コマンドでプロジェクトを作成できるようなテンプレートの作成方法を紹介したいと思います。 $ dotnet new stringext テンプレート "Example templates: string extensions" が正常に作成されました。 テンプレートからプロジェクトを作成した様子 はじめに 概要 実装のイメージ .template.config/template.jsonについて プロジェクトテンプレートの作成 プロジェクトテンプレートとは .template.config/teplate.jsonファイルを配置する template.j…

  • 【Unity】iOSにてgree/unity-webviewで表示している画像を長押ししてもメニュー(画像を保存したり共有したり)が開かないようにする方法

    はじめに 今回はiOS(Safari)でgree/unity-webviewを利用して表示した画像に対して保存・共有といったことが可能にならないようにメニューを開かせないように設定する方法を紹介したいと思います。github.com はじめに やり方 おまけ やり方 -webkit-touch-calloutというcssを適応させることで実現できます。developer.mozilla.orgどうやってやるのかというとgree/unity-webviewの場合はWebViewObject.EvaluateJSを利用します。 github.com webViewObject.EvaluateJS…

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

    はじめに 今回はCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに 概要 使い方 おまけ 概要 CallerArgumentExpressionを用いることで、メソッドの引数で渡した真の意味での文字列をキャプチャすることができます。 パラメーターが、別のパラメーターに渡された式を文字列としてキャプチャすることを示します。 CallerArgumentExpressionAttribute クラス (System.Runtime.CompilerServices) Micro…

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

    はじめに 今回はTypeをKeyにとるDictionaryをStatic Type Cachingに変えて処理を高速化させる方法について紹介したいと思います。Static Type Cachingについては以下のスライドのp46~触れられています。 www.slideshare.net はじめに 概要 バイナリサイズを減らす方法 実験 結果 概要 高速化できるDictionaryの条件は、TypeがKeyな場合です。 // Static Type Cachingに置き換えられる対象Dictionary private static readonly Dictionary<Type, int> …

  • 【Unity】gree/unity-webviewでバウンス(スクロール領域の境界に達したときに範囲外が少し表示される奴)を無効化する

    はじめに 今回はgree/unity-webviewでバウンススクロールを無効化する方法を紹介したいと思います。github.com techvisor.jpちなみに基本的な使い方は前に記事を書いたので、気になる方はチェックしてみてください。 www.hanachiru-blog.com はじめに バウンスをオフにする 仕組み サイドバーをなくす 仕組み バウンスをオフにする バウンスをオフにするにはWebViewObject.SetScrollBounceEnabledを用います。 private void Start() { var webViewObject = new GameObje…

  • 【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での操作 Cloud Pub/Subの設定 Cloud Functionsの設定 Cloud Schedulerの設定 動作確認 概要 以下のような構成図で実装します。 構成図 Cloud Scheduler : フルマネージド cron ジョブ スケジューラ。 Cloud Pu…

  • 【Unity】gree/unity-webviewのSetMarginのrelativeは何を意味するのか(Screen.SetResolutionをしたときに挙動が変わる)

    はじめに 今回はgree/unity-webviweのWebViewObject.SetMarginsの引数にあるrelativeについて書きたいと思います。 public void SetMargins(int left, int top, int right, int bottom, bool relative = false) github.com // 使用例 private void Start() { var webViewObject = new GameObject("WebViewObject").AddComponent<WebViewObject>(); // 初期化 w…

  • 【Unity】UniTask.WhenAllは省略できて、配列かIEnumerableかTupleをawaitしてあげるだけでも同じ意味になる

    はじめに UniTask.WhenAllを利用することで全てのTaskが終了するまで待つことができます。 // 全てのTaskが終わるまで待つ await UniTask.WhenAll(UniTask.Delay(1), UniTask.Delay(2), UniTask.Delay(3)); 実はこれはいくつか書き方があるので、それを紹介したいと思います。github.com はじめに 書き方 実現しているコード 参考 書き方 配列、IEnumerable、Tupleをawaitしても同様の処理を実現できます。 var task1 = UniTask.Delay(1); var task2…

  • 【Unity】Unity2023.2からUI Toolkitの「UxmlElementとUxmlAttribute」を使用することでCustom UI Elementsを実装する際に「UxmlFactoryとUxmlTraits」が必要がなくなった

    はじめに 今回はUI ToolkitのUxmlElementとUxmlAttributeについて取り上げたいと思います。docs.unity3d.com docs.unity3d.com昔Unity2023.2のTech Stream紹介ブログにて、Custom UI Elementsの実装を簡略化した改善が紹介されていました。 Custom UI Elementsの実装簡素化古いやり方についてはQualiArtsさんの技術記事を参照すると分かりやすいかと思います。 technote.qualiarts.jp気づけば今はUnity6 Beta(6000.0)が出ていたので、実際にどうなっている…

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

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

  • 【Unity】Build Report Inspectorを用いてビルドプロセスに関する情報をインスペクター上に分かりやすく表示する

    はじめに 今回はUnity公式パッケージであるBuild Report Inspectorについて紹介したいと思います。docs.unity3d.com 利用している様子 はじめに 概要 インストール方法 使い方 Build Report Inspectorの見方 Build Steps Source assets Output files Stripping Scenes using Assets 概要 Build Report InspectorはBuildPipeline.BuildPlayerにて取得できるBuild Reportに記載されている情報(publicなAPIで取得できない…

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

    はじめに 今回はBenchmarkDotNetというライブラリを利用して処理速度・メモリ使用量を計測する方法を紹介したいと思います。github.com はじめに 概要 インストール 使い方 1. classを用意 2. Benchmark属性をつけたメソッド定義 3. BenchmarkRunner.Runを行う 4. リリースビルドに設定する 5. 実行する サンプル 詳細 概要 BenchimarkDotNetを利用することでメソッドのメモリ確保量を含むパフォーマンス計測を行うことができます。↓ 実際に計測した結果例 計測結果例 BenchmarkDotNet helps you to …

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

    はじめに 今回はGoogle Cloud Functionsに.NETを利用した関数をデプロイする方法について書きたいと思います。内容的には以下の公式ドキュメントをミックスした感じです。 cloud.google.com cloud.google.com codelabs.developers.google.com先に書いておくと、備忘録的な内容なので、公式ドキュメントを読んでいただいたほうが良いと思います。 はじめに セットアップ Cloud Shellを起動する 利用サービスの有効化 Google Cloud SDKをインストールして初期化する ローカルでプロジェクトを作成する ローカルで…

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

    はじめに 今回はStringBuilderとDefaultInterpolatedStringHandlerの処理速度・メモリ確保量を比べてみたいと思います。learn.microsoft.comlearn.microsoft.com大抵のStringBuilderの利用シーン、new StringBuilderの代わりにnew DefaultInterpolatedStringHandler(0, 0)を使ったほうが良いと思うのだけど、new DefaultInterpolatedStringHandler(0, 0)という呼びづらさが微妙にそれを躊躇わせる。— neuecc (@neuec…

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

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

  • 【Unity】Unity SearchでApplication.dataPathなどのpublicなStatic APIメソッドとプロパティの結果をお手軽に調べる方法(api:)

    はじめに 今回はUnity Searchを利用して簡単にApplication.dataPathなどのpublicなStatic APIメソッドやプロパティを実行する方法を紹介したいと思います。docs.unity3d.com はじめに やり方 自前のStaticメソッドの実行 参考 やり方 Unity Editor上でCommand + K(Ctrl + K)を実行することでUnity Searchが立ち上がります。もしくはメニューバーからEdit > Search Allですね。 Unity Searchを立ち上げた様子上にある検索フィールドから検索クエリを入力することでアセットの検索など…

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

    はじめに 今回はstring.FormatとDefaultInterpolatedStringHandlerで処理速度・Allocationの優劣を調べてみようと思います。learn.microsoft.comlearn.microsoft.com結論から言うとDefaultInterpolatedStringHandlerが優秀です。(C#10から補完文字列(interpolated string)でも利用されだしているので当然ですが) はじめに string.Format DefaultInterpolatedStringHandler 計測結果まとめ 計測で利用したコード string.…

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

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

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

    はじめに 今回はSystem.Text.JsonでスキーマレスなJsonに対してプロパティを追加する方法を紹介したいと思います。learn.microsoft.com はじめに やり方 参考 やり方 JsonDocumentは読み取り専用なので、JsonDocumentではなくJsonNodeを用いることで容易に実現できます。learn.microsoft.com // どんなスキーマ定義されているかよく分からないJson string json = """ { "Age" : 20, "Name" : "John", "Friend" : { "School" : "Lucas" } } "…

  • 【Unity】Debug.LogなどのConsoleへのログ出力にハイパーリンクを埋め込む方法

    はじめに 今回はDebug.LogなどのConsoleへのログ出力にハイパーリンクを埋め込む方法を紹介したいと思います。 ハイパーリンクを埋め込んでいる様子 はじめに やり方 外部サイト Assets以下のファイル 該当コード 参考 やり方 外部サイト // 外部サイトを開くハイパーリンク埋め込み Debug.Log("Website: <a href=\"https://www.hanachiru-blog.com/\">website</a> "); 外部サイトへのハイパーリンク Assets以下のファイル // Assets/Scripts/Sample.csというスクリプトファイルの7…

  • 【Unity】「Diagnostic switches are active and may impact performance or degrade your user experience. Switches can be configured through the Diagnostics section in the Preferences window.」というエラーの対処法

    はじめに Unityエディタを開いていたら以下のようなエラーが出てきました。 Diagnostic switches are active and may impact performance or degrade your user experience. Switches can be configured through the Diagnostics section in the Preferences window. ProfileOpenCLJobs: False 出力されたエラーこの解決方法を書き残しておきたいと思います。 はじめに 対処法 参考 対処法 Preferenceを開…

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

    はじめに ふと興味本位でBlazorを触ってみようと思い、以下の公式のラーニングパスをやってみてます。 learn.microsoft.comそのときに学んだことをメモがてらに残しておきたいと思います。正直自分宛のメモなので、気になる方は公式のものをみてください。 はじめに ダウンロード&インストール アプリの作成 アプリを実行する カウンターの実装について コンポーネント データバインディングとイベント 制御フローを追加する イベントを処理する データバインディング TODOリスト作成 さいごに 参考 ダウンロード&インストール .NET 8 SDKがインストールされていることを確認してくだ…

  • 【GitHub Actions】ワークフローの入力(inputs)で"choiceというtype &options"を利用することで列挙型(enum)を利用することが可能になる

    はじめに 今回はGitHub Actionsのワークフローの入力に列挙型(enum)を利用する方法を紹介したいと思います。 実際に利用している様子 はじめに やり方 参考 やり方 choiceというtypeを利用し、入力の選択肢をoptionsに記載します。 name: Sample # workflow_dispatchによりワークフローを手動実行できるようにする on: workflow_dispatch: inputs: version: # typeをchoiceにすることで入力をoptionsで設定したものから選択できるようになる type: choice required: tru…

  • 【Unity】UnityEditor上でプロジェクト直下やPackagesやUserSettingsやLogsといったパスをPath.Combineで取得する(System.Environment.CurrentDirectoryを使ってはダメ)

    はじめに 今回はUnity Editor上でプロジェクト直下・Packages・UserSettings・Logsといったパスの取得方法を紹介したいと思います。 利用している様子 はじめに やり方 Application.dataPathについて やり方 以下はUnity Editor上での取得方法です。 // コメントはMac上での出力例になっています。 // Assets直下 : /Users/[UserName]/[ProjectName]/Assets Debug.Log(Application.dataPath); Debug.Log(Path.GetFullPath(Applica…

  • 【Unity】GameCIを用いてUnityのCI 環境をGitHub Actions上に構築し、Test Frameworkを実行&結果をアップロードする方法

    はじめに 今回はGameCIを用いてUnityのCI 環境をGitHub Actions上に構築し、Test Frameworkを実行&結果をアップロードする方法を紹介したいと思います。github.com具体的には以下の2つを紹介します。 GameCIを利用するための設定方法 TestFrameworkをGitHub Actions上で実行する方法 実行している様子 はじめに Unityライセンスを設定する Unityライセンス.ulfファイルをローカルマシーンから探す GitHubリポジトリの設定から設定する ワークフローの設定 .github/workflows上にyamlファイルを作成…

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

    はじめに 今回はUnity公式パッケージであるCode Coverageを利用してTest Frameworkで実行したテストのコードカバレッジを計測する方法を紹介したいと思います。docs.unity3d.com 実際に生成したレポート はじめに Code Coverageとは 概要 環境 インストール方法 セットアップ Code Coverage Windowについて Test Runnerでレポートを作成する Code Coverageとは Code Coverageとはテストで用いられるコードがどれだけ実行されたかを示す指標です。 コード網羅率(コードもうらりつ、英: Code cov…

arrow_drop_down

ブログリーダー」を活用して、はなちるさんをフォローしませんか?

ハンドル名
はなちるさん
ブログタイトル
はなちるのマイノート
フォロー
はなちるのマイノート

にほんブログ村 カテゴリー一覧

商用