本文へ移動

Software Engineering

モバイル開発者

モバイル開発者は、他人の所有する端末の上で、予告なくアプリを停止しうるOSのもとで、利用者が自分で選んで入れ、その後ずっと入れ替えないかもしれないバージョンとして動くアプリケーションをつくります。この三つの事実が、この領域の性質をほぼ決めています。本ガイドでは、iOSとAndroidでの仕事の中身、ネイティブとクロスプラットフォームの判断の考え方、そして専任が必要になる場面を整理します。

モバイル開発者は何をする職種ですか

モバイル開発者は、iOS、Android、またはその両方に向けてアプリケーションを構築し、リリースします。画面と画面遷移、通信がなくても動作させるためのローカルのデータ保存、カメラ、位置情報、生体認証、通知といった端末機能との連携、そしてビルドをストア審査から利用者の手元まで運ぶリリース手順が範囲です。加えて、制約のあるハードウェア上での挙動、すなわち起動時間、メモリ、電池消費、そして開発機よりかなり古い端末での応答性にも責任を負います。

ウェブ開発との構造的な違いは、動いているバージョンを自分で制御できない点にあります。ウェブの修正は次のリクエストで全員に届きますが、モバイルの修正はビルドし、署名し、提出し、審査を受け、承認され、公開され、そのうえで何か月も更新しないかもしれない人にインストールされて初めて届きます。したがって利用者は同時に多数のバージョンを使っており、サーバー側の変更はすべて、それよりずっと前に書かれたクライアントとの互換性を保たなければなりません。この一点が、ウェブのチームには不要な慎重さをモバイルのチームに求める理由であり、ウェブのチームにアプリを任せたときに最も過小評価される点でもあります。

二つ目の違いは端末そのものです。OSはメモリを取り戻すためにプロセスを中断あるいは終了させることがあり、バックグラウンド実行は制限され、その内容もプラットフォームで異なります。通信は有無の二択ではなく断続的で、アプリの行いはすべて、利用者が見ている電池に課金されます。通信があることを前提にしたアプリ、バックグラウンドでも動き続ける前提のアプリ、終了時の状態のまま再開される前提のアプリは、開発中は完璧に動作し、実利用では奇妙に振る舞います。

最後に、二つのプラットフォームには本当に異なる作法があります。画面遷移と戻る操作、権限の仕組み、文字組みとレイアウトの規範、ライフサイクル、審査方針、リリースの道具立てです。クロスプラットフォームのフレームワークは重複するコードを減らしますが、両方を理解する必要をなくすわけではありません。抽象化が途切れる場所は、まさに利用者が気づく場所だからです。ジェスチャー、キーボードの扱い、通知、ディープリンク、アクセシビリティ、そしてハードウェアに触れるすべてです。

必要性の見極め

この能力が必要になる場面

モバイルの仕事は、アプリを外側の違うウェブサイトと見なす前提のもと、フロントエンドに最も近い人へ割り当てられがちです。以下は、その前提が高くつく状況です。

  • ウェブのチームにアプリの制作が求められた

    力量のあるエンジニアなら、何かを端末上で動かすところまでは概ね到達します。持っていないのは、リリースの実務、ストアの方針、プラットフォームの画面遷移の作法、バックグラウンド実行の制限、そして複数バージョンが同時に稼働する利用者層を前提に設計する習慣です。最初の審査差し戻しで、これが表面化するのが通例です。

  • 通信がなくても使えることが要件になった

    現場作業、物流、店頭、倉庫、移動中、電波の届きにくい環境。ローカルへの保存、操作の待ち行列、競合の解消、そして同期の状態を偽りなく示すことは、エンジニアリングであると同時に設計の問題であり、後から説得力のある形で足すことはできません。

  • 端末の機能そのものがプロダクトである

    カメラと読み取り、精度の高い位置情報やバックグラウンドでの測位、Bluetooth機器、生体認証、健康やセンサーのデータ。これらはプラットフォームごとに異なり、OSのバージョンで変わる権限の仕組みの背後にあり、汎用のクロスプラットフォーム層が最も早く限界を迎える領域です。

  • リリースの品質が代償を生み始めた

    特定の端末やOSバージョンに集中するクラッシュ、下がり続けるストア評価、あるいは公開してしまい素早く取り下げられなかった不具合。モバイルには、更新済みの利用者に対する迅速な切り戻しに相当する手段がありません。だから品質は、公開後に直すのではなく公開前に担保する必要があります。

  • 実機での性能が苦情になった

    起動が遅い、スクロールが引っかかる、バックグラウンドで終了させられる、電池の減りが目立つ。これらは代表的な実機の上でプラットフォームの計測ツールを使って切り分けるものであり、デバッガをつないだ最新の上位機種ではまず再現しません。

この領域について

