降りつぶし.netは,「⁠日本の鉄道駅」にいつ乗下車したのか,を管理するソリューションです。前々回まで,過去の記録を管理するためのWebアプリケーションと,そのWebアプリケーションとデータを同期する仕組みについて説明しました。前回と今回にわたり,リアルタイムに記録を更新することができるスマホアプリの開発について説明します。最終回となる今回は,前回取り上げたiPhone用アプリの完成後に制作しリリースした,Android用アプリケーション「降りつぶしroid」です。2.2以降で動作する,降りつぶし管理のためのアプリケーションです。最初のバージョンは2012年12月にリリースしました。iPhoneアプリのリリースからまる1年かかってしまいました。これは,Android開発には様々な落とし穴があり過ぎたこと,筆者自身がJavaに対して苦手意識を持っていたこと,の2つによります。Androidアプリの経験は,2011年に既に動作しているアプリの修正作業などを手伝う機会があり,その後同年9月に(すなわち,i降りつぶしの開発と並行して)地図を操作するアプリのテスト開発を受託し,3ヵ月で一応完成させています。これが今考えると実にひどい実装で,要求仕様どおりには動作しているのですが少しでも機能拡張しようとするとうまく動かなくなる,そんな代物だったのです。Javaについては,得意としていたC++でできることがあれもできないこれもできない,ということで面倒くさく感じていました。2012年,Javaの案件(おもにServlet)の受託が急に増えたためそうも言ってられなくなり,慣れてきて苦手意識もなくなりました。これも年末にリリースを間に合わせる原動力になりました。Mapsを使っていました。このAPI,レイヤの追従描画がスムーズでない,そのままではタップジェスチャを独自に拾えない,マーカーは重なりも考慮しながらすべて自前で描画しなければならない,吹き出しは完全に自前で実装しなければならない,一部APIがドキュメントどおりに動かない,Honeycomb(3.0)からの新しい画面の仕組みであるフラグメントと共存できない,とないないづくしの恐るべき代物で,かなり苦労させられました。V2という新バージョンのAPIが公開されたのです。Mapsアプリとほぼ同じ操作もできるというこのAPI。これは従来のAPIとまったく互換性がありませんでした。その時点でアクティビティを切り替える実装などすべて済んでいたので,いまさらすべての画面をフラグメントにつくりかえることなど,年内リリースの目標上,絶対に不可能です。そんなわけで,初版では古い地図APIによる古い描画の地図画面となっていました。2013年11月,ついにV2への対応が完了しています。Beans(4.1)のUIを古いAndroidでも動作させることができるサポートライブラリの完成度が上がったことで,重い腰をあげることになりました。この連載に合わせて完成させるというのもきっかけの1つではあります(笑⁠)⁠。Beansの標準的なUIである,アクションバーおよびナビゲーションドロワーを持つアプリケーションです。アプリの初回起動時の表示は地図画面となりますが,それ以降の起動時は最後に表示していた画面を再度開くようになっています。地図画面i降りつぶしの地図画面UIを踏襲しつつ,操作感やミテクレをAndroid版の地図アプリに近づけた画面となっています。スワイプやピンチで表示領域を変化させることができます。回転や傾斜も可能です。上部にはコンパス(必要に応じて表示⁠)⁠,検索ボックス,および現在位置移動ボタン(タップにより中心が現在位置に移動)があり,下には表示切り替え用の半透明なセグメンティッドコントロール風の(実は)ラジオボタン,またズームイン/アウトボタンがあります。地図部分をシングルタップすると,トグルで検索バーおよびラジオボタンの表示・非表示が切り換わります。広くない地図画面を少しでも広げるための機能です。画面上には,降りつぶしroidが管理する鉄道駅がピンでプロットされています。赤いピンは乗下車していない駅,緑のピンは乗下車済の駅です。これらのピンをタップすると,情報ビュー(吹き出し)が表示されます。表示されている情報ビューをタップすると,後述する「駅情報画面」が表示されます。地図画面での表示の切り換え地図の下部には2セットのセグメンティッドコントロール風のラジオボタンが配置されています。これらの操作とその意味は,第5回の記事で説明したi降りつぶしとまったく同一です。i降りつぶしにおいては,これらはツールバー上に置かれていました。降りつぶしroidではこれが地図上に半透明なボタンとして置かれています。一覧表示画面は単なるリストビューなのですが,これらのボタンを消してしまうと地図表示に戻る方法がなくなってしまいます。そのため,ぶかっこうなのですが,一覧表示でもボタンを表示したままにしています。上部の検索ボックスをタップすると地図検索モードとなります。i降りつぶしでは,単純な地点検索と,駅の絞り込み表示の設定という,2つの機能が実装されていましたが,降りつぶしroidでは後者は未実装となっています。次期バージョンでは実装される予定です。APIで検索し,検索結果のうちユーザが選択した地点を地図の中心に移動させます。地図画面の情報ビュー(吹き出し)をタップした場合,あるいは地図画面または他の画面にて表示されている駅の一覧から特定の駅をタップした場合,この画面が開きます。メモ画面レイアウトは異なりますが,これらの画面の機能も第5回で解説したi降りつぶしとまったく同じです。駅情報画面の「今日」ボタンをタップすると,乗下車日画面を出すことなく直接その時点での日付がデータベースに登録されます。「乗下車」をタップすると乗下車日画面が開きます。乗下車済か未乗下車かの切り換えはチェックボックスで行い,年・月・日の設定は数値ピッカーで行います。この画面は,Honeycomb以降の環境で実行した場合のものです。バージョン2.xには数値ピッカーが存在しません。そのためリフレクションで日付ピッカーからリソースを取り出し,各環境にマッチしたUIでの日付入力を実現しています。両者の切り分けは,ベタですがバージョン別にレイアウトファイルを用意し,さらにロジックも単純なif文での場合分けです。芸能ライターやら劇団主宰やらいろいろ経て現在はよろず請負プログラマ。最近の開発はPHP,JavaScript,Java,MTプラグインなど。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。