Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

合言葉は「Xamarinはいいぞ!」――ライブコーディングを交えてアピールされた、C#とVisual Studio 2017の魅力【デブサミ2017】

【17-A-4】C#で簡単にモバイルアプリを作ろう!

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/03/27 14:00

 C#でiOSやAndroid、UWP(ユニバーサルWindowsプラットフォーム)のアプリケーションを効率的に開発できるとして「Xamarin(ザマリン)」が注目を集めている。その紹介&実演セッションに登壇したのは、日本マイクロソフト株式会社 デベロッパー エバンジェリズム統括本部のテクニカルエバンジェリストである“ちょまど”氏こと千代田まどか氏。マンガ家の肩書を持つ氏は、異色のスピーカーながらデブサミ2017で屈指の聴講者を集めた。本記事ではそのセッションの模様を紹介する。

日本マイクロソフト株式会社 デベロッパー エバンジェリズム統括本部 テクニカルエバンジェリスト JXUG(Japan Xamarin User Group)千代田まどか(ちょまど)氏
日本マイクロソフト株式会社 デベロッパー エバンジェリズム統括本部 テクニカルエバンジェリスト
JXUG(Japan Xamarin User Group)千代田まどか(ちょまど)氏

ちょまど氏、C#への惜しみない愛を語り、C#の機能紹介ライブコーディングに挑戦!

 C#が好きすぎて、2016年3月にマイクロソフトに入社したというちょまど氏。「Cが進化してC++に、そしてC++++となるかと思いきや、4つの+を略してC#となった」名前の由来に始まり、冒頭から惜しみないC#への愛を語った。

 まずはC#の特徴の1つだというコードの美しさを、イベントのサンプルコードを例にして「簡単に書くことができる、すばらしい!」と、紹介した。次に「LINQ(Language-Integrated Query)」について解説。数字の配列から要件にかなう数字を抽出して加工する処理を、SQL文のようにメソッドチェーンで書き、作成した数字をConsole.WriteLineメソッドで表示するところまでを見せ、コレクションの操作を直感的に行えることをアピールした。

 C#はこの2つ以外にも、多値戻り値を可能にする「タプル」や非同期処理のための「async/await」、型引数を受け取る「ジェネリクス」、匿名関数「ラムダ式」など、最近の言語が持っている機能を多く持つ。ちょまど氏は「とてもモダンな言語!」と絶賛した。

 続いてちょまど氏は「C#の機能紹介ライブコーディング」をスタート。まずは、「Visual Studio 2017」のRC版を起動し、その起動と.slnファイルの展開の速さを紹介した。2017年3月7日に正式リリースされたVisual Studio 2017では、ソリューション展開やプロジェクト作成の速度がかなり向上したという。

 そして、ライブコーディングでは、async/awaitとJSON.NETのサンプルとして、天気予報を取得するREST APIを叩いてJSONデータをリクエストし、自前のclassにデシリアライズしてからコンソールに表示させるデモを行った。その中でVisual Studioの便利機能である「Paste JSON As Classes」を使い、クリップボードにあるJSON生文字列を「クラスとして貼り付ける」機能も見せた(これが一番聴衆の反応が良かった)。

 しかし、途中で、 会場の電波状況が混雑によりあまりに酷かったため、(JSON.NETを入れようとした時の)NuGet Package Manager(C#のパッケージ管理ツールシステム)が「読み込み中」でストップ。デモ続行不能となり、ちょまど氏は焦っていたが「私の前にセッションをして、デモ失敗した牛尾先輩がこの会場電波やばいって言ってたから、こんなこともあろうかとプランBを用意しておきました……」と、泣く泣く事前に録画しておいたビデオに切り替えていた。「本当は全部ライブでやりたかったです」

Visual Studio 2017×C#の効率性をアピール

 なんとか動画でライブコーディングを再現し、ちょまど氏は“おさらい”として、ポイントを次のようにまとめた。まず、一般的な言語ではコールバック処理などが必要な非同期処理を、C#ならawaitを使い、たった1行で記すことができる。

C#では「await」で非同期処理の完了を待つことができる
C#では「await」で非同期処理の完了を待つことができる

 さらに、Visual Studioでは、先ほども登場したNuGetを利用するとGUIで参照パッケージを管理できることや、C#の処理系はオープンソースで、コンパイラや中身などは全てGithub上で閲覧可能であることが解説された。

 「『マイクロソフトのオレオレ言語なんじゃないの?』『Windowsでしか動きません、とかあるんじゃないの?』というように、C#については誤解も多いけれど、.NET環境があればあらゆるプラットフォームで動きます!」と、ちょまど氏は語気強く語る。そして「あらゆるプラットフォームで動くといえば、思い出す彼」としてJavaを引き合いに出した。JavaがJVM(Java仮想マシン)の上で動くことにより、結果的にあらゆる環境で動く仕組みになっているのと同じように、「C#も.NET環境の上で動くことで結果的にあらゆる環境で動くっていうのは同じ!」と解説した。

JavaはJVMの上で動くことにより結果的にあらゆる環境で動く
JavaはJVMの上で動くことにより結果的にあらゆる環境で動く
C#は.NET環境の上で動くことにより結果的にあらゆる環境で動く「本当はもう少し複雑なんだけど、雰囲気はこんな感じ!」(ちょまど氏)
C#は.NET環境の上で動くことにより結果的にあらゆる環境で動く
「本当はもう少し複雑なんだけど、雰囲気はこんな感じ!」(ちょまど氏)

 ちなみに、MacでC#を動かすには「Visual Studio for Mac」(2017年3月中旬時点ではプレビュー版)をインストールするのが一番早い。残念ながら、先ほど紹介された「JSONをclassに変換して貼り付け」などの細かい機能は未実装だ(Windows版はフル機能を搭載し、先述した通り3月7日にVisual Studio 2017が正式リリースされている)。

 それでは、「C#では何ができるのだろうか?」――その問いに対して、ちょまど氏は「いろんなプラットフォームで動くアプリができます!」と元気よく答える。Windowsはもちろん、Microsoft HoloLensやWindows 10 Mobile/Windows Phoneなど、マイクロソフト製品が対象となっているのは想定内だ。さらに、開発環境「Xamarin(ザマリン)」を使えばAndroidやiOS、Macのアプリまで開発できる。

全てのアプリをC#だけで作れる!「Xamarin」はいいぞ!

 XamarinはiOSやAndroidのAPIをフルサポートしたアプリ開発ツール。Visual Studioに同梱されており、インストールすればすぐに使用できる。ちょまど氏からは「決して、神奈川県座間市のマスコットキャラクター『ざまりん』ではないですよ」と、冗談も飛び出した。

 マイクロソフト入社前よりXamarinを使ってスマホアプリを開発し、このツールを愛してやまないという、ちょまど氏。なぜそれほどまでXamarinに愛着があるのか。それは、ちょまど氏が愛するC#だけでAndroid/iOSのネイティブアプリを作ることができる、クロスプラットフォーム開発ツールだからだ。Android/iOSの両方でアプリを作りたい場合でも、個別の言語を使わずにコードを共通化させることができる。

C#でAndroid/iOSアプリ開発
C#でAndroid/iOSアプリ開発

 通常のモバイルアプリ開発では、iOSの場合、言語はSwiftやObjective-Cを使用し、IDE(統合開発環境)はXcodeを用いる。AndroidならJavaとAndroid Studio、WindowsならC#とVisual Studioというように、言語やツールがバラバラに分かれてしまっている。その結果、スキルやコードの再利用ができず、プラットフォームごとの実装差異が生じてしまう。バージョンの表記方法が異なることや、修正対応のタイミングがずれるケースも発生する。当然ながら、それぞれの言語にかける習得コストもかかるため、iOSとAndroidで開発チームを分けている会社も少なくないだろう。

 「iOSアプリもAndroidアプリも全部同じ、1つの言語/IDEで開発できたらなあ」と思うのは自然なこと。「そこでXamarinですよ!」と、ちょまど氏。iOSアプリやAndroidアプリ、そしてUWP(ユニバーサルWindowsプラットフォーム。Windows 10 デスクトップや Windows 10 Mobileで動く)アプリなどを、全てC#およびVisual Studioで開発できる。

 さらに、コードの共通化はバックエンド/UIを問わない。例えば画面にアラートを出す場合、以下の例の通り1行記載するだけで全てのプラットフォームで動作する。

画面にアラートを出すときの記載例
画面にアラートを出すときの記載例

 このように言語の習得コストをかけず、共通化したコードで実装差異を排除できる点がXamarinの最も大きなメリットといえる。例えば数式を描画するノートアプリ「Calca」、回路設計アプリ「iCirkit」、フローチャートを描画する「Touch View」は全てXamarinで作られているが、ソースコードの6〜9割はOSを問わず共有されている。ただし、どうしても共有化できない部分として、バッテリーやGPS、ライト、通知などのハードウェアに依存するものは残ってしまうとのことだ。

 開発環境は、WindowsはVisual Studio、MacはXamarin StudioまたはVisual Studio for Macとなるが、iOSアプリにつける「証明書」発行やiOSのSDKなどがXcodeにしか無いため、WindowsでiOSアプリを開発する場合は、別途ビルドホストとしてMacに接続する必要がある。

それぞれのアプリケーションを開発する際に必要な環境
それぞれのアプリケーションを開発する際に必要な環境

 ここまでの説明を聞くと「あまりに話がうますぎる」と、機能的制約があるのではないかと心配する人もいるだろう。しかし、ちょまど氏は「ご安心ください!」と断言。Xamarinは各プラットフォームのネイティブUI/APIを100%利用可能であり、アプリのパフォーマンスもネイティブアプリと変わらない。しかもiOSの場合は「Same-day Support」を掲げており、常に最新の状態が保たれ、新しいiOSのバージョンが出たとしても、24時間以内に対応される。また、Apple WatchやApple TV、Android Wear、Amazon Fire TV、Google Glassなどの新しいデバイスも完全にサポートしている。

 となれば「高価」なのではないか、という懸念があるかもしれない。確かに以前は開発者1人につき年間12万円程度がライセンス代としてかかり、Android/iOSの両方を開発する場合は倍額の約24万円が必要だった。そのため当時はユーザーも少なく、インターネット上を検索しても情報がほどんどない状態だった。しかし2016年2月にマイクロソフトがXamarin社を買収し、2016年4月以降はXamarinが無料でVisual Studioに付属するようになった。

 Xamarinの採用実績には、コカ・コーラやアラスカ航空、Tableauなどがあり、世界中で使われていることが分かる。日本では三井住友銀行の住宅ローン事前審査アプリや、NHKの紅白公式アプリに採用されている。

Visual Studioは今年で20周年! サクッとAzureをアピールし、駆け足でまとめ

 最後にXamarinが無料で付属するVisual Studioにも触れ、無償版があること、20周年を記念してイベントがあることなどを駆け足で紹介。さらに、近年のモバイルアプリでは必ずといっていいほど搭載される「プッシュ通知」や「ログイン認証」「ユーザーデータ保存」などの機能を含むmBaaS、「Azure Mobile Apps」を紹介し、「クライアントはXamarin!サーバサイドがAzureの組み合わせは親和性が高い!」とアピールした。

XamarinとAzureの親和性は高い
XamarinとAzureの親和性は高い
Azure Mobile Apps:モバイルアプリに必要な全ての要素を集約
Azure Mobile Apps:モバイルアプリに必要な全ての要素を集約

 最後のまとめでは、「C#はいいぞ!」「Xamarinはいいぞ!」「Visual Studio 2017が3月7日に出るからよろしくね!」「クラウドはAzure!」と、ちょまどワールドが炸裂し、爆笑の渦の中、セッションは幕を閉じた。

 なお、XamarinとAzureで“超効率的に”クラウドと繋がるモバイルアプリを作る方法は、ちょまど氏のブログで紹介されている。ちょまど氏が連載中のWebコミック作品「はしれ!コード学園」と併せてチェックしてみてはいかがだろうか。

お問い合わせ

 日本マイクロソフト株式会社

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5