中核となる能力

  • プラットフォームへの習熟

    各プラットフォームがアプリケーションにどう振る舞うことを期待しているかを知っていることです。画面遷移と戻る履歴の意味、アクティビティやビューコントローラのライフサイクル、権限の確認、システムの文字組みとレイアウトの作法です。これを無視したアプリは、理由を言葉にできる前に、利用者から「何かおかしい」と言われます。

  • ネイティブとクロスプラットフォームの判断

    コードの共有が実際に何を節約するのか、抽象化がどこで漏れるのか、漏れたときにネイティブへ降りる代償は何かを理解していることです。判断は、プロダクトのうち端末連携が占める割合、二つのプラットフォームでどれだけ挙動を変える必要があるか、そして誰が保守するかで決まります。

  • オフラインの挙動とローカルデータ

    ローカルの保存先を選び、何をどれだけ保持するかを決め、切断中の操作を待ち行列に入れ、サーバーへ届いた時点の競合を解消し、楽観的ではなく正直な状態を利用者に示すことです。同期は、モバイルアプリで最も難しい不具合が溜まる場所です。

  • 制約のある端末での性能

    起動時間、スクロールやアニメーション中の描画、メモリ逼迫とそれによる強制終了、画像のデコード、そして電池を消耗させるバックグラウンドの活動です。意味のある計測は、社内で最も新しい端末ではなく、古い中位機種から得られます。

  • リリースの実務

    署名とプロビジョニング、ビルドの種別、バージョン管理、ベータ配布、段階的公開、ストアの掲載情報、そして特定のクライアントを引退させる必要が生じたときに更新を強制できることです。モバイルの運用リスクの多くは、アプリのコードではなくここにあります。

  • ストア審査と方針

    各ストアが定める規則、すなわちプライバシーの開示、決済と課金の方針、権限の必要性の説明、掲載内容の要件、アカウント削除への対応の内側で作業し、審査の結果が計画上の突発事象ではなく予測可能なものになるように設計することです。

  • 通知とバックグラウンド処理

    各プラットフォームのサービスを通じたプッシュ配信、トークンの寿命管理、権限と同意、起動していない状態からの適切な画面へのディープリンク、そして遅延、まとめ実行、取り消しを行うOSを前提に書かれたバックグラウンド処理です。

  • モバイルのアクセシビリティ

    VoiceOverとTalkBackへの対応、意味のあるラベルと要素のまとまり、利用者が設定した文字サイズや動きの低減への配慮、十分な大きさのタップ領域、そして妥当なフォーカス順序です。モバイルのアクセシビリティには固有の作法と検証手段があり、ウェブの知識は一部しか転用できません。

  • 端末とバージョンの多様性

    どのOSバージョンと画面区分を対象とするかを決め、都合のよい範囲ではなく代表的な範囲で検証し、条件分岐の迷路をつくらずに機能差を吸収することです。

背景

技術エコシステム

モバイル開発で一般的に用いられている技術を以下に挙げます。これは業界で実践されている領域全体の姿を示すものであり、特定のエンジニアのスキルを示すものではありません。この領域でより多くを教えてくれるのは、候補者がどのプラットフォームで実際に公開し保守してきたかです。ストア、リリース、ライフサイクルの知識は、言語の知識と違ってプラットフォームに強く結びついているためです。

iOS

  • Swift
  • SwiftUI
  • UIKit
  • Xcode
  • Swift Concurrency
  • Combine

Android

  • Kotlin
  • Jetpack Compose
  • Android SDK
  • Android Studio
  • Coroutines

クロスプラットフォーム

  • React Native
  • Flutter
  • Expo
  • Kotlin Multiplatform
  • .NET MAUI

ローカルデータと同期

  • SQLite
  • Room
  • Core Data
  • SwiftData
  • Realm
  • WatermelonDB

端末向けサービス

  • APNs
  • Firebase Cloud Messaging
  • Crashlytics
  • Sentry
  • RevenueCat

テスト

  • XCTest
  • Espresso
  • Maestro
  • Detox
  • Appium
  • Firebase Test Lab

ビルドと配布

  • Fastlane
  • Xcode Cloud
  • Bitrise
  • TestFlight
  • App Store Connect
  • Google Play Console

Working model

この役割がお客様のチームとどう協働するか

エンジニアはお客様のチームの中で、お客様の優先順位と基準に沿って業務にあたります。日々の開発の方向性はお客様が決め、Talent.IDは雇用に関する責任を担います。下記の分担が取り決めのすべてです。

お客様が担うこと

  • プロダクト
  • 事業の優先順位
  • ロードマップ
  • アーキテクチャ
  • スプリントの優先順位
  • エンジニアリング標準
  • 日々の技術的な協働

Talent.IDが担うこと

  • 雇用関係
  • 給与支払い
  • 従業員福利厚生
  • タレント管理
  • 継続的な従業員関係

ご契約から参画までの流れ

想定される協働イメージ

実際の進み方の一例

協働のかたちをご理解いただくための想定シナリオです。実在のお客様や完了した案件を示すものではありません。

