DroidKaigi2017参加してきた。自腹で

やっぱりブログ書くまでがDroidKaigiかなーと思うので、ブログにしてみます。

自分は基本的に勉強会参加をしないのですが、半年ぶりくらいに勉強会参加しました。実は今回がDroidKaigi初参加です。

以下の自分に関係が深かった項目について感想を記載していこうと思います。

  • DroidKaigiアプリ
  • 参加者との関わり
  • 運営
  • セッション
  • After Party

DroidKaigiアプリ

PR21、計34コミットしました。

数だけ見ると結構したっぽいですが、楽しみたいというスタンスで参加していたので、一人での開発をせずに複数人で開発するスタイルでやったことと雑プログラマーなのでコードレビュー後の修正コミットが多かっただけです。

二日目のウェルカムスピーチでPRの数が296個という話が出ていたので、絶対閉会前に300届かせるぞ!と、こにふぁーさんがモデレーターの休憩時間に横に居座って、聞く事が出来なかったResource Refactoringを直接教わりつつ、PR2つ重ねて300PRのキリ番取りました。

途中Kotlin導入議論にも参加出来たし、本当に楽しかったので、また次回があれば絶対関わりたいなーと。(Kotlinのコントリビュートしているくせに賛成しないのどうなの?って言われるかなーとビクビクしていました。)

参加者との関わり

2日続けてボッチ飯を決めましたが、パーカーのおかげで話してもらえましたし、写真まで撮ってもらいました。

ただ、もっと多くの関わったことがない人とも話したかったのです。自分のコミュ力が低すぎでした。モノやTwitterに頼ればなんとかなると信じたのが敗因です。次回はもっと目立つモノにしよう。

運営

イベント期間中運営にこうしてくれたらいいのになー。というつぶやきを2つしました。

一時間後に対応してもらいました。実際に当日出来たセッションがアプリに反映されているのはすごい。

6分後に公式アカウントから反映させてもらうという返事をもらいました。

速攻でいい返事をもらえて、ワガママ言うな!とか言われなかったし、ツイートして良かったです。

セッション

聴講したセッションは以下です。

今回は以下の観点でセッションを選びました。

  • 自分が知らない情報が出てくる
  • どうしても聞きたい項目がある
  • 大穴狙い

チラ裏でやるべき内容かもですがある発表者さんから「発表者さんらにとってはフィードバックとして欲しい」とのことなので書かせてもらいます。

(ただあくまで私の感想ですし、全てのセッションが素晴らしかったので、ネガティブな意見も批判をしているわけではないのでご容赦下さい。)

How to apply DDD to Android Application Development

あんざいさんという方がどういう方なのか聞いたことしかなかったのとDDDに関しては自分も昔から色んな著作を読んで興味があったのでウェルカムセッションの時からルーム3を陣取り聴講しました。

内容としてはDDDを全く知らない人に対して最初の一歩になるような内容でこれを聴いたらDDDやってみようか!と思える内容でした。また新しい単語をチラ見せして、後で説明するなど魅せ方もうまく、感動しました。

50分と長いためダレちゃいそうなのですが、中盤にあった「よくある勘違い」でそこまでの振り返りもしてくれ、その後の話にもすんなり入れたのがさらに良かったです。セッション聴きつつTwitterやりまくるスタイルの自分ですが、何一つツイートせずに集中して聴かせてもらいました。大満足でした。

Android Security 最前線!!

セキュリティに関して知識が乏しいので、初級者〜中級者向けということで聴講しました。実装方法の説明をしつつ、セキュリティの説明をされていたのですが、初級者もターゲットであるなら、出来ればそこ分けてもらい、説明をしてから実際のコードはこう書く!という形で聴きたかったなと感じました。コードを追うので手一杯で実際に聴きたかったセキュリティの話を聴き逃してしまったり、セキュリティの話を真剣に聴いていたらコード追えなかったりしてしまいました。。。

しかし、例えば知っていたカスタムCA証明書問題であればコード読んで非常にワクワク出来たので、やっぱり自分の不勉強のせいだなーと反省させられたセッションでした。

Androidリアルタイム通信アプリ作成Tips

