Loading
BLOG 開発者ブログ

2019年12月16日

GDG DevFest Tokyo 2019参加レポ ~Androidエンジニアの歩き方~

年に一回のGoogle Developer Group (GDG) による技術の祭典DevFest!
全国各地で開催されますが、東京でAndroidのセッションをメインに聞いてきましたので内容をご紹介します。


この記事は アイソルート Advent Calendar 16日目の記事です。
こんにちは。
モバイルソリューショングループのkatsu.rです。

はじめに

GDG DevFest Tokyoは、Android、Google Cloud Platform(GCP)、Web、Firebase、Machine Learning (ML)、Assistant、Flutter、Goといった様々な技術の最新情報や現場でのノウハウを一日で学べるデベロッパー向けイベントです。

参加セッション

  • Journey of Feature Flag development in LINE Android
    • 実際のLINEのAndroidアプリ開発の中で、一つの巨大なコードベースに対して多くの開発者が同時に様々な新機能の開発、修正、そしてリファクタリングを行っていく中の「ツラミ」の解決策について

  • ネイティブアプリとWebアプリの差を埋めるには:Project Fuguとマルチスレッドプログラミング
    • PWA、Project Fugu、WebAssembly、Web Workerといったキーワードを軸に、ネイティブアプリとWebアプリの差を埋めるために行われている活動についての紹介

  • 来年(みらい)に備えるために Android の知識を網羅する
    • Android開発初級〜中級者向けにAndroidの現状の技術のまとめ、これからについて

  • AndroidX の歩き方
    • Android 公式のアーキテクチャーガイドに沿って、最新の AndroidX の各ライブラリを活用した Android アプリ開発の基礎について

次に、各セッションの内容と感想について書いていきます!

Journey of Feature Flag development in LINE Android

Gitフローでよく聞く「Feature Branch」を用いた開発では、
MainBranchからある機能を開発するためのFeature Branchを作成し、
機能の実装が完了したらMainBranchマージするという方法を用いていると思います。

ですがLINEでは100人程の開発者がおり、一週間で20000行のコードが変更されるような規模で開発が行われており、
そういった開発環境の場合、「Feature Branch」を用いた開発はかなり複雑になります。

これを解決するためにLINEで取り入れられたのが「Feature Flag」です。

「Feature Flag」を用いた開発以下のように進めます。

  • 未完成の内容などもメインブランチにマージしていく
  • フラグをつけて、開発中の機能が無効になるようにする

この開発方法のメリットは以下になります。

  • コンフリクトを小さくできる
    • 細かくマージするので開発範囲が小さくなるので、そもそも起きる可能性が少ない、起きたとしても変更が小さい
  • リリーススケジュールがスムーズになる
    • 機能の開発とリリースを分けて考えることができる
  • 機能の有効無効が簡単
    • リリースブランチでバグが見つかった場合、該当の機能のみリバートするという複雑な対応が必要ない
  • 開発者同士の共有が可能になる
    • 進捗の管理も簡単に把握できる

感想

私も「Feature Branch」を使用した開発が普通だと思っていたので、
このような開発の進め方があると知って驚きでした。
実際に行われている開発方法を聞くのはとても参考になりました。
このような知識はこれからもどんどん吸収して、自分の中の選択肢を増やしていきたいと思いました!

ネイティブアプリとWebアプリの差を埋めるには:Project Fuguとマルチスレッドプログラミング

ネイティブとWebの間には溝がある

  • ビーコンや楽器など、ハードウェアにアクセスできない
  • オフラインで使えない
  • システムにアクセスできない(電話帳、ファイルなど)
  • メモリを自分で確保できない
  • 通知がこない

などなど

そんな今までWebでできなかったことをできるようにするProject Fuguについての紹介。
(ふぐ→美味しいけど下手に料理をすると死ぬという由来から取ってきたらしい。)

API一覧は以下から確認できるそうです。
goo.gle/fugu-api-tracker

ここでは、先に挙げていたWebでできないことがたくさんできるようになっているそうです!
例えば、ブラウザで特定のディレクトリ配下のファイルを取得する、などなど

感想

私自身あまりWebに詳しくなかったので、このセッションではWebでできないことって何だろう?
ということを聞きたくて参加しました。
(なので技術的なことはあまり書いていません、、、)

