ベンチャー企業のエンジニアが一人でアプリを開発しなければならない時に、フレームワークやサービスの選定で悩んでいること→結論追記しました

どうも、こんにちは。エバーセンスの西山です。

新規のアプリ開発をしようとしているところですが、一人でiosアプリも、androidアプリも、サーバーサイドをやらなければならないのが、ベンチャー企業のエンジニアの宿命であります。（それは喜びとも言えます^^;）

検討して悩んでいる内容を書き出してみて、知見のある方からご意見頂けると幸いです。

#目的
- 開発のスピードを高めたい
- 技術選定にそこまで保守的になる必要はない。うちはベンチャーだからね。
- ３年後くらいでも同じ基盤で継続的に運用できるのが望ましい

#自分のスキル
- iosアプリをネイティブ(主にswift)で開発経験あり
- androidアプリをネイティブで開発経験あり
- Webは主にPHPを使っている
- ハイブリッドアプリの経験はない
- 英語のドキュメントでもまぁまぁ大丈夫

#どんなアプリの要件か？
- 具体的にはあれなので、例ですが、日記&SNSアプリみたいなものと考えて貰えればと思います。
- 写真をアップして、テキストも入れて、サーバー側で保持する、みたいな。
- 加速度、GPSとかはいらない。カメラはライブラリから写真を選択だけに絞ってもいいから使わなくてもいい。
- 対応はios7以上、androidは出来れば2.3以上が望ましい（4以上にしてもいいけど…皆さんはどうしている？）。

#検討１：ハイブリッドアプリのフレームワークを使うのか？
###Cordova
- 開発のスピードは格段にあがりそう
- もう遅くなくなったというが、やっぱりアプリはある程度サクサク動かしたいから、心配（→というか、よく知らない）

###Titanium mobile
- ネイティブに近い開発が出来そうなので、良さそうな気がする
- けど、最近の盛り上がりにかけるのは気のせいか。検索すると３〜４年前の記事がよく出てくるし。うーん。どうなんでしょう？

###React Native
- いま話題だし使ってみたい！ｵﾓｼﾛｿｳ!
- リロードで即反映されるとか、スピードも上がりそう。
- でもAndroid版は10月頃らしいし、そこからベータ版がスタートするとなると、１年弱かかるなぁ。

###じゃあネイティブで？
- 結構、時間がかかるけど、細かいところは逆にやりやすいから長期的には間違いない。
- ハイブリッドでどれだけ得になるのか、明確にはまだ見えてこない。

###Xamarin
- 忘れてたけど、Xamarinってあったね。
- 50%くらいは共通化出来るかもしれないけど、結局ネイティブで50%書かなきゃいけないなら、ネイティブでいいかなと思う。

###結論→何が最適なんだか。悩み中


#検討２：サーバーサイドはmBaas? 自作?
###Parse
- 実に良さそうではある。Facebookが買収したし、お金はあるはず。
- ユーザーが増えてきたら、お高くなりそう。しかもなんとなく計算してみるも、正確なコストが読めない。
- あとで切替えるという選択肢もあるが、その工数もバカにならないだろう。
- でもノハナのエンジニアさんが、「運用や設計のエンジニア3人分くらいの働きはしてくれると思っています」って言ってるし。https://html5experts.jp/shumpei-shiraishi/14370/

###他のmBaas？
- 数年後、生き残っているかしら？

###自作APIサーバー
- PHPになれているので、FuelPHPあたりでやればいいか。
- 海外はLaravelが流行っているらしいな。でも重いらしい。


###結論→Parseを使って、後で切替えるか。最初から自作か、悩ましい。


#総括
皆さんはどのように選定しているのでしょうか？これだけ多くの選択肢があって、メインストリームが確立していないし、アプリのネイティブ開発はWEBよりも時間がかかることから、アプリ開発環境というのはまだまだ発展途上だと感じます。
特にiosとAndroidの両方を一人でやらなければならないというのは私の事情ですが、誰だって開発は短縮してスピードある開発をしたいですよね。

