Skip to main content

Snyk、Greenkeeperの開発元と提携し、開発者による依存関係の健全性の予防的な維持を支援

著者
Headshot of Dan Mckean

Dan Mckean

2020年3月5日

0 分で読めます

オープンソースソフトウェアの利用時に、開発者がセキュリティ脆弱性を予防的に減らし、依存関係の健全性を維持できるSnyk Open Sourceの機能「Automatic Dependency Upgrades」が正式リリースされたことをお知らせします。Automatic Dependency Upgradesは、Snykと、Neighbourhoodie Softwareとの新たな提携によって実現しました。同社はGreenkeeperの開発元であり、開発者向けツールの革新を続けています。

Greenkeeperチームは2015年から、開発者がソフトウェアを最新かつ健全な状態に保てるよう支援しており、この分野の先駆けのひとつでもあります。開発者に寄り添うチームと協力するのは私たちにとって自然な選択でした。この提携の成果を、SnykとGreenkeeperのユーザーの皆さまに提供できることを誇りに思います。

オープンソースの依存関係をめぐる(増大する)課題

開発者は、直接依存と間接依存の両方を含め、膨大な数のオープンソース依存関係をコードに取り込みます。その多くにはセキュリティ脆弱性が含まれており、修正を適用できるかどうかは依存関係がどれだけ最新かに大きく左右されます。使用中のバージョンが古いほど、アップグレードは困難になります。

脆弱で古くなった依存関係を常に把握することは、アプリケーションの安全性と健全性を保つうえで不可欠です。自動化を導入していなければ、最も優秀な開発チームであっても、これを実現するのはほぼ不可能です。プロジェクト全体の依存関係を手作業で確認し、必要に応じてアップグレードするのは、控えめに言っても大変な作業です。

Automatic Dependency Upgradesを使うと、Snyk Open Sourceは連携済みのプロジェクトを継続的に監視し、依存関係の新しいバージョンを検出すると、実行可能なコンテキスト豊富なプルリクエストを自動で作成します。アップグレードのペースと範囲を細かく制御できるため、開発者が大量のアップグレードに圧倒されることはありません。また、常に最新の状態に保たれるSnykの包括的な脆弱性データベースを活用し、推奨バージョンによって新たな脆弱性が持ち込まれないようにします。

開発者にやさしいアップグレードワークフロー

Snykは常に、新しいワークフローを作るのではなく、開発者が既存のワークフローに取り入れられるツールを提供することを目指してきました。Automatic Dependency Upgradesも例外ではありません。コードリポジトリにネイティブに統合され、ほかのプルリクエストと同じように依存関係のアップグレードを自動で提案します。

Snykがreact-scriptsを1.0.14から1.1.5にアップグレードし、修正された脆弱性を一覧表示しているGitHubのプルリクエスト。

ほかのプルリクエストと同様、依存関係のアップグレードに関するプルリクエストは、マージ前にレビューと検証ができるため、問題が起きるリスクがないことを確認できます。また、調査の結果、依存関係のバージョンが公開されてから21日未満の場合は、Snykはアップグレードのプルリクエストを作成しません。メンテナーのアカウントが侵害され、意図的に悪意あるバージョンが公開された場合などに、不正なバージョンを回避するのに役立つことが分かっています。

content-dispositionパッケージをバージョン0.5.2から0.5.3にアップグレードするpackage-lock.jsonの変更を示すGitHubプルリクエスト

データに基づいてアップグレードを判断

新しいバージョンが出ると単に更新を適用するほかの自動化ソリューションとは異なり、Snykは開発者がより多くの情報に基づいてアップグレードを判断できるよう、状況に応じた実用的な情報を提供します。古くなった依存関係が多数含まれるプロジェクトでは、何を優先してアップグレードすべきかを判断するうえで、特に重要です。

Snykが自動で作成するアップグレードのプルリクエストには、推奨アップグレードの成熟度や依存関係のリリースノートが記載されます。また、アップグレードによって修正されるセキュリティ脆弱性の詳細も含まれ、深刻度や、該当する脆弱性に既知のエクスプロイトがあるかどうかも確認できます。

expressパッケージをバージョン4.16.0から4.17.1にアップグレードする、snyk-botによるGitHubプルリクエスト。リリースノートが表示されています。

アップグレードのペースを制御

依存関係を最新の状態に保つことは、プロジェクト全体の健全性にとって重要です。しかし、すべての依存関係の新バージョンごとに届くプルリクエストを確認するのは、時間がかかり大変な作業です。開発者が大量の通知に埋もれないよう、アップグレードのプルリクエストのペースと範囲を制御できるようにしました。

メジャーバージョンのアップグレードはリスクが高くなる傾向があるため、Snykのデフォルト設定では、マイナーバージョンのアップグレードとパッチのみを対象にプルリクエストを作成します。この動作は変更でき、メジャーバージョンのアップグレードについてもプルリクエストを作成するようSnykに設定できます。これは、提携の一環としてNeighbourhoodieの協力を得て実装した機能のひとつです。

Snykでは、同時にオープン状態にできるアップグレードのプルリクエスト数を制限したり、無視する特定の依存関係を指定したりできます。

自動依存関係アップグレードのプルリクエストに関するSnykの設定画面。アップグレードが有効で、パッチ版とマイナー版が選択され、react-scriptsは対象外に設定されています。

では、どうすれば始められますか?

Automatic Dependency Upgradesは、Snyk Open Sourceのすべてのプラン(Free、Standard、Pro、Enterprise)でご利用いただけます。利用を開始するには、Snykに登録してプロジェクトを連携するだけです。依存関係の推奨アップグレードを知らせるプルリクエストが届くのをお待ちください。

Automatic Dependency Upgradesは現在、GitHub/GitHub EnterpriseおよびBitbucket Cloud上のnpm、Maven-Central、Yarnのプロジェクトに対応しています。今後、対応するプロジェクトタイプを追加する予定です。最新情報をお待ちください。

この機能とSnyk Open Sourceの詳細については、以下をご覧ください。

アップグレードをお楽しみください!