Android
 Computer >> コンピューター >  >> システム >> Android

2019年のAndroidアプリ開発の実際:最新Android技術スタックへの完全移行

Bitotsav '19 アプリがどのように現実になったか

背景:Pantheon '17 ふり返り

約2年前の2017年9月、友人のAshank Anshumanに誘われて、私たちの大学の技術祭向けアプリ開発を始めました。2週間ほど昼夜を問わず作業し、祭りの開幕に間に合うようにリリースすることができました。疲れ切ってはいましたが、自分たちが作ったものが実際に人々に使われるというのは、何とも言えない素晴らしい感覚でした。このアプリは主催者が参加者へ情報を伝える目的を完璧に果たしました。

Pantheon '17 - Google Play
若者が技術力を発揮できる全国的なプラットフォームを提供することを目指して…

レビュー数約120件で評価は4.9でした(Googleのボットになぜか削除されましたが、それはまた別の話)。ソースコードの公開依頼もいくつか受けましたが、断りました。理由はさまざまですが、最大の要因はコードの品質、特に締め切り直前に駆け足で書いた部分に満足していなかったからです。人々が学んだり使ったりできるレベルのコードを書くには、時間も経験も足りませんでした。

再び挑戦へ

時は2018年11月。Ankit Agrawal(いわゆる「祭り担当」)から、学園祭Bitotsavのチームに参加しないかと声をかけられました。Androidに再挑戦する口実を探していた私は即座に承諾し、今回は大説得の末にAshankにも加わってもらいました。

12月はあまりコードを書きませんでしたが、Architecture Components、AndroidX、Jetpackなどの記事を読み漁りました。また、ここ数ヶ月でKotlinにも慣れてきており、特に役立ったのがHadi Hariri氏による全2部構成のコースと、Svetlana Isakova氏とAndrey Breslav氏(KotlinConf 2018で発表)による新しいコースでした。したがってKotlinを選ぶのは自明のことでした。

技術選定

1月前半もほとんどコードは書けませんでした(1月16日まで大学に行けなかったため)。しかし、いくつかの重要な決定を行いました。

  • Kotlinのみを使用
  • フィーチャーベースのパッケージングを採用
  • AndroidXとともにJetpack Architecture Componentsを使用
  • Min API を21に設定(22の方が良かったかもしれません)
  • Android Studio Canaryを使用
  • Git Flow と SemVer の採用
  • 祭り後に公開できるレベルのコードを書く

Jetpack with AndroidX

つまり、2017年のアプリ開発経験からのハードリセットであり、2019年の最先端技術へのジャンプでした。非常に刺激的であると同時に、大きなチャレンジでもありました。

コード、コード、コード!

Ashankがバックエンド(DB・ネットワーキング、FCM通知、バックグラウンド処理)を担当し、私がフロントエンドと統合を担当することにしました。Pantheon '17の時と同じ分担です。開発を進める中で多くのリソースが役立ちましたが、最も優れていたのはGoogleが提供する以下の素晴らしいCodelabでした。

  • Room with a View - Kotlin(ViewModel、LiveData、Coroutinesを使ったRoom)
  • Using Kotlin Coroutines in your Android App
  • Data Binding Codelab
  • Navigation Codelab(Navigation Architecture Component)
  • Background Work with WorkManager
Google Codelabs
ガイド付きチュートリアル形式のハンズオンコーディング体験を提供…

また、GoogleのSunflowerアプリとGoogle IO 18アプリはリファレンスとして理想的なコードベースでした。Android Dev Summitアプリも良い参考資料だったでしょうが、事前に知りませんでした。

googlesamples/android-sunflower
Android JetpackによるAndroid開発のベストプラクティスを示すガーデニングアプリ…

これらを武器に、コーディングを開始しました。私は新しいNavigationアーキテクチャコンポーネントを使ってシングルActivity構成を実装することに決めました。AshankはRoomとFCMから着手です。私もKoinをIoCに使うことを考えていましたが、確信は持てていませんでした。

ちょうどその頃、Joe Birch氏がcaster.ioでKoinのコースを公開しました(プロによる小規模で要点を絞ったコースで、公開1週間は無料!)。これを受けてKoinの採用を決定しました。後悔は一切ありません。Androidサポートは素晴らしく、ドキュメントも最高でした。

