Milkのメモ帳

日々の思いつきを忘れないようにのメモ用です。

Milkのメモ帳

【Visual Studio for Mac】C#を使ってMac上で動くアプリをつくる。【環境構築/開発】


f:id:maxminkun:20171105154545p:plain

こんにちは。Milkです。
今回は、C#も遂にクロスプラットフォーム化したよって話。

何を言ってるの?
「C#」ってWindowsでしか動かないんでしょ?

全く。朱音は時代遅れだなぁ!
今は、Macでも「C#」のアプリが作れるんだよ?

Macを最近使い始めたからって、調子に乗りすぎじゃない?

ヽ(`Д´#)ノ ムキー!!
なにをーー!!本当なんだもん!!


「C#」のクロスプラットフォーム化

C#と言う言語は、C → C++ → C#(C++++の意味)として進化してきました。

C++言語は、どちらかと言うとC言語を無理やりに拡張した(手続き型言語からオブジェクト指向言語に変換した)という側面があり、Unix系(Mac含む)、Linux系、WindowsのどのOSでも、必要なベースになるライブラリをインストールすれば動作しました。

これが今でも、C++言語が生き残っている理由です。

処理速度についてもC++言語は上位にあるため、ゲーム開発で利用されたり、処理速度を求めるシステムでは利用され続けている言語です。

ただし、メモリを直接的に操作出来る(これはメリットでもありデメリットでもある)ために、知らぬ間に他のアプリケーションが使用しているメモリを破壊したり、メモリの使用を止めるのを忘れて最大まで食いつぶしてコンピュータをダウンさせるなど、かなり神経を使う言語にもなります。

今までの言語はOSに頼るということをせず、全て自分で制御することが基本でしたからね。

これを、Microsoft社が独自に、より扱いやすく言語開発したのが、C#言語になります。

これは、C++に更に++(進化した)と言う意味で、C#(C++++)言語と表記し、またCsharpと名前が付けられました。

「C#」の問題点

一番の大きな問題は、「開発したアプリケーションがWindowsでしか動作しない」と言うことでした。

www.milkmemo.com

やはり、Microsoftが開発した言語であるため、.Net Frameworkと言う、Windowsにしか入れられないライブラリ(プログラム群)が存在し、C#言語はこれなしでは動作出来ませんでした。

つまりは、Windowsでしか動作しないのです。

Mono/Xamarin/.NetCore の出現

Microsoftは近年、大幅に経営方針を修正しています。

OSやアプリケーションによる囲い込みという戦略をとるのではなく、クラウドビジネス(Azure)で売上を伸ばすという方向に進み始めました。

これにより、C#言語を幅広いOSで利用できるように改良をすることに舵を切ったのです。

今まで、.Net Frameworkと言うライブラリが必要で、これはWindowsにしかインストールできませんでした。

これを以下のライブラリで代用することにより、他のOSでの利用が可能になりました。

codezine.jp

f:id:maxminkun:20171105162951p:plain
参照:使う言語はC#のみ! Macアプリケーションはもちろん、Webアプリやスマホアプリも開発可能な「Visual Studio for Mac」登場 (2/5):CodeZine(コードジン)

Mono/.NetCore

Monoは.Net Frameworkを他の、Unix系とLinux系のOSで使用できるように変換したものです。

また、.NetCoreは、特に.Net Frameworkの中で使用頻度が高い物を抽出し軽量化させ、Unix系とLinux系のOSにインストール出来るようにしました。

Monoと.NetCoreは方向性としては同じです。

よりコンパクトに収めているのが .NetCore と言うことです。

Xamarin

これは、AndroidとiOSのアプリケーションに対して、統一的にC#で書けるようにラッパー(包むという概念を持つIT用語)となっているライブラリです。

Android用のアプリ開発の場合は、Java言語、あるいはKotlin言語を学習する必要があります。

また、iOS用のアプリ開発の場合は、Objective-C言語、あるいはSwift言語を学習する必要があります。

同じ機能のアプリでも、AndroidとiOSで別々の言語で開発しなければならなかったのです。

これらが独自に持っているライブラリに対して、橋渡しをする役としてXamarinが機能します。

つまり、Xamarinを経由してAndroid用のライブラリとiOS用のライブラリにアクセスするのです。

そうすれば、Xamarinがそれぞれのライブラリを包んで見えなくしてくれるので、開発者はXamarinが上手く使えればよいことになります。そしてXamarinはC#で扱えるように出来ています。

このことにより、スマホ用のアプリの開発者は、C#を学習するだけでAndroidとiOSのアプリ開発が出来るようになるのです。

Visual Studio for Mac

さて、前置きはここまでにして、実際にMacでC#のアプリは書けるのか?と言うのを試してみましょう。

インストールは簡単です。

Xcodeをインストールする

Macに依存したアプリをコンパイルする時に必要になります。

また、「Visual Studio for Mac」をインストールする際にも、前提条件として必須になりますから、Xcodeは先にインストールしましょう。

AppStoreの中で、Xcodeは見つかると思います。

f:id:maxminkun:20171105164925p:plain

これ、意外とめちゃくちゃ時間かかるんよ(笑)

寝てる間に入れとくのがいいよ?

Visual Studio for Mac のインストール

www.visualstudio.com

f:id:maxminkun:20171105165210p:plain

さて、お次は Visual Studio for Mac を入れましょう。

上のリンクからDL出来ると思います。無料なんですよ?

凄いことです・・・

DL出来たらダブルクリックしましょう。マウントされてインストーラーが動きます。

以下の画面が出てきたら、ダブルクリックです。

f:id:maxminkun:20171105170231p:plain

AppStore経由でないので、警告が出ます。

「開く」を選んで下さい。 f:id:maxminkun:20171105170235p:plain

現時点でのMacの状態確認が始まります。

f:id:maxminkun:20171105170238p:plain

「続行」を押します。

f:id:maxminkun:20171105170242p:plain

Xcodeは既に入れていますから、これも「続行」です。

f:id:maxminkun:20171105170246p:plain

さて、何を入れるかが聞かれますが、手っ取り早いのは「全部入れる!」ですね(笑)

私の場合、既に入れているので「更新」の状態になっていますが、初めての人は「インストール」と表示されているでしょう。

f:id:maxminkun:20171105170250p:plain

先程の画面で、「Xamarin」と「.NetCore」の表示は見えたけど、「Mono」は?と思われるかもしれません。

ご安心を。「Mono」は自動的にインストールされます。

f:id:maxminkun:20171105170254p:plain

これで、インストールは完了。お疲れ様でした!

f:id:maxminkun:20171105171235p:plain

Visual Studio for Mac での開発

以前、リンク切れを検索するコンソールアプリを開発しました。

www.milkmemo.com

実は、MacとWinの同時対応をさせるために、「Visual studio for Mac」で開発をしていたんです。

初の試みでした(笑)

少し開発画面を見てみましょう。

実際の開発

立ち上げた時の画面が以下になります。Macらしくデフォルトは真っ白ですね(笑)

「新しいプロジェクト」からアプリ開発を始めましょう。

f:id:maxminkun:20171105172536p:plain

面白いのは、様々なアプリが開発可能という点です。

f:id:maxminkun:20171105172628p:plain

iOSのアプリも開発出来ますし、

f:id:maxminkun:20171105172631p:plain

Androidのアプリも開発可能です。

f:id:maxminkun:20171105172636p:plain

なんと、Macのアプリも開発出来るんです。

これは、画面UIの設計にXcodeが立ち上がりますので、Xcodeの使い方を知る必要があります。
(私は今のところチンプンカンプンなので、一旦保留中(;・∀・))

f:id:maxminkun:20171105172640p:plain
さてさて。MacとWinで共通のアプリを作りたい時はどうしたらいい?

ソリューションファイル自体は、MacとWinのVisual Studioで共有出来ます。
(どちらのVSでも開くことが可能ということです。)

しかし、画面UIの兼ね合いが出てくるので、どちらでも動くアプリとなればコンソールアプリが手っ取り早いでしょう。

理論上で行けば、ビルド結果(最終的に出来たアプリ)はどちらでも動くということになります。

理論上ではね(笑)
(この部分は後述します。)

f:id:maxminkun:20171105172644p:plain

開発画面

いかがでしょう。「Visual Studio」と画面はほとんど変わりません。

f:id:maxminkun:20171105172648p:plain

実は、「Visual Studio」の売りである、インテリセンス(IntelliSense)機能も爽快に動きます。
(インテリセンス機能とは、プログラムを入力すると自動的に予測補完して候補を列挙してくれる機能です。)

画面上で違う点は、ソリューションの階層表示が左にあることぐらいでしょうか。

また、デバッグとリリースの切り替えは赤枠の場所で行います。
(▶を押せば、実際に動きますよ!)

参照について

通常の「Visual Studio」の開発と同じで、必要なライブラリの参照も同様の操作で行えます。

f:id:maxminkun:20171105174400p:plain

f:id:maxminkun:20171105174411p:plain

exeファイルの実行(コンパイル結果の実行)

まだ、この部分は知識不足なのですが、どうやら私が作ったアプリケーションはMonoのdllを参照していたようです。

よって、以下のようにしてビルド後のexeファイルを起動します。

$ cd (実行).exeの階層
$ mono (実行).exe

実際にその階層に移動してから、実行する。

あるいは、

$ mono (実行).exeのフルパス

となるでしょう。

WinとMacでの統一アプリ開発の注意点

コンソールアプリであれば、ソリューションファイルを移動させて、WindowsマシンでコンパイルすればOK。

これで、Windowsで動くexeファイルが出来ます。
(dll参照ですが、.NetFrameworkが自動で置き換わってくれました。)

もしかすると、再ビルドも必要ないかもしれません。
(これはちょっとまだ試してません。)

しかし、再ビルドし直さないといけない原因は他のところにあります。

それは、パスの問題。

Macの場合は、階層の表現として/を利用しています。

しかし、Windowsの場合は、\あるいは¥が階層の区切りを表すのです。

よって、ほとんどの場合、ファイルの読み込みと書き込みが必要になるでしょうから、パスの部分は書き換えなければなりません。

この点は注意です。実行時に「アクセス不可能」のエラーが発生するか、その文字を使った階層やファイルを作ってしまうことになります。


最後に

ほら!ちゃんとMacでもC#が使えるでしょう?

むむむ・・・

まぁ、裏を返して言うと、MilkはC#しか書けないってことだけどね。

う・・・うるさい!!
(´;ω;`)

じゃあ、他に書ける言語は?

Javaとか?

大学の時にしか書いてないじゃん。
しかも卒論で、簡単だからって理由でC#に乗り換えたくせに。

ずびばぜん・・・
もうたぶん、Javaは覚えてないです・・・

とにかく、MacでもC#が使えるようになって良かったわね。

うむ!そうなのだ!
あはははは!!

(調子の良いやつ・・・)