モバイルアプリのモダンな開発パターン
クラウドネイティブNow

中津川 篤司

株式会社MOONGIFT

代表取締役

mobile backend エバンジェリスト。オープンソースソフトウェアの技術ブログ「MOONGIFT」を開設、2013年に法人化。ビジネスとエンジニアを結ぶDXエージェンシー「DevRel(Developer Relations)」活動をスタート。富士通とmobile backendの開発者に向けた拡販活動で連携。

2010年代にはじまったスマホアプリブームは一旦落ち着いた感がありますが、今はスマホファーストな時代になっています。PCからのインターネットユーザーよりもスマートフォンやタブレットから操作する層が増え、決して無視できない存在になっています。
それは何も一般ユーザー向けのスマホアプリに限らず、企業向けについても言えるでしょう。外出先で営業の方がスケジュールをチェックする、工場でタブレットを使って工程管理を操作すると言った用途で業務システムが使われています。そういった点からも、システム開発時の大事な要点として、スマートフォンやタブレットは外せない存在となっています。
本記事では2022年現在におけるモバイルアプリのモダンな開発パターンを紹介します。

プログラミング言語について

モバイルアプリを開発するプログラミング言語にも、多くの選択肢が生まれています。有名なものは次のとおりです。

  • iOS/iPad OS向き
    • Swift
    • Objective-C
  • Android向き
    • Java
    • Kotlin
  • 両プラットフォーム対応(ハイブリッド)
    • Unity(C#)
    • Cordova/Monaca(JavaScript)
    • React Native(JavaScript)
    • Flutter(Dart)
    • Xamarin(C#)

業務システムの場合、各プラットフォームに特化した動作よりも、両プラットフォームへのワンソースでの対応が望まれることが多いでしょう。その場合はCordovaやReact Native、そしてFlutterが選択肢になります。Cordovaはビジネス向けのアプリ市場において、両プラットフォームに対応した中で30%を超えるシェアを保持しています。

宣言的UI

2022年現在、多くのスマホアプリ向け開発言語では宣言的UIが取り入れられています。宣言的UIでは、従来のようなビジュアルツールを使ってGUIで画面を作るのではなく、プログラミングコードの中でUIを構築する形になっています。各言語においては次のように対応します。

言語 宣言的UI
Swift SwiftUI
Kotlin Jetpack Compose
Cordova React/Vueなど
React Native React
Dart Flutter

宣言的UIになることで、UIとコードが一つのコンポーネント(ウィジェットとも呼ばれます)として管理されます。そして小さなコンポーネントを組み合わせてUIを組み上げます。それによって各コンポーネントの責任範囲が小さくなり、アプリ全体の複雑化を防止できます。

SwiftUIの例(抜粋)

struct TranslateView: View {
    var body: some View {
        NavigationView{
            VStack(spacing:0){
                ZStack{
                    VStack(spacing:20){
                        TextEditor(text: $originalText)
                            .frame(maxWidth: 280, maxHeight: 100)
                        if translatedText != "" {
                            Text(translatedText).padding()
                        }
                        Button(action: {
                            translation()
                        }, label: {
                            Text("翻訳する")
                        })
                    }
                }
            }
        }
    }
}

ただしデザイン(UI)と動作ロジックが密になるため、これまで以上にデザイン部門と開発部門とのコミュニケーションが求められるようになるでしょう。

マイクロサービス

従来はモノリシック(一枚岩のよう)なシステムが多く、1つのシステムで多くの機能を管理・提供してきました。その結果、機能同士が密結合になり、ある修正が別な機能に思わぬ影響を及ぼすこともあります。その結果、修正前の調査に時間を要すようになったり、修正後のテスト工数も増えてしまいます。

図1:モノリシック(左)とマイクロサービス(右)

図1:モノリシック(左)とマイクロサービス(右)

そこでシステムの機能毎に細かく分離してサービス化するという流れが起こっています。こうした小さなサービス群をマイクロサービスと呼びます。認証機能だけ、データを扱う機能だけと言った具合に分離することで、各サービスの独立性を高めたり、システムのシンプルさを保ちます。
アプリ開発においては、数多くのユーザーからごく少数のAPIに一気にアクセス集中することが多々あります(例えばソーシャルアプリのタイムライン表示など)。そのためモノリシックではシステム全体の負荷が及ぶ可能性があり、最悪の場合サービス全体がダウンします。
それに対してマイクロサービスの場合は、アクセスが多い機能についてだけスケールさせれば良く、効率的にシステム全体の負荷や運用コストをコントロールできるのが魅力です。
なお、マイクロサービスは個別のシステムとして稼働しますが、APIゲートウェイと呼ばれるプロキシサービスを通じて管理・運用されます。

サーバーレス

マイクロサービスの中でも特に小さな機能を提供するものは、そもそもサーバーを立てずにクラウドベンダーが提供するFaaS(Function as a Service)の中で実行します。自分たちで管理するサーバーが存在しないのでサーバーレスと呼ばれます。
このサーバーレス環境は実行時間に応じた課金を行うのが一般的です。そのため、長時間実行されるものは不向きです。ただし自動スケーリング機能があり、大量のアクセスが発生しても問題なく処理できることが特徴です。また、実行されない限り課金されない形式をとっているサービスも多いです。
モバイルアプリではユーザー数が増えると一気にアクセスが跳ね上がる(スパイクする)ことがあります。そうした時に従来のサーバーでは処理を捌ききれず、サーバーが停止(ダウン)してしまう可能性があります。サーバーレスを上手に使うことで、大量アクセスに対して安定したサービスを提供できるでしょう。

DevOps・CI/CD

モバイルアプリ開発ではユーザーの利用状況に合わせて継続的に改善を行うのが一般的です。その要になるのがCI/CD(継続的インテグレーション / 継続的デリバリー)になります。バージョン管理を使ってコードを管理し、自動テストを行って問題なければデプロイまで自動で行います。それによって人的コストを軽減し、素早く繰り返しシステムを改善し続けます。

図2:DevOpsの概念

図2:DevOpsの概念

DevOpsはこのCI/CDを用いた運用フローになります。開発とオペレーション(運用)部門が一体となって、データを解析してアプリに修正を行ったり、サーバーのデータメンテナンスを行います。サーバーへのコード反映も頻繁に行われることで、ビッグバン的なリリースを避けられるようになります。

アプリとサーバーのつなぎ込みについて

一般的なWebシステムはアプリケーションサーバーとデータベースサーバーがあり、アプリケーションサーバー(またはHTTPサーバー)に接続するブラウザーによって成り立っています。すべてのコンテンツはアプリケーションサーバーが保持しており、それをブラウザーに配信して表示します。
モバイルアプリの場合、UIに関する要素はすべてスマートフォンやタブレット側に存在します。サーバーからは情報を送信し、モバイルアプリがデータを解析してUIに反映します。この時、アプリケーションサーバーとモバイルアプリの間ではJSONフォーマットを使ってデータを送受信するのが一般的です。

図3:mBaaSとアプリの関係

図3:mBaaSとアプリの関係

こうしたアプリケーションサーバーやデータベースサーバーを自社で開発するケースもあれば、mBaaS(mobile Backend as a Service)と呼ばれるサービスを利用するケースもあります。

FUJITSU Hybrid IT Service Digital Application Platform mobile backendが提供する機能について

FUJITSU Hybrid IT Service Digital Application Platform mobile backendはmBaaSと呼ばれるサービスの一つです。モバイルアプリ開発におけるバックエンド機能を一纏めにして提供することで工数を削減し、開発リソースをフロンドエンド(アプリのUI)側に集中させられます。
主な機能としては次のとおりです。

  • 認証
  • データストア(データベース)
  • ファイルストア(ファイルストレージ)
  • プッシュ通知
  • スクリプト

この中でスクリプトというのは、先述したFaaS(Function as a Service)にあたり、サーバーレスにてNode.jsやRubyのコードを実行できる環境になります。不足している機能があれば、コードを記述して拡張が可能です。
FUJITSU Hybrid IT Service Digital Application Platform mobile backendを利用してモダンなアプリ開発をはじめてみませんか?

関連情報

当社が提供する「mobile backend」の詳細は下記ページをご覧ください。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