2冊目の参考書に『基本からしっかり身につく Android アプリ開発入門』を購入

『はじめてのAndroidプログラミング』の読了後に2冊目として『基本からしっかり身につくAndroidアプリ開発入門』 (以下、本書) を購入しました。

購入理由は Android 端末のストレージ操作とカメラ撮影を用いたアプリ開発について、短時間で効率的に学習したかったためです。

時間をいくらでも費やせるのであれば、自らソースコードを読み込んで学習しても良いのですが、時間を掛けずに体系的に知識を会得するには書籍を購入して自分で手を動かしながら検証した方が確実です。



基本からしっかり身につくAndroidアプリ開発入門 Android Studio 2.x対応 プロが本気で教えるアプリ作りの基本「技」 (ヤフー黒帯シリーズ)


本書はまさに2冊目に読む参考書として適当な内容で、ある程度のアプリ開発経験を持っていた方が内容が頭に入りやすいです。

というのも第1章でアプリ開発環境に触れた後は、アプリのコンポーネントとそのライフサイクル、リソースやパーミッションの話が始まります。

少しでもアプリ開発の経験があれば、なるほどと感心するところですが、前提知識を持たずに読むと何について解説しているのか具体的なイメージが思い浮かばずに混乱するかもしれません。

さらに付け加えると Java 言語の説明はありませんので、ソースコードを読み、何をしているのか理解できることが前提となります。

とりあえず動くアプリを開発したいという目的であれば、『はじめてのAndroidプログラミング 改訂版』を本書の先に読み、コンポーネントの名称や役割をアプリを動かしながら覚えた方が早いです。

前提知識があった方が望ましい反面、本書ではどの処理で何をすべきであり、何を避けるべきであるかが理由とともに述べられているところが本書の長所です。

具体的な開発経験からくる的確な助言が、処々に述べられており、この説明部分だけでも読むだけの価値があります。




短所はプログラムのソースコードが一部おかしかったり、( 紙面が足りなかったのか ) 本来は分けて説明すべき項目を一つの章にまとめているので、書籍やプログラムの構成が煩雑で分かりにくい部分が存在することです。

また出版時期の影響から現行の AndroidStudio Version 2.3 と ConstraintLayout に対応していません。

ソースコードがおかしい部分の一例としては、Chapter 3 の MainActivity.java クラス (pp.137) が挙げられます。

本書では以下のように View.OnClickListener をインプリメントしているのですが、これでは public void onTextChanged などの一部のメソッドをオーバーライドすることはできません。

public class MainActivity extends AppCompatActivity implements View.OnClickListener

仕方がないので、いつものごとくソースコードの内容を勝手に書き換えて対応します。

public class MainActivity extends AppCompatActivity implements TextWatcher, View.OnClickListener

これが正解かどうかは分かりませんが、本書の説明どうりにアプリが起動するようになるのであれば、ソースコードを改変したところで大きな問題はないというのが私の方針です。

余談ですが、ソースコードの書き方には冗長に見える場面があったり (pp. 208)

for(String foo : bar){
   if(!check()){
      throw new Exception();
   }
}

と思いきや、その直後のページ (pp. 209) では余分な文字を省略したりという具合に書き方が安定しません。

if(!check())
   throw new Exception();

もしかしたら、それぞれ別の人が書いたか、別の時期に書かれたソースコードなのではと思えてきます。

どうでも良い余談は置いておくとして、書籍やプログラムの構成が煩雑で分かりにくくなっていることが顕著なのは Chapter 4 です。

この章ではファイルの入出力とデータベースの利用とコンテントプロバイダの利用を行うクラスを実装しているのですが、どこまでが説明のための実装例で、どこまでがアプリを動かすための要素として必要なクラスなのかが分からずに混乱します。

見方を変えれば、具体的な実装例がいくつも提示されていてありがたいとも言えるのですが、改訂版では分かりやすく整理して頂けると私のような読者は助かります。

当然ながら本書一冊で Android 開発に求められる知識を網羅しているわけではありませんが、通読したことにより具体的な実装方法のみに留まらず、気を配るべき事項や実装中に注意すべき点などを学習することができたことは大きな収穫でした。

本書は Android アプリ開発の入門書を読み終えて、少しステップアップしたい私のような読者には役立つ書籍と言えそうです。