リアルタイム通信の実装方法を紹介しつつ、軽く実装の説明をしてくれるセッションでした。白山さんが言いたいことがいっぱいありすぎるのか、かなり早口でついていくのに必死でした。。。

それぞれの通信方法の特徴やサンプルコード量の配分などが良かったです。30分ではなく50分のセッションでこの量の説明だったら最高でした。

内容としてはリアルタイムの通信方法を検討するならぜひ参考にしたい内容でした。早口のハラハラ感もあり、楽しかったです。

あと、このセッション前の絡みが面白かったのでまとめて呟いたら、ちょっとばずってました。

Android定期実行処理入門

定期実行処理といえば、AlarmManagerだろ?と時代に取り残されているので、勉強のために聴講しました。

AlarmManager以外のモノは聞いたことはあるけど使ったことがないものばかりで、その特徴をしっかりと説明してくれて助かりました。

残念ながらセッション中にあるコードの説明がうん?どこのこと言ってるんだ?と置いて行かれてしまったので、途中で追いつくのを諦めてコードのプレゼンって難しいなーとぼんやりしていました。たぶんハイライトや説明している部分だけコードを見せてくれたらもうちょっとついていけたかもと思います。

内容自体は非常に充実していたので、録画見つつ、スライドを落ち着いて読み返したいなと思います。

解剖 Kotlin ~バイトコードを読み解く~

Kotlinバイトコードを読み解くということで、実際概念としては知っていましたが、あんまり深くバイトコードに注目したことがなかったので、聴講しました。

このセッションの狙いが初学者の恐怖心を取っ払い、第一歩を踏んでもらおうという感じなんだと思いますが、本当にわかりやすく、話し方もゆっくり落ち着いていたので、理解しやすかったです。スライドのコード量も一度に出る量が少ないことや簡単なコードでひと目見ればわかるようになっていて、感動しました。Kotlin始める前に知りたかったなーという内容が多かったです。これをKotlin始める前に聴けた人たちは本当にラッキーだったのではないかと。

「KotlinはJava。」

もちろん、自分のようにある程度Kotlin知っている人でもKotlinの細かい部分を知ることが出来たので、聴けてよかったです。

オフラインファーストなアプリケーション開発

やっぱりオフラインは重要なのであることとzakiさんにお会いしたことがなかったので、聴講しました。

内容はRealmありきな話になってしまっていて、正直それならRealmをセッション説明に入れてほしかったなーと思いました。特に自分のようにRealm入れられない状況の人に対してはちょっとツラいし、他との具体的な比較がなかったので、それじゃあRealmを入れてみよかという判断が出来なかったです。Realm以外でのツラい実装をして、その上でRealmなら〜という話であればうおおお!ってなったかもしれません。

セッションの内容は中の人ということもありRealm自体の魅力を非常に感じられるセッションだったし、少し前のセッションでRealm Mobile Platformをオススメされていたこともあり、状況が変わるなら絶対検討しようと思わせてくれました。

React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか

React Native自体触ったことがないので、このセッションを聴いて判断しよーと思い聴講しました。

Reactの説明からReact Nativeの説明にするっと入っていくところがおお!確かに!とわかりやすかったのが印象強かったです。セッションのテンポや流れもロジカルで聴いていて納得感も得られ、楽しかったです。

非常にセッションが良かったので、実際にDroidKaigi後にReact Native触ってみました。即時反映されるし、手にしっくりくる感じでした。聴いてよかったセッションの一つでした。

What’s New in RxJava 2.0

RxJava2.0への移行はある程度把握していたのですが、実際に作業を実施したことがなく(RxKotlinが2.0に正式対応していないため。現在はRxKotlinは対応中。)ライブラリのコードを読む時くらいしか利用機会がないので、これを機にしっかりと把握したいと思い、聴講しました。

Rxの初歩的な話から始まり、RxJava2.0で一番意識するようになるBackpressureの話に続き、RxJava1とRxJava2の比較があったりと流れも良かったです。スライドはシンプルで、でもアニメーションを効果的に使われていて、非常にわかりやすかったです。今までふわっとしていたBackpressure対応もこれで完璧に出来そう!と自信が持てるようになりました。

Android ORMの選び方

