Author Archives: 山口達雄

SaaSと別のシステムを連携させる方法

SaaSは別のシステムと連携できる

SaaSを導入すると、別のシステムと連携したくなることも多いかと思います。多くのSaaSではWeb APIによるシステム間連携のインターフェイスが用意されています。これを使うとSaaSもシステム間の接続が行えます。このWeb APIを利用した比較的小さなプログラムを作成することで、相当な自由度で連携が可能です。連携相手は、既存の業務システム、別のSaaS、ExcelマクロやAccessで作った自社ツールなどになるかと思います。少し応用して、メールの受信から自動的にデータを登録したり、特定のイベント(例えば登録されたデータが一定の閾値を超えたときや、特定の状態になったとき)にメールやSMS(ショートメッセージサービス)を送信したりすることもできます。

saasイメージ図

Web APIとは何か

前述のとおり、SaaSには多くの場合システム間連携用のWeb APIが提供されています。Web APIとは、別のシステムからそのサービスのソフトウェア機能を呼び出すための窓口(プログラムインターフェイス)のことです。これにより、外部のシステムから、データ登録や取得、システム機能の実行など、SaaSが提供する機能を呼び出すことができます。

通常のWebのインターフェイスもWeb APIも、そのサーバーの実装からすれば外部から呼び出されるという点では同じです。通常のWebとWeb APIの技術的な違いは、Webは提供相手が「ブラウザ(を操作する人)」であるのに対して、Web APIは「別のシステム」である点になります。Web APIは、ブラウザに表示する画面そのものであるHTMLではなく、処理結果のデータだけを返却します。

Web APIの方式

現代のWeb APIはRESTと呼ばれる方式が最も一般的です。RESTは、多くの場合JSONと呼ばれるごく単純なリクエストとレスポンスを前提に機能呼び出しを行う仕組みです。
対してSOAPと呼ばれるXMLベースの仕組みも存在します。SOAPはXML技術とともに20年ほど前に流行した方式です。
SOAPは業務利用を強く意識された設計で、サービスの機能を言語化する技術も用意されました。高機能であり、自動的な接続を志向する節もあり当時は近未来的だったのですが、システム間連携を行うだけの用途なら高機能すぎて使いにいとされ、よりシンプルで現実的なRESTにほぼ置き換わってしまいました。これは残念なことなのですが、ソフトウェアエンジニアリングの業界全体で、自動的なシステム間接続はあきらめた(方向が違った)ということだと思います。
RESTを採用するWeb APIは、パラメータの形式、レスポンスの具体的な形式に厳格な規範はありません。システム毎にエンジニア向けのドキュメントが作成され、それを利用者(エンジニア)が読んで呼び出しプログラムを作成することになります。

Web APIの認証

サーバーが正しいユーザーであることを適切に判定する方法「認証」は、Web APIを提供するサービスにより個別に設計されています。とは言っても多くの場合、SaaSが専用のAPIや別の方法でIDとシークレットキーを発行し、呼び出し側が全てのAPIの呼び出し毎にこの2つをサーバーに送信する方式が一般的です。シークレットキーはパスワードに相当する概念ですが、長いランダムな文字列が採用されます。このシークレットキーはもちろんSSLで暗号化された通信で受け渡しが行われます。

システム連携の他の方法

SaaSのシステム間連携では、Web APIではなくファイル転送により連携する方法が採用されていることもあります。ファイルを渡すことで、そのファイルを処理するのです。システム間でファイルを渡す方式は次の4パターンが一般的なのですが、SaaSでは多くの場合(1)か(2)が採用されています。

  • (1)POSTによるアップロード
    ブラウザベースのWeb画面でファイルをアップロードするときと同じテクノロジによる手法です。SaaSのサーバープログラムはアップロードされたファイルを受け取り、ファイルを処理します。
  • (2)SFTPによるファイル転送
    SFTPと呼ばれるセキュアなファイル転送プロトコルを使ってファイルを渡す方式です。サーバーはファイルを受信したら、その受信自体や別のWeb API呼び出しを契機にファイルを処理します。
  • (3)AWSのS3を使う方法
    Amazon Web Services(AWS)のストレージサービスを使う方法です。バケット(保存先)、アクセスキー、シークレットキーの3点の情報を元にファイルを送信できます。サーバーはファイルの到着を監視するか、別のWeb API呼び出しを契機に処理を開始します。
  • (4)その他のツール
    上記以外にもいくつかのベンダーからシステム間連携に使えるファイル転送ツールが提供されています。これらのツールは過去に上記(1)~(3)が存在していなかったりまだ一般的ではなかったころの名残りなのですが、安定動作や障害対策の仕組みが加わっておりSaaS以外のシステム間連携では根強く使われています。

SaaSのフォーム入力データの連携で注意すべきこと

SaaSでフォーム画面等で入力・更新を行ったデータを外部システムに連携する場合、更新日時を利用して連携の要否を自動判定するケースが多くなります。このときデータの削除の連携には注意が必要です。SaaSからデータを削除すると単に削除されるだけのケースが多く、その場合はこの「削除」した事実を他のシステムに連携する方法がないのです。データの削除を他のシステムに連携する際は、データを物理削除せずに論理削除することで、データ削除を更新として連携する等の工夫が必要になります。

障害時を想定した設計が必要

SaaSは連続稼働が前提となっていない場合が多いです。SaaSではよく稼働率が明示されていますが、例えば稼働率は99.9%以上と明示されている場合、1ヶ月間では43分ほど停止しても基準内ということになります。夜間にメンテナンスのために計画停止するケースがあるのはもちろんのこと、障害により日中に停止するケースもあり得ます。
システム間のデータ連携を自動化する場合は、SaaSが停止することも考慮して設計する必要があります。データを漏れなく取得するのであれば、どこまで取得したかを別の仕組みに記録し、そこから開始する方法が有効です。データを漏れなく登録するのであれば、エラーが発生することを前提に自動的なリトライを行うなどの仕組みを検討することになります。また、エラー時に自動復旧が難しい場合は、システム管理者に自動で障害を伝えるメールやSMSを自動送信する等の方法も必要になります。

システム間連携の運用方法

