C#をベースとしたクロスプラットフォームの登場
――まずは著書『Xamarinネイティブによるモバイルアプリ開発 C#によるAndroid/iOS UI制御の基礎』の概要を教えてください。
青柳:本書は何も知らない人向けではなく、AndroidまたはiOSでのアプリ開発の経験がある人に向けて、Xamarinの使い方を解説しています。
今、国内外のOSシェアを考えると、両方で開発しないといけない会社がほとんどでしょう。そうすると、AndroidならJava、iOSならObjective-CかSwiftを使わなければならず、同じ人が両方を駆使する場合や、あるいはAndroidチームやiOSチームをそれぞれ作る必要があります。メンバーが倍になればコストも倍になってしまいます。
そこでクロスプラットフォーム開発に取り組んでいる会社もあると思いますが、ほとんどはJavaScriptをベースにした環境のはずです。真にネイティブに近くてクロスプラットフォーム開発ができるのは、Xamarinくらいしかないのではないでしょうか。その意味で、Xamarinはかなり魅力的ですね。
――ネイティブアプリを統一環境で作れることが利点だと。実際に開発するときはVisual Studioを使いますが、これはどうでしょうか。
青柳:私は元々Visual StudioとC#が大好きなので、Xcodeを使わなくていいことが嬉しいですね(笑)。そんなことはないと言う人もいると思いますが、やっぱりVisual Studioの完成度は高いです。使いやすいですし。
それは他の開発ソフト、Android StudioやXcodeの出来が悪いのではなく、単にVisual Studioの歴史が長い分だけ洗練されているということです。細々としたところの使い勝手は、本当に少しずつよくなってきたんですよ。C#もそうですね。
プログラミング言語はまず言語だけが改善されて、そのあとそれを使うための環境が考えられてきました。別々なんです。ところが、Visual StudioはC#が使いやすくなることが前提ですし、C#もVisual Studioに合わせた形になっているんです。そんなVisual StudioでXamarinが動くわけです。
ただ、XamarinはVisual Studioにとって後づけなので、もう一歩と思うところもあります。しかし、そこはMicrosoftが力を入れてくれれば、どんどん使いやすくなっていくでしょう。
XamarinネイティブとXamarin.Formsの違い
――本書はXamarinネイティブの解説をしていますが、Xamarin.Formsとの違いを教えていただけますか?
青柳:AndroidとiOSのUI周りのAPIをそのまま使うのがXamarinネイティブです。
Xamarin.Formsは、元々Windowsの世界にあったXAMLというUIの定義――xml形式で書くんですが、これをXamarinでも似たようなことができるようにしたものです。AndroidやiOSでのUI定義方法とはかなり異なっているため、AndroidやiOSで開発していた人が使おうとした際、一から学ぶ必要があります。従来の開発をしていた方には敷居が高い気がします。
ですが、WindowsでWPFやSilverlightをやっていた方はXAMLに慣れていますので、むしろXamarin.Formsのほうがわかりやすいでしょう。
自分が持っている知識によって、XamarinネイティブとXamarin.Formsのどちらを使うかは判断してもらったほうがいいですね。ただ、Xamarin.Formsは新しいフレームワークなので機能が足りない面もあります。そんなときは自分でカスタマイズを記述することになります。
そういった意味で、Xamarin.Formsだけで実用的なアプリが作れるかというと、ちょっと難しいかなと。機能だけのプロトタイプを作るときにはXamarin.Formsだとさくさく作れます。
実際のアプリを独自のUIにしたいなら、Xamarinネイティブでカスタマイズすることになります。Xamarinネイティブ部分が多くなるなら最初からXamarinネイティブでやればいい、とも言えますし、そうでない場合でもXamarinネイティブの知識は必要になってきます。
――本書でXamarinネイティブを学んだあと、Xamarin.Formsを勉強してもいいわけですね。
青柳:そうですね。Xamarin.Formsの特徴として、フレームワーク自体が最初からデータバインディングに対応している、という利点があります。クロスプラットフォームの場合は特に、データバインディングを使わないとデータとなるモデルと表示を行うビューをつなぎにくいんです。
AndroidやiOSだとデータバインディングを使ってアプリを開発することはあまりありませんが、本書ではきちんと押さえていて、Xamarinネイティブでデータバインディングを実現する方法と、さらにModel-View-ViewModel(MVVM)の解説をしています。データバインディングの記法自体は異なるのですが、Xamarin.Formsでもこれらの考え方はそのまま使えます。
――「Part 3 MVVMCrossを使う」がすべてデータバインディングに費やされています。その流れでXamarin.Formsを学びやすいということですね。
青柳:はい、データバインディングはとても重要な技術になっています。Webの世界でも、ブラウザ上でアプリを動かすライブラリがたくさんありますが、多くがデータバインディングの考え方を取り入れています。HTMLは見た目を表現するものであり、それとデータをどうつなげるのかが肝心なんです。今ではデータバインディングを前提としたフレームワークがとても増えています。
トラブルはあって当然
――Xamarinで開発するとき、どういうことに気をつければいいでしょうか。
青柳:いっぱいあります(笑)。Xamarin自体はそれほど新しくないんですが、ここまで急激に使われるようになったのは最近で、Microsoftの一部になったからだと思います。そういう意味では新しい技術ですね。
そのため、プログラミングではよくありますが、動いている間はよくても、ちょっと動かなくなるとなぜ動かないのかわからない、という状況がけっこうあります。
開発環境のトラブルもあります。Visual Studioをアップデートしたらビルドが通らなくなったり、なぜかiPhoneを認識しなくなったり、シミュレーターが動かなくなったり。AndroidとiOSの進化が早く、合わせてXamarinもバージョンアップしなければならず、それで不具合が生じやすいんでしょうね。
そこらへんで苦労はありますが、Android StudioやXcodeを使っている場合でも同じようなトラブルはあるはずです。Xamarinだから、というトラブルはありつつ、Xamarinでなくても起こるトラブルがほとんどなんですよ。
――クロスプラットフォームの宿命ですし、モバイルアプリ開発の宿命でもありますよね。
青柳:Androidがバージョンアップして、時間差でiOSがバージョンアップして、さらにAndroidは無数の最新機種が出てきて……と何が何やらという状況で開発していかないといけないので、いろいろなトラブルはあって当然ですね(笑)。
サポートやコミュニティも活発
――これからXamarinを使うにあたり、サポートやコミュニティというのはどうなっているんでしょうか。
青柳:いわゆるメーリングリストやフォーラムで大きな活動があるわけではないんですが、Japan Xamarin User Group(JXUG)というコミュニティがあります。関東中心とはいえ、有志が集まって勉強会を開催していますね。
あと、資料を探すなら本家のXamarin.comを見ておくべきでしょう。英語ですが、とても有益です。それと、プログラマーには欠かせないスタック・オーバーフローも押さえておきたいです。英語版だと特に情報が豊富で、載っていない情報がないくらいです。
まずは勉強会にちょっと顔を出してみるといいと思います。体感的には開催数も増えていますし、勉強するなら今ですね。
――Microsoft自体のサポートはどうですか?
青柳:かなり力を入れている印象です。バージョンアップの頻度は買収前と変わりませんが、Microsoftとしてもスマホを放置できないでしょう。Visual Studioへの注力を見ていても、Xamarinはこれからも進化していくと思いますね。
C#を始めるきっかけにも
――本書で初めてC#に触れる人もいると思います。そういう人に向けてメッセージをお願いできますか?
青柳:端的に言うと、C#はいい言語です。私はJavaやObjective-Cも使っていますが、やっぱりC#のほうがコードを書きやすいんですね。それはVisual Studioという開発環境もあるからですが、言語として扱いやすいと感じます。
C#は他の言語に取り入れられた機能を備えているので、どんな人でも学びやすい、すっきりした言語だと言えます。最近だとゲーム開発のUnityでもC#を使います。ゲーム以外のビジネス分野でもUnityが使われることもありますから、C#の適用範囲が非常に広がっているんですよ。
私が中心になって開発したプロジェクトでも、サーバーはASP.NETで言語はC#。スマホアプリはXamarin。そのアプリはWebサービスのAPIをJSONでやり取りしますが、アプリがXamarinなのでこれもC#です。
運営チームがサーバーに溜まっているデータを解析する必要があって、それもC#で運用するようにしました。すべてをC#で統一したんですね。複雑な解析をするエンジンでしたので、それを各言語で作り直したらどこにバグが発生するか予想もつきません。
言語が違うと算術演算の誤差の出方も異なる可能性があります。なので、C#で統一できるというのはそれだけで大きなメリットがありました。しかし、それだけでなくサーバーからクライアントアプリまで、すべてをVisual StudioとC#で統一できたことは、開発時においても保守時においても、様々な面で効率アップにつながりました。そしてさらにスマホアプリの開発も統一できたのは、まさにXamarinのおかげです。
このように、C#はあらゆる局面で使える言語になりました。今まで他の言語を使ってきた人にすべてC#にしようと言うつもりはありませんが、知っておいて損は絶対にないでしょう。