メールでのお問い合わせはこちら、お問い合わせフォーム

スタッフブログ

スマートフォンアプリ

1

スマートフォンを使っていると、時々通知が送られてきます。
この通知、何も操作をしていないのに、勝手に届きます。
これが「プッシュ通知」と呼ばれているもので、ユーザーが何か操作をすることを「プル(引く)」と表すのに対し、サーバー側から行うものなので「プッシュ(押す)」と呼ぶようです。
もちろん、誰彼構わず所構わず送られてくるのではなく、「プッシュ通知」に対応したアプリがスマホに入っている時のみ送られてきます。

さて、このプッシュ通知ですが、例によってスマホの種類によって異なります。
AndroidとiOSでは異なる内容になるわけです。
それでも、この両者の違いを少しでも減らす取り組みというものが、世の中にはいくつかあります。
プッシュ通知を受け取った後の処理はOSが違えば全く異なるため、こちらはどうにもなりませんが、通知を送る側の処理は一本化が可能なのです。

今回とりあげる「Kii Cloud」もそういったものの一つです。

kii.png
Androidでプッシュ通知を行うために「Kii Cloud」を利用しました。
「Kii Cloud」では通知を送る側の処理のみならず、受ける側用のライブラリも提供し、開発負担の軽減につながるようになっています。
なお、通知を送る側(サーバー)には通知を送る機能の他に対象となる端末の情報を保存しておく機能も必要です。
「Kii Cloud」では保存機能もあるので、別途情報保管用のサーバーは必要ありません。

で、そのプッシュ通知を送るという行為は簡単に出来たのかと言うと、世の中そんなに甘くは無いのでした。
サンプルには10分で出来ると書いてあったんですがねぇ。

 「ナナハンに乗りたくば、まずは自転車に乗れるようになれ」

なんて格言があったかどうかは知りませんが、通知以前にAndroidのネイティブアプリの世界の用語や様式、しきたりや方言といったものを知るのが先でした。
(さすがにここはハイブリッドアプリの出番ではありません)
java自体は大したことは無い※1のですが、Androidというシステム自体が持つ不安定さ※2や他と異なる独特の文化※3と合わさった事が結構な壁として立ちはだかり、10分で出来る(とされている)サンプルを動作させるのに10時間以上かかったりしました。

※1
Javaは隣の事は一切関知しないと言うお役所のような少々融通の利かない言語ですが、別に大きな問題ではありません。
むしろ変数の有効範囲において人類皆兄弟とでも言いそうなBASICのほうが「扱いずらい」です。

※2
頻繁に仕様が変わるから本やweb上の情報の多くが「古くて使えない」うえ、開発環境まで動作が不安定になりやすい。
AndroidはGoogleが提供しているものですが、オープンソースなモノたち同様の不安定さを持っています。

※3
ここで言う「他」とは「MS-DOS」「Windows」「web」のこと。
あくまで文化の話なので、マルチタスクやイベント駆動型、非同期処理といった技術の話ではありません。
(webから入ったヒトではないので、その辺は問題ない)
まぁ一言で言うなら「日本語でOK」。
(ドキュメントが英語しかないと言う意味ではなく、dos、win32や.NET、PHPなどの世界の言葉・習慣とAndroidの世界の言葉・習慣はいろいろ違うという事)

とりあえず、一つの壁は突破したので、一歩前進です。
異文化交流に苦しむのもいつまでも続く事ではないでしょうから。

それはともかく、本を書く人は教員免許を取るか、塾で講師をするか、家庭教師の経験を持った方が良い。
せめて起承転結や5W1Hが存在する理由を考えてから書こうよ。
 「build.gradleに追加します」・・・build.gradleって2つあるよ、どっちだ?※4
 「作って入れます」・・・どこに?なんという名前で?
 「で、出来上がりです」・・・出来上がるとどうなるのだ?動かすと何が起きる?
といった肝心なところが欠如している解説が多くて困る。
blogにまでそういったクオリティは求めないけどさ。あるに越したことは無いが。

※4
実は build.gradle のソースに入っている英語のコメントを読めば判るが、それを読めと言う説明すらない。
Kii Cloud のドキュメントでは場所によっては「どこにあるbuild.gradleか」を説明しているものもあります。
(全部ではありませんが)


■余談
某所にあった通知が来ると言うサンプル。
通知が来た時に何が起きるか書いてない。
何も起きないから通知が来ていない=動作していないと思ったら大間違い。
実は「何も起きない」が正解。
他の通知を受け取ったとき通知のリストを出したら、そのリストに入っていたと言う。
「何も起きない」なら「何も起きない」と書きなさい。

(ノティフィケーションの場合)プッシュ通知は「通知が来た」事を知らせる動作と、通知リストに内容を入れる動作の2つからなる。
そのサンプルは「通知リストに内容を入れる動作」だけが実装されていたという訳。
でも、そのことはどこにも書いてない。
書いた本人は「通知リストに内容を入れる方法を書いた」ので、他の動作の事は全く触れていないということなのでしょう。

断片的情報は使えないという一例です。

先日ハイブリッドアプリが出現するまでの話をしましたが、今回はハイブリッドアプリを作るのに何を使うかというお話です。

ツールとしてはオープンソースの開発ツールが有名です。
eclipseなどがよく使われていると聞きます。

