chevron_left

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

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

2020/03/05

arrow_drop_down
  • 【Actions】suzuki-shunsuke/github-action-tflintを用いてterraformのlinter(tflint)をActionsで活用する

    はじめに 今回はsuzuki-shunsuke/github-action-tflintを用いてterraformのlinter(tflint)をActionsに導入する方法を紹介したいと思います。github.com 実際に動作している様子 はじめに reviewdog/action-tflintについて 概要 導入方法 reviewdog/action-tflintについて 有名なterraformのlinter用actionとしてreviewdog/action-tflintがあります。 github.comただ今回紹介するsuzuki-shunsuke/github-action-tf…

  • 【terraform】Cloud RunでIdentity-Aware Proxyを構成できるようになりterraformでも用意してくれた話

    はじめに 先日Cloud Run 用にIdentity-Aware Proxyを構成できる機能がベータで入りました。 cloud.google.comそしてまだterraformではその設定ができなかったのですが、ついにその機能が追加されました。 github.comgithub.com楽に特定のユーザーにだけ利用できるツールを作成できるなどかなり待望していた機能だったので、ちょっと紹介させてください。 はじめに 概要 IAPの有効化 概要 terraformのドキュメントにもExample Usage - Cloudrunv2 Service Iapとして利用方法が紹介されています。 iap…

  • 【Unity】「UnityYAMLを紐解く!Unityを使わない自動化のすゝめ」という内容で登壇しました

    はじめに Unity エディタ拡張 完全に理解した勉強会で「UnityYAMLを紐解く!Unityを使わない自動化のすゝめ」という内容で登壇をしました。 Unity エディタ拡張完全に理解した 勉強会 - connpass発表資料をブログでも載せておくのと、この記事ではちょっとコメント追加しようと思います。 はじめに 発表資料 YAMLのParserについて Pythonを利用する方法 さいごに 発表資料 www.docswell.com YAMLのParserについて 発表だと話せなかったですが、yamlをパースするためにC#だとYamlDotNetやVYAMLあたりを使うのが定番かなと思っ…

  • 【C#】MacのRiderで実行/デバッグ構成を用いてProcessX(Zx)を利用したときにコマンドが見つからない時の対処法

    はじめに ProcessX(Zx)で以下のようなコードを書き、MacのRiderで実行/デバッグ構成を用いて実行しようとしたところghが見つからないと言われてしまいました。 github.com using Zx; var prBody = await $"gh pr view 10 --json body"; var prDiff = await $"gh pr diff 10"; /bin/bash: gh: command not found Unhandled exception. Cysharp.Diagnostics.ProcessErrorException: Process r…

  • 【C#】dotnet tool updateの--allow-downgradeは.NET SDK v8.0.200から入った

    はじめに CIでキャッシュを効かせつつ.NET Toolのバージョンを適宜変更できるようにするなど、dotnet tool update --allow-downgradeは非常に便利で重宝しています。 $ dotnet tool update hogehoge --version 1.0.0 --allow-downgrade ただ.NET SDKのバージョンが低いと--allow-downgradeのオプションがないことに気づきました。 $ dotnet --version 8.0.101 $ dotnet tool update --help Description: グローバルまたはロ…

  • 【C#】.NET SDK9.0.200 & Rider 2024.3 EAPから対応した.slnxを.slnの代わりに使おう

    はじめに .NETのプロジェクトを管理するために.slnを利用していることが多いと思いますが、.slnは冗長で記述が多く、パス修正をしたりはたまにしますが基本手作業はかなりしづらい印象でした。learn.microsoft.com Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample", "Sample\Sample.csproj", "{BC3CEB4B-17B3-41BB-9429-BA3E015E5E40…

  • 【ASP.NET Core MVC】DockerでSQL Serverを立ち上げた時にDatabaseに接続できないときの対処法

    はじめに DockerでMicrosoft SQL Server - Ubuntu based imagesのコンテナを立てた後、Entity Framework Coreを利用してマイグレーションを実行しようとしました。(エンティティ・コンテキスト定義、データベース接続文字列設定&アプリに紐づけ済) mcr.microsoft.com $ dotnet ef migrations add Initial $ dotnet ef database update すると以下のようなエラーが出力されてしまいました。 A connection was successfully established…

  • 【PowerShell】bashのset -xと同じようにデバッグトレースをPowerShellで実現する方法

    はじめに 最近PowerShellにハマっている私ですが、bash・zshで言うところのset -x(set -o xtrace)をPowerShellでもやりたいなと思いました。今回はそのやり方を紹介したいと思います。 はじめに その前に PowerShellでデバッグトレースを有効にする方法 その前に set -x(set -o xtrace)を用いることで実行される各コマンドが標準出力に表示されます。 Print a trace of simple commands, for commands, case commands, select commands, and arithmetic…

  • 【C#】netstandard2.1・.NET Core3.0以前でSystem.HashCodeを利用するにはMicrosoft.Bcl.HashCodeへの参照が必要

    はじめに GetHashCodeを自前で実装するのにSystem.HashCodeはとても便利です。 learn.microsoft.com public class Sample : IEquatable<Sample> { public int Id { get; } public int Value { get; } public bool Equals(Sample other) { if (other is null) return false; if (ReferenceEquals(this, other)) return true; return Id == other.Id …

  • 【C#】ASP.NET CoreのMinimal APIで簡単なWebAPIを作成〜GCPのCloud Runに認証付きで公開するまで

    はじめに 今回はASP.NET CoreのMinimal APIで簡単なWebAPIを作成〜Cloud Runに認証付きで公開するまでの方法について紹介したいと思います。またちょこちょこコマンドを利用した操作をしてますが、bash/zshではなく私はPowerShell教なのでご注意ください。 はじめに Mimimal APIを用いたサーバー実装 Program.csの実装 Endpointの実装 launchSettings.jsonでlocalhostにサーバーを立てる Dockerで動作させる GCPにデプロイする準備 .tfを記述する gcloud CLIを用いて下準備する Artif…

  • 【C#】YamlDotNetを利用して簡単にyamlからjsonへ変換をする

    はじめに 今回はYamlDotNetを利用して.yamlから.jsonへの変換をC#でやる方法を紹介したいと思います。 はじめに 概要 やり方 YamlDotNetをインポートする コードを記述する 参考 概要 YamlDotNetを用いれば複数のライブラリを活用したりせずに簡単に変換ができます。ちなみにYamlDotNet自体はかなり有名なライブラリです。 github.com やり方 YamlDotNetをインポートする NuGetからインポートしましょう。 $ dotnet add package YamlDotNet --version 16.3.0 NuGet Gallery Y…

  • 【C#】ASP.NET CoreのMinimalAPIでOpenAPIドキュメントを自動生成してSwaggerUIやReDocで可視化する(NSwag.AspNetCore)

    はじめに 今回はASP.NET CoreのMinimal APIで自動でOpenAPIドキュメントを生成してSwaggerUIやReDocで可視化する方法を紹介したいと思います。learn.microsoft.comちなみにMicrosoft公式が出しているMicrosoft.AspNetCore.OpenApiというOpenAPIドキュメントを生成するパッケージがあるのですが、こちらはSwaggerUIやReDocといったOpenAPIドキュメントの可視化するための機能がありませんので注意してください。 www.nuget.org 既定では、Microsoft.AspNetCore.Open…

  • 【雑記】ブログの記事数が1000を超えたので心境の変化と大切だと思ったことをまとめてみた

    はじめに ついにブログの記事数が1000を超えました。 ブログの投稿数本ブログの概要は以下のようになっています。 2018/07/22に記事を初投稿 雑記ブログのつもりだが、ほとんどUnity/C#に関する記事を投稿 週2のペースを目標に投稿 ちょうどキリが良い数字になったので、振り返りも兼ねてポエムでも書こうかなと思います。 はじめに ブログへの取り組み方 PV・収益に対する考え方 ブログ書く時間でバイト・副業しろ 嬉しく感じること 継続するのに大切だと思ったこと ブログへの取り組み方 私は基本的に新しく身に着けたものだったり勉強したことを書き溜めておくメモ帳としてブログを活用しています。約…

  • 【C#】C#10で導入されたMSBuildのプロパティであるImplicitUsingsを用いてglobal usingを暗黙的に定義する方法

    はじめに 今回はC#10で導入されたMSBuildのプロパティであるImplicitUsingsについて紹介したいと思います。learn.microsoft.com はじめに 概要 dotnet new consoleを試した様子 プロジェクト SDK の種類とglobal usingの定義 定義されるglobal usingを編集する Alias Static 概要 ImplicitUsingsをenableに設定すると、Systemなどの名前空間が暗黙的にglobal usingに定義されます。global usingというのはコンパイル内のすべてのファイル (通常はプロジェクト)にusi…

  • 【C#】SourceGenerator(RoslynAnalyzer)で独自警告やエラーを作成した際にでる「RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください」の対応方法

    はじめに SourceGeneratorで独自警告を実装していた際に、以下のような警告をRiderが表示してきました。 RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください 警告が出ている様子この対処法について調べたので書き残しておこうと思います。 はじめに 概要 対応方法 ファイルを用意する リリース前のAnalyzerとリリース後のAnalyzerを記述する 概要 Analyzerがどのバージョンでリリースされたか・リリース予定かを記述することが推奨されています。 Release tracking analyzer enables third p…

  • 【C#】Rider2025.1 EAP5でSyntax TreeのVisualizerが来た!

    はじめに Rider 2025.1 EAP5のリリース情報が更新されました。 blog.jetbrains.com今までRiderがSyntax TreeのVisualizerに非対応だったので、いつもISGやRoslynAnalyzerを触るときはSharpLabを多用していました。Riderが対応してくれるだけでかなり期待大です。 sharplab.io 実際に触ってみたので備忘録も兼ねて書き残しておこうと思います。 使い方 Syntax Tree Visualizerを起動するには右側にアイコンがあるのでそれをクリックします。もしくはShift + Shiftで検索するのでも良いでしょう…

  • 【Unity】.unitypackageをUnityを利用せずに展開・圧縮できるPowerShellのモジュールを作った話 (CI/CDでも利用可)

    はじめに 先日.unitypackageをUnityを利用せずに展開・圧縮できるPowerShellのモジュールを作成しました。Unityを利用せずに.unitypackageに圧縮・展開ができるOSSを公開しました!!PowerShellのモジュールとしてインストールでき、MacのターミナルやWidnows上でも簡単に利用できますあとはaction.ymlを用意しているので、CI/CDでも簡単に利用可ですhttps://t.co/jbxppqyZww pic.twitter.com/m50A67RrJp— はなちる@ゲーム制作 (@hanaaaaaachiru) February 12, 2…

  • 【Unity】Editor.DrawPropertiesExcludingを用いてUnityが提供するコンポーネント含めインスペクターに表示されているプロパティを非表示にする

    はじめに 例えばUnityが提供しているImageコンポーネントですが、Colorというプロパティだけ非表示にしたいみたいなモチベーションがあったとします。 ImageコンポーネントただInspector拡張をする際にbase.OnInspectorGUI()をしてしまうと、Colorが表示されてしまいます。 [CustomEditor(typeof(Image))] public class SampleEditor : Editor { public override void OnInspectorGUI() { // Imageコンポーネントの既存のインスペクタを表示 base.OnI…

  • 【Unity】Android 15以降で16KBページサイズのサポート必須になった場合に開発者は再ビルド等の対応をしないといけない話

    はじめに Android 14まで4KBベージサイズをサポートしていましたが、Android 15にて16KBページサイズがオプショナルで使用できるようになりました。 developer.android.comページサイズが増えたことでメモリ使用量が若干増加しますが、様々な箇所でパフォーマンスの向上を見込むことができます。 16 KB ページサイズのサポート Android Developersとても素晴らしいことに感じますが、16KBページサイズに対応しているアプリに再ビルドが必要になる可能性があります。 アプリがネイティブ コードを使用している場合は、16 KB デバイスをサポートする…

  • 【Unity】インスペクタ拡張をした際にコンポーネントの左上に文字が表示されてしまうバグ(?)について

    はじめに ほとんどの人があったことがないと思いますが、インスペクター拡張をしていてちょっと面白い現象に出会ったので紹介したいと思います。 インスペクターの表示がおかしくなっている様子具体的にはコンポーネントの左上に謎の文字がでてくるというバグ(?)です。一応原因らしきものと対策は分かったので、紹介したいと思います。 はじめに 環境 概要 原因 対策 参考 環境 Unity 2022.3.56f1 概要 実際にこの現象にあったときは以下のようなコードを書いていました。具体的にはtextという値を条件によって出し分けたいためにこのように実装してみた背景があります。 // コンポーネント publi…

  • 【C#】.NET v9.0.100-rcでdotnet tool restoreをしたら「Package xxxxx is not a .NET tool.」というエラーが出てきてしまう話

    はじめに dotnet tool restoreをしようとしたところ、以下のようなエラーが出てきてしまいました。 $ dotnet tool restore Package xxxxx is not a .NET tool. nuget.configも.config/dotnet-tools.jsonも正しく設定されており、今までできていたのですが凄い謎の現象でした。一応対処法を見つけられたので書き残しておきたいと思います。 はじめに 対処法 対処法 どうやら.NET SDK側のバグっぽそうな気がしています。 $ dotnet --version 9.0.100-rc.2.24474.11 こ…

  • 【C#】GCPのVertex AI APIにアクセスするためのクライアントライブラリを活用して簡単にChatを実現する方法

    はじめに 今回は.NET用のSDKを用いてGCPのVertex AI APIでChatをする方法を紹介したいと思います。 コンソールからVertex AIを利用して対話している様子 はじめに 前提 インストール方法 AIと対話する さいごに 前提 Google Cloudプロジェクトが既に作成済である前提で進めていきます。またVertex AI APIを有効化しておいてください。 Vertex AI APIを有効化しておくちなみにterraformで有効化するなら以下のようなコードを書きます。 resource "google_project_service" "vertex_ai" { //…

  • 【C#】EmbeddedResourceはファイル名にドット(.)が二個あると動作しない問題とその対処法

    はじめに リソースをアセンブリに組み込むことができるEmbeddedResourceですが、テストで利用するファイルなんかを組み込んだり等々とても有用な機能です。ただ最近EmbeddedResourceで組み込みたいファイル名にドット(.)が二個あると正しく動作しないというバグ?仕様?を発見してしまいました。 <!-- ./Hoge.cs.metaというファイルがあれば組み込む例 --> <EmbeddedResource Include="./Hoge.cs.meta" LogicalName="Hoge.cs.meta" /> コンパイルは通りますが、実行時にそんなリソースはないというエラ…

  • 【Rider】どうやらNRT(null 許容参照型)が有効だとJetBrains.Annotationの[ContractAnnotation]や[AssertionMethod]が動いてないらしい

    はじめに 以下のようなコードがあったとします。 public static void Main() { string? value = new Random().Next() > 10 ? "" : null; Assert(value != null); // Riderが検知できないので警告などは出てこない if (value == null) { // ここを通ることはない } } private static void Assert( bool condition) { if (condition) { return; } throw new InvalidOperationExcep…

  • 【SQL Server】Azure Data Studioのインストール方法と簡単な使い方

    はじめに Azure Data StudioはMicrosoftが開発するクロスプラットフォームで動作するデータベースの管理や開発をサポートするツールです。 Azure Data Studio は、一般的なクラウドとオンプレミスのデータベースに接続できる軽量のクロスプラットフォーム データ管理および開発者ツールです。 Azure Data Studio では、Windows、macOS、および Linux がサポートされており、Azure SQL および SQL Server にすぐに接続できます。 拡張機能ライブラリを参照し、MySQL、PostgreSQL、Cosmos DB などのその他…

  • 【SQL Server】Apple SiliconのMacでDockerを用いてSQL Serverを構築・利用する方法

    はじめに MacでSQL Serverを利用するには、どうやらDockerを利用した手法でやるのがよいっぽいです。以下のダウンロードページにはWindows用しかありませんでした。 www.microsoft.comというわけで今回はSQL Server 2022 Linuxコンテナイメージをプルしてきて実行する方法を紹介したいと思います。 mcr.microsoft.com はじめに 手順 Apple Siliconの場合 コンテナをプルして立ち上げる 実験 SQL Serverへ接続 クエリを実行する お片付け 参考 手順 Apple Siliconの場合 SQL ServerコンテナがA…

  • 【Unity】シリアライズされた情報を維持しつつコンポーネント差し替えをコード上から実行する方法

    はじめに 今回はシリアライズされた情報を維持しつつコンポーネントを差し替えをコード上から実行する方法を紹介したいと思います。 はじめに 概要 コード上から変更する方法 参考 概要 UnityEditor上でのシリアライズされた情報を維持しつつのコンポーネントの差し替え方法ですが、インスペクターをデバッグモードにしてScriptを差し替えることで実現できます。 DebugモードでScriptを差し替える例えばTextコンポーネントとTextを継承した独自コンポーネントがある場合、ScriptをTextから独自Textに差し替えるみたいなことが可能です。 public class HogeText…

  • 【Unity】ファイルがReadonlyなPackageに含まれるかどうかをスクリプトから調べる方法

    はじめに Scene(.unity)を開こうとしたら以下のようなエラーが表示されることがあります。 readonlyなpacakgeを開こうとした時に表示されるエラーUnity Package Manager(UPM)では複数の取得方法がありますが、取得方法によってはReadOnlyなPackageになります。 Registory : readonly Build-in : readonly Embedded : editable Local : editable Tarball(local) : readonly Git : readonly docs.unity3d.com今回は特定のファ…

  • 【Actions, PowerShell】GitHub APIを利用してpushの際に変更されたファイルの一覧を取得する(github.event.head_commit.modifiedは廃止されたので注意)

    はじめに 今回はpushの際に変更されたファイルの一覧を取得する方法を紹介したいと思います。 変更されたファイルを一覧で表示している様子 はじめに github.event.head_commit.modified廃止 方針 コード 動作確認 github.event.head_commit.modified廃止 昔はgithub.event.head_commit.modifiedでpushイベントがトリガーされたときに変更されたファイルのリストを取得することができていたのですが、どうやら廃止されてしまったようです。 github.blogその代用案としてGitHub APIを利用してねとい…

  • 【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で生成した文字列は、文字列の値として同一のものも、異なるメモリ領域に確保しています。ただし定数文字列のみ、インター…

arrow_drop_down

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

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

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

商用