Skip to main content

Gulp Snykプラグインの開発:Doug Wadeへのインタビュー

著者
Headshot of Tim Kadlec

Tim Kadlec

2017年1月26日

0 分で読めます

Doug Wade はIndeedのシニアフロントエンドエンジニアです。Dougは、GulpのビルドプロセスにSnykを簡単に組み込める便利な gulp-snykプラグインを開発しました。このプラグインを見つけてとても興味を持った私たちは、詳しく話を聞くことにしました。

Snykのパッチが適用されたGulpビルドが成功し、26 μsで完了したことを示すターミナル。

Snykを使い始めたきっかけは何ですか?

昨年、メンターとしてNode Summitに参加したとき、Guyの素晴らしい講演とライブデモを見る機会がありました。プロジェクトで見過ごしていたminimatchのセキュリティアドバイザリを悪用する方法を紹介する内容で、目からうろこが落ちると同時に、ぞっとしました。

ハッピーアワーの間に、nspからSnykに乗り換える理由についてGuyと話しました。そこで教えてもらったのが、私がSnykの「最大の強み」だと思っているsnyk protectです。

長い間、Travisのビルドを通すために.nsprcsをGitHubに公開しなければならないことに悩んでいました。React Serverのようなプロジェクトでは、攻撃者がwww.redfin.comのようなサイトを攻撃するために使える、脆弱性の一覧を公開しているように感じていました。私がやりたかったこととは正反対です!とはいえ、現実的にはそうするしかありませんでした。

npmの歴史の初期に、npmの発明者でCEOのIsaac Z. Schlueterは、npmパッケージの爆発的な増加と、npmでのオープンソース開発への参加を最も始めやすくしたことの両方にとって、核心となる決断をしました。Isaacは、Javaのような依存関係の地獄を避けるため、依存先となる各パッケージに、宣言された依存関係の独立したコピーをそれぞれ持たせることにしたのです。

つまり、私のようにnpmでモジュールを開発する開発者にとっては、依存関係を変更したりアップグレードしたりして、非常に素早く反復できます。一貫した依存関係の解決を待つ間、ユーザーが古いバージョンを使い続けることを心配する必要もありません。

その代わり、私が仕事で行うように、依存関係の中から脆弱なものを取り除く必要があるアプリケーション開発者にとっては、直接の依存関係をアップグレードするだけでは不十分です。すべての依存先が安全なバージョンにアップグレードされることも確認しなければなりません。Node Foundationのプロジェクトで脆弱な依存関係を更新するissueとPRを提出したところ、心から尊敬する開発者に厳しく叱責されました。そのとき、nsprcを使って修正がエコシステム全体に行き渡るのを待つnspの方法は、持続可能ではないと確信しました。

Snykはpostinstallスクリプトを通じてアプリケーションにパッチを適用するため、変更がエコシステム全体に行き渡るのを待つ必要がありません。また、マニフェストに並ぶのは、現在存在する脆弱性ではなく、すでに修正済みの脆弱性になります。

gulp-snykを開発することになったきっかけは何ですか?

Node 0.8の頃からNodeで開発しています。プログラミングを学び始めた頃、Windowsマシンに開発環境をうまくセットアップできたのがNodeだけだったのが、主な理由です。そのため、今もGulpをビルドシステムとして使っているモジュールがいくつも残っています。

ビルドシステムの主な役割は、よく使うタスクを標準化し、見つけやすくすることだと考えています。新しいコントリビューターにpackage.jsonやgulpfileに散らばったタスクを探してもらうのではなく、タスクをひとつの場所にまとめたかったのです。GulpでSnykのタスクを書くための定型コードはそれほど多くありませんでしたが、プロジェクト間でコピー&ペーストしたくはなかったので、npmで公開しました。

開発の大部分は、仕事の後の2晩で行いました。gulp-snykがテスト対象を実行するために使っている、ドキュメント化されていないプログラマティックAPIがあることがわかりました。

この件についてSnykと調整しようと、issueを作成しました。私にとってこの出来事は、動的言語を使う魅力のひとつをよく表しています。Snykについて何も知る必要はありませんでした。REPL(Read-Eval-Print-Loop)を起動して、いろいろ試してみるだけでよかったのです。

現在、gulp-snykをどのように使っていますか?

Clefsとname-suffixesの保護にgulp-snykを使っていて、React Serverにも追加する予定です。現在、17個のNodeモジュールでSnykを使っており、いずれ33個すべてに広げるつもりです。

NPMモジュールが33個もあるんですね!そこまで貢献を続ける原動力は何ですか?

開発者はコミュニティから多くの恩恵を受けているのだから、コミュニティに還元する倫理的な責任があると思います。ただ正直なところ、私のモチベーションの多くは、かなり自分勝手なものだと思います。

Nodeやnpm、LernaにPRを送ると、ソフトウェア開発で最も優秀な人たちのコードを調べ、その人たちからコードレビューを受ける機会が得られます。初めて作ったプロジェクトをRedditやHacker Newsに投稿すると、API設計やアーキテクチャ、ドキュメントについてフィードバックをもらえます。そうしたフィードバックは、職場で受けるものよりも、私の専門分野に深く踏み込んだものです。

ある意味では、自分が上ってきたはしごを後から来る人のために引き上げない、ということでもあると思います。私のキャリアは、フリー/オープンソースソフトウェア(FOSS)とともに仕事をし、そこから学ぶことで築かれてきました。ですから、現実的にも、そして大きな意味でも、FOSSがなければ今の私はありません。

ところで、gulp-snykへの貢献に興味がある人は、どこを見ればよいですか?

gulp-snykプラグインはnpmで公開されています。npm(npm install --save-dev gulp-snyk)またはyarn(yarn add --dev gulp-snyk)でインストールできます。貢献したい方は、コードをGitHubでご覧ください。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

続きを読む

illustration hero ai
Blog

PHPが重大な未認証RCEの脆弱性2件を修正(CVE-2026-109618、CVE-2026-109619):今すぐアップデート

PHPのリクエスト処理に重大な脆弱性が2件あり、未認証のリモートコード実行につながるおそれがあります。修正版にアップグレードするか、旧バージョンにはベンダー提供のバックポートを適用してください。

blog feature ai lilac
Blog

エージェント型修正で脆弱性バックログをプルリクエストに変える

Evo Remediation Agentがオープンプレビューで利用可能になり、Evo Agentic AppSecに依存関係の自動解決機能が加わりました。AppSecチームは継続的な修正キャンペーンを実施できるようになりました

AI Background min crop
Blog

AIが、あなたが受け入れてきたあらゆるリスクを一気に顕在化させる:AI Security Panel: Unfilteredから得た7つの洞察

AIによって攻撃はより安価かつ高速になり、組織がすでに抱えているリスクが露呈しています。4人のセキュリティリーダーが、機械の速度に対応する防御と迅速な修復が今不可欠である理由を語ります。