petitviolet_blog

@petitviolet blog

勉強したかったことを盛り込んでアプリ作った

AndroidでHackerNewsリーダー作った

作ったもの
HNReader - Google Play の Android アプリ

f:id:petitviolet:20150730101913p:plain

Google Playで"Hacker News"と検索すると似たようなのがたくさん出てくる
何個か試してあんまりしっくりこないし自分で作りたいな、と思っていた
それに加えていろいろ勉強したいこと、使ってみたいものが積まれてきていたので一気に消化するべく作った

やりたかったこと

特にRxAndroidとDaggerは使ってみたかった
ちなみに今回DataBindingは使ってみたくてbuild.gradleに設定まではしたけど、RecyclerViewで使うの大変そうすぎたのでスキップした
導入の面倒さに対する良さが分かってないのもある

いろいろ困ったとこ

  • RxJava使い始めていきなりMissingBackPressureExceptionとか出て何も動かなかった
  • RxJavaでページャっぽいの実装するとこ
  • Daggerの使い始め
    • Appクラスの内部で宣言したAppComponentインタフェースに@ComponentつけたやつがDaggerApp_AppComponentになるとか全くわからず困った
      • Android Studioでちゃんと補完されなかったため合っている確証も無く困った
  • RealmObjectの使い回し
    • DBから読み出したオブジェクトを別スレッドで利用するとエラー吐いて死んだ
      • RealmObject継承したものとそうでないものを2つ用意してデータを受け渡しして解決
        • toStringとかも実装しちゃいけないとかいろいろきつい
    • List<String>とか持てない
      • List<MyRealmString>とかにしてRealmObjectを継承させないといけないの苦しい
      • せめて基本的な型についてはRealmStringとか用意して欲しい
    • RealmObject以外のtransactionとかwhereとかのapiは使いやすくて良かった
    • Realm BrowserなるスタンドアロンMacアプリがあってDBの中見れるのも便利だった
  • Hacker NewsのAPIがアレ
    • ちゃんとある HackerNews/API
    • でもアレすぎる
    • firebaseに乗っててRESTなAPIとかAndroidSDKもあったが、ただソートされたjson取ってくるやりかたもよく分からん

Android Quickstart - Firebaseの例が以下

myFirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    System.out.println(snapshot.getValue());  //prints "Do you have data? You'll love Firebase."
  }
  @Override public void onCancelled(FirebaseError error) { }
});

データ取ってきたいだけなのに、addValueEventListenerってなんだよ!ってなるし使うのをやめた
リアルタイムな何かをする時とかは値を監視してそのコールバックで、とか出来そうなので用途によっては便利そうだけど、今回はいらない

Hacker Newsのフィードについたスコアでソートしたい、ってなるとTop Storyで取得できるidについて詳細を取得して、その結果のスコアでソートするみたいな処理が必要っぽくて面倒くさすぎたのでやらなかった
この"Top Story"ってのが最初からスコア順で並んでたら何も文句は無かったんだけど...

あとがき

  • RxJavaとretrolambdaの組み合わせめっちゃ良くてストレスだいぶ軽減されたので使っていきたい
    • まだまだ浅い理解で、使い込まないとRxの世界が理解出来なさそう
  • Dagger2はテスト全く書いていないし複雑なアプリでもないので、恩恵は分からなかった
  • Realmはスレッド間の受け渡しが出来ないとかメソッド生やしちゃいけないとか、List<String>も持てないとかいろいろ不便も大きいのでその辺解決しないと使いたくないかも
    • SQLiteスキーマ書いて、とかももうやりたくない...
    • 他のORMを試したいところ
  • Hacker NewsのAPIアレだしRSSも標準のしか無いしでアレ

いろいろとやりたかったこととか軽くは消化できたので良かった
Hacker Newsリーダー自分で作るっていう実績は解除できたけど、良いものが出来たか?と言われると違う
直す気になれば直すし、意外とこれでよければそのままでいいや

個人的にタイムリーだった記事

motida-japan.hatenablog.com

まったくプロダクト志向ではなく技術志向ドリブンなアプリ開発となった