強強エンジニアから聞いたライブラリ選定方法

2 min読了の目安(約2200字TECH技術記事

自己紹介


6ヶ月のニート期間を経て
2020年10月にWeb系エンジニアとして転職したこにまんと申します。

Zennでは学んだことや詰まったことを纏めていきます。
今は超初心者レベルのことばかりかもしれませんが
どんどんレベルの高いことを書いていきたいと思っていますので
是非フォロー&サポートお願いします!!!笑

Twitterでは転職後のリアル情報と先輩エンジニアの格言を発信中です。笑
こにまんのTwitter

では本題に入ります。

概要


テストで使用する、
JavaScriptのDate型ライブラリを選定してみよう。となり、

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

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

調査結果Date型ツールは主に以下の4つがありました。

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

それぞれを調査後

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

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

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

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


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

機能


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

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

コスト面


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

合わせた方がコストが安いからです。

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

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

言語に対応しているか


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

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

評価は高いか


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

ダウンロード数=認知。

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

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

長く使えるか


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

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

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

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

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

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

営利団体が唾つけてないか(買い取ろうとしていないか)も同じことで、
オープンソースだったものが買収されてしまい使えなくなると
上記と同じ様に最終的に変えなければいけなくなる。

最終的に何を使ったのか


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

以上のことから、

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

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

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