GDG DevFest Tokyo 2019 観戦記

# はじめに
12/14(土)開催の`GDG DevFest Tokyo 2019 `行ってきました。
[公式サイト](https://tokyo.gdgjapan.org/devfest2019)

この記事は個人の備忘録になります。

# 参加したセッション
ちょっと大きくて見にくいですが、全体のセッションはこんな感じでした。
![公式ページのガイド](https://tokyo.gdgjapan.org/img/devfest2019/DevFestTokyo2019.png)

今回は、普段業務で使うものはもちろん、
普段触れていなくても来年使いそうな技術のキャッチアップ目的で参加してきました。

## 11:30~ 遅刻+企業ブース周り
~~前日の忘年会で夜遅くまで飲んでいて、当日朝も油断して~~ 遅刻して参加しました。
開会式は参加したかったんですが、のんびりする時間が出来たのでのんびり企業ブースを周り、
ノベルティグッズを収集しました。
(CircleCI Tシャツ いただきました)

LINEの企業ブースでも結構ゆっくり説明を聞くことができて、いくつか自社公開のOSSを
紹介してもらいました。
https://github.com/line/feature-flag-android
https://github.com/line/lich

feature-flagはこの後のセッションでも語られていた & DroidKaigi2019でも
セッションテーマになっていて、非常に興味を持ったテーマだったので、
実務でも使えるか試してみたいです。
lichはまだあまり実務に投入するイメージが沸かない(そのプロジェクト特有になりそうで）ですが、
結局車輪の再発明になるから後々これにたどり着くことになるのかな...
(間違ってる可能性大ですが、聞いたイメージはAndroid Jetpackのutility)

スピーチに多くの方が参加していたので、お昼ご飯も並ばずに食べれたのは良かったです。
（セッションが終わった時間くらいから行列出来てたので...）

## 12:20~ パネルディスカッション
えーじさん、及川さん、田中さんの3名によるキャリアについてのディスカッションでした。
3人ともなかなかインパクトのある経歴でした（そのまま、参考にはならないよね..）

印象に残ったのは、

**ソフトウェアファーストっていう本に書いてあるので~（及川さん）**
![ソフトウェアファースト](https://images-na.ssl-images-amazon.com/images/I/51dfGhumKtL._SX350_BO1,204,203,200_.jpg)

実際に、ソフトウェアファースト片手にトークしてたので。
「宣伝すごいな〜笑」と思いましたが、本の中身の一部を使いながら説明をしてもらって、
実際中身はすごくいいんじゃないかと思いました！
（~~今、カイゼンジャーニー読んでるから、次で..~~）

## 14:10~ Goの10年の道のりとその変遷
資料は見つからず...印象に残ったのは...
- 言語の祖先にALGOLというのがある
- ALGOLからアメリカ(C)かヨーロッパ(PASCAL)かでいくつかの言語の分派が生まれた
- それぞれの分派のエキスパートが作ったのがGO
- 元はC++のビルドが遅く、言語が大きくなりすぎたため
- GOはプログラミングするための重要な要素に絞って成長した

話についていけない場面もいくらかありましたが、最後の部分が今GOが流行に乗ってる理由なのかなぁって思いました..
学習環境( https://go.dev/ ) もあるので、来年は手を付けてみたいです。

## 15:10~ 来年に備えるために Android の知識を網羅する
[資料](https://speakerdeck.com/wasabeef/looking-back-on-this-android-year-in-preparation-for-next-year)
（qiitaでspeakerdeckって埋め込みできないんですかね...）

Android Jetpack から Kotlin まで紹介が広く、個人的には一番刺激を頂いたセッションでした。
薄々感じてましたが、MVVM ＋ Coroutines は今後圧倒的に主流になりそうですね..
MVVM と 何もなし(良くはないけど、時間がないとかで導入出来ない場合) のどちらかが増える予感...

以下、メモ。

### Android10 highlights
DarkTheme / GestureNavigation / LocationControls

- LocationControls -> BackGroundのLocationはAndroid10で必要になる
- GestureNavigation -> Android10 NavigationBarの透過
- マルチウィンドウ -> 割と以前からある機能、両方は動画流さないとかの制御が必要。

### AndroidStudio4.0 highlights
- Jetpack Compose -> 後述
- Motion Editor -> AnimationのGUI実装が可能になる(Stableじゃない)
- MultiPreview -> 開発者に取っては嬉しい機能

### Kotlin
- 2019 Kotlin First
- Coroutines RxJava -> Coroutines
- 2020年は Kotlin Flow で Rxの置き換えが主流になるかも

#### Coroutines メモ
- 軽量スレッド
- cancelが簡単
- 失敗時のハンドリギングが簡単
- launch = Coroutines Builder
- launch の戻り値は Job
- Job同士は親子関係を作ることができる
- 親のキャンセルが子供にも伝播される
- launch は Scope の中で呼び出さないといけない
- Dispatchers.Defaultがいい感じにしてくれる
- UIはMain
- DB、ネットワーキングはIO
- scopeにスレッドも与えることができる

(個人的に Coroutines は今年実務で使い切れなかったので、来年は使い倒したい)

### Architecture(MVVM)
- Googleの推奨アーキテクチャとしてMVVMが取り上げられた
- MVVMを設計しやすくするためにjetpack
- Model = ViewModel with LiveData
- Repository = LocalSource / RemoteDataSource

### Jetpack
- AppCompat = 古いOSを吸収してくれる
- Android KTX = Kotlinの拡張機能Set
- AAC(AndroidArchitectureComponents) = 堅牢でテストと麺店アンスが簡単なアプリの設計を支援するライブラリ

### Navigation
- 画面遷移を先鋭を視覚的に実装できる(Story Board)
- XMLだから自分で定義、修正することもできる
- 画面間のデータを型安全に渡すことができる

### ViewModel+LiveData
- ライフサイクルを意識した方法でUI関連のデータ田を保存及び管理できる
- ViewModel - Fragment間のデータ共有、画面回転で破棄されない
- LiveData - Fragment~（メモ取れず...）
- ViewModelのデータをObserveすることが一般的。ViewModelでCoroutinesやFlowが登場する

### Retrofit+OKHttp
- OS5.0以上じゃないと動かないとようになっている
- Retrofitは GraphQLには対応していない

### DI
- Dagger / Koin / Kodein --- Daggerは難しい

(GDEの方が難しいと言われると、深みが強い...速いは魅力的だけど..)

### Test Lab
- クラウド上の端末でテストできるサービス
- instrumentの実行も出来る
- Appiumとかには対応していないし、するつもりもないらしい

## 16:05~ 休憩
３時間くらい講演を聴き続けたので、休憩＆PCの充電...
（充電し忘れて参加したので）

後から、これ -> [Yearly Web 2019](https://tokyo.gdgjapan.org/devfest2019/session/jxck) に参加すれば良かったと気付きましたが..
ハンズラボも周ってみましたが、途中参加むりっぽかったので、すごすごとその場を後に..

## 17:00~ Flutter Overview
資料を熱望します...
以下、資料の写です。

自分に取って、重要な一文は、
「FlutterはUIフレームワークである。UIをたくさん、早く作りたい時に有利」です。
UIをFlutterに任せるので、既存のiOSデザインに寄せたい時は選択肢に入れない方がいいと思いました。
新規開発でマテリアルデザインを進めれるなら、有力だと思いました。

```
クロスプラットフォーム、アプリを作るためのUIフレームワーク
Flutter Interactにてアナウンス v1.12 Stable
Flutter 2年半(2017/5 αリリース)

<Flutterの特徴>
Dart言語
クロスプラットフォーム
宣言的UI
高い開発効率（ホットリロード）
高い実行パフォーマンス

IDE is VSCode

高い実行パフォーマンス
-> ネイティブ・コンパイル => ARM(スマホは全部これ) x86

★★★Flutterの大きな特徴★★★
GPU活用
 Skia(2D Graphicsのライブラリ)

 Dart
  version 2.7(最新は)
  Static typed（コンパイル型言語に近い特徴、文法もJavaに似ている）
  JIT + VM
  AOT
  Javascriptの置き換えを目指した

Flutter向きなアプリとは？
UI（部品や画面）の多いもの
 FlutterのUIの作りやすさの恩恵が大きく受けられる
 ex. MediaNewsのアプリ、SNS etc...

向かないもの
少数画面、機能特化のもの
 カメラ、動画、地図...など?
 ゲーム
 　作れはするが、ゲーム特化のフレームワークではない

Flutterの検討シーン
新規アプリの開発(既存のコード資産がない場合)
プロトタイプ

既存アプリへの追加
Add-to-App
Flutter部分とネイティブ部分は別れてしまう、ネイティブで実装したコードの利用/流用がやりにくい

Flutterむきなアプリとは？
　FlutterはUIフレームワークである。UIをたくさん、早く作りたい時に有利。

Flutterのアーキテクチャ
フルスタック
 レイアウト計算から画面描画までFlutterがやる
ネイティブのUIフレームワークを利用しない

Flutterのアーキテクチャ
Pros: プラットフォーム間の違いが小さい
Cons: ネイティブとの混在が難しい

ネイティブ連携
プライグイン機構
DartからAndroid/iOSを呼び出せる。
デバイス依存のもの（カメラ、GPSなど）を使うことができる

flutter.dev/showcase
in Japan -> CARTUNE

Web
アプリをそのままWebに持っていく時に使う
インタラクティブ性が高く、グラフィックを多用したもの
HTMLのドキュメントの構造化の置き換えではない(SEOには対応していない、難しそう)
```

# まとめ
こういう記事書くなら（当初そんなに書こうと思ってなくて..）予め写真もっと撮影しておけば良かったです。

とはいえ、初めて参加したイベントでしたが、自分の業務や興味とも関連していて満足度高かったです！
場所が大学だったので、懐かしい気持ちになれました！

今年のまとめを聞いてましたが、もう追い切れないくらい知りたいこと、興味あることが多いですね。
イベントでその道のトップクラスの人から知見や情報を一気に得ることが出来たのは、
このイベントに参加して良かったと思いました。