[iOS 10] 必見!iOS 10時代のiPhoneアプリ開発見積もりの10個のポイント

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!おおはしりきたけです。本日iOS 10がリリースされましたね。iPhoneのアプリ開発も毎年増えてきており、クラスメソッドのモバイルアプリサービス部も年々人が増えており非常に嬉しい状況です。しかし、開発するにあたり対応するOSバージョン、端末なども益々増えて来ており、見積もりも難易度が増しています。今回は、iOS 10ということで、見積もり時に注意しておくべき10個のポイント書かせていただきたいと思います。

1.OSバージョン

iOSが2007年に発表されてから、はや9年経過しました。そこから現在まで毎年OSがリリースされて今日で、バージョン10になりました。開発する上で、OSのバージョンターゲーットをどこにするのかは非常に重要です。AppStoreでリリースされている有名なアプリがどのOSをターゲーットにしているのか幾つか調べてみました。App Storeのアプリをいくつか調べましたが有名ドコロのアプリはiOS 7以降なのでiOS 7から対象にしています。

ほとんどのアプリが、現時点ではiOS 8以上となっています。国内で様々なターゲットユーザーに利用されているアプリは、Xcode 8からはiOS 8以上が必須になりますし、クラスメソッドで開発しているアプリでも、現時点で開発対象はiOS 8以上にしていることが多いです。

2016年8月29日にAppleが発表したOSバージョンごとのシェア率は以下になります。

スライド1

iOS 8とiOS 9で97%のシェアが有り、今現在ではiOS 8以上の開発で行うのが良いと思います。また、iOS 10がリリースされ、今後iOS 8のシェア率も下がってくると思われるので、iOS 8のシェア率をみて下位のバージョンを決めるのがポイントとなります。

いつリリースするのか?

iOSは、6以降から毎年9月にリリースされています。特に9月にリリースしようとしているのに、最新OSを対応しないというのは難しいところですが、Beta版も配布されていない場合、どのような影響があるか把握できない状況なので、もし見積もり時にリリースが9月以降だけど、Betaがリリースされていない状況の場合は、別途対応にしておきましょう。

どのような機能を利用するのか?

例えば、iOS 10では10月末からApple PayでFeliCaが利用できるようになります。これはiOS 10かつiPhone 7でしか利用できない機能なので、一部機能がiOS 10かつiPhone 7の対応となります。また、iOS 9以上でしか利用できない機能や、iOS 10からATS の設定で「NSAllowsArbitraryLoadsInWebContent」という新たなキーが追加され、WebView 内で表示されるコンテンツに関して http での通信を許容するという設定項目が追加されました。ただし、この機能はiOS 10からしかサポートしていないので、各OS毎にどのような機能を提供するのかをしっかりと考える必要があります。

クラスメソッドではどうしているのか?

現時点で新規のアプリの場合は、必ずiOS 8以降にしています。お客さんからiOS 7も対応して欲しいという話もありますが、上記のシェア率やXcode 8ではiOS 8以上という説明をし、納得してもらって進めていくことにしています。

2.端末

9月にiPhone 6とiPhone 6 Plusが発売されついに、統一されていた横幅が変更されました。コレにより、位置を絶対値で開発していた開発者は修正に大変な時間がかかったことだと思います。4以降でも以下の端末があります。

機種 ディスプレイサイズ iOS 10対応
iPhone 4s 960×640px(326ppi) ×
iPhone 5 1136 x 640px(326ppi)
iPhone 5s 1136 x 640px(326ppi)
iPhone 5c 1136 x 640px(326ppi)
iPhone 6 1334 x 750px(326ppi)
iPhone 6 Plus 1920 x 1080px(401ppi)
iPhone 6s 1334 x 750px(326ppi)  ◯
iPhone 6s Plus 1920 x 1080px(401ppi)
iPhone SE 1136 x 640px(326ppi)
iPhone 7 1334 x 750px(326ppi)
iPhone 7 Plus 1920 x 1080px(401ppi)

