.NET ラボ勉強会の2016年11月で、「ASP.NET MVC プログラミング入門の入門」の発表をしてきたので、それの補足です。
動画
スライド
[slideshare id=69549826&doc=asp-161126152036]
最初に補足しておくと、スライドの「おまけ」のページの .NET Core の ARM32/64 版がない、というくだりは、core-setup/README.md at master · dotnet/core-setup の中に .NET 1.2 という形で残っています。「Windows arm32/64」という形なので、Windows IoT Core が対象なのか、ARM ベースの通常の Windows 10 が対象なのかは謎ですが(これは後で実験します)、少なくとも ARM ベースの .NET Core は 1.2 で出そうですね。ただ、Raspberry Pi の Raspbian で .NET Core がコンパイルできる&実行できることを欲しているので、もう少し突っ込んで見ていきたいところです。issue を観ている限りは、一進一退っぽいのだけど他に比べてサポートが薄いかなと。
で、なんで、ARM + Linux の組み合わせなのかというと、動画の中でもちらほらでますが、Android + .NET Core を期待するのと、Android + Mono が継続されるのか、と微妙なところがあるからです。今後の .NET Standard と、組み込み OS としての Android(Orange Pi とか)の中で、Mono ベースなのか、.NET Core ベースなのか、というところがあります。そのあたりは組み込み Linux も含まれたりするのですが、まあ、そこは Python を入れたりするので .NET は不要だったり…期待したり。
ちなみに、スライドの中に Xamarin が入っていたり、「ASP.NET MVC プログラミング入門」の書籍のほうに Xamarin が入っているのは、2つほど理由があります。
- Web API のクライアントバリエーションとして Xamarin を使った。
- View 概念を拡張すると、スマートフォン/デスクトップ/ブラウザ(View)+Web API(ロジック)の組み合わせができる
2年前だと10万円近くした Xamarin.Android/iOS ですが、現在は Xamarin 社が提携/被買収のおかげで無料で使えます。こうなると、以前、Xamarin 本を出したときよりもぐっと敷居が下がって(実は Starter という形で Xamarin.Android/iOS を使えないこともなかったのですが、小さなアプリしか作れないし、Xamarin.Forms はサイズ的に使えないし、遊び/試用版の域を出ませんでした)、使おうと思えば使えるところまで下がってきたわけです。
逆に言えば、10万円也(Android/iOS の同時開発するのであれば20万円也)の資金を回収する必要がなくなったので、ある意味で「Xamarin を使う覚悟」ってのはだいぶん減っています。お金を出すとそれを回収しようと思って勉強するけど、無料だったら使えなくてもまあいいか、って感じになりがちですよね。
私が Xamarin を勧める理由
Cordova じゃなくて、何故 Xamarin なのかと言えば、端的に C#/.NET Framework だったからです。Java や Objective-C/Swift じゃなくて、何故 C# なのかと言えば、2002年以来 .NET でやってきたからです。ただし、C# ができるとか、Java が得意とかいうだけなれば、Android は Java で、iOS は Objective-C/Swift で書けばよいのでしょうが(実際、Swiftの本も書きましたから)、TDD の観点からすると、サーバーからクライアントまで一貫して同じプログラム言語を使うのは、開発効率という点で高いメリットがあります。
既存のコードが流用できる
いくつかの本の執筆も含めて、手元には膨大な C# のサンプルコードがあります。同じぐらい VB.NET のコードもあるけど、調べて実験するためのコードは C# が多いので、手元のサンプルは C# のほうが多いのです。そうなると、別の言語に(PHPやPython、Javaも含めて)直すよりも、C# で作れたほうが手元のサンプルを活用できます。インターネット上の「私のネットワーク」も C# のほうが多いので、C# のほうが回答が出やすい状態になっています。
ロジックを取り出してテストする
手元の実験コードはできるだけ、ロジックをオブジェクト化してテストできるように努めています。デスクトップでテストしたものを、そのままサーバーに持って行ったり、Xamarin.Android/iOS を乗せたスマートフォンアプリに持って行ます。これは、サーバーとしてテストしたり、スマートフォン上でテストするのではなくて、一度デスクトップアプリでテストする≒試行錯誤のスピードが速い、という利点があります。このためには、それぞれの環境で動くプログラム言語を同一にしておくことと、それぞれの環境のライブラリが同じ或いは似たものであることが必要です。幸にして、.NET は、.NET Framework/Mono/.NET Coreという形で、一見ばらばらのように見えるものの「再コンパイルさえすれば」おなじコードを使うことが可能です(ネットワークなHTTP廻りとファイル廻りが異なりますが)。
聞く/尋ねる人が近くにいる
私の場合、自宅で仕事になるので尋ねる人がいないのですが、Xamarin を学ぶときにあなたの身の回りに C# をよく知っている人いれば、Xamarin にしましょう。逆に言えば、Java を知っている人(サーバー系であっても)が多いのであれば Java で Android を書いたほうがいいし、そもそも Objective-C や Swift で iPhone アプリを書いている会社であれば Swift のほうがよいでしょう。誰にも尋ねることができないのは、勉強がはかどらないだけでなく、仕事として詰まってしまったときに「誰も助けることができません」。この状態はかなりリスキーです。
ただし、発表でも話したように、Xamarin.Android/iOS/Forms を使うと、C# で同時にリリースすることが可能になります。ロジックに不具合があったり、何かを修正しないといけないときに、Java と Swift の両方を手直ししないといけないよりも、うまくロジックを抜き出しておけば C# だけで済みます。例え、それぞれの画面が別々のレイアウトになっていたとしても、C# で似たような作りにしておくことができます。
勿論、Xamarin/C# ではなくて、Java で統一的に書くことも可能です。あるいは JavaScript のほうを活用するために Cordova でもいいかもしれません。上記の3点の理由を満たせば、どの言語を使っても良いと思います。例えば、手元に豊富な Java ライブラリを持っているのであれば、Xamarin.Android を使って未知なる C# を学ぶ理由はあまりありません。
そんな訳で、ASP.NET MVC の話なのですが、C# にちょっと興味がある/環境的に恵まれているのであれば、Xamarin.Android/iOS/Forms に手を出しておくのは悪くないですよ、という話でした。
書き忘れたけど、新刊
[amazonjs asin=”4822298884″ locale=”JP” title=”ASP.NET MVCプログラミング入門 (マイクロソフト関連書)”]
著者サポートは、こちら http://www.moonmile.net/blog/article/mvc