[フレーム]
1 - 40 件 / 99件
世の中には多くの C# に関する誤解が蔓延っています。 偏見にも満ちています。 そして技術的に正しい批判ではなく、根本的に技術的に誤った批判ばかりで正直悲しい。 技術的に正しい形の批判なら「お、そうだな。そしてそれの解決策はですねぇ...(ニヤニヤ)」となるのですが...。 そして C# 界隈から一歩出ると、「え、C# で作ってるの!?なんで??」とか言われる事が非常に多い始末。 C# 大好きマンとしては非常に嘆かわしい。 嘆かわしい限りなので、ここでなぜ C# を私が好むか、そして何故ソフトウェアの開発に向いているかを語りたいと思います。そして誤解が解けたら嬉しい。ついでに C# を書きたいと思ってくれたら嬉しい。 想定読者 前書きという名の予防線 事前知識: C# と .NET C# はパフォーマンスの高い言語 C# はビルドも高速 C# はオープンソースかつクロスプラットフォーム 言
この記事は「初心者だった時に知りたかったな...」っていう普通のC#入門だと教えてくれないことが書いてあります。 なので入門記事というより、C#初心者にはちょっと難しい内容もあります! C#の特徴的なところ C#は変化が早い💨 最近は毎年メジャーアップデート 2019: C# 8.0 2020: C# 9.0 2021: C# 10.0 2022: C# 11.0 2023: C# 12.0 2024: C# 13.0 新記法、新しい書き方がモリモリ入る しかも新しい書き方の方が便利で性能が良い(ことが多い) 少し前のC#を知ってる人からするともう別物 解説 C#は6.0までゆっくりな変化だったんですが... 7.0から様子が変わって8.0以降は毎年変わるようになりました。 ↓こちらのスライドの7ページから数枚が参考になります! あんまり変わらないバージョンもありますが、特に大きなところだと,
はじめに ちょっとSNSで 「.NETはLinuxでも本格的に動く!」 とか 「Web系エンジニアは.NETの理解が10年前で止まってる」 とか話題ですね。一方で、「そもそも.NETでLinuxをメインにした開発方法をWebの記事等で見かけない」 という話もあり、確かに自分もあんまり見かけないなー、と思ったので 「無いなら作る」 の精神で作りながら書いてみる事にしました。Weekly ITニュースで扱ってるから概要は知ってるんですがエアプ気味でしたので良い機会。まあ、お仕事だとJavaがメインだけど、自称 Web系エンジニアなので対よろです! TL;DR 最新の.NETはWindows専用だった.NET Frameworkと違いLinuxも一級市民 VS Code + DevContainer, VueやReactと組合せ安いREST API, コンテナ, GCPのCloud Runデプロ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 対象とする読者について 本記事の対象者としては以下のような人を想定しています。 C#でこれからWin32APIを使ってみたい。 C言語のことがあまりよく分かっていない。 今までは適当に使っていたので一度きちんと理解したい。 自分が同じような状況であったため、一から調べて整理してみました。自分が理解した順番や内容で記載することで、また、具体的な使用例によってできることの広さや動作を感じ取ってもらうことで、理解の助けになればと思っています。 但し、分かっている人からすると冗長な説明になっている部分や好ましくない内容、正確性に欠ける
C#は様々な用途に利用できる言語ですが、.NETになってからはサーバーサイドとしてはLinuxで動かすのが自然な選択肢になっています。なぜLinuxで動かすのか理由をいくつか挙げてみます。 もしかすると C#はWindows向けに開発された言語、.NET Framework (.NET Coreではないもの)のころはWindowsでしか動作しなかったという印象が残っている方もいるのではないでしょうか。この記事は、2020年に.NETとしてブランドが統一されてからは、Windows専用ではなくなりLinuxで動かすことが妥当になっている理由をなるべく分かりやすく解説することを目的としています。 はじめに 1. コスト 2. コンテナ 3. エコシステム 4. パフォーマンス・安定性 5. セキュリティ 6. トラブルシュート Windowsが好ましいケース まとめ はじめに .NET Cor
2025年07月29日 dnSpy追加 Xでフォークの存在を教えてもらいました。 2025年07月28日 RoslynPad追加 2025年07月27日 リンクを基本そのまま貼るように変更 C# docsを.NET documentationに変更 Advanced .NET programming documentationnについて追加 Compiler Explorerについて追加 perf-bookについて追加(その他記事) はじめに C#を最適化するために知っておくべき情報源、ツール、コミュニティをまとめました。 具体的な最適化テクニックよりも、個人の経験をもとにどこで学び、どう検証するかに焦点を当てて紹介していきいます。 とにかく知ってもらうこと重視なので、解説は最低限。 ドキュメントを読んで。 筆者について この記事の執筆時(2025年7月現在)、筆者はプログラミングとC#を学び始
マイクロソフト「.NET 6」正式リリース、.NETとして最初のLTS版。Win/Mac/iOS/Androidアプリを単一コードで記述可能に マイクロソフトは、同社のアプリケーションフレームワーク「.NET」の最新版となる「.NET 6」の正式リリースを発表しました。 .NET 6は、マイクロソフトが「.NET Framework」と「.NET Core」フレームワークを「.NET」に統合してから最初の、本番利用に耐える品質とサポートが約束された長期サポート版(LTS版)の.NETとなります。 .NET 6 is now generally available and is ready for your app! We've made SIGNIFICANT improvements to: C# 10 and F# 6 Performance Our ahead-of-time com
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
ゼロアロケーションLINQライブラリ「ZLinq」のリリースとアーキテクチャ解説 2025年05月05日 ZLinq v1を先月リリースしました!structとgenericsベースで構築することによりゼロアロケーションを達成しています。またLINQ to Span, LINQ to SIMD, LINQ to Tree(FileSystem, JSON, GameObject, etc.)といった拡張要素と、任意の型のDrop-in replacement Source Generator。そして.NET Standard 2.0, Unity, Godotなどの多くのプラットフォームサポートまで含めた大型のライブラリとなっています!現在GitHub Starsも2000を超えました。 https://github.com/Cysharp/ZLinq structベースのLINQそのものは
マイクロソフト、「.NET 8」正式リリース、2年ぶりのLTS版。Dynamic PGOによる最適化コンパイル、事前コンパイルのバイナリサイズが半分など、さらなる高速化が前進 Announcing the availability of .NET 8, the latest LTS version of one of the world’s leading development platforms. With this release, .NET reshapes the way we build intelligent, cloud-native, applications and high-traffic services that scale on demand. https://t.co/WqZkUpJOhN pic.twitter.com/NmARKBd78q — .NET (
マイクロソフト「.NET 6」初めてのプレビュー版リリース。Xamarin統合、マルチプラットフォームUI、Blazorでデスクトップアプリ、Apple M1ネイティブなど マイクロソフトはオープンソースで開発されているフレームワーク「.NET」の次バージョン「.NET 6」の最初のプレビュー版「.NET 6 Preview1」をリリースしたと発表しました。 Announcing .NET 6 Preview 1 https://t.co/z0mkcA6c0m — .NET (@dotnet) February 17, 2021 「.NET」は、Windowsアプリケーションのためのフレームワークとして登場した「.NET Framework」と、その後に登場したMacやLinuxに対応するオープンソースの「.NET Core」を統合し、その後継となったフレームワークです。 .NETの最初の
ソースコードの複雑さ、不具合のリスクを定量化したコードメトリクス1というものがあります。 コードメトリクスは計算方法によっていくつか種類があり、メジャーなものだと以下のものがあります。 Cyclomatic Complexity(循環的複雑度) Cognitive Complexity(認知的複雑度) Maintainability Index(保守容易性指数) Lines of Code(コードの行数) これらのコードメトリクスを計算し、CodeLensに表示するVisual Studio拡張機能2を作成しました。 tackme31/howmessy: How messy is your code? 以下のようにコードメトリクスをもとにコードが複雑かどうかを判定し、CodeLensに表示してくれます(デフォルトではCognitive Complexityをもとに計算します)。 今のところ
AI関連、競合は現れども、性能的にやはりOpenAI一強なのかなぁというところに現れたAnthropic Claude 3は、確かに明らかに性能がいい、GPT-4を凌駕している......!というわけで大いに気に入った(ついでに最近のOpenAIのムーブが気に入らない)ので、C#で使い倒していきたい!そこで、まずはSDKがないので非公式SDKを作りました。こないだまでプレビュー版を流していたのですが、今回v1.0.0として出します。ライブラリ名は、Claudeだから、Claudiaです!.NET全般で使えるのと、Unity(Runtime/Editor双方)でも動作確認をしているので、アイディア次第で色々活用できると思います。 GitHub - Cysharp/Claudia 今回のSDKを作るにあたっての設計指針の一番目は、公式のPython SDKやTypeScript SDKと限りなく似せる
C# Advent Calendar 2021の参加記事となっています。去年は2個エントリーしたあげく、1個すっぽかした(!)という有様だったので、今年は反省してちゃんと書きます。 スクレイピングに関しては10年前にC#でスクレイピング:HTMLパース(Linq to Html)のためのSGMLReader利用法という記事でSGMLReaderを使ったやり方を紹介していたのですが、10年前ですよ、10年前!さすがにもう古臭くて、現在ではもっとずっと効率的に簡単にできるようになってます。 今回メインで使うのはAngleSharpというライブラリです。AngleSharp自体は2015年ぐらいからもう既に定番ライブラリとして、日本でも紹介記事が幾つかあります。が、いまいち踏み込んで書かれているものがない気がするので、今回はもう少しがっつりと紹介していきたいと思っています。それと直近Visual
祝 .NET 5.0 GA。 Announcing .NET 5.0 C# 9.0 on the record Visual Studio 2019 v16.8 and v16.9 Preview 1 Release Today Announcing ASP.NET Core in .NET 5 Visual Studio 2019 16.8 リリースノート Visual Studio 2019 18.9 Preview 1 リリースノート .NET Conf 2019 - Day 1 ライブ配信 一応注釈なんですが、 .NET は以下のような状態です。 .NET 5.0 からは単に「.NET」になります .NET Framework, Standard, Core の統合結果です TargetFramework 名、 net5.0 で、 netstandard2.1 と netcorea
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに C#におけるasync/awaitを使う上で、絶対に意識しないといけないものは「キャンセル処理」です。 正しく処理をキャンセルしないとメモリリークを起こしたり、デッドロックやデータ不整合を引き起こす可能性があります。 今回はこの「async/awaitにおけるキャンセル処理」について話します。 対象 C#におけるasync/await全般 Task/ValueTask/UniTaskすべてに共通します Unity含む C#のasyc/awaitについてイマイチ自信が持ててない人 先に「結論」 asyncメソッドはCancell
今日は、「主に自分が使う用ツールを Blazor WebAssembly で作って Static Web Apps に置いたよ」系の話を一応ブログ化。 ソースコード Static Web App よくある「JSON とかのデータの中身を確認するツール」です。 しばらく、JSON と MessagePack の読み書きをするコードを書いてて、 デバッグがしんどくなって作ったのがこのツール。 いろんな形式を同時に扱うことがニッチ需要なのであんまり自分の需要にあったツールがなかったんですよね。なら、まあ、自作。 こないだの C# 配信 で、UTF-8 とか MessagePack バイナリとかを手打ちで入力してたら @xin9le, @okazuki 両氏にドン引きされたやつ。 バイナリ読み込み (Parser) UTF-8 を ReadOnlySpan<byte> のまま扱ってて、 ブレイクポ
ネイティブコードとC#を透過的に接続するために、RustのFFIからC#のDllImportコードを自動生成するライブラリを作成し、公開しました。Cysharp初のRustライブラリです!先週にプレビューを出していましたが、しっかりした機能強化とReadMeの充実をして正式公開、です! Cysharp/csbindgen crates.io/crates/csbindgen めちゃくちゃスムーズにネイティブコードがC#から呼べるようになります。すごい簡単に。超便利。こりゃもうばんばんネイティブコード書きたくなりますね......!ただし書くコードはRustのみ対応です。いや、別にRustでいいでしょ、Rustはいいぞ......! しかしまず前提として言っておくと、ネイティブコードは別に偉くもなければ、必ず速いというわけでもないので、極力書くのはやめましょう。C#で書くべき、です。高速なコードが欲しければ
Utf8StringInterpolationという新しいライブラリを公開しました!UTF8文字列の生成と書き込みに特化していて、動作をカスタマイズした文字列補間式によるC#コンパイラの機能を活用した生成と、StringBuilder的な連続的な書き込みの両方をサポートします。 Cysharp/Utf8StringInterpolation 基本的な流れはこんな感じで、Stringを生成するのと同じように、UTF8を生成/書き込みできます。 using Utf8StringInterpolation; // Create UTF8 encoded string directly(without encoding). byte[] utf8 = Utf8String.Format($"Hello, {name}, Your id is {id}!"); // write to IBuffer
MemoryPackという、C#に特化することで従来のシリアライザーとは比較にならないほどのパフォーマンスを発揮する新しいシリアライザーを新しく開発しました。 高速なバイナリシリアライザーである MessagePack for C# と比較しても、通常のオブジェクトでも数倍、データが最適な場合は50~100倍ほどのパフォーマンスにもなります。System.Text.Jsonとでは全く比較になりません。当初は .NET 7 限定としてリリースしましたが、現在は .NET Standard 2.1(.NET 5, 6)やUnity、そしてTypeScriptにも対応しています。 シリアライザーのパフォーマンスは「データフォーマットの仕様」と「各言語における実装」の両輪で成り立っています。例えば、一般的にはバイナリフォーマットのほうがテキストフォーマット(JSONとか)よりも有利ですが、バイナリ
はじめに .NET 8 が先日リリースされて .NET Conf 2023 のセッション動画も YouTube の dotnet チャンネルに投降されています。 .NET Conf 2023 のプレイリストで全て確認できるので興味があるやつだけでも見てみると楽しいのでお勧めです。 今回は、その動画の中の Full stack web UI with Blazor in .NET 8 | .NET Conf 2023 の内容を解説する形で記事を書いていこうと思います。後半の認証や CRUD のページを自動生成してくれる機能については別途余裕があれば書こうと思います。また、記事内の図の多くは、この動画内のものから引用しています。 細かい新機能は色々ありますが、大体の大枠はこのセッションに詰まっているのでとても勉強になります。 Blazor Blazor ですが、ASP.NET Core に完全
マイクロソフトは日本時間の11月13日未明からオンラインイベント「.NET Conf 2024」を開催し、同社の包括的なアプリケーションフレームワークの最新版となる「.NET 9」正式版のリリースを発表しました。 .NETは、デスクトップからモバイル、クラウド、ゲーム、IoT、そしてWindows、Linux、macOSなど、あらゆるプラットフォームに対応したアプリケーションの開発を包括的にカバーするフレームワークです。 .NETの大きな枠組みの中に、プログラミング言語のC#やコンパイラ、ランタイム、そしてクロスプラットフォーム対応のUIフレームワーク.NET MAUIやWebアプリケーションフレームワークのBlazorなどが含まれています。 .NETは偶数バージョンがLTS(Long Term Support:長期サポート)版となり、現時点では昨年(2023年)11月にリリースされた.N
このブログでもSource GeneratorやAnalyzerの開発手法に関しては定期的に触れてきていて、新しめだと 2020年12月15日 - UnitGenerator - C# 9.0 SourceGeneratorによるValueObjectパターンの自動実装とSourceGenerator実装Tips 2021年05月07日 - 2021年のC# Roslyn Analyzerの開発手法、或いはUnityでの利用法 という記事を出していますが、今回 MemoryPack の実装で比較的大規模にSource Generatorを使ってみたことで、より実践的なノウハウが手に入りました。また、開発環境も年々良くなっていることや、Unityのサポート状況も強化されているので、状況を一通りまとめてみようと思いました。Source Generatorは非常に強力で、今後必須の開発技法になるので
ValueObjectは好きですか?私は大嫌いです。いじょ。 ざっくり言えばプリミティブ型に専用の型を付ける教義です。例えばUserIdをintとして扱っているとTeamIdと取り違えるかもしれないし、Hpに突っ込んでしまうかもしれない。StrengthとIntelligenceとAgilityとSpeedは別物なのだから全部intじゃなくて区別して欲しい、そうじゃないと間違った演算しちゃうぞ、と。まぁそういう自体を避けるために、それぞれラップした個別型を作るのです。int strengthじゃなくてStrength strengthだぞ、と。 これは一見正しく実際正しいのですが、問題もあります。一つに面倒くさい。ラップしたctorを作るのだけでも定形でウザ、と思いますが、更に等値とか実装するのは面倒くさい。また、そのままだと計算できなくなるので、算術演算のために生の値を.Valueで取り
Visual Studio 2022正式リリース。初の64ビット化による高速化、実行中のアプリにコード変更が反映される「ホットリロード」、.NET 6対応など新機能 下記は正式リリースを発表した製品担当のAmanda Silver氏のツイートです。 Visual Studio 2022 is out! The 1st 64-bit release is the fastest yet. Goodies like Hot Reload for C# & C++, AI code completion and refactoring via IntelliCode, & better support for cross-plat apps with .NET MAUI and C++! #HappyCoding #VisualStudio2022 https://t.co/OBlaaTHzGw
と、いうものをリリースしました。Web UIとなるDFrame.Controllerと、負荷テストシナリオをC#で書くDFrame.Workerの組み合わせで成り立っていて、DFrame.Workerをウェブ上のクラスターに配置することで(Controllerと接続するただの常駐アプリなので、配置先はオンプレでもVMでもコンテナでもKuberenetesでもなんでもいい)、1から数千のワーカーが連動して、大量のリクエストを発生させます。また、テストシナリオをプレーンなC#で記述できるということは、HTTP/1だけではなく、あらゆる種類の通信をカバーできます。WebSocket、HTTP/2、gRPC、MagicOnion、あるいはPhotonや自作のTCPトランスポート、更にはRedisやデータベースなどが対象になります。 DFrame.Workerは通常の.NETの他に、Unityにも対
2月にブログに書きましたが、 Visual Studio 17.1 Preview 3の頃、C# 11 候補として「引数の null チェック」構文が入っていました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 今現在(VS 17.2 Preview 5)でもこの構文は生きているんですが、次(たぶん、17.2正式リリースでも17.3 Preview 1でも)でいったん取りやめになるそうです。 取りやめの経緯 C# チームとしては、今、Preview リリースをしてみて反応を見てその後どうするかを決めたりしているわけですが。 LangVersion preview があるのはそのためです。 とはいえ、普通に考えて、Preview 機能まで追いかけている人がそんなに多いわけもなく、 正式リリースされるまでどんな機能が追加されてい
MicrosoftからIntroducing Garnet – an open-source, next-generation, faster cache-store for accelerating applications and servicesという記事が今日公開されて、Garnetという新しいインメモリデータストアがOSSとして公開されました。Microsoft ResearchでFASTERを手掛けていたチームによるもので、FASTERはC#実装の高速なキーバリューストアでした。今回のGarnetはその発展形のようなもので、FASTERベースのストレージと、Redis互換のプロトコルによる、インメモリデータストアになっています。詳しくはGarnetのほうのブログA Brief History of Garnetで。GarnetもC#で作られています。 ベンチマークによると、Re
ConsoleAppFrameworkの完全に新しいバージョンをリリースしました。完全に設計しなおして実装も完全に作り直された、何もかもが新しいフレームワークになっています。設計指針として「Zero Dependency, Zero Overhead, Zero Reflection, Zero Allocation, AOT Safe」を掲げ、もちろん、他を圧倒的に引き離すパフォーマンスを実現しています。 これはコールドスタートアップ・ウォームアップなしでのベンチマークとなっていて、CLIアプリケーションでの実際での利用に最も即したものだと考えています。System.CommandLineと比較すれば280倍!メモリアロケーション量もほかのフレームワークの100~1000倍少なくなっています(表示されている400Bはほぼシステム自体のallocなのでフレームワーク自体は0です)。 このパ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
先日、新しいC#用のReactive Extensionsの実装としてR3を正式公開しました!R3はRx for .NETを第一世代、UniRxを第二世代とした場合の、第三世代のRxという意味で命名しています。Rxとしてのコア部分(ほぼdotnet/reactiveと同様)は.NET共通のライブラリとして提供し、各プラットフォーム特化のカスタムスケジューラーやオペレーターは別ライブラリに分けるという形により、全ての.NETプラットフォーム向けのコアライブラリと、各種フレームワーク Unity, Godot, Avalonia, WPF, WinForms, WinUI3, Stride, LogicLooper, MAUI, MonoGame 向けの拡張ライブラリを提供しています。 GitHub - Cysharp/R3 幾つかの破壊的変更を含むため、ドロップインリプレースメントではないで
NuGetにはVisual Studioでパッケージをインストールするときに自動的に実行されるスクリプトの仕組みがあります、それがtools/init.ps1です。 前々からNuGetパッケージインストール時に警告なくスクリプトが実行されて嫌だなぁだと思っていましたが、今回はその理由を考えてみます。 init.ps1とは tools/init.ps1の現状 init.ps1の実行を確認する init.ps1ができること init.ps1の実行を止められるのか init.ps1の懸念 init.ps1を使った攻撃は過去にすでに起こっている init.ps1の代替手段 まとめ init.ps1とは NuGetパッケージにtools/init.ps1というスクリプトを配置することで、パッケージインストール時に任意の処理を実行させることができます。パッケージインストール後の追加処理を自動化する仕組
C#用の新しい超高速&低アロケーションの.NET用ロギングライブラリ、ZLogger v2を公開しました。v1からは何もかもを完全に作り替えた、最新のC#に合わせた新設計になっています。対応プラットフォームは.NET 8が最良ですが .NET Standard 2.0 以上、また Unity 2022.2 以上にも対応しています。.NET / Unityどちらもテキストメッセージと構造化ログの両方に対応しています。 Cysharp/ZLogger 新設計のキーポイントはString Interpolationの全面採用によるクリーンなシンタックスとパフォーマンスの両立です。 logger.ZLogInformation($"Hello my name is {name}, {age} years old."); といったように書いたコードは if (logger.IsEnabled(Log
C# は、進化していくにあたって、破壊的変更を極力起こさないようにかなり気を使っているプログラミング言語です。 細かい話をすると破壊的変更も皆無ではないんですが、 破壊的変更を認める(認めてでも追加したい新機能を実装する)ハードルは結構高めです。 そんな C# ですが、ちょっとそのハードルの基準を緩められないかというような話が出ています。 Dealing with limited breaking changes in C# その後の Design Meeting 議事録 補足: 影響範囲と、影響力の軽減 補足として、 ハードルを緩めるといっても本当にちょっとです。 C# チームは、「GitHub の public リポジトリを検索して、実際に影響を受けたコードを探す」とかやって既存のコードに対する影響を評価してたりするんですが、 これまで: 単体テストとかでわざと変なコードを書いているも
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く