元々自分もORMに興味があって、Ormaを作ったgfxさんがどういう観点でORMを選ぶのか興味があったので聴講しました。この日もウェルカムスピーチを捨てて、Room3の最前列確保に走りました。

セッション内容はORMの解説から始まり、自分がまさに知りたかった観点の説明、その点でのそれぞれのライブラリの比較をしてくれました。時間が押していたので一つライブラリの説明を飛ばしたりと時間調整もうまくさすがだ!と感心しまくりでした。

内容もOrma万歳!なのかと思ったら、しっかりとOrmaの問題点を発表していたりと第三者目線での解説に徹していたように思えました。自分のORM選定にも自信が持てるセッションでした。

個人で11個のアプリを公開した結果

超激戦区のこの時間、どうするかなーと一つ前のセッションが終わってからも考えていたんですが、質問をしたくなるようなセッションとしてこのセッションを選びました。(結局質問しなかったけど)

11個それぞれの開発動機・数値・感想などを聞きました。他にも個人で開発する時のTipsやアイコン特に気にすんななど、知らないことばかりでした。終わった後に自分ももっとアプリ出してみたくなりました。またアプリとは違いますが、Intellijプラグインいっぱい開発していて、メンテどうするか?問題をかかえていたのですが、実際に使うようなやつはそのままやって使われていないようなプラグインはバグFixくらいだけやればいいかなーと気持ちが楽になりました。

11個と量が多かったのでWearアプリとか似てるアプリをまとめちゃっても良かったのではないかなと思いました。こういう失敗も含まれたセッションって貴重なので聴けてよかったです。

How to search and improve performance

初心者~中級者向け+使ったことあるツールだったので、あんまり期待せず、でもEaster Eggの問題点をという話だったので選択ミスだとしてもいいかなーという気軽な感じで聴講しました。

が、はっきり言って、このセッションが一番衝撃的でした。

まず、ANRなどのパフォーマンスに関わる説明があり、その後、実際のEaster Eggの問題を見せつつ、ツールを使って問題を突き詰め、改善していました。

セッション内で自発的に「感嘆の声」と「拍手」が巻き起こっていたのが印象的でした。30分という短いセッションでしたが、出来れば50分にしてもらい、もう少し細かいステップでの問題解消の説明が聴きたい気分でした。

スライドだけでも素晴らしいのですが、セッション聴けなかった人はぜひビデオで確認してもらえたらなーと思います。

セッション後に個別で静的解析とツールを組み合わせる場合の使うタイミングなどの質問をさせてもらいました。知っているコードならまずはコードを読み込んでからやると効率があがる。全く知らないコードであれば即ツールを使ったほうが早いとのことでした。

Can You Read Your Tests? Clean and Useful Android Testing, with JUnit and Spock!

Testコードって冗長的で長くなるし読みにくいからコメントやメソッド名に頼ることが多くてこれほんとうに正しい方法なのか?と疑問に思うことが多かったので、テストの書き方を再度勉強するために聴講しました。

英語のセッションを聴くのが久しぶりで、かつ、元々コード量が多いコードから減らしていくという内容だったので、スライドを読むのも結構大変で、必死でついていきました。 が、やっぱりついていけず漏れていた部分が多かったです。

AssertJとか使っていたり、結果的に実際のテストコードが短くなるのは良いのですが、メソッドで切り出した部分も全て表記してほしかったなという印象です。

セッション終わり際にCode Smellをまとめてくれたのは良い指標かなと感じました。Spockの説明はさすがで、ぜひ導入してみたいなーと感じました。

2つのアプリ、1つの設計のデザイン指針

Quipper社のデザイン指針が聞けると思い、しかも自社サービスのデザイナーは一人なので、どういうことをすればより良いデザインのサポートが出来るだろうかと思い、聴講しました。

そして、最初のほうで会社やアプリの説明だったので気が緩んでKotlinの開発始めてしまい、それが完全にミスだったっぽく、ワンソースプロダクトの定義を聴き逃してしまいました。それをずっと引きずってしまい、申し訳ないのですが、あまり理解できませんでした。フレーバーで分けてるってことなのか、デザインのソースを一つにしていて、それを各種アプリで分けているのか?ブランド違う?うん?という感じで完全にやっちゃいました。

