こんばんは。九条です。
暫く更新滞っておりました。
何をやっていたかと言うと、プログラミングの勉強をしていたのです。
教材アプリは Android 版を優先して開発しますから、Android のプログラミングの勉強をしていました。
今日は、Android のプログラミングに関する書籍である「はじめてのAndroidプログラミング第4版」を読み終えたので、レビューをさせていただきます。
対象読者
本書は表紙からは分かりませんが、厚さは合格ゾーン1冊分ぐらいあります。
まず、本書の対象読者についてですが、帯に「Java の入門書レベルは分かる人。」とあります。この帯の通り、全くのプログラミング初心者を想定した本ではありません。プログラミング初心者が本書を手に取るならば、先に Java の入門書か Kotlin の入門書を読んでおくべきです。
余談ですが、プログラミング入門者に何の言語をお勧めすればよいか?ということはよく話題になります。
「目的に合わせた言語を、」とはよく言われるのですが、本書を読んだ感想として、Android プログラミングはとてもプログラミング入門者にはお勧めできないなと思いました。おそらく、本書は Android プログラミングの入門書としては一番簡単な部類に入ると思われますが、それでもプログラミングの本としては難解な部類に入ります。私も理解が及ばなかった部分が1割ぐらいありました。本書が難しいというより Android プログラミングが難しいのです。
よって、いきなり Android アプリを作ろうとするのではなく、まずはC言語で簡単なコンソールアプリを作って、次に Java か C# でオブジェクト指向を勉強して、簡単な GUI アプリを作ってという具合で、やや遠回りに見える手順を踏んだ方が結果的に速いと思います。
本書の特徴
本書の特徴として、開発環境に Android Studio を採用していること、開発言語に Kotlin を採用していることがあります。私はかなり昔、教材とは別件で Android アプリを作りたいと思い立ち、入門書を購入したことがあるのですが、その頃は Eclipse と Java が主流でした。最近は環境が完全に変わっており、Eclipse は全く使われなくなり、Android Sutdio に置き換わっています。また、Java も Kotlin に置き換えられつつあります。本書はそうした最新の事情を踏まえたものになっています。
また、本書は Windows と macOS の両方に対応しています。誤解されがち、と言うか私が誤解していたのですが、Android アプリは macOS でも開発することができ、Android Studio は Windows と macOS の両方に対応しています。どちらもほぼ操作方法は同じなのですが、両者に対応した記述があるのは親切だと思いました。
最初の1冊としては非常にお勧め
さて、本書の評価なのですが、帯にある「Java の入門書レベルは分かる人。」を満たしているなら、最初の1冊としては非常にお勧めできます。本書は色々なサンプルをチュートリアル形式で作り上げていくものになっています。サンプルの網羅度は高くないのでしょうが、どんなアプリでも最低限これは使うだろうという部分は押さえられているという印象を受けました。解説も画像をたくさん使っていて分かり易かったです。
具体的にどんなサンプルが有るかについては Amazon の目次等を参照していただければと思います。
教材アプリに、問題を解くまでにかかる時間を測る機能(1問1問に制限時間を付ける。)を付けたいと思っていたのですが、本書にはそう言ったサンプルもあり、簡単に実装できることが分かったので非常に助かりました。
ただし、あくまでチュートリアル形式なので、リファレンスマニュアルとしては使い難く(一応、索引は付いていますが…)、Kotlin の文法も数十ページしか解説がありません。
これだけで実戦的なプログラミングができるようになるという本ではなく、これをとっかかりとして他の本を読んだり、ネットで情報を調べたりする必要があるでしょう。
Realm?SQLite?
本書ではデータベースに Realm を採用しています。個人的には SQLite の方が良かったです。本書が Realm を採用している理由は、リレーショナルデータベースは SQL 等、前提知識として覚えなければならないことが多すぎるからだそうです。
逆に、私のようにリレーショナルデータベースの前提知識がある場合は SQLite の方が覚えることは少なくて済むと思います。
私が SQLite を採用したい理由として Windows(C#) との親和性の高さもあります。私は、教材本体は Android アプリにして、教材の作問のための自分専用開発ツールを Windows(C#) で作る予定なのですが、Windows(C#) 環境下では Realm より、SQLite の方が圧倒的に資料が多いのです。
誤植が多い
本書の難点として、誤植が多いことが挙げられます。具体的にカウントはしていませんが、オートマシステムの比ではなく多いです。しかも正誤表に記載の無いものもありました。ただ、よく読めばすぐに気付いて自力で訂正できるようなものなので、それほど問題にはなりません。
バージョンアップの影響
本書が執筆された時点では Android Studio の最新版は 3.3 だったのですが、私がこの記事を書いている段階では最新版は 3.6 になっています。そのため、本の通りに進めても上手くいかない場面がいくつかありました。大抵はフィーリングで解決するのですが、非常に苦労した点が2つあったので記載しておきます。
Use AndroidX artifacts
本の方では、プロジェクトを作成する際の設定項目に「Use AndroidX artifacts」というのが出てきますが、最新版の Android Studio ではこの項目が廃止されています。これは最新のライブラリを使うか、レガシライブラリを使うかという設定なのですが、最新版の Android Sutdio では「Use legacy android.support libraries」になっており、項目の名前が変わっただけではなく意味が逆になっています。
どういうことかと言うと、本では、『「Use AndroidX artifacts」にチェックを入れてください。』という指示になっていますが、最新版の Android Studio では、『「Use legacy android.support libraries」にチェックを入れない。』というのが、これと等価な設定になります。(参考資料)
Realm の設定
本書の最後に登場する Realm を使ったサンプル(スケジューラアプリ)を実行すると、実行した瞬間にアプリがクラッシュします。
結局、原因はよく分からなかったのですが、ファイル「build.gradle (Project: MyScheduler)」を次のように修正することで直りました。
修正前)classpath “io.realm:realm-gradle-plugin:5.8.0”
修正後)classpath “io.realm:realm-gradle-plugin:6.1.0”
分からなったこと
本書を読んでよく分からなかったのが View(C# で言うところのコントロール)を動的に生成する方法です。
例えば、こんな問題を想定してみます。
問)
次のうち同意権が有るものをすべて選べ。
選択肢)
- 未成年者の法定代理人
- 成年後見人
- 保佐人
- 補助人
こういう問題を作る場合、チェックボックスを縦に並べて表示することになります。
選択肢(チェックボックス)の数は問題によって変動しますから、決め打ちで生成しておくことはできません。動的にチェックボックスを生成する必要があります。
しかし、そうした手法については本書には解説がありませんでした。
また、課金のロジックの作り方についても解説がありませんでした。
これらは別途調査するか、もしも情報が無いのであればフィーリングで何とかする必要がありそうです。課金のロジックについては、どうしても分からなければ外注も視野に入れています。
今後の方針
既に述べました通り、これだけで実戦的なプログラミングができるようになるという本ではないのですが、一応、とっかかりはつかめました。後は、実戦で都度調べながら学習しようと思います。
というわけで、勉強はこのくらいにして、いよいよ教材の開発に着手します!
コメント