ご覧のとおり、9月16日に発売される、iPhone 7と7 Plusを入れると、iOS 10に対応している10端末になります。iPhone 4sが対応外になりましたが、結局端末の種類とOSのバージョンの組み合わせで組み合わせはかなり増えてしまうので、開発を行う場合の保証する端末を明確に決めておく必要があります。全部のテストを全パターンやっているとキリがないので、ある程度網羅できる端末とOSの組み合わせのパターンで見積もりを行う必要があります。

何を気をつけておくべきか

新しい端末は対応必須なので、まずは、古い端末を何処まで対応するのか?を明確に決めておく必要があります。「対応しておくと良い」と言うのは、「対応しなくても問題ない」という意味にもなります。どこまで網羅して開発しなければならないのかという開発者の負担にもなりますし、テストの工数も増えますので、必要ない端末は、見積時に見切っておく必要があります

3.UIデザイン

UIデザインそのものが最初から決まっていることは少ないと思います。見積もり時のポイントは以下の点になります。

誰がデザインするのか?

全て自社でやるのか、デザイン会社さんと一緒にやるのか、クライアントさんがやるのか、などデザイン作業を誰が行うかによって気をつけておくべきポイントはいくつかあります。

  • どのツールでデザインするか
    • Illustrator、Photoshop、Sketch 3などどのツールで作成するのか。ツールは必ず合わせておきましょう。
  • パーツの切り出しは誰がやるのか
    • デザイナーがやる?開発者がやる?作業効率の良い方法で決めましょう。
  • 提供される拡張子は何か
    • PNG?PDF?何使うのかを決めましょう。
  • パーツの命名規約を決める
    • 例:メニュー画面のボタンがタップされた時:menu_btn_active.pngなどわかりやすい名前にしましょう。
  • 全体レイアウトも作成する
    • パーツだけではなく、全体レイアウトも必ず作成しましょう。

漏れがちな素材適用だから工数がかからないと思いがちですが、デザインが別のチームの場合は上記の作業を明確にしても、やり取りする工数というのはかかります。これらを加味してしっかり見積もりを行う必要があります。プロジェクトがスタートした後に、慌てて決めてバタバタするよりも、最初に認識合わせてデザイン側、アプリ側双方が気持ちよく仕事できる環境を整える必要があります。

どんなUIなのか?

どんなアプリでも、ユーザーのどのようなニーズに答えるためなのかというアプリの目的が決まっており、その上で要件に対する情報設計が行われていきます。もちろん情報設計は重要な作業の一つですが、弊社で成功するパターンとしては、関係者がしっかりとAppleが提供しているiOS Human Interface Guidelinesを理解しているかです。これにつきます。HIGを理解した上でどのようなUIにしていくのか検討していくとデザインの前提、効率含めて全然変わってきます。また、iPhoneとAndroidでUIの細かい部分が変わってくるので、こちらも想定して見積もりに入れておきましょう。

4.アニメーション(トランジション)

iPhoneは、画面が小さいのでアニメーション(トランジション)でオペレーションを補助するということも多々あります。画面が小さく、シンプルなUIになるiPhoneアプリでは、トランジションを効果的に使うことで、UXを高める事ができます。アニメーションやトランジションなども、最初から決まっていることは殆どありません。プロジェクトが進んでいき、アプリの画面を見せることで、「あのアプリのあの動き」という要望がでてくることも多いです。少なくともお客さんがが参考にしているアプリはあるはずですので、どのアプリのどの動きをイメージしているのかを事前にヒアリングしておきましょう。

OSSがあるか?

最近では、アニメーションやトランジションについては、OSSが提供されていることも多く、OSSを利用するのとしないのでは、工数に大きく影響がでてきます。iPhoneアプリ開発はスピードが重要です、そのために効率よく開発するには、OSSは欠かせません。

パラメーター調整の工数を甘く見ない

アニメーションにおいて、デザイナーと開発者のやりとりで一番かかるのがパラメーター調整の作業です。「もうちょいフワッと」、「ガッっと出てくる感じ」など擬音での会話が多くなりがちです。もちろん会話は必要なのですが、どうしても感覚的なものになってしまうため、可能であればデザイナーの方にGIFアニメやFlashでのアニメーションなどを作成してもらうと一気に効率的になります。