NavigationとKoinのセットアップが済むと、UIに取り掛かりました。Material DesignコンポーネントをUIに全面的に採用し、そのガイドラインとドキュメントが大いに役立ちました。そして、大好きなData Bindingも当然使用しました。一方、AshankはWorkManagerを実装しました。Firebase Job Dispatcherの代わりにWorkManagerを使うことにし、フルJetpack構成です。

最初に開発したのはスケジュールUIで、これによってArchitecture Componentsに慣れることができました。次に進んだのは登録フローUIで、おそらくアプリ全体で最も複雑な部分です。LiveDataとNavigationを高度に活用し、ライブバリデーション付きフォームによる3ステップ構成を実装しました(これだけでブログ記事が書けるほど)。この経験でコンポーネントへの自信が深まり、以降は順調に進みました。計画していた機能を完成させ、落とし穴をいくつか発見し、バグを修正しました。

ローンチ

主要機能の実装が完了すると、UIのブラッシュアップや残りのTODOを片付け、ローンチの準備が整いました。仕上げとして、以前から計画していた機能を追加しました。

設定変更のたびにカラーテーマが変わる機能です。これは祭りのテーマ「Colours of Asia(アジアの色彩)」に合わせたものです。

アプリは2019年2月11日にPlayストアで公開されました!

Bitotsav '19 - Google Play
Bitotsav '19、Birla Institute of Technology, Mesraの第29回年次文化祭がついに開催…

Bitotsav '19 アプリ

修正とアップデート

公開から数時間以内に(唯一の!)2つのバグに遭遇し、すぐに修正しました。1つ目はDAOメソッドにsuspendを付けたことに関連するもので、正確な原因は今でも完全には把握できていません。2つ目は難読化によるシリアライズ失敗で、Keepアノテーションで簡単に解決しました。

続いて次のアップデート作業を開始し、フィードにリーダーボードを追加し、スケジュールに夜のイベントを追加しました。さらに3回目のアップデートで細かな機能を追加しています。

祭りは無事成功し、アプリは1000人以上の参加者に使われました!

友人のSushant Guptaによるサーバー側のDB誤入力で小さな問題が発生しましたが、彼は後にそれについてかなりドラマチックなブログ記事を書いています。

DDoS Attack on Bitotsav '19 Website
技術的な解説ではなく、Web・App開発者への教訓となるかもしれない物語…

祭り終了後、最終アップデートをリリースしました。イベント詳細やフィードなどをJSONとしてアプリ内に格納し、プライバシー保護のため主催者の電話番号を削除しました。

コードの公開

いよいよコードをオープンソース化する時が来ました!今回は最初から理解しやすいコードを書くよう心がけていたので、世界に公開する準備が整っていました。洗練されたREADMEを用意し、リポジトリ履歴から電話番号を除去するために、強力なBFG Repo-Cleanerツールを使用しました。

Bitotsav '19アプリのコードは現在公開されており、誰でもレビュー、参照、学習、利用できます。ぜひチェックして、スターを残してもらえると嬉しいです!

aksh1618/Bitotsav-19
Bitotsav '19公式アプリ。GitHubでの開発に貢献…

直面した課題

開発中に直面した課題は以下の通りです。

  • 時間的制約: 最大の課題は、まったく新しい概念を学びながら、数百人が使うアプリを作るまでの時間が極めて限られていたことです。この制約により長時間の連続作業が続き、ストレスと疲労を招きましたが、乗り越えてリリースまでたどり着けました。
  • WorkManagerとCoroutines: 技術面では、WorkManagerとCoroutinesの組み合わせで若干の問題がありましたが、克服できました。今後のAndroid SDK全体でのコルーチンサポート向上に期待しています。
  • API 21: 古いバージョンへの対応の手間を避けるためmin APIを21にしました。ほとんどのAndroid端末はAPI 21以上だからです。しかし驚いたことに、一部の機能がAPI 21で動作せず、特にViewの背景に問題がありました。本当に苛立たしく、min APIを22にしておけばよかったと痛感しました。しかも、API 21端末にインストールされたのはテストに使った2台だけだったのです。
  • テスト端末不足: テストに使える端末が十分にないのも課題でした。Pantheon '17の時は寮に約200人がいたのでテストは簡単でしたが、今回は多くの学生がインターンに出て不在でした。コードへの自信に頼るしかありませんでした。
  • コードレビュアーの不在: 使用した技術の多くが初めてだったため、正しく実装できているか不安でした。レビュアーがいれば非常に助かったでしょう。今でも、コードのクイックレビューをしていただければ大変ありがたいです。
  • 「黙示録」事件: あのDDoS問題にも遭遇しました。上記のSushantのブログ記事を読んでみてください。損はないはずです!

