2018年8月3日金曜日

「iOSとAndroidのどちらに対応?」から始まるモバイルアプリ開発、3つの質問

モバイルアプリ開発プロジェクトの予算を確保しているか
 IT部門のモバイルアプリ開発は、多くの機能の搭載や他システムとの統合を必要とする場合は、特にコストのかかるプロジェクトになる。そのコストは推定10万~50万ドルになる可能性がある。もしも予算が10万ドルを下回るのであれば、アプリの品質が低下する恐れがある。
 モバイルアプリ開発プロジェクトのコストを見積もる際に、IT部門が考慮する要素はたくさんある。
例えばライセンス料、従業員のトレーニング、DevOpsのリソース、ホスティングサービスなどが挙げられる。コストの最も大きな要素になるのは、IT部門が開発を計画しているアプリの種類だ。IT部門は、Appleの「iOS」とGoogleの「Android」のいずれか、または両方をサポートするのか、ネイティブ、ハイブリッド、Webベースのいずれにするかを決める必要がある。次に、社内で開発するか、外部に委託するかを決める。
 モバイルアプリ開発プロジェクトの大筋を決めたら、計画・設計からテスト・導入まで、アプリ開発ライフサイクルの全ての段階を検証する。その上で各段階にかかるコストを集計して、正確な見積もりを判断する。例えば、ITプロフェッショナルは、地理位置情報やオフラインアクセスなど、アプリに実装する機能を選ぶ必要がある。アプリを統合するバックエンドシステムを把握することも必要だ。
 IT全般のコストを見積もったら、資格のあるアナリストが費用対効果を分析し、アプリのコストがその効果に見合うかどうかを判断する。社内モバイルアプリには、従業員の生産性向上やコミュニケーションの改善など、さまざまなメリットがある。コストが高くなっても、計算したROIが妥当であれば、IT部門はそのアプリ開発プロセスに踏み出すべきだ。
アプリケーション開発を迅速にするツールを利用するかどうか
 IT部門がモバイルアプリ開発のコストを削減する1つの方法として、高速モバイルアプリケーション開発(Rapid Mobile Application Development、RMAD)プラットフォームを利用する方法がある。RMADプラットフォームは、事前構成済みのコンポーネントを利用することで、モバイルアプリをより迅速かつ容易に開発できるようにする。その結果、管理や開発に必要なリソースが少なくなり、コストが抑えられる。
 RMADプラットフォームでは、IT管理者が、ID管理プラットフォームやディレクトリサービスなど、既存のエンタープライズサービスとアプリを簡単に統合できる。RMADプラットフォームでは統一されたテクノロジーを利用するため、IT部門が統合のためにカスタムAPIを作成する必要がない。
 RAMDの重要な点は、ほぼコード不要の開発手法を利用して、開発知識のないユーザー(市民開発者とも呼ぶ)をサポートすることだ。しかしこのアプローチは、多くの企業が求める管理能力の欠如につながる。IT部門がネイティブアプリをカスタマイズする場合や、顧客が直接操作するアプリを開発する場合は特にこの点が問題になる。HTMLアプリの増加やその他のモバイルアプリ開発のトレンドにより、ほぼコード不要の開発をしようという考えは減り始めている。
プログレッシブWebアプリやインスタントアプリを考慮するかどうか
 モバイルアプリ開発の新たな手法として盛んになっているのがプログレッシブWebアプリ(PWA)だ。PWAはWebベースでありながら、ネイティブモバイルアプリのように動作する。PWAは、オフラインアクセス、ホーム画面の存在、プッシュ通知など、ネイティブアプリと多くの機能を共有する。ユーザーの立場で言えば、ネイティブアプリとPWAの外観や操作感に大きな違いはない。
 多くのB2Cアプリには、プログレッシブWeb開発が適している。だが、社内アプリにも応用できる。例えば、PWAのオフライン機能は、現場作業員などにとっては非常に便利だ。
 PWAのモバイルアプリ開発プロジェクトは比較的シンプルで、iOSとAndroidでコードを分ける必要がないため、PWAの開発は徐々に一般的になっていくだろう。PWAは従来のWebアプリに比べて速度やパフォーマンスの面でも優れている。
 インスタントアプリもAndroid固有の選択肢の1つだ。インスタントアプリとはネイティブモバイルアプリの小さなセグメントを指す。インスタントアプリには、Google検索や同社の「Google Play」ストアの「今すぐ試す」ボタンからアクセスできる。ユーザーがリンクやボタンからインスタントアプリにアクセスすると、アプリのその部分を実行するために必要な少量のコードフラグメントが自動的に実行される。
 PWAと同様、インスタントアプリはネイティブアプリの機能性とWebのアクセスの容易さを兼ねそろえている。インスタントアプリを利用した企業の多くは、アプリの導入率が増えていると報告している。インスタントアプリはPWAと同じく、個別にコードを作成することも、専門チームを供することも必要としない。開発者はGoogleの「Android Studio」を使って、既存のアプリをインスタントアプリに変換できる。
 ただし、インスタントアプリには、開発者が特定の機能モジュールにコードをリファクタリングしなければならないという課題がある。これは、多くの場合に単一モジュールになる従来のモバイルアプリ開発とは対極をなす。