課題
あるチームが、新機能のロードマップを抱えながら両プラットフォームのアプリケーションを保守しています。クラッシュ報告は古い端末に集中し、オフラインの挙動は作り直しが必要で、リリースのたびにプロダクトへ充てたい時間が削られています。
進め方
増強された開発力は、チームが確立してきた実務の中で働きます。選定済みのアーキテクチャ、ブランチとレビューの規約、テストの方針、各ストアでのリリースの周期です。機能の優先順位とプラットフォームに関する判断は、引き続きアプリケーションを所有するチームが行います。
チームにもたらされるもの
保守とプラットフォーム対応を、機能開発と競合させるのではなく並行して進められるようになります。アプリをどうしていくか、どうつくるかは、その結果に責任を負う人たちの指揮下に残ります。

よくあるご質問

よくあるご質問

ネイティブとクロスプラットフォームのどちらで構築すべきですか。
プロダクトのうち端末そのものが占める割合によります。フォーム、一覧、コンテンツが中心のアプリケーションはコード共有によく合い、二度目の実装を省ける効果は本物です。カメラ、センサー、バックグラウンドの位置情報、Bluetooth機器、負荷の高い描画を中心に据えたアプリケーションは、その節約を橋渡しのコードとプラットフォーム固有の例外処理に使うことになります。判断を分けるのは、技術より次の二点であることが多いものです。誰が保守するのか、そして両プラットフォームで体験を意味のある形で変える必要があるのか。幅広い機能一覧を一人で担うならコード共有に、端末機能中心のプロダクトを各プラットフォームの専門職が担うならネイティブに傾きます。
ウェブ開発者がReact Nativeでモバイルアプリをつくれますか。
コンポーネントの考え方と言語が引き継げるため、序盤は速く進めます。引き継げないのは、実際に問題を起こす部分です。署名とストアへの提出、権限の仕組み、ライフサイクルとバックグラウンドの制限、オフラインの挙動、プッシュ配信、そして複数端末での検証です。ここで、慣れた記法によって節約できたはずの時間を、単独のウェブエンジニアは失います。フレームワークが差を埋めてくれると期待するより、ウェブの素養に、モバイルアプリを公開し保守してきた人を組み合わせるほうが確実です。
iOSとAndroidで別々のエンジニアが必要ですか。
ネイティブで構築するなら、多くの場合は必要です。ツールチェーン、言語、作法、リリース手順が十分に異なり、両方で本物の深さを持つ人は多くありません。コードを共有して構築するなら一人で両方を担えますが、フレームワークが扱えない場面に対応できるだけの理解を、誰かが各プラットフォームについて持っている必要があります。いずれにせよ、コードが共通だから同等だと考えるのではなく、二つのプラットフォームには別々の検証と別々のリリースの注意が必要だと捉えてください。
ストア審査は開発計画にどう影響しますか。
変更の完了から利用者に届くまでの間に、自分では制御できない可変の遅れが入ります。これを織り込むチームは、予測可能な周期でリリースし、次の版をつくる間も何かを審査に出しておき、再提出せずに挙動を調整できるようリモート設定やサーバー側の切り替えを用意します。無視するチームは、障害対応の最中にこの制約を知ることになります。学ぶ時期として最悪の瞬間です。
モバイルアプリには専用のバックエンド作業が必要ですか。
ほぼ常に必要で、想定より多いのが普通です。クライアントは要求に応じて更新できないため、APIはバージョン付けし、古い呼び出し元に寛容である必要があります。通知にはトークンを保持し配信を扱うサービスが要り、オフラインの同期には単純な読み書きではなく突合を前提としたエンドポイントが要ります。モバイルエンジニアはこれらすべてに見解を持ち、多くは実装もできますが、これはサーバー側の作業であり、そのように計画されるべきです。
モバイルアプリの健全性は何で測るべきですか。
クラッシュのない利用の割合、代表的な端末での起動時間、新しいバージョンへの移行状況、そして通知などの権限を許可した利用者の割合です。ストアの評価は遅れて表れる雑音の多い指標で、方向づけには使えても診断には向きません。最も見落とされやすいのはバージョンの移行状況です。ある不具合がどれだけ長く世に残るか、そして古いクライアントをいつ安全に引退させられるかを決めるためです。
モバイル開発者は既存のエンジニアリングチームとどのように働きますか。
御社の指揮のもとで働きます。御社のロードマップ、プラットフォームに関する判断、レビューの手順、リリースの予定です。技術的な所有権は移らず、開発チームの増強は開発を丸ごと外部に委ねる形式ではありません。日々の開発の優先順位や技術的な判断はお客様のチームが管理し、Talent.IDは雇用に関する責任を担います。雇用関係、給与支払い、従業員福利厚生、タレント管理、そして継続的な従業員関係です。

チームに必要なことをお聞かせください

どこに不足があるのか — 業務内容、技術スタック、チームの進め方 — をお聞かせいただければ、対応可能な範囲をお伝えします。ご支援が難しい場合は、その旨も率直にお伝えします。