エンジニアの端くれの端くれ

思ったことなどつらつらと書いていきます

HTML5ハイブリッドアプリ 初開発

僕は開発職、いわゆる、プログラマやSEなどと言われるであろうお仕事に携わっています。

お客さんが抱える課題をITで解決する。そのために、お客さんの困り事や実現したいことを聞き出して、こんなのどうですか?と提案したり、仕様書や設計書をまとめたり。さらにそれをプログラムに落とし込んで動くものを作り、テストして不具合を潰して、提供して、サポートする。

どんなプログラムを作っているのかについてはまた別の機会に触れるとして、今日はそんなお仕事のなかで出会った、HTMLハイブリッドアプリ開発について書きたいと思います。
※この記事には開発してみての感想を書いています。ノウハウ的なことは書いていません。

ハイブリッドアプリって?

あるAndroidアプリの開発案件で、お客さんが提示された要件の中に、「iOSへの移植性を考慮すること」という1文がしれーっと書いてありました。聞けば、今はAndroidだが、将来的にはiOSでも使いたいとのこと。簡単に言ってくれるぜ。機能面の要件はやたらふわっと書いてあるのに。

スマートフォンアプリ開発経験がほとんど無く疎かった僕は、androidアプリはJavaiOSアプリはObjective-C?を使って作るものだと思ってました。どちらの言語もほぼ経験ゼロだし、勉強コストがかかる。その上移植性まで考慮しろと。ドイツ語と中国語を新たに学んで、相互翻訳出来るようになりなさいと言われているようなもんでしょ。納期限られてるんだし、僕の能力ではこれは到底無理。

先輩エンジニアに相談し、ハイブリッドアプリの存在を知りました。ワンソースでマルチプラットフォームに対応できるうんたらかんたら。要は、1つのコードを書けばAndroidiOS両方で動かせるような技術らしい。これはすごい!採用!

調べてみると、HTML/CSS/Javascriptでアプリが作れちゃうらしい。web開発の技術がそのまま流用できる。
僕にはweb開発経験は皆無でしたが、javaobjective-Cをそれぞれ学ぶよりは圧倒的にコストを抑えられるし、UI周りの柔軟性も魅力だったので、HTMLハイブリッドアプリ開発をすることに決めました。

HTMLハイブリッドアプリの仕組み

androidiOSには「webview」というものが備わっています。ブラウザみたいに、HTMLを解釈して表示してくれるようなやつです。ブラウジングできるアプリには内部でこの部品が使われているはずです。

このwebview上で動くコードを書けば、AndroidでもiOSでも動くものができるってわけです。そのための開発環境も色々と出ているようですね。

実際のアプリの作り方についてはまた別記事で書いてみる予定です。詳しくはググるなり書籍を読むなりしてください。

HTMLハイブリッドアプリ開発をしてみて

一番良かったのは、アプリの外枠を爆速で開発出来ちゃうところです。

お客さんとのキックオフの打ち合わせから次の打ち合わせまでに画面遷移案を作成し、実際に動かせるものを作りました。
HTMLとCSSで見た目を作り込んでしまえばそれっぽく見えるものができちゃいます。ライブラリ等も非常に充実しています。やりたいことに対して、調べれば誰かしらもう既に実現してくれているのでそれを持ってくるだけで済みます。 

2回目の打ち合わせからは、その画面をベースに議論していきます。動くものがあるととても話しやすいですし、お客さんも自分が何を欲しているのか整理しやすくなると思います。

叩き台のアプリを動かしながら、各画面で必要な機能を洗い出します。なんやかんやでちょっと動くものができちゃってるので、どうしてもお客さんの要望は膨らみがちになりますが、そこは必要性や実現性、コスト等吟味して取捨選択していきます。

見た目はHTMLとCSS、機能はJavaScriptで作り込みます。僕の場合は全部一人で行える程度の開発規模でしたが、例えばデザイナさんがいてくれるようなチームであれば、この辺りの作業分担はとてもやり易いのではないかと思います。Web技術を持ってる方がいるとすれば尚更ですね。

ハイブリッドアプリ開発だから困った、という状況は今のところありません。開発環境や使用しているプラグインのアップデートへの追従が大変なぐらいでしょうか。

Androidのバージョン毎にテストして動作確認をするのは大変ですが、これはjavaで作っても同じことだと思います。

今回はAndroidアプリとして作成したため、iOSアプリとしてビルドし直すとまた問題が出てくるのかもしれませんが、大部分のコードはそのまま流用可能なはずです。特に、UI周りがそのまま使えるのは非常に大きいと思います。 

またiOSアプリとして移植することがあれば記事を書きたいと思います。