システム間の連携はクラウドで実行する方法が最も一般的です。もちろんクラウドで自動実行する場合は、そのサーバー自体もハードウェア障害等で停止する可能性があるので、万全を期す場合はクラウドのサーバーも二重化し単一障害点を作らない方法を採用します。この場合、2台のサーバーが協調して動作するように設計します。処理時間が長くない場合、DBを使うとこれを実現できます。処理の開始時に特定のレコードをロックし、ロックできたら処理を実行し、完了したらロックを解除する方式をとるのです。これにより2つのサーバーで同時実行を避けつつ、片方のサーバーが障害で停止しても、システム間連携を安全に稼働させることができます。
連携の実行が手動で良ければ、Windows PC用に連携プログラムを作成する方法もあります。手作業にはなりますが、連携プログラムが実行結果を表示するようにすれば、成功・失敗を実行時に確認できるので運用も簡単です。

PR

コンポーネントデザインでは、SaaSシステムと既存システムの連携の開発を承ります。連携する内容や業務の重要性に応じて費用対効果も勘案した方式をご提案します。システム間連携は小規模で短期間で提供できる場合が多くなります。どうぞお気軽にお問い合わせください。

業務システムのデータベース設計

業務システムの開発において、データベース設計はシステム全体の優劣やコスト、さらにはシステムの寿命をも左右する重要な作業です。このコラムでは、データベース設計で重視すべきことを解説し、設計の手順と作成すべきドキュメントについて説明します。
データベースイメージ図

【データベース設計で重要なこと】

業務システムにおいて、データベース設計で重視すべきポイントは次の3点です。

  1. 1.将来性に影響:自然な構造で適切に正規化されており、現実のデータ構造と乖離がないこと
  2. 2.生産性に影響:理解しやすい構造であり、ドキュメントが整備されていること
  3. 3.安定稼働に影響:性能確保や排他制御、大きすぎないサイズ等、システムの実行面で無理がないこと

以下、1つずつ解説します。

1.将来性に影響:自然な構造で適切に正規化されており、現実のデータ構造と乖離がないこと

業務システムは運用を開始した後も業務の見直しなどにより変更の要求が発生することが普通です。変更の要件がデータベースのデータ構造に及んだ時、元の構造が適切に正規化されていて、かつ現実のデータ構造と乖離がないようにすると、無駄な変更を抑えることができます。以下に簡単な例を挙げて説明します。

★実業務の概念とデータベース設計に乖離がある悪い例
zaiko2
※商品と部品が1つのテーブル「在庫」で管理されています。
システムが小さいうちは問題になりにくいのですが、次のようなときに設計の見直しが必要になってきます。
・商品の場合に必要な項目を追加(例:売価)
・部品の場合に関係を持つ別テーブルの追加(例:調達先)

★正規化ができていない悪い例
table_sample3
※この例ではオプションのIDと料金が2組になっています。
将来オプションの管理項目(例えば、オプション半額キャンペーン適用)が増えたり、オプションの設定可能数が3点以上に増えたりすると、システムの変更規模が大きくなります。

2.生産性に影響:理解しやすい構造であり、ドキュメントが整備されていること

データベースにアクセスするプログラムを設計・実装するには、そのシステムのデータベース構造を理解する必要があります。勘違いがあると致命的なバグを作りこむ可能性が高くなるからです。データベースが自然で理解しやすい構造で、またドキュメントがしっかり整備されていると、プログラム開発時の生産性を確保しやすくなります。

補足:データベース設計書の重要性
データベースの設計書は他の設計書より重要です。例えばプログラムの仕様は、ある程度の業務理解があれば、開発環境で動作させて概要を把握しコードを読んで詳細を把握することができます。しかしデータの状態がシステム全体にどのように影響するかは、ビジネス要件やテーブルのDDL(テーブル作成のときに使う定義文)、プログラムコードから読み取ることは難しいのです。概ね分かっても、気づいていないルールがあるかもしれないという不安が残るのです。

3.安定稼働に影響:性能確保や排他制御、大きすぎないサイズ等、システムの実行面で無理がないこと

データベースは、どんなに理論的に正しくても無理な箇所がないように設計しなくてはいけません。例えば次のような事象を避ける必要があります。

  • (たとえ現実にフィットした構造でも)関係が複雑すぎてデータ取得のクエリー(SQL)が複雑になってしまう
  • テーブルのデータ件数が多すぎてクエリーの実行速度が確保できない
  • (テーブルの項目数が多い場合に)検索対象が多すぎてインデックスのサイズが大きくなりすぎる

【データベース設計の進め方】

1.データベースの知識を得る

大前提としてデータベースの仕組みをよく理解する必要があります。一般ユーザー向けに作られているツールとは違い、データベースシステムは簡単を目標にしたものではありません。使う側のエンジニアがデータベースシステムをよく理解したうえで適切に利用することが前提となっています。
このコラムで扱っているデータベースとはリレーショナルデータベース(関係モデルのデータベース)を指しているのですが、そもそもリレーショナルデータベースは「性能が出にくい」かつ「癖が強いもの」なのです。
データベースの設計の良しあしはシステム全体の良しあしに波及するため、業務システムの構築にあたっては知識が不足した状態でデータベースの設計に手を出すべきではありません。もし十分な知識や経験がないのにデータベース設計を行うのなら、必ずデータベースをよく理解し、経験を積んだ上級エンジニアの指導やレビューを受けてください。

2.業務とシステム仕様を理解する

「データベース設計で重要なこと」でデータベースは自然な構造になっていることが大事だと述べました。自然な構造に設計するには、業務とシステム仕様を十分理解していることが必要です。例えばシステム仕様は理解したが、その背景の業務が分からない状態でデータベース設計を行うと、初期実装は無事に完了するかもしれませんが、データ構造が現実と乖離する可能性が高く、少々の変更で変更コストが跳ね上がるシステムができるかもしれません。よいシステムを作るために大事なのは「動けばいい」と考えないことです。「あるべき姿」を常に模索する必要があるのです。

3.テーブルを見いだす

データの管理単位であるテーブルを見いだす作業を行います。テーブルは商品、売上、売上明細、等のデータの管理単位に合わせます。データの用途が説明しやすい1つの単位であり、データの単位が明確であることが条件になります。データの単位とは、「売上」の発生毎に1件、売れた商品毎に1件などのデータの発生・管理単位のことです。

4.テーブルの主キーを設定し、テーブル間の関係を明らかにする

この作業がDB設計のヤマ場です。次の4-1~4-5を行います。

4-1.見いだしたテーブルに主キーを設定する

