雪国よりDroidKaigi 2018に参加してまいりました。

175 view

こんにちは。モバイルアプリエンジニアのアベユウタです。

実を言うと本業はiOSエンジニアなのですが、なんせ弊社ではモバイルアプリエンジニアが私1名と言うことで、Android開発も行わなければならなく必然的にAndroidでのより具体的な知見がいよいよ必要に迫られている感じがしていました…

と言うことで、2/8~9に弊社取締役兼CTOの入澤と2人でDroidKaigi 2018に参加してきましたので、忘れないうちに各セッションのおおまかな概要と感想を残しておこうと思います。

公式サイトを見ていただければおおよそ想像つくとは思いますが、Androidのテックカンファレンスです。国内でトップクラスのAndroidの有識者たちが事前にcfpで「みんなの前でぜひお話しさせて!!!」と言う感じで応募し、選考されたエンジニアさんたちが、2日間に渡って各セッション内でAndroidに関するテーマでプレゼンをする感じです。

目的としてはそれだけではなく、エンジニア同士の交流だったり知識共有だったりと言うのも大きなテーマ(むしろこっちがメインなんだろうな)なので、参加者もスピーカーのみなさんもフランクにお話しできます。

1日目

WelcomeTalk

https://www.slideshare.net/mhidaka/droidkaigi-2018-welcometalk

行動規範とかアフターパーティーのことやら、注意事項やらと言う説明がありましたが、何と言っても音響・スライドのクオリティが最高ですね。

また、たろーさん(@ngsw_taro)から、Kotlin Developer Conf Tokyoの開催予定が宣言されました。DroidKaigiでもKotlinの話題はかなり多かったので、DroidKaigiから参加する方も多いのではないでしょうか?

Kotlin アンチパターン

https://www.slideshare.net/RecruitLifestyle/kotlin-87339759

実際にKotlinを採用したプロジェクトの際に起こった事例が紹介されてました。

個人的にKotlinの言語特徴や雰囲気はやんわり把握して「Swiftと似ててありがたい!!」ぐらいでしたが、lazyとcustom getterの相違点など僕ぐらいの上部のみの知識レベルだとハマりそうなアンチパターンが多かったので、ベストプラクティスなケースをしっかり教えていただいた感じでした。

ちらっと話題にあったと思うのですがSwiftで言うDelegateみたいなことがKotlinもあるらしい…

Inside Android Architecture Components

https://speakerdeck.com/kobitokaba/inside-architecture-components

Android Architecture Componentsは、Android特有のUIコンポーネントの複雑さに対処するために産まれたライブラリです。
https://droidkaigi.jp/2018/timetable?session=16633

複雑化かつ混雑化されやすいアーキテクトを整理してくれるようなものなのかなーと認識しています。

大きく分けてLifecycle,LiveData,ViewModel,Roomがあり個人的に「あれ?RxJavaにこーゆうのあった気が!!」と言うシーンが多かったです。
LiveDataなんかは特にBehaviorSubjectとかに近しい気がしました。

Android における Model-View-Intent アーキテクチャ

https://speakerdeck.com/oldergod/android-niokeru-model-view-intent-akitekutiya

スキル的に尖ってるエンジニアさんはギャグセンスも尖ってる印象を与えていただきました。

「お母さんから電話がかかって来て、お母さんの電話は取らなきゃだから、アプリはバックグラウンドに行って」とか「メッチャカッコイイキャスト」とか単なるギャグに聞こえるトークもちゃんとした意味が込められているので、非常に楽しいセッションでした。

MV~とかだから、例のごとくMVP(Model-View-Presenter)とかMVVM<(Model-View-ViewModel)かそちら側に近い設計思想の話かな?と思っていましたが、データフローが単一方向だと言っていたので個人的にはFluxに近い思想かなと思っています。

Kioskアプリと端末の作り方

https://docs.google.com/presentation/u/1/d/1K9-Tn13yRAyOmN480DhchDTchVANaUDMn5y4gvRpoLc/edit?usp=sharing
https://t.co/kuJ6beBAOH

これはなんか他のセッションと空気感が違うぞ、と言う興味本位で参加しました。
Kioskアプリとは、カラオケにある端末だったりPlay Storeなどに後悔するのではなく、組込み系アプリのことです(ざっくりしすぎててごめんさない)

(おそらく)iOSだと実現できないようなことで、Android特有のビジネスモデルの1つだと思います。

まだAPI定義管理で消耗してるの?〜Swaggerを用いた大規模アプリ時代のAPI定義管理とコードジェネレート

https://speakerdeck.com/magiepooh/madaapiding-yi-guan-li-dexiao-hao-siterufalse-swaggerwoyong-itada-gui-mo-apurishi-dai-falseapiding-yi-guan-li-tokodozienereto

RESTful APIのドキュメントなど定義を簡単にしてくれるSwaggerというフレームワークのお話でした。

@magie_pooh さんのチームではSwaggerを導入して各アプリエンジニアさんが「ここのAPI使いづらいからこうして〜」とサーバーエンジニアさんにPRを出したり逆に「ここはこういう風に変えたからね〜」というような関係性がうまく構築されているようで、ただただ羨ましい限りでした。(普通のことだとは重々承知しております…)