またビデオとスライドを確認してみます。。。

本当に申し訳ありません。

Smoke and Mirrors in Android UI

Google Photoなどの動きをどう作るのか興味があり、聴講したかったのですが、他のセッションの並び列と勘違いして、聴くのを諦めた時のツイートです。

発表者さんに拾ってもらい、Fireside chat始まる寸前に退席して聴講させてもらいました。(Firesite chatもぜひ聴きたいので録画公開何卒!)

Google PhotoのRecyclerViewをピンチイン・アウトすることによってグリッドの数を増やしたり減らしたり、一つの画像をローテートしたりして、最終的に画面全体に表示する機能があるのですがその機能の実装方法でした。

セッションでもよく出ていましたが、本当にこんな気分でした。

improved magic gif

具体的な実装方法はActivity一つ、FragmentなしでRecyclerViewを重ねてそれを出し分けするというものでした。またViewOverlayを利用することで画像を一枚バーン!と出すようです。

他にもローテートのためのPivotの設定方法など細かい部分をわかりにくくならない限界のところで説明してくれていました。海外では普通ですが、スライドには載っていない話が多かったので、本当に生で聴けて良かったなーというセッションでした。

発表者さんとはAfter Partyでもお話させてもらい、これがベストプラクティスだということの確認も出来たし、実際Googleもそういう実装をしているからデビオ確認してみなよというアドバイスも頂きました。

テスト0から目指すクラッシュフリー率99%

テストがないプロダクトにテスト文化を根付かせたいと思ったので聴講しました。

セッション内容はActivityにあるコードをテストするなんて無茶でしょ!という話からdelegateなどで切り出し、テストしやすいコードを作ってテストしていこうぜ!という話でした。

残念ながら、テスト文化を根付かせたいという理由で聴いていたので、それが抜けてしまっていてあー!となりました。ただ、セッションの内容自体は素晴らしく、テストしやすいを意識して開発するという視点は本当に大事だなと認識しました。

セッション後に話しさせてもらったのですが、そこのお話はマイク使って話して下さいよ!と何度もお願いするほど良いクオリティでした。その話のほうが実は刺さって、テストがないならまずUIテストで画面録画しまくっちゃえとか、まずは始めることが大事(要約)というような話でした。知っている方のセッションだとこう気軽に質問出来るのでありがたいなーと。

ちなみにこのセッションでも始まる前に雑談があって、その話も結構面白かったです。場の温め方がうまいなーと感心でした。Androidの筋肉枠の一つは完全に白山さんな印象です。

全体的に

セッションの説明を読んで期待してから聴くので、このセッション説明と違ったりすると若干ネガティブな感想になってしまいました。ただ、自分の視点からはネガティブってだけで、予備知識があったり、別の人からすればすごい良かったり役立つ内容ばかりだったはずなので、ただの一観客の話だと軽く流してもらえたらなーと思います。。。

Droidkaigi終わった後にこんな生意気なツイートしているのですが

冷静にこうやってコメント書いていると、自分がスピーチしたら、来てもらったAndroiderの30分を無駄にしてしまうのでは???という気持ちになりました。実際にあれだけの人の前でスピーチ出来るの本当にすごいです。

After Patry

After Partyでは本当に名前をあげたら半端ない数の人と話すことが出来ました。主催者の日高さんと初めてお話することも出来て感激でした。

そして、Kotlinやりだして一年ちょいですが、ついに日本のKotlerの憧れの的のたろーさんと話すことが出来ました。今までKotlin触ってて良かったなーとしみじみしました。

ただ、嬉しすぎてテンションおかしくなってしまって、あとでこんなツイートしています。

またKotlin勢揃うチャンスがあったら絶対撮ってもらいたいです!

他にも自分が作ったdatabinding-supportを使ってくれていて、さらに修正PR送ってくれた方ともお話出来たのも本当に嬉しかったです。自分が作っているものを使ってくれている人がいた!!!って。本当に励みになりました。

まとめ

スタッフの皆様ありがとうございました!また来年よろしくお願いします!

(名前を極力出さずに書きましたが、発表者の方と運営の方はどうしても必要だったので、書いてしまいました。もし消して欲しい方は@shiraj_iまでメンション下さい。即消します。)