紅葉時の渋峠には要注意!

人生に大事なことがあるとしたら、それは好機を逃さないことです。

時期さえ良ければ驚くほど簡単に物事が上手く進みます。

今回は群馬県を訪れる用事があったので、思いつきで草津温泉に前泊して早朝に渋峠を訪れたところ、終日曇りの事前予報にも関わらず、最高のコンディションを楽しむことができました。

私は天候には恵まれていて 2,000m 超の高山でも展望が望めなかったのは美ヶ原の一回のみ (それも乗鞍岳に向かう途中に立ち寄ったとき) です。

昨年、山口県で行われたライドイベントで晴天だったのは、私が唯一参加したロングライドのみだと聞いたときには自身でも驚きました。

それぐらい天候には恵まれるのですが、交通量に関しては概して正反対のことが言えます。




紅葉時の渋峠には休む間もないほど多くの車が列をなして通り抜けます。

それは平日であっても早朝であっても例外ではありません。

白根山の山頂にほど近いレストハウスでは駐車場に入りきらない車が道路に溢れて、登っている最中から渋滞が見られることもあるほどです。

平日の午前中からこれほど混雑するのであれば、週末の午後などには想像したくもないほどの混雑が予想されます。


平地よりも一足先に秋の訪れを感じられる景色は最高なのですが、車が傍を掠めて行く頻度が高すぎて走行するにも撮影するにも全く楽しくないと言うのが正直なところです。

志賀草津道路と呼ばれる国道292号線は片側一車線の高規格な道路が続きますが、急カーブなどでは車2台が擦れ違うのが精一杯と断言して良いぐらいの狭い区間もいくつか散見されます。

そんなところに大きなカメラを持った歩行者 (登山者) が歩き回り、自転車も数多く走っているのですから、さぞかし運転しづらいだろうと運転手に同情する気持ちも湧いてくるほどです。

その車の運転手も撮影のために一時停止したり、速度を落として走行することも少なくないので、実際にはどっちもどっちと言えます。

ですから、それだけなら構わないのですが、運転手の中には狭い区間で無理やり追い越しにきて当て逃げしたり、下りで急ブレーキを連続で掛けたり、(ときには車内から撮影するためだけに) 威嚇用途でクラクションを鳴らす信じられない輩も存在するので、山道では熊と車にだけは遭いたくないものです。

自転車に乗っているときにしても、自分で運転しているときにしても。


ところで志賀高原の魅力は志賀草津道路に留まりません。

道路が混雑しているときには自転車を降りて登山道を歩けば、いつもとまた違う景色が見えてきます。

2017年10月現在は3年振りに解禁されたという火口付近までの登山道を歩くことも可能です。

ビンディングシューズではやや厳しい石畳の道を進んでいくと、湯釜と呼ばれる火口を見下ろす白根山の山頂近くまでたどり着く事ができます。


火口付近は渋峠や山田峠にも増して風が強く、波打つたびに太陽光を反射して光る湖面がまるで生きている宝石のように様々な表情を見せます。

この景色を眺めているだけでも楽しいのですが、低い気温と風が相俟って体力が奪われやすいので注意が必要です。

特に早朝は10月初旬でも気温が摂氏10度を下回ることも珍しくなく、時には降雪さえ見られます。
紅葉時の渋峠は最高に美しいことに間違いはありませんが、混雑や渋滞に加え、急な天候の悪化や激しい気温の変化、また噴火警戒レベルは下がったとはいえ活動している火山そのもの (特に火山性ガス) に対しての注意が必要とされます。

せっかく訪れるからには訪問時間と天候、火山活動に気をつけて安全に楽しい時間を過ごされることを心から願います。

3年連続!サザンセト・ロングライド 2017 に東京から参加

2015 年から継続して毎年参加しているサザンセト・ロングライドに今年も参加してきました。

約 1,000km ほど離れた東京から3年も連続して訪れているのは、瀬戸内海の美しい光景と豊富な補給食、そして何よりロングライドそのもののイベント性に大きな魅力を感じている為です。

そこに敢えて理由を付け加えるなら、サザンセトそのものの立地の良さが挙げられます。

瀬戸内海と言えばフェリーという具合に、行けるところまで自転車で走り、海に突き当たったらフェリーで対岸まで移動することで、風光明媚な景色の移り変わりと閑静な道路を思う存分に楽しめる土地です。

