エムティーアイ エンジニアブログ

株式会社エムティーアイのエンジニア達による技術ブログ

【FY2021 2Q】スマホアプリ開発の技術調査報告

はじめに

こんにちは。 IT エンジニア部の川口です。 
弊社のエンジニアブログに投稿したことはあるのですが *1 、技術について書くのは初めてです。

スマホアプリ開発の技術について、弊社にカルチャーフィットするかどうかを検討したので紹介します。

注意

  • FY2021 2Q 終了時点(2021/03/31)での情報を元に考えた
  • 私を中心としたスマホアプリ開発の周辺技術の動向を調査するワーキンググループが考えたもので、 弊社の正式な決定ではない
  • あくまで弊社における内容である 
    弊社のアプリで使われている技術や、所属エンジニアの技術スタックを考慮している

技術戦略表

スマホアプリ開発で使う技術を 4 つの分類に分けました。

f:id:mti-techblog-writer:20210420121136p:plain

凡例は以下の通りです。

ラベル 説明
Stable (安定) 定番技術で特に理由がなければこの中から選びたい
Experimental (実験的) 将来性を考慮してチャレンジが許される環境であれば採用していきたい
Neutral (様子見) 積極的利用はあまり考えない
Deprecated (非推奨) カルチャーフィットしないので避ける

プラットフォームごとに詳細を紹介します。

iOS

開発言語

Stable Experimental Neutral Deprecated
Swift (5.3 以上) - - Objective-C
Swift (5.3 未満)
  • Swift
    • 新規アプリ開発は Swift を使う
    • 既存 Objective-C 製アプリ開発でも新機能は Swift を使うのが望ましい
    • 5.3 以上の理由
      ∵ Xcode 12.0 に組み込まれている Swift が 5.3 のため
  • Objective-C
    • 基本的には使わない
    • 既存コードを Swift に置き換えることを検討すべき

UI フレームワーク

Stable Experimental Neutral Deprecated
UIKit SwiftUI - -
  • UIKit
    • しばらくは新規アプリ開発でも UIKit を使うのが無難
  • SwiftUI
    • iOS 13 で正式リリースされ、 iOS 14 で更新された
    • UIKit と共存できるので、部分的に業務で導入するのはあり

Android

開発言語

Stable Experimental Neutral Deprecated
Kotlin (1.4.0 以上) - - Java
Kotlin (1.4.0 未満)
  • Kotlin
    • 新規アプリ開発は Kotlin を使う
    • 既存 Java 製アプリ開発でも新機能は Kotlin を使うのが望ましい
  • Java
    • 基本的には使わない
    • 既存コードを Kotlin に置き換えることを検討すべき

UI フレームワーク

Stable Experimental Neutral Deprecated
XML Jetpack Compose - -
  • XML
    • しばらくは新規アプリ開発でも XML を使うべき
  • Jetpack Compose
    • 現在ベータ、正式リリースはまだ

クロスプラットフォーム

Stable Experimental Neutral Deprecated
Xamarin.Forms (5.0 以上)
C# (.NET Standard 2.1 以上)
MAUI
Uno Platform
Xamarin Native Xamarin.Forms (5.0 未満)
C# (.NET Standard 2.1 未満)
- - Flutter -
- - React Native -
- - KMM -
  • Xamarin Native
    • OS ごとの特徴を活かした UI を作るのは Xamarin.Forms より適している
    • iOS ・ Android の両方をネイティブで UI を作る知識が必要になる
    • ネイティブと Xamarin.Forms 以外に選択肢を増やすと、開発・保守体制が作りづらくなるため、積極的には採用しない
  • Xamarin.Forms
    • 新規アプリ開発では 5.0 以上を使う
    • .NET Standard 2.1 以上の理由
      ∵ Xamarin.iOS および Xamarin.Android がサポートしている最新バージョン*2 のため
  • MAUI (Multi-platform App UI) *3
    • 現在プレビュー
    • Xamarin.Forms の進化版 *4 なので、正式リリース後の新規アプリ開発ではこちらを使う
  • Uno Platform *5
    • MAUI は Microsoft 公式だが、こちらは異なる
  • Flutter
    • 現在最も流行っていると感じるクロスプラットフォームのフレームワーク
    • 動向を様子見
  • React Native
    • 動向を様子見
  • KMM (Kotlin Multiplatform Module) *6
    • 現在アルファ
    • 動向を様子見

技術選定

弊社としては、以下のフレームワークをサービスの性質や開発・保守体制などを考慮して選定するのがいいと考えました。 
特に 開発・保守体制を築けるか どうかという点が重要だと考えます。

  • ネイティブ
  • Xamarin.Forms
  • Flutter

サービスの性質

  • 保守を想定しない使い捨てのアプリ
    • フレームワークはこだわらない
  • 長期間の保守を想定しているアプリ
    • 廃れないフレームワークを選定すべき
      • ネイティブが無難
      • クロスプラットフォームのフレームワークを使う場合、2022 年 11 月までサービスのリリースを続けることが公表されている *7 Xamarin.Forms が有力候補
  • ハードウェアの機能(カメラやスピーカー、 NFC など)をメインで使うアプリ
    • ネイティブが望ましい
  • 納期が限られているアプリ
    • Xamarin.Forms や Flutter などクロスプラットフォームのフレームワークの使用を検討する

開発・保守体制

弊社のスマホアプリエンジニアは Xamarin を書ける人が最も多く、次にネイティブで、 Flutter や React Native は少ない(私の知る限りでは業務で書いている人はいない)です。

プロジェクトメンバーのスキルにもよりますが、所属エンジニアの技術スタックからすると Xamarin.Forms を使うのがよさそうです。 
ただ世の中の流れを見る限りでは Xamarin.Forms の開発スキルを持つエンジニアが減る(もともと少ない)ことが予想できるので、今後を見据えるならネイティブがいいかもしれません。 
クロスプラットフォームなら Flutter を使うのもいいですが、弊社に Flutter を書けるエンジニアが少ないことなどから、採用は慎重に判断すべきだと考えます。

おわりに

スマホアプリ開発における技術戦略の紹介でした。

少しでも参考になれば幸いです。 
逆に適切でない箇所などがありましたら、何らかの形でご指摘いただけると嬉しいです。

採用情報

現在弊社が募集している職種の一覧です。

js01.jposting.net

興味がありましたらぜひご応募ください。
スマホアプリ開発のエンジニアやプロジェクトマネージャーの方、ぜひ一緒にお仕事しましょう!