Swagger自体はiOSに関して言うとmodelまでそのまま使える範囲だと言うこともちらっとお話にあったので、弊社でAPI定義する日がやって来たら是非導入したいです。

MVVMベストプラクティス

https://speakerdeck.com/cheesesand101/mvvmbesutopurakuteisu

MVVMといえば、いつの間にかとてつもないViewModelが出来上がっちゃいました!みたいな人いらっしゃるんじゃないでしょうか(私です)

基本的にViewModelはViewの状態を保有し、ModelはViewModelの関心を持たないようにするのが常識なようですが、ViewModelの交差が激しくなると、どうしてもModel辺りにどこかしらの依存性がある処理を含ませたくなってしまっていました。

基本的にはおなじみのRxJavaを使用してViewModelの変更をViewに伝える方式でしたが、それぞれのレイヤーごとの関係性を丁寧に整理したセッション内容で、かつAndroidだとどんな空気感になるのかな〜と触れられたのが収穫でした。

個人的にはCleanArchitectureよりもうちょっとおおらかで、MVVMよりもう少し細分化されたようなアーキテクトが好きだったりしています。

Kotlin版CleanArchitectureのテンプレート作ったら爆速開発になった話+α

https://speakerdeck.com/kiuchikeisuke/kotlinban-cleanarchitecturefalsetenhuretozuo-tutarabao-su-kai-fa-ninatutahua-a

やる人いると思った!!
やっぱいた!!!

CleanArchitectureとかぐらいになると毎度毎度presenter作って〜usecase作って〜と煩わしさを感じてしてしまうシーンが必ずあるのですが、これをある程度自動的に最初から作成してくれる超画期的なものです。

育休に入る時にここまでしてくれる上司がいたら、感激しちゃいますね(逆にここまでしないと育休取れない…なんてことはないと信じたい)

After Party

1日目全セッションが終了後に参加者全員でのアフターパーティーが開催されてました。

料理やお酒、デザートなどもたくさんあってさすが国内最大級のテックカンファレンスと言う感じでした。

アフターパーティーではおもにLINE社のコキチーズさんや新潟のウォーターセル社のなかざんさんとお話しさせていただきました。

なかざんさんには日頃からTwitterでお世話になっていますし、コキチーズさんは2/10に参加してきたFirebase Japan User Groupの主催者と言うことで驚きましたが、非常に有意義なお話をさせていただきました。

また、個人的に@chooblarin さんの元同僚と言うことで紹介していただいた、DroidKaigiスピーカーの@magie_pooh さんやDeployGateさん、RoomClipさんのエンジニアの方々ともお話をさせていただいて、勉強になること三昧でした(ほとんど食べてないし、飲んでない…)

2日目

…ごめん会社のみんな!!

実は午前中に参加しようとしてたセッションをすっぽかして、ブースで色んなエンジニアさんとお話ししてました。。。
(なぜが聞いてないセッションのOfficehoursに来てくれているスピーカーさんともお話できた)
色んな会社さんのエンジニア事情も聞けたし、ブースでパンフレットとかも貰ったからそれで勘弁してください。

React Native Androidはなぜ動くのか

https://www.slideshare.net/Nkzn/react-native-android-87622684

こちらは、アフターパーティでもお話しさせていただいた新潟のウォーターセル社@Nkznさんのセッションでした。

第1回DroidKaigiから毎年スピーカーとして登壇されており、会場でも色んなエンジニアさんとお話ししている時に「新潟から来ました!」と自己紹介すると「ナカザンさん知ってます??」と言うシーンが複数回ありAndroid界のミッキーマウス的な存在でした。(?)

内容としては、ReactNativeと言うクロスプラットフォーム開発を可能とする銀の弾丸よくできたひのきの棒のことです。(何を言ってるかさっぱりわからない方はナカザンさんのDroidKaigi2017のスライドをご覧ください)

今年はアプリのお話という感じではなく、どうやってjsがAndroidとして動いているのかだったり、個人的にNativeModuleって実際のコードでどの辺りを指すの?という疑問をすっきりと教えていただいたような感じでした。

ReactNativeを採用するプロダクトに関しては、事前に各方面から要検討する必要がありますが、Android&iOSのSDK周りの手綱を握る人が1名以上いて、あとは JavaScriptを愛して止まないjserたちでプロジェクト構成ができてしまう気がしているので、Android&iOSのエンジニアを集める人材コストを考えると非常に魅力的だと思っています。

Android案件の見積もりに現れる要素、あるいは丁寧に埋設された地雷たち

https://www.slideshare.net/secret/RxyMEMb2MRHZf

このセッションはタイトルからして惹かれてしまったのですが、つまり見積もりだったりプロジェクトor案件でのリスク想定に関するお話でした。

日頃からAndroidに限らず他の案件の要件定義の工程付近でモヤっとした経験があり、そのアンチパターンのベストプラクティスが紹介されている素晴らしいセッションでした。