開発ツールと聞くと以前は大手メーカー製のものが中心でした。
代表的なものはマイクロソフトのVisual Studioですね。
昔はVisual-C、もっと昔はMS-C。
その頃はboland-C++やLattice-Cといったサードパーティーの開発ツールメーカー製品もありましたが、Windows時代になってVisual-Cが登場してからはだんだん廃れて、Visual Studio以外は見かけなくなりました。

ですが、現在はオープンソースの開発ツールが大きな勢力を作っています。
プラットフォームの多様化に伴い、状況も変わっていたわけです。

ハイブリッドアプリはスマホ用のアプリのため、そもそもマイクロソフトが関係しないという点も、この状況の原因の一つでしょう。
(Windows Phone は日本はもちろん、米国でもあまり普及していないので、それ用の開発ツールも「主流」にはならない訳です)

それが先月、状況が変わる事になりました。

Visual Studioの最新版(Visual Studio 2013)がハイブリッドアプリの開発をサポートしたのです。
つまり、マイクロソフトのツールでAndroid用やiOS用のアプリを作れるようになったのです。
(iOS用を作るのにMacが必要なのは相変わらずですが)

Visual Studio に Apache Cordova を入れることで、ハイブリッドアプリが作れる環境になります。

ここまでは(条件次第で)無償でいけます。

なお、今回Visual Studioには(現状有償で今後もそれなりの商品を作る気なら多分有償ですが)ほぼネイティブ動作をするスマホアプリの開発環境も用意されました。
Xamarinというものをサポートしたと報じられています。
これを使うと、C#でAndroid用とiOS用のアプリを開発できるそうです。
同じソースとはいかないようですが、同じ言語でいけるわけです。
(本来はAndroidはjava、iOSはObjective-C)


とりあえず、遅いうえに知らない間に起動しなくなったりするeclipseを使わなくてよい分、ハイブリッドアプリが一歩身近になった気がします。
(Visual Studiomも同じ病にとらわれなければ良いのですが。遅いのはeclipse自身の問題でも、動作がおかしくなるのはeclipseの責任ではないので。)

プラットフォームが単一化への道を進むように、開発ツールも単一化へ進むのかもしれませんね。
学習コストの節約には良いと思います。

ハイブリッドアプリ 

コンピュータソフト(アプリ)を作る場合、開発ツールというものを使ってプログラムを作り、アプリを完成させます。

では、ちょっと昔話をしましょう。
昔、8ビットパソコンが一般的だった頃はこの開発ツールやプロクラムがコンピュータごとに違うものでした。
各メーカーから発売さているパソコン※ごとに、別々のツールを使って別々のプログラムを作る必要があったのです。

※同じメーカーでもシリーズが違えば互換性が無いため、別々のものになります。
例 NEC PC-6001とPC-8001,シャープ X1とMZ いずれも8ビットパソコンです

このため、ソフトハウスは色んな機種用にプログラムを作らねばならず、余計な手間がかかっていました。

16ビットパソコンの時代になると各機種ともMS-DOSという同じ名前のOSを使うようになりましたが、OSの機能だけでは実用性のあるプログラムは作れないため、やっぱりメーカーごとに違うプログラムが必要になりました。
ただ、この頃になるとメーカーも知恵を付けて、「メジャーなもの」にだけソフトを作るようになります。
早い話がNECのPC-9801シリーズ用しか作らないようなったのです。
これでソフト制作の手間は軽減されます。
単一の対象にソフトを作るのがソフト開発の理想形ですから。
シェアで劣勢になってソフトの供給が途絶えたNEC以外は連合してAXなどの共通規格パソコンを作ったりしましたが、全く太刀打ちできませんでした。

32ビットパソコンの時代になると、世界共通のパソコンが日本に現れます。
それまでは日本語処理を快適にするためには専用のハードが必要なため、海外のパソコンは(Macを除き)誰も使いませんでした。
しかし、パソコンの処理能力の向上によって、ソフトで日本語処理が出来る様になったため、DOS/Vパソコンと呼ばれるパソコンが現れたのです。
ただ、これも結局ソフト不足で、一部のパソコン自体が趣味というPCオタクしか購入しませんでした。

その後ウインドウズの時代になると、全ての(Macを除く)パソコンで同じソフトが動くようになります。
やっと「単一プラットフォーム」の時代が来たのです。


ところで、スマートフォンも中身はコンピュータです。
パソコンの世界ではアップルのMacは異端児扱いでソフト開発の上では無視しているソフトメーカーが多いのですが、日本のスマートフォン市場ではアップルのiPhone(iOS)は大きなシェアを持っています。
このため、AndroidとiOSの両方に対応する事が必要となります。
この両者、見た目は似ていても、開発ツールは全く異なり、出来上がるプログラムも別物です。
つまり、開発者にとっては、98時代よりも昔に逆戻りしたようなものです。

そこで考え出されたのがハイブリッドアプリという考え方と技術です。
ひとつの開発ツールから、Android用とiOS用の両方のプログラムを作ることで、「単一プラットフォーム」に近い状況を作り出したのです。

スマホ用アプリは規模の小さいものが多いため、コスト軽減の観点からもハイブリッドアプリは好都合。
ですが、動作速度面での課題など、問題点もあります。
今後もこの技術の進展には注目していきたいと思います。

1