社内向けに書いたけど転載。
はじめに
開発をしていると判断していくことが数多くあります。世界中で公開されているライブラリの中から1つを選び、導入を決めるのもその1つです。
判断とはとても難しいもので、ほぼ確実に間違いは起きます。例えば、「実行速度が遅いが高速な開発には必要であろう」と判断して導入したが、実際運用してみるとやっぱり遅くてやいのやいの言われるとか。入れてみたいからという理由でライブラリを入れる判断をして、ある場所では使われてるけど、ある場所では使われておらずゴチャゴチャになってるとか。似たようなライブラリが3,4個導入されていて、どれが一番使うべきなのか判断出来ないとか。働き始めて5,6年の僕が失敗したな〜と思うだけでも色々あるわけです。
そこで僕が仮にポックリ逝ってしまったとしても、僕の失敗をみなさんが活かせていい感じに開発出来ると僕も生きた意味あると思うので、新たなライブラリを導入するときに考えていることを共有します。
⚠️ 注意 ⚠️
あくまでひさいちが考えてる事なので、書いてる事以外に重要なこともあるでしょうし、より良い方法考え続ける事でバンバン良くしていきましょう。(これだけ抑えておけば絶対破滅しないというわけではない)
ライブラリについて考える
ライブラリを導入するからにはライブラリについて考える。
メリット・デメリット
ライブラリのメリットとデメリットは何か?必ず複数個挙げる。
気をつける点として、メリットで「わかりやすくなる」をあげる場合があるが、これはあくまで個人の感想で事実ではない。メリットとデメリットには事実のみ書くべき。
ライブラリのサイズ
モバイルアプリはインストールする必要があるので、アプリサイズをなるべく小さくしたい気持ちがある。なので、ライブラリのサイズがあまりに大きいものは採用しない。
ライブラリ実行速度
多少気にする。必要があれば計測する。
ライブラリは課題をどう解決するのか
- 画像表示ライブリではキャッシュやBitmap Poolやらスレッド数変更やらなんやらをどう実現出来るのか調べる
- ORMだとSQLを書く必要がない等をどう実現するのか調べる
自分やチームは今どういう課題を抱えていてを考え、ライブラリはどう解決するのか調べる。
似たライブラリの比較する
似たライブラリといってもどう解決するのか?の部分は違っていたりするので、違いを理解する。
実行時エラーではなくコンパイルエラーになるか
具体的な例を出すとOrmaはSQLをつくるときにテーブル名を文字列で渡す必要がない。文字列でテーブル名を渡す場合、テーブル名がtypoしていたら実行時にエラーとなるが、Ormaはメソッド名なのでコンパイルエラーになる。
コードや仕様がシンプルであるか
- 仕様が複雑すぎるとあとから見ると意味不明になる
- コードが複雑すぎると読むのに時間がかかる
自分の場合、仕様が複雑だと理解すると便利!!って大体なるけど、数日後には忘れてる。またライブラリのコードは結局読むので、読みやすい・シンプルなものを選ぶのが後々楽な事が多い
メンテンスされてるか
数年間リリースされてないとかだと、ちょっと不安ですね。
いざとなったら自分が直せるか
無理そうなら複数人でメンテナンスされてるものを選ぶ
枯れているのか
それなりに他社でも事例があると安心ですね
導入後を考える
残念なことに導入して終わりではないので、先を見越して考えておく。ここが雑だとライブラリが優れていても途中で失敗したりする。
チームへどう広げるか
広げる事について考えている時にメリットやデメリットを話せないと説得力が無なので広がらない。だから、そのあたりは先に考えておく。
Fearless Change アジャイルに効く アイデアを組織に広めるための48のパターンは大げさだけど、活かせることがあるかもしれません。
どこから適用して、どこまで適用するのか
すでにあるプロダクトに新たなライブラリを導入する場合は考えます。
どこから始めて、どこで終わりとするのか見えてないと導入後いつの間にか負債となってしまう…
またこれを決める時にどういう実装になるのかを軽く実装して確認する。
無理なく、全員で進められるというのを大事にしている。
所感
こうして改めて文章にしてみるとライブラリについて考えるだけではなく、チームにどう広げるか等も考えている事に気づいた。そう思うとペパボの評価軸である「先を見通す力」「影響を広げる力」が主に必要で、なんならライブラリを導入のために何か作る必要があるのなら「作り上げる力」が必要になってくるのだなと思いました(Retrofit2導入時には、テスト用のクラスを作ったりしました)
追記:当たり前すぎて忘れてたけど、ライセンスも見てた。