読者です 読者をやめる 読者になる 読者になる

iOS開発歴4年目の僕がXamarinへの移行を考えてみた

この記事は FUN Advent Calendar 2016 11日目の記事です。

10日目@neglect_yp先輩書かないのかな...

10日目(12日目)の@neglect_yp先輩の記事 gen-ius.hatenablog.com

$whoami

  • 佐藤 敦也 / Atsuya Sato
  • 学部2年 知能システムコース
  • iOSエンジニア2年目 / 開発歴4年目
  • 最近はディープラーニングとか勉強してます

詳しくはこちらポートフォリオサイトに。

本文に入る前にお詫び

もともとiOSのコアな内容にするつもりが、12/3に参加したMashup Awards 2016準決勝レポートを書くことに変えてしまいました。

、さらに変わって別のことを書くことにしました...。

ころころ変わってすみません、、。 MashupAwardsレポートに関しては、昨日12/10に参加したHakodate Hack Night Vol.7でLTネタに使ってしまい、同じことを書いてもよかったのですが、昨日同じイベントに参加された方にとって既出となってしまうので、変更しました。

ただ、せっかくなので昨日のLTの内容は別記事で書かせていただいたので、興味あればこちらの記事も見ていただけると幸いです。 natmark.hateblo.jp

記事の内容

普段、スマートフォンアプリの開発企業でiOSエンジニアとしてアルバイトさせていただいてるのですが、最近はUnityを使うことのほうが多くなってきました。

もともと日本ではiPhoneユーザが圧倒数いて、スマートフォン自体の性能もほとんどのAndroid端末はiPhoneに劣っていました。ただ、最近Androidの性能がどんどん良くなってきており、もはや「国内用のアプリだからiPhoneの対応だけでいいや〜〜」なんて言ってられなくなりました。

そこで、Androidの開発を勉強しようと思った次第なのですが、今からAndroid StudioJavaをガリガリ書く気にもなかなかなれないのです。(そもそもAndroid端末持ってないし)

Android用に、フレームワークやらJavaやら覚えるくらいならクロスプラットフォームに移行してやる!!と思ったのが今回の記事のきっかけになります。

Xamarinとは

C#を用いてiOSAndroidのアプリケーションを開発するためのライブラリおよび開発環境です。 XamarinはMicrosoftよりVisual Studioの一部として提供されていますが、Mac版の開発環境も存在しており、Mac上でC#を用いてiOSAndroidアプリを開発することも可能です。

http://codezine.jp/article/detail/9619より引用

C#を使ってクロスプラットフォームでの開発が実現できるものです。

そもそもなぜXamarinなのか

ちょまどさん可愛い

Xamarin.Formsによってクロスプラットフォームはもちろん、 Xamarin.iOS、Xamarin.Androidが用意されており、クロスプラットフォームを要求されない場合は、それぞれの開発系に従って開発できる。

すごい( ゚▽゚ っ)З

まずはXamarinでiOS開発

クロスプラットフォームを早速やってみてもいいのですが、Xamarin.iOSが気になりました。 もしXcode以上に良くできていればXamarinに完全移行もありうる...???

Xamarin インストール

https://store.xamarin.com/こちらからインストールできます。

f:id:n_atmark:20161211193020p:plain

アイコンがおしゃれですね。

My First Xamarin ( ゚▽゚ っ)З

さっそくXamarin Studioを立ち上げてみました

f:id:n_atmark:20161211193147p:plain

ちょっとごちゃごちゃしてますね。立ち上げて何すればいいのか、初めての僕にはさっぱりだったので、もう少し起動画面シンプルでもいいのに...

プロジェクトの新規作成

左上のNew Solutionsがプロジェクトの新規作成のようですので、押してみます。

f:id:n_atmark:20161211193504p:plain

プロジェクトのテンプレート選択画面のようですね。iOSのテンプレートはXcodeと同じ感じ。 Single View Appを選択してみる。

f:id:n_atmark:20161211193638p:plain

アプリケーションの詳細設定画面です。 このあたりもXcodeと同じ感じ。AppNameに入力した名前とかDevicesで選択した端末が右側に出てくるようです。面白い。

この後、Solution Name等の設定がありますが割愛。

ソースエディタ

f:id:n_atmark:20161211194124p:plain

MonoDevelopが標準搭載されているようです。Unityで使っているので、特にエディタに関する知識はいらなそうですね。他のエディタで開くこともできるみたいです。

Storyboard

StoryboardもXamarinから弄れるようです。

f:id:n_atmark:20161211194402p:plain

ただ、ここでStoryboardの扱いがXcodeと結構異なるので苦戦しました、、。

まずAutolayoutですが、XcodeがAutolayoutメニューからConstraintを設定するのに対して、XamarinではUIコンポーネントを2回クリックすることで表示される、矢印を使って設定するようです。 f:id:n_atmark:20161211194641p:plain

f:id:n_atmark:20161211194651p:plain

結構苦戦しました。

Outlet接続とEvent割り当て

f:id:n_atmark:20161211194734p:plain

配置してみて、Xcodeで次にやることはOutlet接続なので、エディタを2画面にして、Controlキーを押しながら...

f:id:n_atmark:20161211194832p:plain

っていう方法もXamarinでは使用できません。

その代わり、

f:id:n_atmark:20161211195000p:plain

UIコンポーネントが持つPropertyの中の、Identity項目にNameという欄があり、名前を入力すると、、。

f:id:n_atmark:20161211195118p:plain

.designer.csというファイルに自動的にOutlet接続されるようです。

f:id:n_atmark:20161211195156p:plain

実際にViewController.csにmyButtonを入力してみると、しっかり紐付けされているようです。 これは便利かも。

また、EventもXcodeではControlキーを押しながら...という操作をするのですが、Xamarinでは、 PropertyのControlEventに関数名を入れると...

f:id:n_atmark:20161211195448p:plain

UIコンポーネントの配置されているViewControllerクラスが記述されているファイル上にカーソルが自動的に移動して、イベントハンドラを追加できるようです。 f:id:n_atmark:20161211195505p:plain

(これ、便利だけどソースコードが長くなってきたら、挿入位置選択するの大変そうだなぁ...)

ラベルとボタンだけの簡単なアプリ

f:id:n_atmark:20161211195818g:plain

ざまりん( ゚▽゚ っ)Зざまりん( ゚▽゚ っ)З

まとめ

ここまで作るのにかかった時間は1時間かからないくらいです。ちょっと苦戦しましたがそんなに学習難易度は高くないような気がしました。

気になったのは、Xcodeに比べると動作が全体的に重たいです...。

Xcodeより便利だなぁと感じる機能ももちろんありましたが、ちょっと癖があるのと、やっぱりiOSXcodeで開発しようと思いました。

今回試してみてXamarinに少し慣れることができたので、次回はクロスプラットフォーム開発可能なXamarin.Foramsを試してみたいなーと思います。


Fun Advent Calendar 2016

明日は@mecaota先輩ですね。

今年はクレカじゃない...?!