ナカザンドットネット

Android Developer's memo

DroidKaigi 2018で喋ってきました+α

はい、DroidKaigi 2018の帰りの新幹線の中で書いています。最高のDroidKaigiでしたね。来年も楽しみです。

ということで、忘れないうちに各セッションに一言感想を残しておこうと思います。

(あとでスライドを見つけてきて貼ります)

2/8(木) 1日目

オープニング / ひつじ

オープニングムービーにスピーカーの名前が列挙されてたんですが、やっぱり自分の名前を見つけるとアガるよね!

というわけでひつじのご挨拶。いつも通りダウナー系です。安心する。

たろーくん(@)の友情出演で、Kotlin Developer Conf Tokyoの開催予定が宣言されました。めっちゃ楽しみです。

Kotlinアンチパターン / Naoto Nakazato

完全に最高のベストプラクティス集でした。自分ではいつの間にか回避するようになっていた事例ばかりでしたが、今後チームで導入していこうとすると必ず起きる問題ばかりだったと思います。

apply内の名前空間よりも外側のローカルスコープの名前空間が優先されるという話、言われてみればありそうな話ですが、自分でもコードレビューで見つけられるかと言われると無理なので、禁止にした(letとalsoだけにした)という判断はアリなのだろうなと思いました。

Deep dive into LayoutManager for RecyclerView / thagikura

途中参加だったので実は一番良かったところを聞けておりませぬ。

とりあえず「余程のことがない限りはLayoutManagerは自作するまい」という気持ちになったということだけ申し上げておきます。

LayoutManagerの責務が分かっただけでもかなり収穫だったと思います。

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

DroidKaigiにはベストトーク賞はありませんが、僕の中での2018のベストトーク賞は間違いなくこれです。

MV*って言葉を聞くと身構えるようになってしまった昨今ですが、MVIは名前がMV*なだけで、実態としてはFluxの親戚でした。単方向データフローを重視した設計ということで、それなら私の大好物だということで、かなりすんなり頭に入ってきていたと思います。

Reduxが抱えている課題がかなり解決する考え方のようにも思えたので、なんとかJSでも組めないかな・・・なんて思っているところです。RxJS使ったほうがいいかなあ。無くてもいけるかなあ。

TLを見ていると「EventBusでも実装できるのではないか」「LiveData版を作ってみたい」といった、設計思想を汲み取って自分の土俵で再実装しようとする発言も見られて、やはり聞く人にインスピレーションを与える講演だったのだと思います。

また、ベノワさんはジョークセンスがかなり強い方で、思うざま爆笑させていただきました。

  • 「メッチャ=カッコイイ=キャスト」
  • 「ユーザーが急に暴れて」
  • 「次に急にお母さんから電話がかかって」
  • 「お母さんの電話は取ったほうがいいのでアプリがバックグラウンドに行って」

見逃した方は是非動画で見てください。めっちゃ面白かった。

内容自体もためになるのにトークも面白いとかずるい。一緒に働いてみたいと思いました。

Widget開発再訪 / Ryo Yamazaki

なにげにWidgetって全然触ってこなかったのですが、たまに社内で待ち受けアプリ作りたい的な雑談は出てくるので、勉強のために参加してみました。

雰囲気はわかったので、今度ちょっと手を動かしてみようかなという感じにはなりました。

しかしやまんだーさんの語り口は本当にアツい。

Say bye to Fragments with Conductor & Kotlin / Miquel Beltran

Fragmentへの憎しみを共有できそうな雰囲気をタイトルから感じて参加。

まあアテが外れまして、ほとんどFragmentの話は出てこず、Conductorの使い方を説明していました。

Fragmentから逃げるためにYet Another Fragmentを抱える羽目になっただけでは・・・という気は少ししました。

素晴らしいNDKの世界 / Building High Performance Android Apps with NDK / hak@ & Gerry Fan

ちょっとNDK界隈の空気感が知りたくなって参加。React Nativeの内部実装を読んでいくと、NDKとは無関係でいられないのです。

開発環境が改善された話だったり、グラフィックやオーディオ系の新機能の話だったりと、C++が活躍しそうな分野の話でした。

役に立つかというとアレでしたが、普段あんまり聞かない分野だったので楽しかったです。

マルチモジュールのすヽめ / kgmyshin

何の話かなーと思ったら、Android-CleanArchitectureとかでレイヤーごとにモジュールを分けてるアレでした。Android SDK側でもマルチモジュールの波が来ているので、マルチモジュールにできそうなところがあればやっちゃったほうがよさそうですね。

JSのほうにもmonorepoといってNPMプロジェクトをマルチモジュール化する波が来ていますし、役割ごとにモジュールを分けるのは何かのトレンドなのかもしれないですね。

After Party

主にこきちーず君や新潟勢(クーネルワーク社)と喋ってました。あとたろーくんにKotlin Dev Conf Tokyoに誘われました。最近RNばっかりだけど、Kotlinも古参といえば古参なので、なんかしたいなという気持ちはあります。

実は用事があったので早めに去りました。もうちょっといたかったな。

2/8(木) React Native Meetup #7