皆さんのご意見、知見をコメント頂けると助かります。


#追記１：ある凄腕アプリエンジニアさんの意見

このポストを何人かの知人に送って相談して、ある凄腕アプリエンジニアさんにも相談してみたところ、簡単にまとめると以下の回答をもらえました。
####フレームワークについて
- Html5系（cordovaなど）はネイティブに比べるとやっぱり遅い気がする。本当に単純なアプリなら別にいいかもしれないけど。
- Titaniumは不具合が多いイメージがある
- Reactはいいかもしれないが、個人的にはFacebookの手がけるモノはあまり信用していない。
- 結局の学習コストを考えると、初段ではあまり差がないのでは？

####mBaasについて
- Parseの他に、Firebase、Azure、Google Cloud Platform(Cloud Endpoints)、AWS(cognito)も検討できるのでは？
- あとそれぞれのAPIやSDKも重要だからサービスに合わせてよく確認した方がいい

###私の見解
やはり私よりアプリ開発の経験値が全然違うので、勉強になります。
mBaasはParse、Azure以外にも大手がやっていたのは知らなかった。。
Firebaseはgoogleが買収したらしく、リアルタイム性のあるチャットなどを作るときには非常に良いらしい。料金もParseより安そうに感じた
Cloud EndpointsはApp Engineを使えば使えるらしいが、iosのSDK側がまだ微妙そうな感じがする
AWSのcognitoはアカウント管理を便利にやってくれるらしい。SDKもある。さすがAWS、機能を単一化していて使いやすそう。

今のところの印象として、
- 結局ネイティブでやるのが間違いない（まぁそりゃそうだ）
- mBaasはまだまだこれから感が強い。AWSは普段から使っていて、機能が細分化しているから良さそう。今後AWSがFirebaseのようなストレージ同期のサービスを提供するかもしれない（数カ月後にしそうな気もする）

#さらにこんな記事書きました。
[mBaaSまとめてみた](http://qiita.com/osamu1203/items/d7d2206cc079092d07c4)


# 追記２：私が出した結論

皆さまからのコメント、助言ありがとうございました。
非常に勉強になりました。私なりに出した結論を追記します。ただ、これが正解とかいうことではなく、ある１つの意見だと思ってください。

##ハイブリッドフレームワークについて
結論：今は導入しない
理由：結局、開発に魔法なんて存在しないんだと改めて思った。どんな便利なフレームワークも、ライブラリも、常に万能なものなど存在しないから、結局「いいものを作りたい」となると、低レイヤーへ掘り下げて調査、ないしはカスタマイズすることが多々出てくる。簡易なアプリにはハイブリッドは最適かもしれないが、数年使えるサービスとなると、ネイティブで開発したほうが長期的に運用もしやすいだろう。一人開発から、チーム開発への移行もし易い。

###ハイブリッドフレームワークを導入したら良いと思われるケース
- 多機能ではなく、簡易なアプリ
- 長期運用が必要ない作りきりアプリ

##mBaaSについて
結論：導入せず、Railsあたりを使う
理由
 - コストが高くつく
 - 結局自前で色々やりたくなる。そのためにSDKがあるが、それを扱う方が手間
 - その後の自前APIに移行するとしても、手間・時間がかかる
 - なぜRails？→APIやRESTに特化したフレームワークは色々あるし、実際何でもよいと思うが、弊社エンジニアのスキルと、これからの日本の若い世代のエンジニアが扱ったことのある共通言語としてちょうどよさそう。

###mBaasを導入したら良いと思われるケース
- スピード重視
- 短期運用
- チャレンジ要素の強いアプリ（失敗したらすぐに潰すくらいのつもり）
- リクエストが少ないアプリ（例えば起動時にのみ、最新情報を取得するだけとか）
- 個人エンジニアの実験アプリ（無料で十分遊べる）



以上、皆さまのお力を借りて、道筋が見えてきました。
心よりお礼申し上げます。
またこの投稿がどなたかのお役に立てば幸いです。