Dependency Health—Snykでパッケージのリスクを評価
Anna Debenham
2019年5月16日
0 分で読めますSnykは、オープンソースを安全に利用できるよう支援することを目指しています。脆弱性は依存関係の健全性を示す指標の一つですが、ほかにも考慮すべきリスク要因があります。
そのため、セキュリティやライセンス情報に加え、新たに健全性に関する情報も提供し、依存関係について知りたいときにまず利用される場所となるべく、チーム全体で取り組んでいます。
今月、Dependency Healthの取り組みの第1段階を順次展開しています。開発者が、コードに含まれる依存関係にリスクがあるかどうかを特定できるよう支援するためのものです。
健全性リスクのカテゴリ
新たに追加されたリスク情報は次のとおりです。
非推奨パッケージを示す指標
パッケージの初回リリース日(成熟度)
パッケージの最終更新日(アクティビティ)
レポートに限り、現在のパッケージバージョンと最新バージョンとの差分(古さ)
新しい情報を詳しく見ていきましょう。
問題のあるステータス — このパッケージは非推奨か?
npmでは、メンテナーが更新を停止した依存関係は「非推奨」とマークされます。レポートのDependenciesタブで、snyk.ioから取得したこれらのパッケージに警告アイコンを表示するようになりました。また、非推奨のパッケージだけを一覧表示できるフィルターも追加しました。

さらに、パッケージの最新バージョンが非推奨の場合、該当するパッケージページにも警告を表示するようになりました。

この警告が表示されるパッケージの例として、cryptiles、node-uuid、hoekがあります。
成熟度 — このパッケージが初めてリリースされたのはいつか?
新しいパッケージをインストールするときに何を危険信号と感じるか、コミュニティに尋ねたところ、多くの人が最初に挙げたのは成熟度でした。パッケージが以前から使われているものかを知りたいということです。先週初めて公開されたものなら、インストールしたくないと思うかもしれません。一方、1年以上前に初めて公開されたものなら、より成熟していると判断できます。しかし、長く存在していても、公開されたバージョンが1つだけのパッケージが、誤って「成熟している」と見なされる可能性もあります。そのため、最新のセマンティックバージョン(semver)も表示します。たとえば0.1.0より低い場合、まだ十分に成熟していない可能性があるため、利用を控えたほうがよいかもしれません。そこで、レポートにこのデータを表示するようになりました。

パッケージページにも同じデータを表示しています。

アクティビティ — パッケージは現在もメンテナンスされているか?
最終公開日のデータからは、パッケージのアクティブ度も把握できます。実質的にアーカイブ状態でも、メンテナーが明示的にそうマークしていないパッケージは数多くあります。たとえば12か月以上更新されていないパッケージは、おそらく今後も更新されないでしょう。単一の目的に特化したライブラリで、完成していると見なせる場合もあります。しかし、その依存関係が更新されていなければ、リスクは高まります。
古さ — 更新版が提供されているか?
常に最新バージョンを使いたい方のために、プロジェクトにインストールされている依存関係と、同じパッケージで利用可能な最新バージョン(アルファ版やプレリリースを除く)を比較して表示するようになりました。

このデータはプロジェクトに直接関係するため、Snykのレポートエリアでのみ確認できます。
Snykで品質評価を続ける
レビューが1件だけの4.5つ星評価が、製品の品質を示す優れた指標とは限らないのと同じように、依存関係の健全性データも、より広い文脈の中で考慮する必要があります。そのため、さまざまな品質指標をデータベースに追加し、お客様がリスクを確認して、より多くの情報に基づいた判断を下せるようにしています。各パッケージを幅広い文脈の中で評価することをおすすめします。ある指標でスコアが低くても、それには正当な理由があるかもしれません。
今後もさらに機能を拡充…
今後数か月にわたり、既存カテゴリのデータポイントを増やし、「人気度」などの新しいカテゴリを追加するとともに、評価を自動化するポリシーを提供して、依存関係の健全性をより幅広く、詳細に把握できるようにしていきます。assessment
利用を開始する
詳細は、SnykのレポートエリアにあるDependenciesタブ(レポートを利用できるSnykプランをご利用の場合)と、オープンソースコミュニティ全体に公開されているパッケージページで確認できます。
現在、詳細情報を提供しているのはnpmパッケージのみです。レポートでは、依存関係が検出されたプロジェクトの新しいスナップショットをSnykが取得するたびにデータが更新されます(デフォルトでは24時間ごと)。
APIを利用できるプランをご利用の場合は、Dependencies APIを使って独自のレポートをスクリプトで作成できます。また、すべての依存関係をCSVでエクスポートし、チームで問題のある依存関係のトリアージに役立てることもできます。
ぜひお試しいただき、表示してほしいほかのデータがあればお知らせください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。


