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

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の課題の解き方を学びましょう。