サザンセトに含まれる柳井や周防大島、上関も例外ではなく、直接的にフェリーで繋がる松山の三津浜から石鎚山は至近距離、しまなみ海道や UFO ラインも2日あれば十分に巡れる範囲です。

反対側に目を向けて徳山から竹田津に渡れば、国東半島や九州まで旅程に含めることも不可能ではありません。

もちろん山口宇部空港を起点に秋吉台や角島や千畳敷を回っても十分に満足できますし、ロングライドでは訪れない周防大島を見て回るという楽しみ方もできます。

あまり滞在時間に余裕がない場合には岩国の錦帯橋に安芸の宮島、広島市内といった具合に隙がありません。

ロングライドの開催される 10 月初旬の山陽地方は暑すぎず、寒すぎずの絶妙な時期なので、サザンセト・ロングライドとの組み合わせで安芸灘、伊予灘、周防灘を巡ることになるのは謂わば自然の成り行きです。

そんなサザンセト・ロングライドですが残念ながら今年は曇天で、瀬戸内の海の青さと透明感はそれほど楽しめませんでした。

日差しで暑くならないので走りやすくはありましたが、午前中は基本的に向かい風だったので快走とまではいきません。



私個人も前日に笛吹峠や片添ケ浜を巡ったり、室積半島や光の山間部を訪れた影響から、飛ばす気にもならないほどに出発前から脱力状態です。

まあ、Nikon D5600 なんて大きな一眼レフをぶら下げているので、とても本気でなんて走れません。

Aグループのほぼ最後尾について午前 6:30 を過ぎたあたりから出発します。




ほどなく第一エイドステーションに辿り着き、知り合いと顔を合わせて、しばし談笑します。

走っているよりも話している時間の方が長く感じるぐらいの時を過ごして、第二エイドステーションへと向かいます。

出発地点から A グループの最後尾に近かったので、第一エイドを出発した時点で B グループのゼッケンの方が周囲に多いぐらいになりました。

A グループと B グループの区分は自己申告とは言え、エイドステーションやゴールの混雑や追い抜きを減らすために分けていることを考えると、ゆっくりしすぎるのも問題かと少し速度をあげて走ります。


第二エイドを過ぎたところからオレンジロードの上り坂が始まります。

週末の峠越えが日常となった今となっては、ただの坂なので減速せずにそのままアウターで突入します。

ところが昨日の疲労のせいか、入り口付近で右脚を攣ってしまいました。

これは恥ずかしいとインナーにギアを落として、左脚でクランク回しながら右脚を伸ばすという間抜けな姿勢で坂を登ります。

登りきったところで審判の方に感心されましたが、昨日も反対側から島をほぼ一周したなんてことは秘密にしておきました。

オレンジロードを抜けた先にあるのは第三エイドの橘ウィンドパークです。この辺りで雲間から太陽が見え隠れしたのですが、結局、雲が晴れることはありませんでした。

そのまま周防大島を出でて室津半島に向かいます。

第四エイドの伊保庄マリンパークの手前で再び脚を攣り、ロングライド後半の山場となる室津半島を越えます。

距離こそ短いものの、最大斜度は 13% もありますので、トルクでクランクを回せない攣った脚では辛いものがあります。

半島を越えた先にある最後のエイドステーションこと道の駅・上関海峡では、夏みかんアイスクリームがまさかの売り切れ。

今年はおはぎのボランティアの方と話せなかったのも少しばかり心残りです。

しかし、その一方で上関から平生にかけての間では、この3年間でかつてなかったほどの絶大な応援を受けました。

その様子は町をあげての応援と形容したくなるほどの歓迎ぶりで、脚を攣って脱力しながら写真撮影ばかりしていることが申し訳なく感じられます。

応援に気力をもらって最後の20kmは少しばかり速度を上げます。

田布施と柳井の市街地を抜けてウェルネスパークの坂を駆け上がり、13:50 前には完走状を受け取りました。

こうして走り終えてみると、改めて柳井も周防大島も上関も平生も田布施も素晴らしいところだということに気がつきます。

スタッフの皆さんも地元の方も本当にありがとうございました。

またそのうちお世話になります。

追伸:
晴れの日の周防大島では、こんな光景が楽しめます