snyk testとJSONを最大限に活用する
Tim Kadlec
2017年6月29日
0 分で読めますsnyk testを実行すると、アプリケーションの依存関係をスキャンし、既知の脆弱性が含まれていないかをテストします。脆弱性が見つかった場合、コマンドはエラーを返し、脆弱性の情報と対処方法をコンソールに出力します。
CI環境で非常に便利で、実用的な情報を豊富に得られます。ただし、テスト結果を加工したり、簡単に共有できるローカルレポートを作成したりするなど、さらに活用したい場合もあるでしょう。そこで役立つのが、--jsonオプションです(snyk testの結果をJSONで出力します)。
ここでは、snyk test --jsonと無料で利用できるツールを使って実現できることをいくつかご紹介します。
JSONオプション
snyk test --jsonを実行すると、プロジェクトに関する基本的で有用な情報を含むJSONオブジェクトが出力されます。現在の基本的なオブジェクト形式は次のとおりです。
さらに、vulnerabilitiesには、検出された各脆弱性の詳細情報が含まれています。
これらの情報を活用すれば、Snykのテスト結果をさまざまな方法でカスタマイズできます。
脆弱性を任意の順序で並べ替える
デフォルトでは、snyk testは、生成された依存関係ツリーをたどって検出した順に脆弱性を報告します。
結果を加工して並べ替えるためのツールはいくつかありますが、ここではjqを使います。jqはコマンドラインのJSONプロセッサです。JSONデータをパイプで渡してフィルタリングし、処理後のデータを再びパイプで出力できます。
jqを使えば、好きな方法で結果を並べ替えられます。たとえば、脆弱性を公開日で並べ替えて、新しいものから表示できます。
さらに数行追加すれば、脆弱性を深刻度で並べ替えて、最も重大なものから表示することもできます。
脆弱性の深刻度をカスタマイズする
jqを使って、何らかの理由でSnykが設定した深刻度と異なる深刻度にしたい脆弱性の評価を変更することもできます。
たとえば、サイトが依存しているNokogiriのバージョンに、深刻度の高い任意コード実行の脆弱性が含まれているとします。しかし、チームで検討した結果、Nokogiriの使い方を踏まえると問題の深刻度はそれほど高くないと判断するかもしれません。その場合、jqを使ってレポート内の脆弱性の深刻度を変更できます。
ローカルHTMLレポートを生成する
プロジェクトのオンラインダッシュボードには、各脆弱性の深刻度、説明、脆弱なパスなど、詳細情報が表示されます。snyk testの結果をもとにローカルコピーを作成するには、オープンソースのSnyk JSON to HTML Mapperを利用できます。
このMapperはsnyk test --jsonを受け取り、外部リソースを使わずにローカルHTMLレポートを生成します。利用するには、npm install -g snyk-to-htmlを実行してグローバルにインストールします。その後、testコマンドの実行時に、次のように結果を直接モジュールにパイプで渡します。
上記のコマンドを実行すると、外部依存関係のない、見やすくスタイル設定されたローカルレポートが作成されます。

jqを使ってJSON出力をカスタマイズしている場合は、加工後のJSON結果をパイプで渡すこともできます。たとえば、次のコマンドを実行すると、脆弱性を公開日順に並べ替えたローカルHTMLレポートが生成されます。
JSONを使った独自レポートの作成
snyk testを実行するだけでも、多くの有用な情報が得られます。さらに柔軟な使い方が必要なら、snyk test --jsonが役立ちます。無料のツールと少しの工夫で、ニーズに合わせてSnykの結果をカスタマイズできます。
JSON出力を使って独自のレポートや機能を実装している方は、ぜひお知らせください。どんなものを作られたのか、ぜひ聞かせてください。
キャプチャー・ザ・フラッグを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、キャプチャー・ザ・フラッグの課題の解き方を学びましょう。


