Androidのユーザ層とプログラミング書籍のターゲットを考えた

先日のエントリで、android.media.AudioTrackというクラスについて書いた。まだ実験はしていない。

このような低レベルのクラスについて参考書に書かれることがない事について考えてみた。

まぁ、Androidに関係なく、PC一般でもいいのだが、今回はAndroidで書いてみる。

Androidがターゲットなので、一番広いターゲット層はユーザだ。ユーザにはスマートフォンのユーザという一番一般的な利用者もいるだろうし、私のような中華な端末を使う半分モグリ?のようなユーザもいる。

そして、今回の音楽再生をAndroidでしようと考えるユーザはその中の「一部」であると思われる。決して全体ではない、と思う。ここがiPhoneとの決定的な違いだと考えている。iPhoneは個人的にはiPod touch+携帯電話だと思っている。最近はリリースタイミングが逆転したが最初のモデルはそのようなイメージだった。iPhoneはiPodとして使うことができるし、iTunesと同期が取れる。ここがAndroidとの決定的な違いで、iPhoneユーザがiPhoneで音楽を単純に聴こうと思った時に、アプリを探したり選んだり、作ったりなどと考える必要は全くない。

Androidの場合は違う。確かに標準で音楽プレイヤーのアプリケーションは存在するが、単純にストレージにある音楽ファイルを再生するだけだ。iTunesのようにメタデータが管理されない。

iTunesのヘビーユーザになってくると、単純にリッピングツール、ファイル管理ツールとしてのiTunesではなく、レーティングや、再生回数などのメタデータの比重が高くなってきて、そこから自動生成される、スマートプレイリストやGeniusなどの機能に重点を置くようになってくる。ファイルは管理されていて当然(エクスプローラやFinderレベルでもできる)なので、メタデータこそがiTunesだとも言える。

閑話休題。

そして、このiTunesのヘビーユーザではない層というのは実はAndroidで音楽を聴いても特に問題にはならない。ファイルを転送すれば適当なアプリが再生してくれる。エンコードさえAndroid OSのサポートするエンコーダが使われていればいいだけだ。MP3なら間違いない。ライトユーザならメタデータへのこだわりも、積み上げもないだろうから適当にコピーして聞いて、入れ替えて、とすればいいだけだ。その操作を手軽にする母艦アプリを用意すればAndroidアプリは標準モノでもいいだろう。

次の層は、プレイリストくらいまではiTunesを使っている層。これはiSyncやMiddlemanなどが実装している。これも母艦アプリで対応が可能だ。iTunesからプレイリストを選択して、それに対応した曲ファイルを転送して、プレイリストファイル(m3uなど)を作って転送すれば多分適当なアプリで再生できるだろう。

このあたりまでは実は、android.media.MediaPlayerクラスで対応可能なレベルなのだ。で、エンコーダがOSバージョンによって変わってくる。OS1.5だとAACがだめだが、OS2.1になるとAACファイルがサポートされていたりと微妙に差が出てくる。

しかし、android.media.MediaPlayerクラスを使って音楽再生アプリを作るというのは、UNIXでアプリを書いていて、UIだけ書いてバックグラウンドでコマンドラインの再生コマンドを呼び出しているようなものに過ぎないと感じるのだ。特にOS2.1レベルだと。できるのは再生、一時停止、停止、再生ポジションの取得、ファイル指定(ストリーム指定)、再生終了イベントの発生、とこの程度。OS2.3でイコライザとビジュアライザが追加されて、簡単にそれらが使えるようになったが、古い端末ではどうにもならない。

これだけアプリがリリースされている中で、自分でプログラムを作ろう、とする以上、少なくとも無料アプリで実現されているモノ以上のものを作りたいことは目に見えているのではないか?

自分で本を書け、ということになってしまうような事にもなってしまうような展開になってきた。Webに完全なリファレンスが存在し、サンプルが存在するものの似たような中途半端な参考書ばかりが出版されていないか?という事なのだ。

今、マイコン時代と比べれば、ユーザ数に比べればプログラマ人口は圧倒的に少ないと思われる。だったら、参考書はそれぞれが尖った存在であるべきだと思うのだ。どの本を手にとっても開発環境の構築のことが書いてある必要などどこにもない。

画面レイアウトの実例にとことんこだわり、すべての標準widgetのすべての用法(XMLレイアウトオプション)、にこだわった本であるとか、マルチメディアのすべてのクラスを網羅した本であったりとか、サービスやホームスクリーンウィジェットのようなものだけを扱った本なんかが出版されたっていいと思う。そのかわり尖っていて、その時点でその分野でわからないことがないくらい調べつくして。

APIリファレンスもWebで見ることができる標準のものはサポート開始のAPIバージョンは見ることができるが、Deprecatedになったバージョンが確認できない。先日遭遇したパターンだと、参考書を参考にあるメソッドを使った。詳細を調べようとAPIリファレンスを読んだらDeprecatedになっていたので、推奨されるメソッド使った。しかし、コンパイルすると実装されていなかった。リファレンスをたどると、それはOS2.3から実装されたものだった。私は自分の端末に合わせてOS2.1でアプリを開発している。

AppleのMac OS X用のWebでのリファレンスだと、赤い字でDeprecatedになったバージョンをきちんと書いている。「Deprecated 10.6」という具合に書かれているから、その場合はLeopard用に書いていた場合は使えばいいのだ。

またまとまらなくなってきた。まとまらないので、書くのをやめる。

コメント