主キーとはテーブル内の1データを一意に決定する項目のことです。
主キーは業務で使うデータ項目をそのまま指定するナチュラルキーと呼ばれる手法と
主キーのために項目を追加するサロゲートキーと呼ばれる手法があります。
ナチュラルキーは業務データそのものであるため分かりやすい反面、いくつかのデメリットがあるので採用するときは気を付けて下さい。
・主キー項目の更新がしにくい(例:メールアドレスは会員をユニークに識別できますが、変更の可能性があります。主キーは他のテーブルからのそのデータを参照するためによく使われます。つまり値を変更する用途に向いていません。)
・主キーが複数の項目からなる複合キーになりがちでクエリーがその分長くなる
・ユニークに見えても実は違う可能性がある(例:書籍のISBNコードは使い回されていることが知られています)
・将来の運用が不明な場合がある(例:部門コードは部門に対してユニークに設定されるでしょうが、未来永劫までユニークに運用されるとは考えない方が無難です)
明確にナチュラルキーが良いと確信できるとき以外はサロゲートキーを使うことをお勧めします。

4-2.テーブル間の関係を明らかにする

テーブル間の関係を明らかにします。1:1、1:Nの関係が基本となります。N:Mの関係は中間テーブルを使い、1:Nの関係に整理します。
テーブルの関係はER図に整理・記述します。ER図はテーブル内の項目を記述することが一般的なのですが、全体が表現しにくい場合は、項目の記述を省略してテーブル名のみを書く方法で良いと思います。項目の表記より全体を見渡せることの方がデータベース構造の理解のために重要だからです。

4-3.正規化の観点でテーブル構造を見直す

テーブルの関係性を設計する際、データの重複をなくし矛盾が発生しにくい整理された構造とするために、正規化の概念が役に立ちます。正規化では、繰り返し項目を別テーブルにし、従属する内容(たとえば、売上明細における商品名)を別テーブルに切り出す等の作業を行います。
正規化は杓子定規に行うのではなく、現実を踏まえて判断します。たとえば、自社の採用活動をシステム化するなら、転職歴が少ない人のみを採用する会社であっても応募者データと職歴データは別テーブルにすべきだと思いますが、連絡先電話番号を最大2項目登録可能とする場合は、将来3項目以上に増やす可能性は低いので、繰り返しの項目ではあるのですが別テーブルには切り出さずに、応募者テーブルに2項目用意する方が単純で望ましいでしょう。

4-4.物理的に無理がないか検討し、現実的な構造に調整する

データ件数が多すぎたり、項目数が多すぎたりする箇所を調整します。また、テーブルに格納するデータに偏りがある場合もテーブルの分割を検討します。
いくつか例を挙げます。

・スマホを使った会員システムで、様々な条件で会員を選んで記事を配信する場合、どの会員にどの記事を配信するかをテーブルに格納することになりますが、このテーブルは(記事×配信対象)の件数になります。例えば、このテーブルを会員IDと記事IDの2項目にすることで(つまり他の項目を配置しないことで)テーブルのサイズを小さくできます。また、記事のタイプ毎にテーブルを分ける方法で、1テーブルの件数を抑える設計も考えられます。

・例えば多数の個人情報の項目を持つ会員テーブルを考えるとき、多くの会員は個人情報を記録せず、一部の会員だけが個人情報を記録するなら、個人情報を個人情報テーブルに切り出すと会員テーブルが扱いやすくなります。

4-5.参照整合性制約を設計する

テーブル間で参照整合性制約を設定するかを決定します。参照整合性制約とは、参照されているデータは存在が必須であり、また削除できないようにする制約です。たとえば、商品カテゴリAを参照している商品データBBBがあるとき、Aは存在している必要があり、参照されている限り削除できません。

5.テーブルの項目を整理し、検索に使う項目にインデックスを設定する

テーブルに全ての項目を配置し、項目に適切なデータ型、ユニーク制約、NotNull属性を決定します。さらに外部キー(主キーを参照する項目)と検索で使う項目にインデックスを設定します。
尚、ユニーク制約は本当にユニークになるのかを確認してください。例えば会員テーブルで退会者のデータを消さずに残す場合、同じメールアドレスで新規登録を受け付ける必要があるかもしれません。
項目値が入らないケースが多い項目にインデックスを設定するときは、NULLを許可することでインデックスのサイズを抑えることができます。(NULLはインデックスに記録されないからです。この仕様はDBによって異なります。お使いのDBの仕様を確認してください)

6.排他制御を設計する

デッドロックが発生しないようにデータ更新時の具体的な排他制御の方法を設計します。どのようなときにトランザクションを使い、どのレコードをどのようにロックするか、どのようなときに楽観的な排他制御を行うのかを設計します。

【データベース設計のドキュメント】

データベース設計は開発者全員が理解することが非常に重要です。そのためデータベース設計書のドキュメントは開発に参加する全員(少なくともデータベースにアクセスするコードを書く全員)が読み込むので、コストをかけてでも良好なものにする価値があります。

1.ER図

テーブル間の関連を書いた図です。私は下から上に参照するように(1:Nなら1が上、Nが下)書きます。書き方にはいくつか流儀があるのですが、大事なのは全体が見渡せることと、構造が理解しやすいことの2点です。
例を示します。

※悪い例(参照の方向がばらばら)
er_bad3
見ただけでは構造が把握しにくいのではないでしょうか。直したのが次の例です。

※良好な例(参照の方向が同じ)
er_good
どうでしょうか、関係が理解しやすいと思います。ある程度テーブル数が増えて、関係も増えてくるとテーブルとテーブルを結ぶ線が引きにくく、配置も難しくなります。なかなか骨の折れる作業なのですが、ハコの位置を調整したり書き方を工夫して理解しやすくすべきです。かけた以上のメリットが得られると思います。プロジェクトに参加するエンジニアが多いならなおさらです。
また、一般にER図の要件ではないのですが、テーブルの分類にあわせて色分けしたり、注意が必要な箇所にコメントを書くと、より理解しやすいER図になります。

2.テーブル設計書

テーブルと項目の設計書です。テーブル設計書は1テーブル毎に書くのではなく、全テーブルを1つのExcelシートに記述すると全体を見渡しやすくて便利です。また、コード設計は別資料に書くことが一般的なのですが、テーブル設計書に記述したほうが実装時の効率が良くなります。

3.排他制御ルール

複数のテーブルをまたがって整合性を保つ必要があるときはトランザクションとレコードロック等を使った排他制御を行うのですが、この排他制御はシステム全体で統一がとれていないとデッドロックが発生します。そのため、プログラマが守るべき排他制御のルールのドキュメントを作成します。※ロックについては別のコラムで解説します。

4.CRUD表

CRUD表はテーブル毎のレコードのCreate,Read,Update,Deleteがいつ行われるかを記述したマトリクス表です。これはデータの作成や更新のタイミングが分かりにくいときに作成します。CRUD表は単に作るだけの資料になりがちなので、作成前に本当に必要かどうかを考えると良いでしょう。