2018年8月2日木曜日

米ライス大学の研究者、ディープラーニングを用いたコーディング支援システム「Bayou」を開発

 米ライス大学のコンピュータ科学者が、ディープラーニングを利用したコーディング支援システム「Bayou」を開発した。Webサイト「askbayou.com」でJavaコード用のBayouを試用できる。

 Bayouは、米国国防高等研究計画局(DARPA)から資金援助を受けたプロジェクトで開発された。このプロジェクトは、GitHubのようなオンラインソースコードリポジトリから知識を抽出することを目的としている。

 Bayouは、プログラマーがAPIを使いこなす際に役立つ。APIはソフトウェア開発でますます大きな役割を果たすようになっているものの、しばしばドキュメントが整備されていないことがあるからだ。

 プログラムを書き下すアプリケーションの開発は、人工知能(AI)分野における長年の目標の一つだ。

 「人々は60年前から、コードを作成できるシステムを作ろうとしてきたが、問題は、コードの作成手法があいまいなことだった」と、ライス大学コンピュータ科学准教授で、Bayouの共同開発者の一人であるスワラト・チャウドゥーリー氏は語る。

 「通常、今から作りたいプログラムが何を行うかについての大量の詳細情報をシステムに与える必要がある。そうした詳細情報を記述する仕事は、人が自らコードを書き下す作業と負荷があまり変わらない」(チャウドゥーリー氏)

 「だが、Bayouは大幅に改良されている。非常に少量の情報(幾つかのキーワードや指示)を与えるだけで、Bayouはプログラマーの意図を読み取り、プログラマーが求めているプログラムを予想する」と、チャウドゥーリー氏は説明する。

 チャウドゥーリー氏によると、Bayouは、人間が書いた数百万行のJavaコードを学習して自身をトレーニングした。「基本的に、BayouはGitHub上のあらゆるものを学習した。自力でコードを作成する際にその知識を利用している」

 Bayouの共同開発者の一人で、ライス大学コンピュータ科学教授のクリス・ジャーメイン氏によれば、Bayouはソフトウェアで使うAPIのコードサンプルを合成する際に特に便利だという。同氏はチャウドゥーリー氏と共同で、ライス大学のインテリジェントソフトウェアシステムラボラトリーを運営している。

 「今日のプログラミングは、30~40年前とは全く違う。プログラマーが一からコードを書いていた時代は大昔に終わっている」(ジャーメイン氏)

 同ラボラトリーの研究者でBayouのアーキテクトであるビジェイ・ムラリ氏はこう語る。「モダンなソフトウェア開発ではAPIが肝心だ。コードが特定のハードウェアプラットフォームやOS、データベース、他のソフトウェアとやりとりすることを可能にするシステム固有のルールやツール、定義、プロトコルがある。数百のAPIがあり、開発者にとって、それらを使いこなすのは非常に難しい。そのため、開発者はstackoverflow.comのような質問サイトに行き、長い時間をかけて他の開発者に相談している」

 ムラリ氏によると、開発者はそうした質問の一部をBayouに対して行うことができ、Bayouはすぐに答えを返すという。

 「そうした素早いフィードバックですぐに問題が解決することもあるだろう。そうでなくても、Bayouのサンプルコードを使い、その後に人間の開発者へより具体的な質問をすることもできるだろう」(ムラリ氏)

 ジャーメイン氏によると、開発チームの主な目標は、開発者にBayouの拡張を試みてもらうことだ。そのため自由度の高いオープンソースライセンス(Apacheライセンス2.0)でBayouを公開した。

 「人々がBayouのようなシステムに何を求めているかという情報が多く得られれば得られるほど、われわれはBayouをより良いものにできる。できるだけ多くの人にBayouを使ってもらいたい」(ジャーメイン氏)

 Bayouが行う学習には、ニューラルスケッチラーニングという手法が使われている。この手法により、数十万のJavaプログラムから抽象度の高いパターンを認識するように人工ニューラルネットワークをトレーニングできた。Bayouは、読み取った各プログラムの「スケッチ」を作成し、これをプログラムの「意図(インテント)」と関連付けることで、パターン認識を行っている。

 ユーザーがBayouに質問をすると、どのようなプログラムを作成しようとしているのかをシステムが判断する。その後、システムは、ユーザーが作ろうとしているプログラムのスケッチを何種類か作成する。

 「この推測に基づいて、Bayouの別の部分が4~5種類のコードチャンクを生成する。Javaの低レベルの細部を理解し、論理的な自動推論を行えるモジュールだ。BayouはWeb検索の結果を返すように結果をユーザーに表示する。最も有力な候補を最初に表示し、続いて幾つかの候補を表示する」