去年、DroidKaigi2016の公式アプリをオープンソースで作りましたが、2017もコードを公開しました。
コードだけではわかりにくいところを少し補足しておきます。
2016とは別アプリ
2016とはリポジトリもパッケージも違います。別アプリです。 なぜ去年のリポジトリを引き継がなかったかというと、個人のリポジトリではなくDroidKaigiのリポジトリとして管理したかったというのが1つ。もう1つは、同じアプリをメンテナンスしてると飽きちゃうし、またゼロから作りたかったからです。
余談ですが、カンファレンスアプリに必要な機能はほぼ決まっているので、モデルや画面をガチガチに固めて設定ファイルとリソースを用意するだけで作れるライブラリに切り出してもいいかもなと考えています。
Kotlin
メインはKotlinではなくJavaで作っています。コトラーが「Kotlin一択だろ、置き換えるぞ」と言い出しそうですね。 なぜKotlinじゃないかというと、自分が業務経験がなかったからというだけで特にこだわりはないです。別にKotlinでもいいです。テストはKotlinで書くようにしています。
Kotlin PRを受けつけないとかはないので自由にお願いします。
設計
カンファレンスアプリはそんなに複雑なアプリではないので、そこまで設計にこだわってはいません。個人的にはDataBindingをがっつり使うならbinding用のクラスがいるべきだと思っていて、クリックイベントとかも全部バインドさせるのがいいなと感じていました。それをViewModelとして作ったところMVVM構成になりましたが、何でもいいです。データロード部分だけRepositoryに切り出したりしていますが、多重責務なクラスも割とあります。現状の設計方針はこちらに簡単にまとめてあります。
幸い、今回のDroidKaigi2017では設計に関するセッションも何個かありますので、聴講後に見比べてみると面白いかもしれません。
パッケージ構成
レイヤードアーキテクチャというわけでもないので、パッケージ構成はDroidKaigi2016と同じように activity
、 model
といった大雑把な役割でゆるく分けるだけにしています。ただ、 activity
と fragment
はViewだという意識を強めるために view
パッケージの下に置いています。と言っても、スコープなどの制約は何もありません。Custom Lintとか作るといいかもしれないですね。
di関係は di
パッケージの下に入れていますが、正直いまだにベストなやり方は見つかってません。もっといいやり方があれば指摘してもらえると嬉しいです。
BottomNavigation
Drawerをやめました。DroidKaigi2016や他のDroidconなどのアプリを色々触っていて、本来Drawerが必要なほど第一階層に必要な機能ってないなと感じたからです。BottomNavigationで十分なんですよね。使ったことなかったのでとりあえず入れてみたかったというのもあります。
セッション一覧画面
今回のセッション一覧画面は番組表のようなViewにしましたが、現状はわりと妥協した感じの実装になっています。経緯はこちらをご覧ください。
中のコードを見ればわかりますが、わりと無理やりな感じです。本来はRecyclerViewのLayoutManagerを作ってもっとクールにやるべきなんですが、まだ終わってない画面もある中そこまで自分がやっていたらいつまでたっても公開できないと思い、「まず動けばええんや。動くものができないとフィードバックももらえんしな」という精神で諦めました。
とはいえ、これがいいとは思ってないので是非開催までに直したいところです。
コントリビュート
今年はどうなるかわかりませんが、気軽にコントリビュートしてもらえると嬉しいです。typoの修正なんかもウェルカムです。 自分は今年の「Android Resources Refactoring」の発表サンプルとして使う予定なので、dimens.xmlやcolors.xmlなどのリソースまわりを整理していく予定です。
welcomecontribute
ラベルのついているIssueを取っていってもらえると助かります。まだIssueの粒度が結構大きいですが、定期的に見直して細かく切っていく予定です。
https://waffle.io/DroidKaigi/conference-app-2017
アプリの骨子は自分が作りましたが、全て自信満々で作っているわけではありません。ところどころこれでいいのかなぁとかちょっと汚いなぁとか考えながら作っていて、たぶん皆さんが見て違和感を感じるところは自分も感じつつコミットしています。
わりと緊張しながら公開しているので、何かあったらGitHubかTwitterで直接コミュニケーションしてもらえると嬉しいです。去年と同じく、誰が主導という感じでもなく雑にPRで修正が加わり続けて集合知によって作られていくと最高ですね。まぁそんなにうまくいくかわかりませんが、どうぞよろしくお願いします。
DroidKaigiは3/9(木)、10(金)に開催されます。参加はこちらからどうぞ!