得られた教訓

  • Kotlin + Jetpack = 最高: 最大の収穫は、Android開発が大きく進化し、KotlinとJetpackのおかげで格段に楽しく純粋に喜びを感じられるようになったということです。コーディング中に何度も「至福の瞬間」がありました!
  • 不可能はない: 陳腐に聞こえるかもしれませんが、本当です。努力する意志があれば、どんなに困難でも何でも成し遂げられます。ストレスフルな時期もあるでしょうが、粘り強く進みましょう。自分自身を信じることが大切です!

後悔している点

  • Instant App / App Bundle未対応: 完全に見落としていました。考慮すらしていません。次回こそは。
  • テスト未実装: これは大きな問題だと分かっています。適切なテストがあればずっと楽だったはずですが、時間的制約から「後で」書くことにしました。まだ来ていませんが。

まとめ:2019年のAndroidアプリ開発を始めるなら

KotlinとCoroutinesを使う

  • Kotlinを学び、Kotlinだけで書きましょう!
  • Androidでのコルーチンの使い方を習得しましょう。

AndroidXとJetpackコンポーネントを使う

  • シングルActivityアーキテクチャのためにNavigation Componentを学びましょう。
  • UIのためのLifecycle Componentsと、永続化のためのRoomを学びましょう。
  • Data Bindingは使うべきです!
  • バックグラウンド処理にはWorkManagerを使いましょう。

Material Componentsを使う

  • Material Components ガイドライン
  • Material Components Android ドキュメント

テストを書こう!

私たちは書けませんでしたが、あなたは絶対に書くべきです。テストを省略してはいけません。

ソースコードを参照する

Sunflowerアプリ、IOアプリ、Dev Summitアプリ、そしてもちろんBitotsav '19アプリ!(スターも忘れずに)

最新情報をキャッチアップする

ブログやニュースレターを購読して最新情報を追いましょう。まずはAndroid Weekly、ProAndroidDev、AndroidPub、Kotlin Weeklyあたりがおすすめです。情報過多に感じたら、Huyen Tue Dao氏の素晴らしい講演をご覧ください。

Be Like Water: Keeping up with Android
モバイル開発における唯一不変なことは…

以上です。今はAndroid開発にとって絶好の時代です。さっそく新しいアプリの開発を始めて、楽しむことを忘れないでください!

何か学べることがあれば、コメントを残してください。建設的な批判も歓迎します。

Twitter、LinkedIn、GitHubでもお会いできます。

また次回お会いしましょう!

  1. 【保存版】TikTok(2019年版アプリ)でライブ配信する完全ガイド

    TikTok(旧Musical.ly)は、今や世界中で爆発的な人気を誇るアプリへと成長しました。当初はダブスマッシュ動画やリップシンクが中心でしたが、現在では「コンテンツクリエイター」向けの主要プラットフォームとして広く認知されています。全世界で約8億回ダウンロードされ、有名セレブたちの心もつかんでいます。開発元は継続的に新機能を追加しており、そのひとつがライブ配信(Go Live)機能です。しかしながら、「フォロワー1000人未満ではライブ配信できない」という噂も耳にします。この記事では、そんな疑問にお答えしながら、2019年版アプリでライブ配信を行う方法を詳しく解説していきます。TikTo

  2. Outlook for Androidアプリでメールを設定する方法【初心者向け完全ガイド】

    Outlookは数十年にわたり、世界中の個人ユーザーや企業に愛用され続けてきた定番のメール管理ツールです。パソコンでは主要なメールクライアントとして活用している方も多いでしょうが、スマートフォンではまだ使いこなせていないという方も少なくありません。実は、AndroidスマートフォンへのOutlookの導入は非常に簡単で、わずか数分で完了します。Outlookを使えば、他のどのメールアプリよりも効率的にメールを整理できるだけでなく、スパムや悪意ある攻撃者からあなたを守るというセキュリティ面での大きなメリットも得られます。この記事では、Android端末にOutlookを設定する具体的な手順を詳し