スマホアプリの主な開発環境まとめ

## 1. はじめに

ここ暫くスマホアプリの開発に携わってなかったのですが、時代の流れと共にスマホアプリの開発環境もどんどん増えていきますね。
開発環境を選定する際の参考になるように、現在はどのような開発環境があるのか整理してみました。


## 2. アプリの種類

前提として、スマホで使えるアプリは**Webアプリ、ネイティブアプリ、ハイブリッドアプリ**の3種類に分けられます。
今回は**ネイティブアプリ**の開発環境について触れていきます。
![AppType.PNG](https://qiita-image-store.s3.amazonaws.com/0/247638/adfddc35-8978-2cc5-1b34-aa51707168df.png)


## 3. ネイティブアプリの開発環境

ネイティブアプリを作成するにあたり、iOSアプリやAndroidアプリそれぞれ単独開発を行う**標準の開発環境**と、同時に開発を行える**クロスプラットフォームの開発環境**に分類できます。
クロスプラットフォームの開発環境を使ったとしても、**iOSアプリをビルド、署名する際にはMac(Xcode)が必要**になります。

### 3-1. 標準の開発環境

#### 3-1-1. Android Studio

言語                  |開発元             |料金
:---------------------|:------------------|:---
・Java<br>・Kotlin         |Google             |無料

##### <メリット>
- 公式の開発ツールであり、信頼性が高い。
- Androidアプリをテストするための幅広いツールやフレームワークがあらかじめ用意されており、「JUnit4」や「UI機能のテスト」などを行うことができる。
- Kotlinはシンプル、かつNull安全に設計されている。(Kotlin使用者が急増中。KotlinがAndroid開発の公式言語として採用された。)

##### <デメリット>
- エミュレータが遅い。
- Kotlinを導入した場合、アプリの容量は1MB程増加する。

#### 3-1-2. Xcode

言語                  |開発元             |料金
:---------------------|:------------------|:---
・Objective-C<br>・Swift   |Apple              |無料

##### <メリット>
- 公式の開発ツールであり、信頼性が高い。
- Interface Builderを使うことで、コードを記述することなく直観的にViewを作成することができる。
- シミュレーターが快適に動作する。

##### <デメリット>
- Macが必須。
- Interface Builderを使った場合、コンフリクト地獄に注意が必要。

### 3-2. クロスプラットフォームの開発環境

#### 3-2-1. Unity

言語                  |開発元             |料金
:---------------------|:------------------|:---
・C#<br>・JavaScript<br>・Boo |Unity Technologies |・Personal：無料<br>・Plus：4,200円<br>・Pro：15,000円<br>・EnterPrise：お問い合わせ

##### <メリット>
- 2D/3D問わず、ゲーム作りにとても強い。
- 採用実績は、Pokemon Go、ドラクエ8、白猫など。
- コードを記述することなく、キャラクターを動かしたりすることができる。

##### <デメリット>
- 無料版はアプリを起動したときに「Unity」のロゴが入る。
- アプリの容量が最低でも8MBくらいは食ってしまう。

#### 3-2-2. Xamarin

言語                  |開発元             |料金
:---------------------|:------------------|:---
C#                    |Xamarin (2016年2月にMicrosoftが買収) |少し複雑なため以下参照<br>([Xamarinのライセンスを整理してみた](http://www.nuits.jp/entry/2016/05/06/174037))

##### <メリット>
- 開発環境自体はVisual Studioなので、慣れている人には扱いやすい。
- Xamarin.Formsを使うことで、Android/iOS共通化したUIを作ることができる。
- ↑共通化できるのはコアな部分のみ。実際に共通化できるのは30～60％くらいで、Xamarin.Formsをうまく使えば80％くらいになる模様。

##### <デメリット>
- Xamarin.FormsにはXAMLを使うため、XAMLに関しての知識が必要になるが、情報量が少ない。


#### 3-2-3. Titanium Mobile

言語         |開発元       |料金
:------------|:------------|:---
JavaScript   |Appcelerator |無料

##### <メリット>
- Eclipseベースの統合開発環境なので、慣れている人には扱いやすい。

##### <デメリット>
- 性能/パフォーマンスはあまり評判がよくない。(動きがカクカクしている、よく落ちるなどの情報あり。)
- 情報量が少ない。Googleで「Titanium Mobile」と打つと「Titanium Mobile オ〇コン」と出てくる・・・


#### 3-2-4. React Native

言語         |開発元       |料金
:------------|:------------|:---
React.js   |Facebook |無料

##### <メリット>
- React Nativeのビルドや開発を支援してくれるサービス「Expo」が便利。
  - ケーブルなしで実機の動作確認ができる。
  - コード変更も即座に反映される。など
- JavaScriptで書いたコードがネイティブのAPIを呼び出すため、Web開発をしていた人にとっては触りやすい。
- 性能・パフォーマンスはネィティブと区別がつかないレベル。
- 採用実績は、Instagram、メルカリ、Airbnb、baidoなど。

##### <デメリット>
- エラーメッセージが分かりにくい。


#### 3-2-5. Vue Native

言語         |開発元       |料金
:------------|:------------|:---
Vue.js   |Google？ |無料

##### <メリット>
- Vue Nativeは内部的にReact Nativeをラップして実装しているため、React Nativeのメリットがほぼ生かされる。(多分)

##### <デメリット>
- 情報量が少ない。

#### 3-2-6. Kotlin Native

言語         |開発元       |料金
:------------|:------------|:---
Kotlin    |JetBrains？ |無料

##### <メリット>
- 完全なネイティブバイナリを生成するため、OSやネイティブ環境との相性が良い。
- Kotlinはシンプル、かつNull安全に設計されている。(Kotlin使用者が急増中。KotlinがAndroid開発の公式言語として採用された。)

##### <デメリット>
- まだBeta版。当然情報量が少ない。

## 4. おわりに

個人開発なら、興味のある開発環境を選べばいいですが、業務になると選定は難しいですね^^;
クロスプラットフォームの開発環境を使うことによって、**どこまでコスト削減できるのか**がポイントかと思います。
記載した内容はまだ一部の情報ですので、もうちょっと調査を続けてみます。やっぱり使ってみないとですね。個人的にはReact Native、Vue Nativeあたりに注目してきたいと思っています。Kotlin Nativeも今後にかなり期待できそうですね。