上記以外にも、事象に応じて保存データの状態が変わる場合や特徴的な要素があるときは、補足の説明資料を作成します。

【まとめ】

業務システムはデータベース設計の良しあしで決まると言っても過言ではありません。また、設計を理解しやすくするためのドキュメント類も重要です。業務システムの開発ではいろいろなドキュメントを作成しますが、最も重要なドキュメントは何かと聞かれれば、私は真っ先にER図とテーブル設計書を挙げます。この2つは完璧さが常に要求されます。

PR

私たちコンポーネントデザインでは、上級のエンジニアがお客様の業務に合わせて優れたデータベースを設計致します。お気軽にお問い合わせください。

Excelマクロ(VBA)からWebサーバーにアクセスするシステム

Webシステムのクライアント側(PC側)をExcelマクロ(VBA)で実装すると、表形式のデータをExcelシートで扱えるため、利便性の高いシステムを実現できます。

どのような方式か

Webシステムとはインターネットで利用できるシステムのことを指します。最も一般的なWebシステムはクライアント側にブラウザを利用しますが、Webシステムはブラウザが必須なわけではなく、このコラムでご紹介するようにExcelを使って実現することもできます。
(注:ブラウザで動作しているシステムがそのままExcelで動作するわけでありません)

Webシステムでブラウザを使う場合、ブラウザはサーバーが用意したHTMLを表示しJava Scriptで画面制御を行うことでユーザーインターフェイスを実現します。Excelを使う場合は、Excelマクロでサーバーから取得したデータをExcelシートに配置したり、ダイアログと呼ばれる画面を用いてユーザーインターフェイスを実現します。

Excelでファイルを開くときに「参照」ボタンのクリックでポップアップ表示される画面がダイアログの一例です。Excelマクロで独自デザインのダイアログを作成できます。

ブラウザを利用する場合のサーバーは、クライアントの要求に応じてHTMLを組み立ててレスポンスを返しますが、Excelを使う場合はクライアントの要求に応じて、HTMLではなく処理結果やデータだけを返す方法となります。Excelマクロはサーバーから取得したデータをExcelシートに貼り付けたり、表示を変更するわけです。

何が優れているのか

ユーザーの操作対象がExcelなので表形式のデータ操作に優れています。例えば指定した条件に合致する顧客データや売上データなどをExcelシートに取得できれば、Excelの機能を使うことでグラフを表示したり別のシートに転記したりすることが簡単です。

サーバー呼び出しはマクロで動作するので、一度システムができてしまえば、データ取得後に定型の業務処理、例えば月次の売上集計表をグラフ付きで別のExcelブックに出力し、関係者へのメール送信や印刷まで自動化するなど、業務に合わせた後からの拡張も難しくありません。

サーバー側の実現方法

サーバー側の開発はブラウザを使うシステムに比べ、画面(HTML)の作成を行わない分シンプルです。具体的にはExcelマクロから呼び出されるAPIを開発・配置することになります。APIの呼び出しはブラウザ用のシステムと同様に暗号化を伴うHTTPS通信が使えます。返却するデータはHTMLではなくJSONと呼ばれるシンプルな形式です。APIは(1)要求を受け付けて(2)サーバー処理を行い(3)結果を返すものなので、要件が合うならExcelに限らず他の用途、例えばシステム間の連携と共用できます。

ログイン画面と認証

ログイン画面はExcelマクロで表示する方法がよいでしょう。利用者によりユーザーIDとパスワードが入力されログインボタンがクリックされたら、ExcelマクロからサーバーのログインAPIを呼び出します。サーバーのログインAPIは、Excelマクロから受け取ったユーザーID・パスワードをあらかじめデータベースに格納してあるものと照合することでユーザーを認証します。

認証が成功したら、サーバーAPIではトークンと呼ばれる長いランダムキーを生成し、データベースにユーザー情報と紐づけて保存してからレスポンスとして返却します。

トークンはExcelでもログアウトするまで管理し、ログイン以外の全てのAPI呼び出し時にパラメータとしてサーバーに送信します。サーバー側ではこのトークンを確認することで認証したユーザーであることを識別するのです。

※パスワードは万一の漏洩を防止するため、平文ではなくハッシュ化したデータを保存する方法をとります。
※トークンには有効期限を設定することが一般的です。トークンの有効期限は操作性とセキュリティの要件に応じて設定します。トークンの有効期限が切れると、そのユーザーのサーバー呼び出しは失敗するので、ログインしなおす操作が必要になります。

自動アップデート

ブラウザベースのシステムはプログラムの実装は全てサーバー側にあるため、システムの更新はサーバープログラムの更新で行えますが、Excelを使った場合はExcelマクロの更新時はそのExcelブックを配布する必要があります。

Excelブックは手動で配布する方法もありますが、PCの台数が増えてくると運用コストが増加するため自動化が理想的です。アップデートの自動化は次をExcelマクロで実装し、ファイルをダウンロードするAPIと最新版のExcelブックをサーバーに配置することで行えます。

  • (1)Excelマクロ起動時にサーバーにファイルの最新バージョンを問い合わせる
  • (2)APIで必要なファイルをダウンロード
  • (3)ダウンロードしたファイルを差し替え

(3)はExcelマクロ実行中のファイル差し替えはできないので、ローカルに配置したVBScriptで行います。このVBScriptはExcelの終了を待ってファイルをコピーし、Excelブックを起動しなおす簡単な内容です。

(1)はバージョンを問い合わせるAPIを実装しても良いのですが、最新のバージョン情報を記録したテキストファイルをサーバーに配置し(2)のAPIでダウンロードする方法をとるとシンプルです。

開発コスト

