新しいことをしてみたくて、C++ と C#、.NET Framework や Visual Studio のことを調べた

先日、久々に PowerShell スクリプトを書いた時に、Win32 API を触る必要があり、そのために C# のコードを何となく書いて、PowerShell スクリプト内に埋め込んで使用した。

以前は VBScript を書いて WSH を活用したり、Windows バッチを書いたりはしてきたが、C# を書いてまで Windows API を操作するようなことはしなかったので新鮮だった。

ちょっと C# でも勉強してみるか?でも Node.js や Python の拡張には C++ が使われているよなぁ。どっちがどういう言語なんだったっけ?

ということで調べてみた。

C# と C++ の違い

C#C++ の違いを、PowerShell や .NET Framework、そして Windows API との関係性から整理してみる。

…というワケで、ちょっと悩ましいところ。

Windows API をゴリゴリ触っていきたいのか、スクリプトを拡張してちょっとリッチなスクリプトを書きたい程度なのか、といったところで、優位性が変わってくる感じ。

.NET Framework について整理する

C# は .NET 基盤がベースなのね~、というところで、じゃあ .NET ってなんだったっけか?となった。

以前も .NET Framework のことを調べてはいて、どういう立ち位置のモノかは大体理解していたのだが、もう一度調べ直した。

…ということで、実行基盤だったり、ライブラリだったり、フレームワークだったり、そういう色んなモノを総合して「.NET Framework」と呼んでいるので、何のことについて話をしているのか、分かりづらさがある。

この辺の分かりづらさは Node.js 登場以降の JavaScript 界隈にもあることで、「JavaScript 出来ます!」っていうのが

…の、どれのことを指しているのかが分かりづらいところ。それぞれで実行環境がブラウザなのか Node.js なのかが違うし、Node.js を開発中のみ使うのか実行時も使う領域なのかが違うので、スキルセットとしては微妙に重なっていないのよね。だから、JS 界隈に関しては、

を分けて話せるようになってほしいな、って思ったりするのよね。

.NET Framework についても、「.NET 分かります」だと何のこと言ってるのか分からないワケだよね。

みたいな感じで、「.NET」という単語をなるべく使わず、正確に表現できるようにしておかないと、相手と解釈がズレるなーと思った。

C++ や C# の開発には Visual Studio が必要なの?

自分は主にフロントエンド領域の開発をしていて、時々 Python や Ruby、PHP などを書く程度。なので IDE は VSCode がメイン。Java を書く時は、以前は Eclipse を使っていたが、Java に関しても VSCode の拡張機能でなんとかなるので、去年2020年に参画したプロジェクトでは VSCode で Java プロジェクトを作っていた。

C++ や C#、VB.NET の開発というと、Visual Studio という IDE が標準的なのだが、Visual Studio がないと開発が出来ないのだろうか?ちょっと調べてみた。

個人開発であれば Visual Studio Community というエディションが、有償版の Professional 相当だそうで、とりあえず VS Community でひととおりの開発ができるようだ。

現在は VSCode が一強状態なので、「何で他の IDE が必要なの?」みたいな感覚もあるが、フロントエンド界隈だって一昔前は Sublime Text か Atom か、みたいな感じだったし、Java 界隈も、自分は使ったことがないが NetBeans や IntelliJ IDEA といった IDE の名前を聞いたことがある。

Windows 環境における C++ や C# を中心とした IDE として育ってきたのが Visual Studio であり、豊富な機能が最初から用意されていて、インストールさえすれば何でも出来るようになるワケだ。しかし、近年の VSCode の目覚ましい成長によって、VSCode でも拡張機能さえ入れれば、「Visual Studio じゃないから出来ない (VSCode では出来ない)」ことはあまりないようである。

Java 開発がメインだった時代に、Eclipse の動作が重くて怒り狂うことがよくあった。Visual Studio も、周りの開発者が「重たい」とよく愚痴っているのを聞いているので、そうしたパフォーマンス面のストレスを感じたことがない VSCode で環境構築が済むなら、VSCode でやりたい。Visual Studio の方がお膳立てがされていて、VSCode だと面倒なところが多少あったとしても、パフォーマンス面のストレスがない方が優先かな。ちょっとぐらい機能的な制約があったとしても、自分の思考と同じスピードで実装できる IDE を選びたい。

以上

というワケで、VSCode 拡張機能を利用して、C#C++ の基本的な開発環境をちょっと整えてみようと思う。

多少は知っている PowerShell から取っ掛かりを得るために、最初は C# を勉強してみようかな。C# なら PowerShell 内にコードを埋め込みやすいので、.NET Framework を使って比較的ライトに Windows API を触って何かしてみようと思う。

もっと Windows API を細かくイジってみたくなったりとか、Node.js 向けにネイティブモジュールを作ってみたいような気持ちになったら、C++ にも手を伸ばしてみようかしら。