この記事は,フラー株式会社 Advent Calendar 2021 の 12 日目の記事です。
11日目の記事は @shogo82148 さんによる AWS ClockBound で遊んでみた でした。
フラーに来てAndroidエンジニアとして活動を始めてから3年、マネージャーになってからも会社でも個人でもちょこちょこ開発に携わっているのですが、今回は個人アプリの開発をするときに技術選定を疎かにして、その結果どんなツケが回ってきたかのお話でもしようと思います。
##技術選定の経緯
もう2年も前のことになりますが、SUZURIさんのAPIを使ってアプリの開発をしていました。
https://qiita.com/seto_inugami/items/952a41e63c403b7e8fb2
そのときにアプリではよく見るViewPager + PageIndicator
のレイアウトを組みたくなってPageIndicatorのライブラリを導入することを検討しました。
いくつかライブラリの候補はあったものの、最終的には使ったことのあった以下のライブラリを選定しました。
https://github.com/romandanylyk/PageIndicatorView
選定理由としては
・Star数が多い
・利用経験がある
・リリースから時間が経っていて安定していそう
など、一般的な理由ですね。
見てもらうとわかるのですが、ライブラリの最終更新が2018年ですね…!
もちろん導入時に大丈夫か…?と一瞬頭をよぎりましたが、この時点でライブラリ選定で痛い目を見たことのなかった私は、「まぁ大丈夫だろ」とあまり深く考えず導入してしまったのです。
作ったSUZURIアプリの特性
ツケを払うことになった話の前に、作ったアプリの特性だけ簡単にお話ししておきます。
作ったアプリではSUZURIさんのAPIを使って、SUZURIに掲載されている商品をリストで表示しています。
商品にはそれぞれカテゴリがあり、SUZURIさんの公式ページではカテゴリの上位概念として大カテゴリのようなものを用意しています。
(T-シャツはファッション、サコッシュはバッグといった分類のイメージ)
アプリでもこの形に準拠しているのですが、カテゴリと大カテゴリの繋がりを取得するAPIはないためローカルで無理やり紐づけており、カテゴリが追加されるたびにアプリをアップデートして紐付け直さないと、新しいカテゴリは正常に検索に引っ掛からなくなってしまいます。
こんな感じ
enum class ItemCategoryRelation constructor(
val id: Int,
val text: Int
) {
T_SHIRT(1, "T-シャツ"),
RINGER_T_SHIRT(2, "T-シャツ")
SMARTPHONE_CASE(3, "スマホケース"),
CLEAR_SMARTPHONE_CASE(4, "スマホケース");
companion object {
fun getById(code: Int?): Int {
for (p in values()) {
if (p.id == code) return p.text
}
return "その他"
}
fun getByText(text: Int): Int {
for (p in values()) {
if (p.text == text) return p.id
}
return 1
}
}
}
未だ使ってくれている方もいるので、アップデートしないわけにもいかず…と思って時たま気が向いたときにアップデートしています。
##審判の時
その時は突然に訪れました。はい、今年のビッグイベントだったJcenter閉鎖ですね。
PageIndicatorView
ももれなくJcenterに乗っていたわけですが、もちろんすっとMavenCentralに移行はされませんでした。
しかもPageIndicatorView
を使っている箇所は数箇所あり、忙しくてメンテに時間をかける余裕も全然なかったのでライブラリの切り替えはできそうもなく…
そもそもJCenter閉鎖自体かなり大きなことではありますが、こんな根幹から揺らぐことがあるのかと衝撃をうけました。
ライブラリに依存していると口では言いつつ、本当に依存しているということを思い知ったのはこのタイミングだったと思います。
「結局依存しててもなんとかなるだろ」みたいな考えが正直あって、実際時間さえあれば何とかはなるんですがかかる労力の大きさを叩きつけられた感じです。
##現在
更新はしておきたかったので、一旦そのタイミングではこちらの対応を実施してフェッチして逃れていますが、記事を書いている現在もそのままになっていて、心の片隅にモヤモヤが残っています。
理想は別のちゃんと更新されているライブラリへの乗り換えですが、なかなかコスト的にもそういうわけにもいかずずっと苦しいお気持ちです。
ちゃんと最初でライブラリの選定をしておけばこんなことには…とずっと考えているので、開発時の最初の技術選定はちゃんとやりましょう…やります…