After Partyを19時くらいで脱出し、六本木のDMM.com Laboで開催されていたReact Native Meetupにも参加していました。

react-native-meetup.connpass.com

ここ1年ほどReact Nativeおじさんとして活動をしてきた私ですが、RNコミュニティの総本山であるReact Native Meetupには一度も参加したことがありませんでした。なにか思うところがあったわけではなく、普通に私のスケジュール調整能力がウンコだっただけです。

ところで参加してみてどうだったかというと、実は翌日の発表のことが気になって、講演内容があんまり頭に入ってこなかったというアレでした。

講演を聞いていての肌感覚としては、JSエンジニアが多めのコミュニティなのかなと感じました。モノがモノなのでAndroid/iOSエンジニアにも十分に市民権があるのも同時に感じられて、上手く育てばバランスの良いコミュニティになるのかもしれないなあと思ったりしました。

懇親会中はずっと、RNの運用方針に困ってるベンチャーの若者たちと喋ってました。たぶんただのクダ巻いてるオッサンになってたと思います。ごめんなさい。

次回もし参加できることがあれば、是非登壇したいなあ。ReactDOMとReact Nativeのレンダリング時の挙動の違いだけで15分喋れるんですが、いかがでしょうか。

2/9(金) 2日め

午前中は自分の発表準備で完全に引きこもってたよ〜〜〜〜

React Native Androidはなぜ動くのか / Nkzn

www.slideshare.net

がんばったよー!!!!

最終的に144Pで講演しました。昨晩時点での瞬間最大ページ数は186Pなので、削られた42P分のネタについては技術書典4でディレクターズ・カット版として供養いたします。皆様お買上げのほどよろしくお願いいたします。

blog.nkzn.info

また、このセッションを聞いて、既存のAndroidアプリにRNを組み込む「ハイブリッドアプリ」の設計に興味を持った方がいらっしゃれば、Androidアプリ設計パターン入門の第七章で id:tomoima525 さんが最高の記事を書いてくださっているので、ぜひご覧ください。

Android アプリ設計パターン入門

Android アプリ設計パターン入門

  • 著者:日高 正博,小西裕介,藤原聖,吉岡 毅,今井 智章,
  • 製本版,電子版
  • PEAKSで購入する

ReactInstanceManagerの扱いについては私なんかよりよほど知見をお持ちなので、すごく勉強になっています。

All you need is isolating the domain (How to apply DDD to Android Application Development 2) / yanzm

やんざむ先生のドメイン駆動設計シリーズ第二回。

値オブジェクトとエンティティをどうやって定義して、そしてどう実装に落とし込むかというお話。

JSONにドメインが引きずられるのは本当にあるあるだし、今でも引きずられない心の強さを持ちきれていないので、心の強さの持ち方もしりたい・・・。

青本や実践本を読み切るのは大変そうなので、もちこちゃんの大冒険を読みましょうというお話もありました。

booth.pm

Android Things codelab / Android Things であそぼう

すっげーたのしかった! すっげーたのしかった!

ピコピコさせたりピカピカさせたりできた!

あとカメラがついててTensorFlowで画像認識させたりできた!

チュートリアルを全部終わらせたらRainbow Hatをお土産にもらえた! うれしい!

(楽しすぎて語彙力が減っています)

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

RNとはマルチプラットフォーム仲間のFlutterセッションです。

FlutterのUIフレームワーク自体がReactインスパイアな感じらしく、かなりすんなり読めました。

Dartも(use strongモード?なら)全然悪くない言語だと思うし、独自レンダリングエンジン積んでるのもパフォーマンス良さそうだし、Google謹製マテリアルデザインWidgetが用意されてるのとか羨ましすぎるし、基本的には筋がいいツールだなと印象でした。

ライブリロードのデモで歓声が上がってたのが地味に羨ましかったので、今度RNのトークをする機会があったらライブリロードのデモをしたいと思いました(小学生並みの感想)。

一番気になっていたエコシステム部分についてですが、やはりFlutter用に最近作られたライブラリの利用が中心になってくるようです。旧来のDartのために作られていたライブラリは、Universal JS的な思想で作られているわけではないため、なんだかんだでプラットフォーム依存なコードが入っていることが多い、みたいな話をこにふぁーさんからオフィスアワーのときに聞けました。しばらくは「足りないものは自分で作る」な感じの文化が続くようです。そのへんはJSのエコシステムがかなり使えるRNの優位なところかもしれません。

Gradleプラグインを作って開発効率を改善しよう / tnj

途中参加でした。なんかあれよあれよという間にプラグインができて実際に公開までされてしまって、Gradleプラグイン開発の時代が来るぞ!みたいな気持ちになりましたが、気のせいかもしれません。

最終セッションということで、クロージングも無茶振りでtnjさんがやってました。

みなさんおつかれさまでした。

まとめ

最高のDroidKaigiだった!

来年もCfP出すぞ! トークするぞ! コミュニティに貢献するぞ!

そして他の人の話も聞きたい! みんなCfP出して! なんか話聞かせて! たのむ!

そして、出張として行かせてくれた会社のみんな! ありがとう! DroidKaigi終わったから働く! いっぱい働くよ!