弊社は主にWebのお仕事がメインですが、このセッションの内容はAndroidとかWebの垣根を超えてプログラマーやその上流工程を詰める人に共通する箇所が多かったので、後日弊社エンジニアで公開された動画の視聴会を行いたいです。

個人的にこの2日間でベストセッションでした。
@eaglesakuraさんみたいな方がプロジェクトマネージャーのプロジェクトにアサインされるとプログラマーはきっと幸せになると思います。

体育会系女エンジニアの孤独なアプリ開発教室

https://www.slideshare.net/YurikoNagao/droidkaigi2018-87644086/YurikoNagao/droidkaigi2018-87644086

このセッションはフリーランスでアプリ開発をされている@nagaoyurikoさんで会社勤めのエンジニアさんたちとは、また少し違う独特な空気感が出ていたセッションでした。

私自身も個人的にアプリをリリースしたり、案件をもらったりという経験があったので「それわかる〜」とひたすらツイートしてた記憶があります。

特に「やたらと便利機能を追加するな!」だとか「どうせ1人全役なんだから〜」みたいな考え方は、ものすごく共感させていただいてました。(ぼくはフリーランスではありませんが)

セッション後のoffice hoursでアプリ内のスクレイピング周りでお話しさせてもらったのですが、非常にテクニカルな方法をたくさんご存知な方でフランクに教えていただきました。

ちなみに、僕がディズニーに遊びに行く時に使ってるアプリの開発者であることが判明してテンション上がってました。

コードで見るFlutterアプリの実装

https://speakerdeck.com/konifar/kododejian-ruflutterapurifalseshi-zhuang

直前にFlutterでDroidKaigi iOSアプリを開発した方です。

以前私のTwitterにKotlinNativeの謎の公式(?)Repositoryに運営者の方から「Welcome to contrib!」みたいなことTwitterで言われたのですが、当然できるわけもなく、だからと言ってDroidKaigiのアプリをSwiftで書いちゃうのも如何なものかと思って見守っていたのですが…

謎のFlutterというクロスプラットフォームを実現するGoogle製SDKを使用した非公式アプリがDroidKaigi当日早朝2時くらいにAppleの審査が通過したらしく、リリースされていました!

何よりAppleとの死闘お疲れ様でした。

Flutterに関してはMaterialDesignに準拠したUIコンポーネントが豊富なこと、開発にIntelliJが使えること(Plugin必須)、FirebaseのPluginも公式で準備されているとのこと、、、

非常に未来感溢れる内容でワクワクしたのですが、そもそもDartの文化圏に触れたことがないので、当然Dartのライブラリって何があるの?状態でした。

終始「なんだコレ!!??なんだコレ!!??」の状態でしたのですいませんあんまりお話しできないです。

ただこのセッションはそのまま流用でtry!SwiftやiOSDCで(Appleとの死闘含め)お話ししていただいてもiOSエンジニアにとって興味深いセッションでした。

2日間のまとめ

個人的にここまで大きなテックカンファレンスに参加したことはなかったので、人の多さとスケールの大きさなど色々なところで驚きの連続でした。

またモバイルアプリエンジニアで絞ると新潟にはさほど人口は多くなく、あまり共通の話題で盛り上がれるシーンが少ないのですが、DroidKaigiではAndroidエンジニアさんはもちろん、どっちもやってます!と言うツワモノエンジニアさんやiOSエンジニアさんもちらほらいらっしゃったので、とても幸せな世界観でした。

夏秋ぐらいにiOSDC2018がおそらく開催される情報も入手できたので、「iOSのテックカンファレンスと聞いたら行くしかない!(できればネタ見つけてcfp出したい)」と勝手に思ってます!
是非iOSDCで新潟から来た田舎者を見つけたら声をかけてくれると喜びます。

最後にたった入社3ヶ月なのに出張として参加させてくれた会社のみんなありがとう!!
世界は思ってるより全然広かった!!!
みんなもWebの新しい技術どんどん勉強して教えてね!!!
あとアプリ興味あったらいつでも言ってね!!!

おまけ

実は1日目にdeployGateさんのブースで抽選が行われており、入澤さんが1位に当選していました!!

2日目の朝
私「そういえば昨日の抽選どうでした?」
入澤さん「あ、忘れてた。あれって抽選結果会場行かないとわかんないんだっけ?」
私「確かTwitterでわかるんでちょっと待ってくださいね….ん?え… 当たってる!!!!!(´⊙ω⊙`)
入澤さん「ほらね、景品BMWだったらそのまま乗って帰るわ。」
私「…」

deployGateさんから景品として、deployGateさんオリジナルパーカーをいただきました!!
ご本人もご満悦の様子で写真撮影。

オフィスでの普段着として常時着用しておりますので、deployGateさんの景品を一目見たい!と言う方はお気軽にクーネルワークに遊びに来てください!!

\ SNSでシェア /

WRITER

アベユウタ

プログラマー&エンジニア アベユウタ

2017年11月入社 制作部 所属

新潟市出身です。
iOS/Androidのモバイルアプリ開発が好きです。
好きな言語はswiftです。

休日もパソコンカチカチしているタイプの人です。

TAGS