5.オフライン

iPhoneアプリでは、オフライン要件も出てくることがあります。オフライン要件で事前に検討しておくポイントには、以下があります。

オフライン機能は必要?

オフライン機能を実装する場合、アプリの根本的な前提条件が変わってきます。オフライン機能の実装が必要な場合、開発工数は確実に大きくなります。開発工数とユーザーへの効果を比較し、本当にそのコストを使ってまで、ユーザーに提供したい機能なのかをしっかりと検討しておく必要があります。

また、オフラインが必要な状況としては、以下が考えられます。この場合は、オフラインの検討が必要になります。

  • 地下や電車などオフラインが頻繁に発生する箇所で利用するアプリ
  • 地方の山岳部(工事現場等)で利用するアプリ
  • オンライン/オフラインが関係ないアプリ

オフライン時のデータの扱い

オフラインで利用するということは、アプリ内にデータを持つことになります。その場合、以下が検討しておくポイントになります

  • アプリ内でどのようにデータを持つのか
  • 暗号化の仕組みはどうするのか
  • データの同期はどうするのか
  • データをどのタイミングで削除するのか

上記は、UI、機能に直接関係ないですが、アプリ内の根本に関わってくるので、非常に重要なポイントに成ります。

6.アプリの状態遷移

バックグランドからの復帰後のアプリの挙動など、考慮されておらずテスト時に不具合となることもあったりします。検討漏れでのテスト時の不具合というのは手戻り以外の何者でもないので、状態遷移についても検討しておきましょう。iOSアプリの状態遷移をしっかりと把握しておき、力技の状態遷移ではなく、適切な動きにさせる必要があります。

iOSアプリの状態遷移

iOSアプリの状態は、以下になります

  • Not running」:アプリが起動されていないか、実行していたが、システムを停止させた。
  • Inactive:アプリがフォアグラウンドで実行されているが、利用していない状態
  • Active:アプリがフォアグラウンドで実行され、起動中
  • Background:アプリがフォアグラウンドには無いけど、まだ動作している状態
  • Suspended:メモリの保持はしているが、アプリは動作していない状態

high_level_flow_2x

どんな状態遷移があるか

  • ホーム画面からのアプリ起動
  • 別アプリからのアプリ起動
  • Push通知からのアプリ起動
  • オンライン時のアプリ起動
  • オフライン時のアプリ起動
  • ホーム画面へ戻る
  • 別アプリを起動
  • アプリをタスクから終了
  • ログイン/ログオフ/自動ログイン
  • アプリのバージョンアップ通知からの起動

等など考えるとキリがないです。例えばPush通知からのアプリ起動にしても、アプリを起動するだけなのか、通知されたメッセージによって起動画面を変えるのかなど、考慮する点は多々あります。こういった状態遷移から、アプリの挙動をしっかりと決めて各画面間の整合性を合わせておく必要があります。

7.エラーハンドリング

アプリでのエラー、サーバーから返却されるエラーによってエラーハンドリングを行う必要があります。これも何処までやるかによって変わってきます。

必要なのは適切なエラーハンドリング

エラーのケースを考えだすとキリが無いですが、必要なのはエラーのハンドリングを適切に行ない、アプリを使っているユーザーに適切なメッセージなり処理が行われているかが重要です。エラー系は開発の終盤になってこないとわからない部分も多いため、後々響いてくることもありますので、事前にある程度予測を立てておき、想定できるエラーなどを考えエラーハンドリングでどの位の工数が必要なのかを見ておく必要があります。

8.開発対象

開発対象というのは、機能はもちろんの事、作業範囲も含まれてきます。例えばデザインはどうする?外部のシステムとの連携はないのか?申請まで作業範囲なのか?運用はどうする?などになります。

機能の内容

