こんにちは, またくです。
普段 iOS, Android 両方の端末で Apple Music を愛用しています。

そして Last.fm を利用してきいた曲のログをためることでにやにやしていたのですが, Android の Apple Music アプリから scrobble するためのアプリがどうもなくて 😢 😢 😢 だったので作りました。

https://github.com/mataku/SunsetScrob

せっかく Android エンジニアになったので, アプリの1つや2つは出さんとねという言葉にやっとお返事できそうですね。バナーを拝借します。

Get it on Google Play

機能

Last.fm + Apple Music の組み合わせのみの対応ですが, 以下できること一覧です。

  • Last.fm 上の Now Playing の更新
  • 聞き終わった曲を自動で Last.fm へ scrobble
  • scrobble した曲を最新ちょっとだけの件数分確認できる

その他

Kotlin

せっかく正式に Google も採用したことだしと思い, 全て Kotlin で書いています。 IDE もサポートしているので, 特に困るようなことはありませんでした。

文法には慣れましたが, 特性には慣れていないので, Kotlin らしいコードを書けてはいませんが, エルビス演算子とか apply とか分かりやすくしゅっと書ける仕組みがあるのはいいですね。Optional 型で明示的に値の状態を示せるのも分かりやすいなあと思います。

モデル層はデフォルトで生成される accessor のおかげで見通しがすっきりしそうと感じました。(val とすれば getter, var とすれば getter, setter が生成される)

Coroutines - Kotlin Programming Language も激熱なのでは。

書いていて特に不満もなかったので, 自分の中で Kotlin らしいコードを体現できるようになりたいなあと思います。

supply

リリース作業が意外と手間で 😢 😢 😢 だったので supply (+ bitrise) でリリースを自動化しています。

git-flow であれば, master ブランチにマージされたらデプロイできる状態にあるので, master ブランチで行う workflow にて以下のようなコマンドが実行されるようにしました。

$ bundle exec fastlane supply \
  -p com.mataku.amazingapp \ # パッケージ名指定
  -j credential.json \ # Google Play Developer API 認証用の json 指定
  --apk $BITRISE_APK_PATH \
  --track production \ # リリース範囲 (段階リリース: rollout)
  --rollout 0.2 # 20% (段階リリース指定時のみ有効)

CI のサービスは bitrise を使用しましたが, bitrise は workflow をブランチで変えられるのがいいですね。

bitrise.yml を書き出すことはできるけど, 読むことができないものだと認識しています。bitrise.yml を変更したら workflow が変更されて, 各ステップが実行されたらより最高になりそうですね。

ここらへんを少し変更する際に Web 上で変更するのを考えたら,タスクを fastlane に依存させ bitrise 上では fastlane のタスクを実行するようにし, Fastfile に色々定義するのもありだなと思いました。(gradle あるけど)

おわりに

早くマテリアルデザイン化してアイコンをイケにしたいので sketch を買いました。