Visual Studio 上でプログラムを作成する場合の儀式ってどうなっているの?

儀式と書きましたけど、言いたいことは、ソース書いて、コンパイルして、アセンブルして、リンクする作業の流れや、他PCや他環境に持って行って動かす流れはどうなっているの?どうしたらいいの?ってことです。

CPUは機械語で動きますので、コンピュータでプログラムを動かすには、最終的に機械語を作る必要があります。機械語とは、2進数で表現するなら 0,1 であらわされる数値の組み合わせ。16進数なら 01 FA 3B とかになる 0~9とA~F の組み合わせ。

機械語のままプログラムを組める人って殆どいないと思います。機械語のままだとパッと見てわからないので、CPUごとに機械語の意味をアルファベットで表現したニーモニックを使います。LD AA #2000 というようなコード。
ニーモニックで書かれた、多少人間にもわかりやすい文字の組み合わせを、機械語に翻訳する作業がアセンブリ。こんな感じ。

LD AY #2000 →アセンブル→ 01 FA 3B 20 00

アセンブラでプログラムを書くというのは、機械語に対応して人間が理解できるコードでプログラムを書くってこと。アセンブラはCPUごとに異なります。

アセンブリ作業は、アドレスが最終確定していないリロケータブルファイルと、アドレスが確定するリンク作業に分かれます。

通常のプログラマーが使う Basic, C/C++/C#, Perl, Python … などは高級言語。高級言語で書かれたソースをアセンブラ言語に変換する作業がコンパイル。(またはインタープリター)
プログラムを複数ソースファイルから構成する場合は、全部のプログラムが揃うまではリロケータブルの状態でとどめておいて、最終的にリンク作業してオブジェクトを作ります。

これがターゲットが決まっていて、手動で開発を行う場合の流れ。

私の頭の中には、この流れがあるので、昔はインタープリター、今はコンパイラーのBasic言語を使って、RadikoPad_cmd のソースを書いて、デバッグして、動いた動いた。さて、配布準備しよう!

しかし、完成したプロジェクトフォルダーには大量のファイルが出来上がっている。私が使ったのは、RadikoPad_cmd.exe なので、他のファイルは捨ててもいいの?しかし、ファイルを捨てたら動かなくなるものがある。

ここから、別の調査というか、お勉強が始まりました。というか、以下は愚痴。

まず、プログラミング初心者には、Visual Studio は巨大すぎて全体像が見えない。

Visual Studio 2019 をインストールする段階で、既にどれにチェックマークを付ければどうなるのかさえ、よくわからない。とりあえず Visual Basic, C++, C# のプログラム開発を行えるものをインストールしましたけど、Windows用途に限らず、MacOS、Android、iOS 用の開発ができ、さらに出来上がったオブジェクトをそのままMacOSでも動くようにビルドできるってことのようで、ちょっとびっくり。
手元にVisual Studioに対応したMacOSが無いので試せませんが、あれば Mac用 RadikoPad_cmdが簡単に作れたっぽい。なにせ、RadikoPad_cmd の場合、curl と ffmpeg が外部コマンドで、curl は Windows にも Macにも存在しています。コマンド名が、curl.exe と curl という違いがあるので、OSを判定して、Search PATHを変えるだけで何とかなりそう。(Android用やiOS用も作れそうですけど、AndroidやiOSにRadikoPadは必要ないでしょう。)
とにかく、機能が豊富。のちのち試してゆきましょう。

プログラムを書いて、デバッグが終わってすぐに必要になるのが、ランタイムライブラリー。
普通、プログラマーが書くのは、やりたいことのロジック部分で、足回りはOSやライブラリに任せることになります。例えば、画面に文字を出す Print 文を使うことがありますが、Print本体はランタイムライブラリーの中に準備されているわけで、自分が書くプログラム本体からprint ライブラリーをコールしているだけです。
じゃあ、このライブラリーはどこにあって、いつプログラムの中に入るの、プログラムと一体化するの?しないの?
昔ながらの手作業でプログラムを組む場合は、リンク段階でリロケータブルな状態から固定アドレスを持つプログラムとしてオブジェクトにリンクされます。ランタイムライブラリーもここでリンクされます。
しかし、Win10 x64 で動いて、Win10 x86 でも動くし、MacOSでもAndroidでも動くという風に動作ターゲットが異なる場合、単純に自分が書いたプログラムにリンクするわけにはゆきません。x64 プログラムが動いている途中から、x86 や Arm64 バイナリーに切り替えるわけにはいきませんからね。
恐らくこれを判断して調整してくれるのが、.Net だと思う。

プログラムを作って、自分の環境では動いたのでバンザーイ。じゃあ、別のPCでの動作確認しようかって段階になるって、、、、、一行も動かない。表示されるエラーメッセージからライブラリーの問題だとはわかるものの、どうしようか?って。
できることなら、プログラムサイズは大きくなってもいいから必要なファイルを全部ひとまとめにした状態で配布したいって思うわけです。ドキュメントを探しまくると、それが可能と書いてあるけど、具体的にどうすればいいのか?が、まだわからない。
とりあえず、.Netのsetup.exe 付きのものと、エラーに従ってMSからダウンロードしてユーザーサイドでインストールしてもらうものを準備しましたけど、今の状態、個人的には気に入らない。

.Netってたくさんバージョンがあって、どれ使えばいいの?
Visual Studio 2019では、.Net core 3.1 と 5 と .Net Framework 4 ~ 4.6 が入っていて、オプションで 4.8 までインストール可能。.Net Core と .Net Framework って違うものなの?
こういうのって、そもそも私のようにプログラミングに興味ない人間は、必要に迫られて使い始めて、そこで困ってみないと調べない!
企業などで、目的を同じとするチームで利用することを前提に開発する場合は、目的のために全員に .Net か .Net Framework を入れてくれって言えばいいわけですが、配布プログラムだとそうはいきません。

こういう場合に、どうビルドするのが Visual Studio で一般的なの?って思っているところです。この後調べて試しますけどね。
ちなみに .Net Framwork が Windows専用の枠組み。.Net は、Windows, Mac, Linux 共通の枠組み。.Net をリンクして、コマンド名などもOS毎に調整して動くように作ってあれば、他OSへそのまま持って行ける。WindowsでもLinuxでも動くプログラムにしたいならば、.Net6, 7 あたりを使わないといけない。ということのようです。今は私に必要ありませんが、「https://itskillmap.com/menu3_02/」には「.NET Frameworkは開発言語にVB、C#が利用できましたが、.NETはC#のみです。つまり、VBで作成したプログラムは.NET Framework上でしか動かず.NETに対応するにはC#で書き直すしかありません。」って、書いてあって、Visual Basic を選択した私は、「えっ!」

あと、Github への接続ね。これは便利そうで怖い。まともなプログラムが出来たら、Gitでソース管理するのもいいかな~って思いますが、ゴミのようなスクリプトまで公開する必要はないですからね。まだ試せていません。

Visual Studio 2022 もインストールしてみたのですが、.Net が 3.1、6、7 になってました。共通なのは3.1 だけ。.Net 5 を使いたい人は

VS2019を 6,7 を使いたい人はVS2022 を使えってことなのかな?

統合開発環境初心者で、まだわかんないことだらけです。
以上、どの段階で何に困っていたかを、記録に残しているところ。「はぁ~」

コメントを残す