iPhoneアプリ開発では上述したとおり、毎年のOSアップデートであったり、新しい端末がでたり、とにかく早くリリースするというのが重要になっており、完全に要件が固まっていないまま見積もり依頼が来ることも多々あります。そういう状況では、開発会社によって見積もりが大きく変わるパターンも多々あります。iPhoneアプリ開発でよくあるのが、開発しながら要件が変わっていく部分というのも良くあることです。見積もり時は、こちらの前提を記載し認識がずれないようにしておくことが大切です。要件がブレないようにするために提案時にProttなどでプロトタイプを作ることで、お客さんと認識を事前に合わせることができるようになってきました。

リリース申請

リリース申請の作業やリリースの準備作業というのは、そこそこの作業があります。こちらを開発側でやるのかもしっかりと認識合わせしておく必要があります。ライセンス自体を開発会社で取得するのか、お客さんが取得するのか、取得後のリリース申請はどちらが行うのかなど、事前に認識を合わせておきましょう。弊社ブログには、「よく分かる!iOS アプリのリリース手順のまとめ」として作業内容がまとまっていますので、是非とも見ていただければと思います。

9.開発対象以外の作業

開発対象以外の作業には、以下の様なものがあります。

開発ツール

タスクを管理するためのBacklogや、ソースコード管理のためのGithub、CI環境を提供してくれるTravisCI、プロトタイプを作るのに便利なProttなど便利な外部ツールも増えてきている状況で、どのようなツールを利用して開発するのかも、見積もり時には必要なポイントになります。無料のツールの方が良いように思えますが、自分たちで環境を構築してメンテンナンスする作業をするより、便利なツールがたくさん出ているので、どんどん利用したほうがいいと思います

ハードウェア

最近では、IoTも流行しており、ハードと連携するアプリ開発も増えて来ています。ハードは、借りることができるのか?こちらで購入しておく必要があるのかなども見積もりの注意点としておくべきです。

インフラ

クラスメソッドでは、サーバーサイドの開発を行う場合AWSを利用することがほとんどですが、開発期間中のサーバー利用費などは、見積もり時に見落としてしまう部分でもあるので確認ポイントとして置いておいた方が良いです。

サーバーサイドの開発

昨今のiPhoneアプリでサーバーサイドと連携がないアプリの方が少ないと思います。iPhoneアプリはあくまでViewで主な処理をサーバーサイドのプログラムで行うことの方が多くなってきているので、サーバーサイドの開発でどのようなことをやるのか等を決めておく必要があります。また、iPhoneアプリでは、Push通知からのリクエストが一気に来ることもありますので、性能をどこまで担保するかや、性能試験の方法なども事前に決めておいたほうが良いです。

交通費などの諸経費

遠距離のお客さんと仕事する場合、新幹線や飛行機などを頻繁に利用することもあります。人数と頻度で、大分変わってきますのでこういった部分も確認しておくポイントになります。

10.納品物

納品に対してドキュメンテーションの作業も必要になります。納品物として何が必要なのかをしっかりと認識合わせておきましょう。

設計書

設計書と一括りに言っても、外部設計書や詳細設計書など粒度の違うものがあります。納品物としてどのような設計書が必要で、それはどんなソフトで書いてどんな拡張子で納品するのかを明確にしておかないと、納品物を作るための作業が開発ボリュームを多く締めてしまい、本来ユーザーに提供されるiPhoneアプリに割ける工数も変わってきてしまいます。

ソースコード

ソースコードを納品する場合、githubで納品できるのか?プロジェクトファイルをCD-ROMに焼いて納品するのかなど方法は色々あります。また、そもそもソースコードを納品対象にしなければならないのかも含めて事前に確認が必要です。

まとめ

完璧な見積もりと言うのはできないと思いますが、上述したようなポイントを押さえて、見積の精度は上げられます。開発というのはコーディングだけではありません。設計書を書くこともあれば、プロジェクトを管理する工数も必要ですし、テストをどのように、何処までやるのかでも工数は大きく変わってきます。お客さんも開発者も一緒の楽しくプロジェクトが進められるように最初の前提をしっかりと認識合わせておきましょう。