これは、Android Advent Calendar 2017 - Adventarの8日目の記事です。
こんなアドベントカレンダーのものなので、開発に関する話を求められているかと思いますが、あんまり開発色の強くない話です。
わたしは、一応Androidのアプリも作ります。とはいっても実際に公開されるようなアプリはほとんど(と言うかまったく)作っておらず、書籍のサンプルや講座用の紹介アプリの作成ばっかり。
どんなものかというと、こういうAndroid開発者向けの入門書とか・・・
よくわかるAndroidアプリ開発の教科書 Android 4.2対応版
- 作者: 高見知英
- 出版社/メーカー: マイナビ
- 発売日: 2013/08/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
APIリファレンスとか
Android API プログラミング・リファレンス [Android 2.3/3.x/4.0/4.1対応]
- 作者: 高見知英,菅野祥礼,神原健一,茶圓亮,松岡謙治
- 出版社/メーカー: マイナビ
- 発売日: 2012/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
そのほか、ビデオ講座のサンプルアプリとか。
そのほか、現在まちづくりエージェントSIDE BEACH CITY.のほうでも、アプリ開発関係の講座をやって欲しいということで依頼されています。AndroidJavaのネタはもちろん、別環境の講座(KotlinかCordovaを予定)も一応予定中。果たしてそんなことはわたしにできるのでしょうか…
こういうことをやっている以上、もう少しは実用アプリも作ったほうが良いと思うのですが、なかなか機会と時間がなく。
複雑化するAndroidプログラミングを、どう身につけるか。
今回前述のUdemy講座の続きということで、Android Studioを使ったアプリ開発をやっていますが、Androidのアプリ開発も本当に複雑になりました。ConstraintLayoutの登場によって、使い方さえ覚えればかなりレイアウトはやりやすくなったのかな と思いますが、まだまだ罠が多いのがAndroid だと思ってます。フラグメントの扱いも間違えればリソースリークに繋がったり、特定のメソッドのオーバーライドをちゃんとやらないと特定環境でデータが飛んだり。しかも端末ごとに動きが違うところもあるとか何とか、本当にAndroidプログラミングの開発は大変だ と思います。
そんなAndroidプログラミングをどう覚えるのか。ということで今回はちょっと考えてみます。
Androidの仕組みそのものを「覚える」こと
まずはAndroidのフレームワークとそのものを覚えること。レイアウトの仕組みやLooperの動作の仕組み、アクティビティやフラグメントの動作システムやライフサイクルメソッドの呼び出しなど、Androidのフレームワークやアプリ動作の仕組みというのは、Windowsなどのそれとは大きく異なります。
だからこそ、まずはAndroidの仕組みそのものを覚えること。ライフサイクルメソッドはどういう順序で呼び出されるのか、アプリはどういうタイミングで起動し、そしていつ終了するのか、仕組みをとにかく覚えることが大事だと思います。
非同期プログラミングに慣れる
この辺はAndroidに限らずなのでしょうが、Androidプログラミングでは、何かと非同期のプログラミングが多いです。一般的なプログラミングは、コードの上から下に、流れるように処理が実行されますが、非同期プログラミングはそれとはまた少し違う流れが生まれます。慣れないとこれはちょっと難しい。
ただ、非同期だけでいうのであれば、Web上のJavaScriptなんかもそうですし、まずはそこで慣れてみるのもいいかもしれませんね。
英語は、話せなくてもいいので、英語を読めるようになること
Androidに限らず、スマートフォンに関する情報というのは、日本語化されていない情報が多いです。なんだかんだ言って日本語化されている情報も少なくないWindows系の情報に比べると、それはもうとにかく少ない。
だからこそ、せめて英語の読みくらいはできるようにしておきたいところです。最近だとChrome拡張などでサイト翻訳もできますが、まだまだ長文翻訳の品質はよくないですし、翻訳したい対象が翻訳できるテキストとも限りません。単語の拾い読み程度でもいいのでできるようにしておきたいところです。
とりあえず、Googleの「不安定さ」に慣れること
不安定さというかはともかく、Googleの出すものは表現や表記ルールなどの基本的なルールの範囲から逸脱しない範囲であれば、割ところころUIやメニューを変えてくる というイメージです。
たとえばAndroid Studioの「現在フォーカスが当たっている項目によって、項目の中身がころころ入れ替わる」メニューなど。最近のアプリはどれもある程度はこうですが、Googleの作るものは特にこの傾向が強いように思います。
Androidおよび、その開発環境であるAndroid Studioの不安定さ というか、不定形さを把握した上で、使う必要があるのかなあ と。
Androidおよび、パソコンの空間を理解する
Androidも、開発環境であるWindowsやmacOSも、コンピュータというものは画面に表示されているものが全てではありません。その奥にはそれを表示するためのアーキテクチャがあり、ルールがあり、プログラムがあります。プログラミングをする上では、せめてそれらを理解し、コンピュータの環境を奥行きを持った空間として理解する必要がある と思っています。
もちろん、そのくらいできると言う人も多いと思います。しかし、Androidの会のMLや、ふらっとなどで出会う地域の方たちを見ていると、そこを理解できていない人って、案外多いのではないか と思います。
ただ使うだけであれば最悪そもそもそれらを理解しなくてもいいかもしれないし、したとしておおまかな動作のルールだけ覚えてればいいかもしれません。でも、プログラミングをするならそれだけではだめです。もう少し突っ込んだところまで理解しておきたいところですね。
既存OSで最も「色んな環境を想定した開発環境」
さて、そんなAndroidですが…
個人的には、最も「色んな環境で動作することを想定した(動作させやすい)開発環境」だと思っています(とはいってもわたしはiPhoneのアプリ開発環境は知りませんが)。
まずは画面のサイズやハードウェア機能のあるなし。端末の画面解像度やハードキー(QWERTYキー・10キー)などの有無など、様々な機能要件によりレイアウトファイルや、文字列リソースを切り替えることができる。
そして、多言語対応。これについてはWindows開発などの環境もある程度そうですが、そのデバイスで使っている言語や携帯電話キャリアなどによって、文字列リソースを切り替えることができる。
また比較的身近なところだと、画面の縦横。こちらも縦のレイアウトと横のレイアウトを全く別のレイアウトファイルとして定義できる。お互いのレイアウトのことを考えなくていい。
これらの切り替えが全部、開発環境にもとから備わっている機能で実現できる。WindowsのXAMLなんて全部一つのファイルでレスポンシブレイアウトやらなきゃいけないんですよ。HTMLだと別途ライブラリで多言語対応しなきゃいけないんですよ。これほどいろんな環境で動く前提で作られており、いろんな環境に対応するアプリを作りやすい環境はないと思います。