Excelマクロ(VBA)はプログラミング言語としては、他の最近のプログラミング言語(C#, Swift, Kotlin等)に比べると機能面で劣りますが、複雑なプログラムを書くのでなければ生産性やメンテナンス性に大差はありません。逆に開発後にエンドユーザーが(希望するなら)自力でメンテナンスできる点で優れています。

システム全体の開発コストは仕様次第ではあるのですが、Webシステムと比べて大きくは変わらないと考えてよいかと思います。また、Excelの機能を活用する部分に限っていえば大きくコストダウンできます。

PR

コンポーネントデザインではExcelを使った業務システムの構築、メンテナンスを受託致します。お気軽にご相談ください。

お客様が表や式、マクロ等を利用して作成したExcelブックをベースに、データをサーバーに反映したりサーバーのデータを自動で取り込んだりする仕組みを追加できます。新規のサーバーではなく既存システムとの連携も可能です。(多くの場合、既存システム側の変更が必要です)
私どもでExcelブックのデータをサーバーに登録したりサーバーのデータをExcelブックに自動取得する仕組みを開発することで、その後お客様が自力で表やマクロでデータを活用する「エンドユーザーコンピューティング」のお手伝いができます。

要件定義書/提案書を作成してもらうことで、システム開発の失敗を避ける方法

エンドユーザー企業が、システム開発を発注するとき、最も注意すべきトラブルは、意図したシステムができないことだと思います。
有効な回避策はたった1つだけです。
「発注前に仕様が明記された資料をベンダーとユーザーで共有すること」
これにつきます。

f17f3eb2c785b453dd685ff13ef9e4b7_m

【どうして意図したシステムができないトラブルが発生するのか】

意図したシステムができないトラブルは、ユーザーの期待とベンダーの予定がかみ合わないときに発生します。この状況に陥ったプロジェクトのほとんどは、見積もりが大きく不足しています。

「見積もりが大きく不足したシステム開発」ほど最悪なプロジェクトはありません。予算も期間も不足するため、様々な問題が発生します。

ベンダーの企業体質やプロマネの資質が良好ではない場合、実際に予算と期間が不足すると、ベンダーはコストを下げるために躍起になります。開発途中で気が付いた課題があっても、わずかでもコスト増になりそうな提案は行われず、安価かつ安易な解決方法が選択され続ける場合すらあります。

※良質なベンダーはきちんと対応します。そもそも良質なベンダーは、仕様未策定の状態で見積もりを提示することはありません。

プロジェクトの途中で抜本的な対策が行われれるか、小手先の手法でまっとうな品質のシステムが完成するなら、まだ運が良いほうです。ただただ無理を押し通して、品質の悪いシステムが完成するケースを実際に見かけます。

「ベンダーが悪い」といえばその通りです。しかし、システム開発は事業目標の達成手段であることが普通で、計画どおり進まないのは何としても避ける必要があります。

【要件定義と提案書】

まっとうなベンダーであれば、システム開発を受注する際、システム規模が大きければ「要件定義」と呼ばれるシステム要件を明確化する作業フェーズを提案してきますし、逆に規模が小さければ「提案書」と呼ばれる資料を作成します。一般に前者は有償で、後者は無償で提供されるサービスです。

この要件定義書、または提案書で、ある程度荒い「仕様」を整理することになります。要件定義も提案書も決まったフォーマットはなく、作成者が個別に形式を吟味して作成するものです。

要件定義書、提案書は、「(1)どのような仕様のシステムを作るのかを明らかにすること」と、「(2)システムの開発規模を固定すること」の2つの目的を達成するために作成します。これに価格や納期の情報などが加わることで、以降の開発契約が可能になるのです。

ユーザーは、要件定義あるいは提案書の仕様案を確認することで、安心して発注することができます。

仮に上記を端折った場合、発注側からみれば要望通りのシステムが完成するかが曖昧であり、受注側からみれば、開発規模が不明であることになります。

【仕様不明確のまま見積もりを入手した場合】

たとえベンダーが仕様未確定で見積書を出してきても鵜呑みにせず、仕様案を要求すべきかと思います。要求すべきは、見積もり根拠等ではなく仕様案です。もし、無償で提案書を作成するベンダーが見つからなければ、有償でも作成すべきです。

※小規模なシステム開発なら無償で作成してくれるベンダーが見つかるはずです。

システム開発フェーズの上流工程である要件定義あるいは提案書作成は、単に構想をシステム化するための初期作業というだけではなく、契約のために必要不可欠なフェーズなのです。

【要件定義/提案書の内容】

ここで一つ絶対に避けるべきパターンがあります。要件定義書あるいは提案書に、要求事項が書かれていて、どう具体化するかが書かれていないケースです。

ベンダーに提案を依頼するときの文書(いわゆる提案依頼書)であればそれでいいのですが、要件定義や提案書に要求事項だけが書かれている場合、「どのような仕様のシステムが完成するのか」も「開発規模」も明らかではないことになります。

例えば「在庫を的確に把握できること」は単に要求事項であり仕様案ではありません。

  • 単に在庫の一覧が表示できれば良いだけかもしれません。
  • 適切な分類ごとに数量と、平均の滞留期間をグラフ化する必要があるかもしれません。
  • そもそも在庫を正確に把握するために入出庫を把握する仕組みから見直す必要があるかもしれません。

適切な要件定義書や提案書では、「在庫を的確に把握するための具体的な方法」が明らかにされます。詳細な設計書である必要はありません。少々荒くても画面の簡易スケッチと機能の説明が書かれていれば、大トラブルは避けられます。

一般に提案書は要件定義書より精度が劣りますが、この点については、提案書を受け取ったときに、打ち合わせで提案書をめくりながら細かく質問して埋める方法が良いでしょう。質問の大部分は「後から決定しても大丈夫」等の答えが返ってくるはずです。もちろん、質問の内容次第では、要件定義書や提案書の手直しが必要になるケースもありますが、それは必要な作業です。焦らず資料の更新を待ってください。

PR

コンポーネントデザインでは、要件定義からシステム開発を受託しております。お気軽にお問い合わせください。

スマホアプリ・タブレットアプリのOSバージョンアップ対応

 スマホとタブレットのOSは定期的にバージョンアップが行われます。アプリを継続的に使えるようにするためには、OSのバージョンアップにあわせた対応が必要です。
f17f3eb2c785b453dd685ff13ef9e4b7_m

iOSのメジャーバージョンアップ

 iOS(iPhoneおよびiPadのOS)のメジャーバージョンアップはおおよそ1年ごとに行われています。iOSアプリの前方互換性は低く、OSのバージョンアップでアプリが動作しなくなるケースは多く見られます。
 通常、アプリを新しいOSに対応させるには、そのバージョンに対応した開発キット(Xcode)を利用します。Xcodeには変更すべき箇所を警告表示する機能がありますので、この警告に対して修正を行います。この警告表示は万全ではありませんので、1機能ずつ動作させながら修正が必要な箇所を探す作業も必要です。
 推奨していませんが、新しいXcodeへの乗り換えは行わずに、新しいiOSで発生する問題点だけを探して修正する方法もあります。発見しきれなかった問題が残る可能性はありますが、アプリの運用は可能です。もちろんコストは低く抑えることができます。

Androidのメジャーバージョンアップ

 Androidも年に1回程度のメジャーバージョンアップが行われています。iOSとは異なりAndroidの前方互換性は高く、私たちがリリースしたアプリで、OSのバージョンアップにより問題が発生したケースはわずかです。
より高い品質を目標にする場合はiOSの場合と同様に新しい開発ツールを使ってテストを行います。

マイナーバージョンアップ

 iOSもAndroidもマイナーバージョンアップと呼ばれる小規模の改訂が頻繁に行われます。マイナーバージョンアップで不具合が発生する可能性は低く、私たちがリリースしたアプリでは、問題が発生したことはまだありません。
 マイナーバージョンアップに対しては何も計画しないことが多いのですが、アプリの重要度が高い場合は、定期的にテストを行うと安心です。全ての詳細なテストが高コストな場合は、重要な機能のみテストする方法も有効です。

具体的な対応案

 具体的な対応案を3つ挙げました。最も一般的な対応は2です。アプリの重要度にあわせて検討すると良いかと思います。

  1. 1.低コストで対応する案

     iOSおよびAndroidのメジャーバージョンアップ時
     → 新しい開発ツールの適用は行わずに、詳細な動作テストのみを実施。

     iOSおよびAndroidのマイナーバージョンアップ時
     → 問題が発生しない限り特に何もしない。

  2. 2.最も一般的な対応案

     iOSのメジャーバージョンアップ時
     → 新しい開発ツールの適用を実施して、アプリもバージョンアップ。

     Androidのメジャーバージョンアップ時
     → 新しい開発ツールの適用は行わずに、詳細な動作テストのみを実施。

     iOSおよびAndroidのマイナーバージョンアップ時
     → マイナーバージョンアップ時は何もしない。代わりに定期的な動作テストを実施。

  3. 3.アプリの重要度が高い場合の案

     iOSおよびAndroidのメジャーバージョンアップ時
     → 新しい開発ツールの適用を実施して、アプリもバージョンアップ。

     iOSおよびAndroidのマイナーバージョンアップ時
     → 詳細な動作テストを実施。

PR

コンポーネントデザインでは、アプリ開発を受託致します。お気軽にお問い合わせください。

ガワアプリの作り方

ガワアプリとは何か

 スマホやタブレットのアプリには、Webページを使って画面を実現する「ガワアプリ」と呼ばれるタイプが存在します。ガワアプリの「ガワ」は少々俗な表現で、「外側」あるいは「何かを包む皮」の「ガワ」を指しています。ガワアプリとは、ブラウザ機能を内蔵して特定のWebサイトを表示することを主機能としているアプリのことです。逆に通常のアプリはネイティブアプリと呼ばれます。

 ガワアプリの最大の特徴は開発費が安いことです。Webサイトがすでにある場合は、プログラムの開発対象が「ガワ」とその付加機能に限られるため、ごく少ない開発規模でアプリを作成できます。
 ガワアプリであっても、アプリとしての体裁は普通のアプリと同じです。App StoreやGoogle Play等からスマホやタブレットにインストールし、アイコンをタップして起動、普通に操作できます。ユーザーインターフェイスはWebページなので、操作時のなめらかさや凝った操作性の画面は実現しにくいのですが、表示自体はWebコンテンツなので十分リッチです。細かな違いを気にしないユーザーは、アプリに表示されているのがWebであることに気づかないかも知れません。
img10

開発方法・作り方

 アプリでWebページを表示するには、「アプリ内ブラウザ」と呼ばれるブラウザ機能をアプリに組み込みます。ガワアプリでは、基本的なUIをこのアプリ内ブラウザで実現するため、ユーザー操作に対する反応の処理は、HTMLに組み込んだJava Scriptかサーバー上のプログラムで行います。
 画面に表示されているのはWebページなのでサーバー上のプログラムは普通にPOSTで呼び出せますし、Ajaxの手法でHTMLの画面を切り替えること無く、バックグラウンドで呼び出すこともできます。

 少々凝った実装だと、アプリ内ブラウザに表示したWebページと、ガワアプリ自体のネイティブコードを連携させることもできます。最も代表的なのはカスタムURLスキームと呼ばれる手法です。htmlやスクリプトから特殊なURLを指定することで、Webページからアプリのプログラムロジックを呼び出します。他にはアプリ内ブラウザのサーバーアクセスをアプリのネイティブコードから監視する方法もあります。
 この連携によってWeb画面上のボタンのタップを起点に、Webでは実現できない機能、例えばスマホのカメラを使ってバーコードを読み取るなど、ブラウザだけでは不可能な機能を実現できます。

アプリ審査

 開発したアプリを企業内のみで利用する場合は良いのですが、アプリを一般公開する場合、iPhone/iPadアプリはApp Storeに登録するための審査を受ける必要があります。ガワアプリを申請する場合は、Webサイトが単純すぎる場合は、単にWebページをアプリから表示するだけであると判断され、アプリとしての価値がないとして却下される可能性が高いです。
 審査ではアプリのUIは常に「very good」のレベルが要求されるほか、様々な条件をクリアする必要があります。この審査対象はネイティブ実装かどうかは関係なく、アプリ内ブラウザに表示されるWebページもアプリの一部とみなされますので注意が必要です。

ガワアプリの例

 例えば、自社専用のECサイトがある場合、次のようなガワアプリを安価に開発できます。
自社のECサイト専用のガワアプリを作成します。次の仕様を盛り込みます。

  • 自動でユーザーのログイン状態を維持します。
  • ユーザーが希望するキャンペーン情報や、購入後の発送情報をプッシュ通知で伝えます。
  • ECサイトには掲載していない新着商品や、店舗情報、店舗のスタッフブログを表示します。

まとめ

 ガワアプリは安価に開発可能です。しかも表示するコンテンツ次第で素晴らしいアプリになります。またWebページを表示するだけではなく、プッシュ通知や地図表示などアプリならではの機能を組み合わせることで、さらに優れたユーザー価値を得ることができます。スマホやタブレットに最適化されたECなどのWebシステムをお持ちの企業は、一度ガワアプリの作成を検討してみると良いのではないでしょうか。

PR

コンポーネントデザインではガワアプリの開発を受託致します。お気軽にお問い合わせください。

Webシステムでグラフ表示を行う方法

最近の業務用のWebシステムではグラフ表示を取り入れる機会が増えてきました。

 ほんの数年前はグラフ表示のライブラリは、高価だったり使いにくかったりと良いものが見当たらなかったのですが、現在は見た目も機能性も素晴らしいオープンソースのライブラリが多数登場してきています。

 私が最もWebの業務システムに適していると思うのはchart.jsと言うライブラリ。上のサンプルのとおり、デザイン性に優れています。グラフ表示の際のアニメーションも良好です。ライブラリ自体をサイトに配置するので、ライブラリのアップデートやサービス終了を気にすること無く運用できます。

 分析のためのグラフ描画は、どうしても大量のデータアクセスがついて回るので、設計には考慮が必要です。例えば、1年間の売上で商品種類毎の比率を見るには、1年間の全ての売上データにアクセスする必要があります。

 データ量が多い場合や同時利用数が多い場合等、どうしても負荷が高い場合は、業務用のデータベースサーバーと分析用のデータベースサーバーを分離する方法が有効です。現状でデータ量が少なく、ビジネスの成長と合わせてデータ量が増えていくことが見込まれる場合は、論理的に別サーバーで動作するようにデータベースを設計しておき、当初は1台のサーバーに配置する方式をとります。

chart.jpサンプルグラフ

PR

コンポーネントデザインでは、グラフ描画を含むWebシステム開発を受託しております。お気軽にお問い合わせください。

PCオーディオのハイレゾ再生方式(ASIOとWASAPI)を比較する

img20 PCオーディオで利用するDAC(デジタルをアナログに変換する装置)が提供するインターフェイスには、ASIOとWASAPIの2種類が存在します。 2種類ともWindows PCからDAC(正確にはDACドライバ)を操作するためのAPI仕様(あるいはオーディオドライバの規格)です。再生プログラムがDACを操作するための「呼び出し手順などの規約」と表現するとわかりやすいかと思います。

WASAPIとASIOの概要

WASAPI(ワサピと呼びます)はMicrosoft社、ASIO(正式な発音は聞いたことがないのですが、私はアジオと呼んでいます)はスタインバーグ社のAPI仕様です。 WASAPIはOSを提供しているMicrosoft社らしく中立であり、DACの機能をプログラムに提供する位置づけで設計されていると感じます。再生プログラムは自分でループしながらDACへのデータ出力を繰り返します。 対してASIOは、オーディオのハードウェアとソフトウェアを両方作っているスタインバーグ社ならではの設計で、私の感覚ではデバイス側(DAC側)の立ち位置で再生プログラムに機能を提供しているように思えます。ASIOの再生は、最初にAPI側で高い優先順位のスレッドが起動され、そのスレッド上で再生プログラムが繰り返し呼び出される(コールバック)方式です。

ビット深度の取り扱い

再生プログラムがWASAPIを使う場合、再生開始時にDACの仕様を取得し、どの仕様を適用するかを選択します。この仕様にはサンプリング周波数(44.1kHzとか96kHz等、1秒間にサンプリングする回数のことです)とビット深度(16bitや24bitなどの1回のサンプリングをどの程度の精度で記録するか)の指定が含まれます。 このビット深度はDACにより異なり、16,24,32bitの3種類に対応する機種もあれば、16bitや32bitなど1種のみに対応する機種も存在します。 対してASIOはサンプリング周波数は再生プログラムが指定しますが、ビット深度はDACの指定に従う方式です。つまり音源のビット深度に合わせてビット深度を指定することは行いません。一般的なDACは32bitを指定してくることが多いようです。 ※参考:Pioneer社のU-05はASIOの設定画面でユーザーがビット深度を指定します。

ビット深度についての詳しい解説

ビット深度とは1回のサンプリング値をどのサイズの整数で扱うかを示すものです。24bitは24桁の2進数で、32bitは32桁の2進数のことを指します。 24bitで扱える数値は、10進数に換算すると-8,388,608 ~ 8,388,607の16,777,216段階で、32bitの場合は-2,147,483,648 ~ 2,147,483,647の4,294,967,296段階です。32bitは24bitのちょうど8bit分、つまり256倍の細かさを持ちます。 CDクオリティのビット深度は16bitですので、-32,768 ~ 32,767の65,536段階であり、ハイレゾ音源(PCM方式)のビット深度は大概が24bitです。これはCDの256倍の細かさである24bitで十分と考えられているのだと思います。 尚、音源が24bitのデータを32bitデータとして送出する時は、単にデータを256倍します(下位8bitを0にして、上位24bitに音源データをコピーします)。

DSDの再生方式

DSDの再生については、ASIOにはDSDデータ専用のインターフェイス仕様があります。一方、WASAPIにはDSD専用のインターフェイス仕様は用意されていません。 WASAPIでは、24bitのPCMデータにDSDデータを載せるDoPという方式が使われます。これは、DSDデータだということをDACに示す8bitのマーカーと16bit分の実データを、普通のPCMの24bitデータのようにDACに送出する方式です。一部にはASIOのDoPを採用しているDACも存在します。

WASAPIの共有モードと排他モード

WASAPIは共有モードと排他モードという2種類のモードが存在します。共有モードはWindowsのミキサーを使う実装で、排他モードは1つの再生ソフトがDACを排他的に使用する実装です。Windowsは音楽再生中に警告音を鳴らすなど、複数の音を混ぜるミキサー機能があり、これが共有モードの正体です。PCMで音を混ぜるには、サンプリングレートやビット深度を揃えてから演算する必要があるので、このときにビットロスが生じることがあります。つまり音質は悪くなる方向です。 良い音を追求するためには、WASAPIは排他モードで使用します。

結局どちらが優れているのか

使用するDACがASIOとWASAPIの両方に対応している場合、どちらが好ましいかは、メーカーの推奨を確認するか、実際に視聴することで判断します。 DSDを再生するときにWASAPIはDoPだから1.5倍のデータ転送が必要で音質的に不利であり、ASIOが優秀であるとの話を聞くことがあります。しかし、データ転送量が音質に与える影響は絶対的ではありません。ちなみにPCMはASIOはほとんどのDACで32bit固定であり、24bitだけを転送する場合に比べて1.33倍のデータ転送が必要です。

PR

コンポーネントデザインでは高難易度とされるプログラム開発も受託しております。どうぞお気軽にお問い合わせください。

開発したアプリを社内に配布する方法

iOSアプリの社内配布にはiOS Developer Programの参加が必要

 App Storeを経由せずにiPhone、iPadアプリ(以下iOSアプリと表記します。)を実機で動作させるためには、Apple社のデベロッパープログラムに参加する必要があります。このプログラムに参加せずにアプリを実機で動作させることは、電子的にできない仕掛けとなっているのです。  このデベロッパープログラムはいくつかの種類があるのですが、ちょうどこの用途のために「iOS Developer Enterprise Program」が用意されていますので、通常はこのプログラムに参加します。費用は年間で37,800円(税別)(2016年4月30日現在)で1年毎に更新が必要です。  このプログラムはアプリを利用する企業が参加する必要があります。アプリの開発を私たちコンポーネントデザインのようなアプリ開発会社に発注する場合でも個別の参加が必要です。なおこのプログラムは社内に配布するプログラムが複数の場合でも、1つだけで大丈夫です。 img20

iOSアプリの配布方法

 最も簡単な方法は配布用のWebサーバーを用意することです。OTA配信(Over The Air)と呼ばれる方法で、具体的には次の4つを用意してサーバーに配置します。サーバーはLinuxでもWindows Serverでも大丈夫ですが、以下で紹介する2番目のplistは、SSLでのアクセスが必須とされていますので、サーバー証明書の導入が必要です。
  1. 1.インストールをガイドするためのhtml(Webページ)  通常のWebページです。インストールボタンを配置します。このボタンが押されたときにhtmlのAタグで2のplistを参照するようにhtmlを記述します。
  2. 2.plist  アプリのモジュールの場所や、インストール中に表示するアイコンの場所などを記録したxmlファイルです。決まった書式に従って記述します。このファイルにはSSLでアクセスする必要があります。
  3. 3.ipaファイル  アプリの実行モジュールです。
  4. 4.アイコン  インストール中にデバイスに表示するアイコンです。インストール中のアイコン表示が白アイコンでよければ配置を省略できます。
 上記が用意できたら、iPhoneやiPadの標準ブラウザのSafariから上記1のWebページにアクセスし、インストールボタンを押すとアプリのインストールあるいは更新が行えます。インストールは上記のサーバーへのアクセスだけではなく、インターネットへのアクセスが必要ですので、インターネットへのアクセスを制限したネットワーク環境を構築している場合は注意して下さい。

iOSアプリは毎年更新が必要

 社内配布用のアプリにはプロビジョニングプロファイルというアプリの配布元などの素性が記録されたデータが内蔵されており、これには有効期限があります。有効期限が切れたアプリは起動することができないため、アプリは年に1回のペースで更新する必要があります。このアプリの更新とiOS Developer Enterprise Progamの契約更新タイミングを一致させる必要はありません。

Androidのアプリ配布は簡単

 Androidアプリの配布は簡単です。特段の仕掛けを用意することなく、完成したアプリの実行モジュール(apkファイル)を実機に配布できます。具体的な方法はいくつかありますが、最も簡単なのはメールの添付ファイルを利用する方法です。PCからAndroidで利用しているgmailアドレス充てにメールの添付ファイルでモジュールを送り、Androidに標準でインストールされているgmailアプリで添付ファイルを開くのです。アプリの有効期限もありません。

PR

コンポーネントデザインでは、iPhone,iPad,Android用のアプリ開発を受託しております。どうぞお気軽にお問い合わせください。

OSバージョンの対応範囲

【iPhoneアプリはiOS 3つ分のメジャーバージョンが現実的】

ストアにアプリを公開する場合は、iPhoneもAndroidもまず最新のOSをサポートし、無理の無い範囲で古いOSもサポートすることが基本となります。 iPhoneアプリの場合、開発ツールXcodeに配布ターゲットの設定があり、ここにアプリがサポートする最も古いOSのバージョンを指定します。このコラムを書いている時点の最新のXCode 14.0では配布ターゲットにiOS11.0~16.0が選択できます。 iOS11は2017年9月リリースなのでiOS11以降だとサポート範囲が狭いように感じますが、少なくともApp Storeにアクセスするデバイスの99%以上はiOS11以上になっているようですのでiOS11以上がサポートできれば十分と考えることになります。 もちろん古い開発ツールを利用すれば古いOSに対応するアプリが作成できますが、最新OSへの対応は出来ません。App Storeにアプリを申請するには、最新OS(時期によっては1つ前のOSも可)に対応している必要があるので、この方法は現実的ではありません。
*2022年9月現在、Appleが提供する最新の開発ツールはXcode14(iOS16に対応)です。App Storeにアプリを申請するには、Xcode13(iOS15対応)以上での開発が必要となっています。
img30

【Androidは古いOSに対応可能。機能とサポート範囲のバランスを考えて選択】

Androidアプリの場合も開発ツールにminSdkVersionという設定があり、アプリがサポートする最も古いOSのバージョンを指定できます。Androidは新しいOSのアップデートが提供されない機種が多く、古いOSを使うユーザーが残りやすいのですが、古いOSで新しい機能が利用できるサポートライブラリが提供されており、少々の制約はありますが、アプリが古いOSに対応しやすい状況です。 以下はアプリがサポートするOSバージョンの代表的な例です。
  • v21(Android 5.0)以上(約98.8%)
  • v23(Android 6.0)以上(約96.2%)
  • v24(Android 7.0)以上(約92.7%)
  • v26(Android 8.0)以上(約88.2%)
  • v28(Android 9.0)以上(約77.3%)
  • v29(Android 10.0)以上(約62.8%)
  • v30(Android 11.0)以上(約40.5%)
  • v31(Android 12.0)以上(約13.5%)
※カッコ内のパーセント表示は、Google Playストアにアクセスするデバイスのサポート割合(本コラム執筆時点。開発ツールAndroid Studioの表示より転記)です。v21(Android 5.0)以上をサポートすると、Google Playストアにアクセスするほぼ99%のデバイスをサポートできることになり、v24(Version 7.0)以上では92.7%のデバイスをサポートできます。
対応バージョンは、アプリの目的に応じて機能とサポート割合のバランスを考えて決定します。最近のOSにすればするほど開発時に新機能が扱いやすく、その代わりにアプリを利用できないデバイスが増えていくのです。 私たちの提供しているスマホがポイントカードになるアプリ(Cardfeel)は、機能の拡充よりも多くの機種で動くことが求められると判断し、v21(Android 5.0)以上を選択しています。 最近リリースされるアプリではv24(Android 7.0)以上を選択することが増えてきているようです。

【企業内でアプリを配布する場合】

企業内(In house)のアプリを開発する場合は、App Storeの制約はないので、iPhoneアプリであっても対応OSを自由に決めることができます。 ただしサポート範囲を広げれば広げるほど、使える機能(API)は限定されるうえに、開発コスト(特にテストの作業規模)が増えるので、できる限り狭い範囲にするのが通例です。OSをアップグレードできない古いデバイスを利用する場合を除き、できるだけOSのバージョンを統一することでコストを節約できます。

PR

コンポーネントデザインでは、iPhone,iPad,Android用のアプリ開発を受託致します。お気軽にお問い合わせください。