Webで今までできないとされていたことがわかったのはとても良かったです!
ただ、Webでもネイティブと同じような機能の実装ができるようになりつつあることも分かりました。

これからは機能的な面というよりは、配布方法、ユーザーの使用状況、コストなど
あらゆる面を考えていかないといけないと感じました。

来年に備えるために Android の知識を網羅する

  • Android10
    • 位置情報のパーミッションが「常に許可」「App使用中のみ許可」「許可しない」の3択になった
    • ダークテーマ
    • ジェスチャーナビゲーション(戻るボタンの廃止)
    • フォルダブルフォン(折りたたみ式なので、折り畳んだ後も正常に動作する対応、マルチウインドウで画面の比率が変わることへの対応が必要)

  • Android Studio 4.0
    • モーションエディター(アニメーションをGUIで実装可能)
    • マルチプレビュー(解像度別に一度にレイアウトの確認が可能)
    • ライブレイアウトインスペクター(実行中のアプリを3Dに視覚化でき、プロパティの確認が可能)

  • Kotlin
    • Kotlin-first(公式ドキュメントがKotlinになる)
    • Kotlin Coroutines(軽量スレッド、キャンセル・エラー時のハンドリングが簡単)
    • Kotlin Flows
    • Kotlin/Native(UIは作れないが、ビジネスロジックはWeb,iOS,Android共通で作成可能)

  • Architecture
    • MVVM(Googleの推奨アーキテクチャ)

  • Jetpack
    • MVVM設計で使用しやすいためのライブラリがたくさん存在する
    • 下位互換性を備えたアプリを簡単に作成するためのライブラリ(AndroidX)
    • 70以上のライブラリ軍
    • ViewModel+LiveData
    • Lifecycle
    • Navigation
    • JetPackCompose(UIのツールキット)

  • Networking
    • Retrofit(+OkHttp)がデファクトスタンダード

  • DI
    • Dagger(慣れるまで難しいが、利用実績は多い)

  • Firebase
    • TestLab(クラウド上で複数端末の動作確認が可能)

感想

現在のAndroid総まとめ!という感じでした。
内容自体は先月東京で行われたAndroid Dev Summit 2019報告会にも参加したので
聞き覚えのある内容が多かったのですが、
これからはこれらの技術をしっかり使いこなしていかないとなということを改めて感じました。

AndroidX の歩き方

アプリのアーキテクチャガイド(ドキュメント)に沿って、
AndroidXを使ってアプリを開発をするときのまとめ。

  • まずはapp/build.gradleに必要なライブラリを記載
  • 画面は Fragment で作る(Activityは一つ)
  • 画面表示のデータは LiveData として ViewModel が持つ
  • Navigation ライブラリで画面遷移を行う

ActivityとFragmentについて
AndroidX出てくる前のActivityとFragmentの役割は以下。

  • Activity
    • エントリーポイント
    • ライフサイクル
    • UIの保持・制御
  • Fragment
    • UIを保持・制御
    • Activity のライフサイクルの分担
    • 画面遷移
    • データの読み込み・保持

AndroidXを使用すると、それぞれの役割はライブラリを使うことで以下のようになります。

データについて

  • データベースは Room で実装
  • ネットワークやデータベースの非同期処理はコルーチンで行うのがこれからの主流
  • Repository オブジェクトの中身はアプリによって様々

感想

AndroidXを使ってアプリを作成する方法が具体的に説明されていたのでとても分かりやすかったです!
主流のやり方を、しっかり自分たちの開発に組み込むイメージが掴めたと思いました。

まとめ

Androidの今までと、これからの開発方法について学べたのでとても勉強になりました。
既存のソースコードのアップデートもこれからどんどん提案していきたいと思います!

Android以外もキャリアについてのパネルディスカッションや
デザインについてのセッションにも参加しました。(CodeLabも行きたかった…!)
1日でこのようなお話を一度に聞ける機会はなかなかないのでとても楽しかったです!
(写真はランチチケットでゲットしたお昼ご飯と提灯!)

明日はgoro.kさんの「新時代無線規格のWi-Fi6について、色々と調べてみた。」です。
よろしくお願いします!