chevron_left

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

cancel
はなちるのマイノート https://www.hanachiru-blog.com/

Unityをメインに扱う技術ブログ。 Twiter等で「はなちる」という名前で活動をしています。

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

2020/03/05

ブログをみる無料アプリ

アプリでフォローする
arrow_drop_down
  • 【C#】dotnet buildで出力された.binlogをVS Code上で見れる拡張機能を作成した

    はじめに 前回MSBuild Binlog Viewer for RiderというRider向けプラグインを作成しました。 www.hanachiru-blog.comRiderに作ったならVS Codeでも見れても良いかなと思い、VS Codeの拡張機能も作ってみました。 実際に利用している様子それについて軽く紹介したいと思います。 はじめに 概要 インストール方法 使い方 概要 冒頭の記事でも書いたのですが、dotnet buildの詳細のログを.biglogで出力できます。 $ dotnet build /bl この.biglogなのですが、専用のアプリをインストールして中身を解析しない…

  • 【C#】dotnet buildで出力された.binlogをRider上で見れるプラグインを作成しました

    はじめに 先日、dotnet buildで出力された.binlogをRider上で見れるようにしたプラグインを作成しました。dotnet buildで構造化された詳細ログを.binlogというファイルで出力できるのですが、それをRider上で見れるプラグインがなかったので作りました!(専用のソフトを入れないと見れないので地味にめんどくさかったやつ)個人的には重いRoslyn Analyzerがないかを調べるのにhttps://t.co/6xKwj6bhEp pic.twitter.com/S9LFscDFxH— はなちる@ゲーム制作 (@hanaaaaaachiru) April 27, 20…

  • 【C#】Roslyn Analyzerがビルド時間に与える影響を調べる方法

    はじめに Roslyn Analyzerはコードの品質を保つためには欠かせない存在です。ただ多数のAnalyzerを導入すると、ビルド時間がやたら長かったりと開発者体験を損なってしまう可能性があるのもまた事実です。learn.microsoft.com今回の記事ではRoslyn Analyzerがビルド時間に与える影響を調べること手法を紹介したいと思います。 はじめに 調べ方 ログファイルを出力させる msbuild.binlogの確認方法 Analyzer Summaryを調べる 参考 調べ方 ログファイルを出力させる 解析ログを出力させるには、MS BuildにReportAnalyzer…

  • 技術書典 20にUnityに関する合同誌「Unity.Sunday Book Vol.1」を出しました

    はじめに タイトルにもある通り、先日技術書典20でコミュニティの有志で執筆したUnity本を頒布しました。明日の技術書典20にて、会社の有志で執筆したUnity本を頒布します!現地会場でも紙版を頒布予定ですhttps://t.co/HQmwslxpvaサークル名:[か01] Unity.Sunday#技術書典20— はなちる@ゲーム制作 (@hanaaaaaachiru) April 11, 2026 ブログでも宣伝も兼ねてそのことについて書きたいと思います。 はじめに 執筆した本 執筆のきっかけ 感動したこと 課題 執筆した本 techbookfest.org内容としては以下の3章から成り立…

  • 【C#】SourceGeneratorとInternalVisibleToを組み合わせるとCS0436という型競合が起こる問題の対処

    はじめに お久しぶりです。最近ブログ更新サボってましたが、不定期になりますがまた書いていきたいと思います。SourceGeneratorのRegisterPostInitializationOutputで属性生成してると、InternalsVisibleTo使ったときに型競合(CS0436)が起こる問題があり、その対応として.NET10から[Embedded]が入ってるただUnityは最新でもMicrosoft.CodeAnalysis.CSharp v4.0.4使ってて、4.13.0(なはず)以上に上げてもらわない— はなちる@ゲーム制作 (@hanaaaaaachiru) March 7,…

  • 【C#】NUnit4.0からAssert.AreEqual()やAssert.IsTrue()などのクラシックアサートがLegacyとして切り出されたが4.5で戻ってきた話

    はじめに 今回はNUnit v4での破壊的変更について書きたいと思います。そもそもNUnitとは?と思う方に向けて簡単に説明すると、.NET向けのユニットテストフレームワークです。特にUnityを触られている方は、触ったことがあるかと思います。 NUnit is a unit-testing framework for all .Net languages. Initially ported from JUnit, the current production release, version 3, has been completely rewritten with many new fea…

  • 【Rider】Rider2025.3.2 or Rider2026.1 EAP2でnetstandard2.0を使ったプロジェクトに依存するとNETSDK1005エラーでビルドできなくなるバグがある

    はじめに 現在最新のRider2025.3.2とRider2026.1 EAP2を使っていたところ、今までビルドできていたプロジェクトが急にできなくなりました。 Build with surface heuristics started at 02:34:20 Use build tool: /usr/local/share/dotnet/sdk/10.0.101/MSBuild.dll CONSOLE: MSBuild のバージョン 18.0.6+fad253f51 (.NET) CONSOLE: 2026/02/06 2:34:21 にビルドを開始しました。 CONSOLE: ノード 1 …

  • 【Rider】Rider2026.1よりILではなくアセンブリまで調べられる新機能が登場

    はじめに Rider2025.3の新機能として、Unityにより生成されたILを表示できるようになりました。www.hanachiru-blog.comILに加えて、Rider 2026.1よりstandard JIT・ReadyToRun (crossgen2)・NativeAOT (ilc)によってコンパイルされたネイティブアセンブリまで見れるようになる新機能が登場しました。blog.jetbrains.com概要やインストール方法、実際に実験してみた結果まで書き残しておきたいと思います。 はじめに 概要 インストール方法 使い方 調べ方 コンパイラの切り替え スナップショット 実験 C#…

  • 【Gemini Cli】Gemini CliでAgent SkillsとSubagentsが一応使えるようになった

    はじめに 巷で話題のAgent SkillsとSubagentsですが、どうやらGemini Cliでも動かすこと自体はできるフェーズに入っていることに気づきました。code.claude.comcode.claude.com具体的にいつから入ったや使い方を書き残しておきたいと思います。 はじめに 概要 使い方 Agent Skills Subagents 気をつけてほしいこと 参考 概要 Agent SkillsもSubagentsもGemini CliのIssueにて進捗情報を知ることができます。github.com github.comどちらもまだ道半ばですが、 Agent Skills…

  • 【C#】stryker-netがGitHub Actions上で.NET10で動かそうとするとエラーになってしまう対処法

    はじめに GitHub Actions上でstryker-netがsetup-dotnetで.net9を指定していたときは動いていたのに、.net10に変えたら急にエラーがでてくるようになりました。 github.com [12:21:53 INF] Analysis starting. [12:21:53 INF] Identifying projects to mutate in .../sandbox.sln. This can take a while. [12:21:56 INF] Analysis complete. [12:21:56 ERR] An error occurred…

  • 【C#】dotnet new mcpserverがMicrosoft.Extensions.AI.Templates@10.1.2-preview.3.25619.3だと動作しないことに気づいた

    概要 MCP Serverを作成するにあたってMicrosoft.Extensions.AI.Templatesのmcpserverというテンプレートを活用する人が多いと思います。www.nuget.org例えばMS公式の「C# を使用して最小限の MCP サーバーを作成し、NuGet に発行する」という記事でもその方法が推奨されています。learn.microsoft.com ただ最新のMicrosoft.Extensions.AI.Templates@10.1.2-preview.3.25619.3をインストールしたところ、以下のエラーが出てきてしまいました。 > dotnet new m…

  • 【Gemini Cli】ついにGeminiCliがMCP Resourcesに対応した

    はじめに てっきりGemini Cliは既にMCP Resourcesに対応しているかと思っていたのですが、どうやら最近までされていなかったようです。そしてついに2025/12/9に取り込まれて、v0.21.0-nightly.20251210.d90356e8aとしてリリースされました。そのことについて書きたいと思います。 はじめに Resourcesとは Resourcesが実装された ちなみに Resourcesとは そもそもMCP Resourcesってなんなのかというと、MCP Serverからファイル等のデータをコンテキストとして提供するための標準化された仕組みです。 Resour…

  • 【Unity】UnityでローカルLLMを手軽に動かせるOSS・公式パッケージ三選 (gemma-unity-plugin, LLMUnity, Unity Sentis)

    この記事は Unity Advent Calendar 2025の5日目の記事になります! qiita.com昨日は @tsubasamusu さんの「【Unity】Unity エディタと Unreal エディタでローカルマルチプレイしよう!~Unity 編~」でした。 【Unity】Unity エディタと Unreal エディタでローカルマルチプレイしよう!~Unity 編~ はじめに 今回はUnityでローカルLLMを使う際に利用できるOSS/公式パッケージを三つ紹介したいと思います。 gemma-unity-plugin : Google社員によって作成されたプラグイン LLMUnity…

  • Unityの正確なリリースノート情報を取得してくれるMCP ServerをOSSとして公開しました

    はじめに 記事書くのが遅くなりましたが、先日Unityのリリースノート情報を取得してくれるunity-release-note-mcpをOSSとして公開しました。Unityで正確なリリースノート情報をgemini等々が答えてくれなかったことがあったので、Unity Release APIを活用して正確な情報を教えてくれるMCP Server作りました!有給だったのでせっかくだし新しいことしようと思い、試しにDeno入門して作ってみてますhttps://t.co/fgsYuQkK2l pic.twitter.com/6daREMq9Xp— はなちる@ゲーム制作 (@hanaaaaaachiru)…

  • 【Rider】Rider 2025.3からIL ViewerでUnityによって生成および後処理されたILを見れるようになった

    はじめに ついにRider2025.3がリリースされたのですが、新機能の一つとしてUnityにより生成されたILを表示できるようになりました。 実際に利用している様子 Unity code in the IL Viewer The IL Viewer tool window now shows the intermediate language (IL) code of the assemblies generated and post-processed by Unity, rather than the temporary assemblies generated by an IDE bu…

  • 【GitHub】一括で「XXX files viewed」を0にリセットする方法

    はじめに 小ネタなのですがGitHubでレビューをしていて、たまに一回Viewedをリセットしたいという時があります。(私だけ?) n files viewed自分が軽く調べた感じ正攻法だと一つずつ選択していくしかなさでしたが、一括でやる方法があるのでメモがてら書き残しておきます。 はじめに やり方 やり方 開発者ツール(Macなら⌘ + ⌥ + Iで開く)のコンソールに、以下のコマンドを実行します。 document.querySelectorAll(".js-reviewed-checkbox:checked").forEach(check => check.click())Macで実行し…

  • 【C#】SourceGeneratorで生成されたコードはcsprojのNullableが反映されないことを知った

    はじめに 最近、SourceGeneratorで生成されたコードはcsprojのNullableが反映されないことを知りました。 The global nullable context does not apply for generated code files. Under either strategy, the nullable context is disabled for any source file marked as generated. This means any APIs in generated files are not annotated. There are f…

  • 【C#】ジェネリック制約で特定のインターフェースを実装しているとはじかせる方法を考えた

    はじめに 前提としてC#のジェネリック制約ではTはIHogeを実装するが、IFugaは実装しないことのようなインターフェースの否定的な制約を記述をすることはできません。 public interface IHoge; public interface IFuga; public static class Sandbox { // IHogeを実装している型を引数として受け取れる // IFugaを実装しているかどうかは関係ない public static bool Execute<T>(T value) where T : IHoge { return true; } } ただどうしてもコンパ…

  • 【C#】Google.GenAI(dotnet-genai)を活用してGemini Developer APIやVertex AI APIを利用する方法

    はじめに GoogleからGoogle.GenAI(dotnet-genai)というGemini Developer APIやVertex AI APIを利用するための.NET SDKがリリースされました。github.com以前Google.Cloud.AIPlatform.V1を紹介した記事を書きましたが、より高レベルで使いやすいSDKになっています。 www.hanachiru-blog.com はじめに 概要 下準備 コンソールアプリケーションの作成 dotnet-genaiをインストール Gemini Developer APIを利用するためにAPIキーを取得する Gemini De…

  • 【Gemini】VS Code(とforkしたIDE)でGemini Cli Companionを利用してより快適にGemini Cliを活用する方法

    はじめに 今回はVS CodeからGemini Cliを利用するためにオススメなGemini Cli Companionについて紹介しようと思います。github.com github.com以前はターミナルからGemini Cliを使用していましたが、この機能のおかげでVS Codeから大体操作するように最近はなりました。 はじめに 環境 概要 インストール方法 機能 Open Editor File Context Selection Context Native Diffing Launch Gemini CLI 詳細 さいごに 環境 VS Code v1.99.0以上 Gemini C…

  • 【Electron】node-auto-launchを用いてPC起動時に自動でアプリを立ち上げる(Linux, FreeBSD, Mac, Windows)

    はじめに 今回はnode-auto-launchというライブラリをElectronで使ってみるという記事になります。 Auto-launch your app on login. ⭐ Launch any application or executable at startup / login / boot. ⭐ Supports Linux, FreeBSD, Mac (via AppleScript or Launch Agent), and Windows. ⭐ Supports NW.js and Electron (with or without Squirrel; i.e. eve…

  • 【Jules】権限を「all repositories」に設定してしまった場合に後から権限を変える方法

    はじめに 最近Google AI Proに個人で加入しまして、(元を取るためにも)Julesを使って労働させてます。 one.google.com最初に何も考えずにAll Repositoriesで権限を与えたのですが、一部のみに変更したくなったためそのやり方を書き残しておきます。 はじめに やり方 GitHubアカウントの設定にアクセスする Integrations/Applicationを選択 Repository accessを変更 やり方 GitHubアカウントの設定にアクセスする GitHubを開き、Settingsに移動します。 github.co.jp Settingsを選択 I…

  • 【Jules】タスクを開始する前に.NETをあらかじめセットアップしておく方法

    はじめに 現在(2025/8/31)の時点では、.NETはプリインストールされていません。jules.googleそのせいで.NETプロジェクトを作成すると毎回コマンド実行に失敗をし、インストールしてと依頼してなんとか動くようになるという工程が挟まっていました。 # やり取りの一例 > dotnetおよびmsbuildコマンドが見つからないため、プロジェクトをビルドできません。この環境でC#プロジェクトをビルドする方法を教えていただけますか?もしくは、検証をスキップしてコードを提出しますか? ただEnvironment Snapshotsを活用することで、Julesのタスクを開始する際に.NE…

  • 【Unity】AssetBundleを解析してくれるMCP Server「AssetBundleMCP」をOSSとして公開しました

    はじめに 先日AssetBundleMCPというAssetBundleを解析するMCP Serverを公開しました。AssetBundleを解析してくれるMCP ServerをOSSとして公開しました!「AssetBundleに含まれるテクスチャの一覧を教えて」といった質問をgemini-cliやcopilot agentでできるようになりますセットアップも設定ファイルを編集するだけですので是非お試しくださいmm#csharphttps://t.co/7LYxBVxlYM pic.twitter.com/gnOW9hYvmM— はなちる@ゲーム制作 (@hanaaaaaachiru) Augu…

  • 【C#】NuGet.orgにMCP Serverだと認識されなかった理由は.NET10以降かどうかでcsprojの記述が違うからだと気づいた

    はじめに まだちゃんと作りきれてないので宣伝していないのですが、実は最近MCP Serverを細々と作っています。 www.nuget.org細かいところまで作りきれたらちゃんと記事なども書こうと思うのですが、その際に.mcp/server.jsonを配置しているのに何故かNuGet.orgでMCP Serverだと認識してくれませんでした。 MCP Serverだと認識されていない↓ .mcp/server.json { "$schema": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json", "de…

  • 【C#】.NET10から登場したdnx(dotnet tool exec)でdotnet toolのインストール・実行・破棄までを1コマンドで実現する

    はじめに 今回は.NET10から登場したdnx (dotnet tool exec)について紹介したいと思います。learn.microsoft.com はじめに 概要 使い方 細かいオプション 概要 これの発想としてはNode.jsのnpxと同じです。dotnet toolをインストール、実行、破棄までを1つのコマンドで実行してくれます。CI/CDではかなり重宝されそうです。 # dotnetsayというdotnet toolをnugetからインストールして実行する # --yesを付与すると質問を自動でyesで回答する $ dnx dotnetsay --yes "Hello, World…

  • 【C#】ソースコードの検索・修正を行う宣言型クエリ言語GritQLを用いてC#コードに変更を加える方法

    はじめに GritQLはソースコードの検索・修正を行う宣言型クエリ言語です。 GritQL is a declarative query language for searching and modifying source code. GitHub - honeycombio/gritql: GritQL is a query language for searching, linting, and modifying code.具体的な例を見たほうが分かりやすいと思うので載せると、以下のようなC#コードがあったとします。 // Bad : Console.WriteLineをできれば使いた…

  • 【C#】protocのplugin作成をOpenTelemetryを活用して楽にデバッグをする

    はじめに 先日protocのpluginについて紹介したのですが、それに関連してデバッグについて書こうと思います。www.hanachiru-blog.comまた私は普段Riderを利用しているのでRider前提です。 はじめに 概要 使い方 plugin側の対応 NuGetパッケージの導入 コードの対応 Rider側の対応 OpenTelemetryプラグインの有効化 実行する Riderのサービスを見る 実行/デバッグ構成から実行する 概要 protocのpluginを作成するにあたって、デバッグしたいことはよくあると思います。ただprotocで直接C#のプロジェクトを指定することはできず…

  • 【C#】.protoからC#コードを生成するprotocのプラグインをC#で作成する方法

    はじめに Protocol Buffersのコンパイラであるprotocですが、プラグインを作成することで.protoを解析して自由にコードなどのファイルを生成することができます。また標準入出力さえフォーマットを守っていればよいのでどの言語でもプラグインの作成が可能です。 protoc, the Protocol Buffers Compiler, can be extended to support new languages via plugins. A plugin is just a program which reads a CodeGeneratorRequest protocol…

  • 【Unity】プロパティをインスペクターに表示するために[field: SerializeField]を利用していても[FormerlySerializedAs]でリネーム対応できる

    はじめに 以前からプロパティでも[field: SerializeField]と記述することでインスペクターに表示できることは知っていました。 public class Sandbox : MonoBehaviour { [field: SerializeField] public float Value { get; private set; } } インスペクターに表示されている様子個人的に利用しようとはあまり思わなかったのですが、そういえばFormerlySerializedAsAttributeを利用してリネームにも対応できるのかなと気になり調べてみました。というのも以下の記事を読んで…

  • 【C#】コンソールアプリケーションで入力をパイプ(pipe)で受け取りたい

    はじめに C#でコンソールアプリケーションを作成していたとき、以下のようにパイプで入力を受け取れたらなと思いました。 # プロジェクトを利用するパターン $ echo "Hello, World!" dotnet run # ビルド済みのConsole Appを利用するパターン $ echo "Hello, World!" ./SampleApp https://github.com/Inventitech/strans/blob/49d1b832acb833680d8c30215b10c71d09fdc391/Program.cs#L165 やり方 一番簡単な方法は以下のように記述す…

  • 【React】状態管理ライブラリ「Recoil」を使ってみる

    はじめに 今回はReactの状態管理ライブラリRecoilについて紹介したいと思います。 A state management library for React recoiljs.org はじめに インストール 概要 Atom Selector 使い方 RecoilRootで囲う Atom作成 Atomの読み込み・書き込み Selector作成 インストール $ npm install recoil or $ yarn add recoil or $ bower install --save recoil 概要 Recoilを利用するにあたってAtomとSelectorの2つの概念を理解する…

  • 【Electron】Electron Forgeでnpm run makeを実行したときにexit code: 4294967295が出力される場合の対処法(Windows)

    はじめに Electron Forgeで頒布形式を作成しようとした場合、以下のようなエラーが出力されました。 An unhandled rejection has occurred inside Forge: Error: Failed with exit code: 4294967295 一応解決策を見つけることができたので備忘録の意味合いもかねて残しておきます。 解決策 パスに日本語が含まれていたりするとNGなようです。またpackage.jsonのnameでに'-'や" "を利用していると発生する可能性があるとのこと。 "name": "my-electron-app", ↓ "name…

  • 【Actions】GitHub Marketplace に公開するためにbrandingのiconとcolorに何を指定すれば良いのか

    はじめに 先日初めてGitHub Marketplaceに自作OSSを公開してみたのですが、その際にbrandingに何を設定しようか迷いました。 github.com branding: icon: 'search' color: 'blue' その際に参考になるOSSを見つけてとても便利だったので、備忘録も兼ねて書き残しておきたいと思います。 github-action-brandings haya14busaさんが作成されたgithub-action-brandingsを活用すると、実際の見た目を可視化することができます。 github.comGitHub Pagesにアクセスしてみると…

  • 【C#】Encoding.UTF8.GetStringでBOM付きのutf8を読み込むとutf16のBOMが入ることに気づいた

    はじめに 以下のコードを書いていたときに、BOMに関して挙動が違うことに気づきました。 // utf-8のBOM付き.txtを読み込みたい // パターンA var x = File.ReadAllText(path); // パターンB var tmp = File.ReadAllBytes(path); var y = Encoding.UTF8.GetString(tmp); 小ネタですが、地味に詰まったことがあるので書き残しておこうと思います。 はじめに 実験 実験 using System.Runtime.InteropServices; using System.Text; var…

  • 【git】個人プロジェクトでも最初にコミットを積んでから都度git commit --fixupとgit rebase --autosquashで修正するスタイルが結構良かった話

    はじめに 今まで個人プロジェクトでは正直コミットログは適当でも良いのではないかと思ってました。コミットログはレビューしやすくするためのもので、レビュワーがいないならやる意味ないのかなと。ただ最近以下の手順を試してみたところ、レビュー関係なく開発体験が良くなった感覚がありました。 PRまでの作業手順を考えて最初にコミットを積んでおく 実装を行う git commit --fixupとgit rebase -i --autosquashで指定したコミットに変更を取り込む 実装が一通り終わるまで2に戻る PRを出す 特に最初のPRまでの作業手順を考えて最初にコミットを積んでおくが重要でして、PRを出…

  • 【Unity】Assets以下でファイル・フォルダに特定の名前をつけると非表示にすることができる

    はじめに OSS見ていて気づいたのですが、Samples~のようなフォルダ名だとAssets以下に表示されていないことに気づきました。github.com知識がなくなんでだろうと思っていたところ、どうやら特定の命名をするとUnity上で非表示になるっぽいです。そこら辺を調べたので書き残しておきます。 はじめに 概要 実験 ちなみに 概要 公式ドキュメントに非表示になるアセットとして紹介されているのですが、以下の条件で無視されるようになります。 非表示フォルダー 名前が ‘.’ から始まるファイルとフォルダー 名前が ‘~’ で終わるファイルとフォルダー 名前が cvs のファイルとフォルダー …

  • 【Unity】Unity 2023.1.0f1よりAssetDatabase.StartAssetEditing/StopAssetEditingをより安全に実行できるようにしたAssetEditingScopeが実装された

    はじめに AssetDatabaseはアセットの作成・削除・移動・コピーなどの操作をすることができます。特に大量のアセットに大して操作を行ったりすると、なかなか処理が終わらずにパフォーマンス上の問題がでてきたりします。 docs.unity3d.comそこでAssetDatabase.StartAssetEditing・AssetDatabase.StopAssetEditingを用いることで、複数のアセット操作を一度の処理で行うように指示することができます。docs.unity3d.comまた今回はそれらをより安全に活用できるようにしたAssetEditingScopeについて紹介したいと思…

  • 【C#】PackageReferenceとProjectReferenceでビルドの際に求められる.NET SDKの考え方の違い

    はじめに PcakgeReferenceとProjectReferenceを利用した下記のcsporjがあるとします。それぞれのプロジェクトをビルドする際に必要な.NET SDKのバージョンは何か分かるでしょうか? <!-- パターン1.csproj --> <TargetFramework>net8.0</TargetFramework> ... <ProjectReference Include="../Hoge/Hoge.csproj" /> <!-- パターン2.csproj --> <TargetFramework>net8.0</TargetFramework> ... <Pack…

  • 【C#】Directory.Build.propsとDirectory.Build.targetsを用いて特定フォルダ以下のcsprojに対して共通設定を記述する

    はじめに 今回はDirectory.Build.propsとDirectory.Build.targetsを用いて特定フォルダ以下の.csprojに対して共通設定を記述する方法を紹介したいと思います。 はじめに 概要 注意点 利用例 ちなみに 参考 概要 Directory.Build.propsとDirectory.Build.targetsを用いることで特定のディレクトリ配下にあるすべてのプロジェクトに対して、共通のプロパティ、アイテム、ターゲットを一元的に定義することを可能にします 。 Directory.Build.props : csprojが読み込まれる前に適応される。既定値を設定…

  • 【C#】.NET10 Preview4からfile-based appsというcsprojなしで.csファイルを実行できる機能が追加された

    はじめに .NET10 Preview4からfile-based appsという.csprojなしで.csを実行できる機能が追加されました。devblogs.microsoft.com手軽に利用できるようになったのは勿論のこと、特にCI/CDで.csを利用する手法がより広がっていくのではと思っています。前にProcessX(Zx) + ConsoleAppFrameworkの組み合わせならCI/CDでbash/zsh/pwshの代わりに使っても良いのではと書いたことがあるのですが、より現実味を帯びてきたと思います。あとActionsのカスタムシェルを使ってshell: dotnet run {…

  • 【C#】EmbeddedResource vs CopyToPublishDirectoryとCopyToOutputDirectory、どちらを選ぶべきか

    はじめに アプリケーションを開発している際に何かの設定ファイルや画像などのリソースも一緒に配布したいときがあると思います。.NETでは以下のような組み込み方法があります。 EmbeddedResource CopyToPublishDirectoryやCopyToOutputDirectory それぞれについて解説した後、簡単な比較を行いたいと思います。 はじめに 概要 EmbeddedResource CopyToPublishDirectory & CopyToOutputDirectory どちらを利用すべきか 概要 EmbeddedResource EmbeddedResourceはア…

  • 【Docker】Dockerfileよりも上位階層に含まれるファイルをCOPYしたいときの対処法

    はじめに 以下の構成の際にsample.txtをCOPYしたいというモチベがあったのですが、単純に以下のようにコマンドを実行しても動きませんでした。 parent ├── child1 │ └── Dockerfile └── child2 └── sample.txt # Dockerfile COPY ../child2/sample.txt ./sample.txt# docker buildを行う $pwd ../parent/child1 $ docker build . ERROR: failed to solve: failed to compute cache key: fai…

  • 【.NET】dotnet toolのglobalなインストール先パスの決定方法

    はじめに 今回はdotnet toolをglobalにインストールした時にどのようなパスにインストールされるのか調べたので、その結果を備忘録も兼ねて残しておきたいと思います。 はじめに インストール先 実験 参考 インストール先 以下の優先順位で決定されます。 $DOTNET_CLI_HOMEという環境変数が設定されていれば$DOTNET_CLI_HOME/.dotnet/tools Linux/Macの場合は$HOME/.dotnet/tools、Windowsの場合は%USERPROFILE%\.dotnet\tools HOMEやUSERPROFILEが設定されていない場合はエラーになる…

  • 【.NET】dotnet toolが要求している.NET SDKのバージョンを調べることができるOSS「DotnetToolInspector」を作りました

    はじめに 先日dotnet toolが要求している.NET SDKのバージョンを調べることができるOSSを公開しました。dotnet toolが要求する.NET SDKの情報を取得できるOSSを公開しました!PowerShellのモジュールなのでmac・windows・linuxで簡単に利用することができます特にActionsでdotnet toolを利用する際にどのversionをsetup-dotnetすれば良いか(追従)みたいなケースだと有用かと!https://t.co/NeTpXq8rq1 pic.twitter.com/vrMTQ6gjFS— はなちる@ゲーム制作 (@hanaaa…

  • 【C#】UniTaskのIObservable.ToUniTaskをR3でもやりたいときの対処法(FirstAsync・LastAsync)

    はじめに UniRxを利用していたときはIObservable.ToUniTaskを活用したコードをよく書いてました。 // OnNextがされるまで待つ var result = await subject.ToUniTask(useFirstValue: true, cancellationToken: source.Token); // OnCompletedがされるまで待つ var result2 = await subject.ToUniTask(useFirstValue: false, cancellationToken: source.Token); 【UniRx,UniTas…

  • 【Unity】Obi FluidでHDRPで利用するためのセットアップ方法

    はじめに 今回はObi Fluidという流体シミュレーションを簡単に作成できるアセットのHDRPでのセットアップ方法を紹介したいと思います。 実際に利用している様子 Obi は、変形可能なさまざまなマテリアルの動作をシミュレートできる、高度な粒子ベースの物理エンジンです。 ... Obi Fluidを使えば、AAA品質の完全マルチスレッド式流体シミュレーションを簡単に作成することが可能です。流体はお互いに反応し、硬い物質に影響を与えたり、与えられたり(物体を浮かしたり沈んだりさせることもできます!)、また表面にくっつけることも可能です。 環境 Unity 2022.3.61f1 HDRP v1…

  • 【Rider】Rider 2025.1から"Explore LINQ"というLINQの各ステップでデータがどのように変換されているか可視化できるようになった

    はじめに Rider 2025.1からExplore LINQ(LINQ chain debugging)という機能が追加されました。 www.jetbrains.com When working with LINQ expressions in C#, you can debug them visually with JetBrains Rider, with a clear representation of how data is transformed at each step of the query. // DeepL翻訳 C#でLINQ式を扱う場合、JetBrains Rider…

  • 【.NET】modelcontextprotocol/csharp-sdkを用いた自作MCP Serverを作成〜MCP Inspectorや自作MCP Clientで確認する方法

    はじめに 今回はmodelcontextprotocol/csharp-sdkを用いた自作MCP Serverを作成〜MCP Inspectorや自作MCP Clientで確認する方法を紹介したいと思います。 実際に利用している様子 はじめに MCPについて MCP Serverの実装 Minimal APIを活用したプロジェクトを作成する 依存ライブラリを導入する ModelContextProtocol Microsoft.Extensions.Hosting MCP Serverの機能 MCP ClientとServerの通信手段 MCP ServerでToolsの実装 MCP Insp…

  • 【PowerShell】Import-Moduleコマンドで古いモジュールが読み込まれるときの対処法

    はじめに PowerShellのモジュール開発をしていた際にImport-Moduleを実行してもキャッシュが読み込まれてしまう現象にあいました。 # before.ps1 Import-Module "${PSScriptRoot}/../UnityPackageMaker" # モジュールを修正しても前回のモジュールが読み取られてしまう Hoge-Fuga その対処法をメモしておこうと思います。 はじめに 対処法 参考 対処法 単純にキャッシュを削除すればよいです。 # after1.ps1 Remove-Module UnityPackageMaker -ErrorAction Sile…

  • 【Actions】matrixでmax-parallelを1にした場合はジョブの実行順序が一意に決定されるかどうか

    はじめに 以下のようなコードを書いた際に、果たして順序は常に同じになるでしょうか。 name: test on: workflow_dispatch: jobs: test-matrix: runs-on: ubuntu-latest # 実行される順番は常に 1 -> 2 -> 3 かどうか strategy: matrix: value: [1, 2, 3] max-parallel: 1 steps: - name: Dump run: echo "Value: ${{ matrix.value }}" 実際に利用している例結論一意に定まるのですが、備忘録もかねて参照先を残しておきま…

  • 【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 …

arrow_drop_down

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

商用