🗂

先輩エンジニアから聞いたライブラリ選定方法5選(JavaScriptのDate型ライブラリ編)

2020/10/19に公開

概要

状況としては、
TestCafeというE2Eテストツールを使ってテストを書いています。
言語はTypeScriptです。

Date型ライブラリを使用することになり、
JavaScriptのDate型ライブラリはいくつかあるから選定してみよう。ということで、
それぞれの特徴を調べてどれがいいか持ってきてという話になりました。

調査結果Date型ライブラリは主に以下の4つがありました。

  • moment.js
  • day.js
  • date-fns
  • luxon

それぞれを調査後、先輩に、

ダウンロード数が多く、速度が早いのでdate-fnsがいいと思います!!!!

とドヤ顔しましたが
ダメダメすぎて鬼のようなフィードバックをもらいましたのでご紹介します。

技術選定をする際には是非一度以下の点を気にして選んでください。

強強エンジニアが技術選定する際のポイント5選

  • 機能
  • コスト面
  • 言語に対応しているか
  • 評価は高いか
  • 長く使えるか

1.機能


求めてる機能を実装できるかどうか。
当たり前ですが、
やりたい動作が出来ないと、ライブラリを使うメリットがないので要確認。

Date型が壊れては話にならないのでimmutable(不変)ということや、
サービスの特性として早いかどうか大事でした。

2.コスト面


今回はテストコードを書く際のことなので、
本番環境で使っているライブラリは何かを把握しておく必要がありました。
なぜなら、

ライブラリを複数使うということは、
その分学習コストが多くなりますし、読みにくくなる。

現在のプロジェクトは人的リソースが足りていないので
コスト面は結構シビアに判定しているとのこと。

3.言語に対応しているか


当たり前ですが、言語対応していないものは使えません。

結果的にdate-fnsTypeScript対応していましたが、
TypeScriptを使ってテストを書いているのにも関わらず
その確認が抜け落ちていました。

4.評価は高いか


僕はダウンロード数が多い。ということが評価だと思っていました。

ダウンロード数=認知。

良いものだからダウンロード数が多い→評価が高い。
という考えも間違いではないが、イコールではないとのこと。

ライブラリ選定の評価はGitHub Starの数で判断した方が良い。
GitHub Starの数が多く、ダウンロード数も多いと信頼度は高め。

5.長く使えるか


頻繁にライブラリを変えるとコスパが悪すぎるので
そのライブラリは長く使えるのか。ということが重要。

また、ライブラリを使用するということはそのライブラリに依存することになり
変更する時に大幅な改修をしなければならないこともあるとか。。。。

ということで、
判断基準としては

  • 更新はされているか? 更新スパンは短いか?
  • コミッターはたくさんいるか?
  • 営利団体が唾つけてないか(買い取ろうとしていないか)

の3つを教えていただきました。

更新スパンとコミッターの数が少ないということはメンテナンスがされていないということ。
メンテナンスがされなくなると、
フォークされてそこから新しいのが出てしまう。
そのライブラリを使っていたら最終的に変えなければならない。

最終的に何を使ったのか

  • 本番環境がday.js
  • moment.jsの上位互換である
  • 一番使われているmoment.jsと書き方がほぼ同じなので学習コストが少ない
  • 評価が高い(ダウンロード数はdate-fnsの方が多いがGitHub Starの数はday.jsの方が多い)
  • TypeScriptに対応している
  • コミッターの数も多くこの中では一番更新スパンが短い

以上のことから、

day.jsを使うことになりました。

まとめ

正直、これまでは検索して目についたものを使うだけだったので
ライブラリ選定をする際にこれだけのことを考えてしていることはとても驚きました。

教えていただいたこと以外にもまだまだ意識している選定条件はありそうで、
フルスタックエンジニアになるためには技術選定の能力が必須とも仰っていたので、
引き続き盗んでいきたいと思います。笑

Discussion