DependabotをGHEのプロジェクトに適用する
Saturday, February 15, 2020 11:17:00 AM
昨今のWebアプリケーション開発では、多数のOSSライブラリに依存しています。 私たちが開発するアプリケーションの脆弱性対応はもちろんのこと、これらのライブラリもセキュリティアップデートやバグフィックスなどが行われていきます。
では、ライブラリのバージョンを最新に追従するにはどうしたら良いでしょうか?
- ライブラリのソースリポジトリをチェックする。GitHubのことが多いので、Watchしておけば通知が届きます。
- 依存関係をチェックしてくれるBotを入れて、Slackなどに通知する。たとえば npmcheck2slackのようなもの
- 依存関係をチェックしてPRを出してくれるツールを導入する。
3つ目のPRを出すツールに関しては、対応する言語ごとに様々なものがありますが、今回はGitHubに買収されたことでも有名になったDependabotを導入してみたので解説します。
でもDependabotって、普通にGitHubから使えるでしょ?
そうなんです。ただ今回はGitHubでもGitHub Enterpriseを利用している場合には(まだ?)Dependabotを利用することができないので、CIで実行できるようにしてみたよ!という記事です。
想定されるプロジェクト環境
- ソースコードリポジトリはGHE
- CIサーバーにDrone.ioをオンプレ利用
ですが、GHEやDroneでなくても、この記事を理解してもらえれば利用可能になると思います。
つまりリポジトリやらCIやらをオンプレしているプライベートな開発環境で、依存関係更新ツールを使ってみようろいうことです。
Dependabotをオンプレで動かす
DependabotにはDependabot Update Scriptというものがあり、オンプレ環境で動かせるようになっています。
READMEに書いてあるとおり設定すれば良いのですが、私たちのプロジェクトでは以下のようにしました。
dependabot-drone
というリポジトリをGHEに作成。これをDroneのdaily cronで実行してPRを日次で作成させる- Dependabot Update Scriptは
dependabot-drone
に git submodule で追加する - Dependabot Update Scriptの更新もチェックしたいので、
dependabot-drone
自身の更新もチェックする
これをDrone.ioで実行するには、以下のような .drone.yml
ファイルを記述します。
clone:
git:
image: plugins/git
recursive: true # 2のとおり submodule を使う場合指定
pipeline:
# READMEに書いてあるインストール手順を定義
install:
image: dependabot/dependabot-core
pull: true
commands:
- cd dependabot-script
- bundle install -j 3 --path vendor
when:
event: cron
# 3の自身をアップデートする定義
dependabot-drone:
image: dependabot/dependabot-core
environment:
- GITHUB_ACCESS_TOKEN=xxxxxxxxxxxxxxxxx
- GITHUB_ENTERPRISE_HOSTNAME=github.xxxxx.com
- GITHUB_ENTERPRISE_ACCESS_TOKEN=xxxxxxxxxxxxxxxxx
- PROJECT_PATH=xxxxxx/dependabot-drone
- PACKAGE_MANAGER=submodules
commands:
- cd dependabot-script
- bundle exec ruby ./generic-update-script.rb
when:
event: cron
Dependabotのコア機能は dependabot/dependabot-core
というDockerイメージで提供されているので、このイメージを使って dependabot-script
を実行するということです。
このときに環境変数を指定します。
- GITHUBACCESSTOKEN パッケージマネージャ(npmやcomposer, bundlerなど)が参照するリポジトリにGitHub APIを使ってアクセスするため、アクセストークンを設定しないとAPI上限に引っかかってしまいます。このため必ず設定しましょう。
- GITHUBENTERPRISEHOSTNAME GHEのホスト名を指定します
- GITHUBENTERPRISEACCESS_TOKEN GHEにアクセスするためのアクセストークンを設定します
- PROJECT_PATH GHEのプロジェクトパスを指定します
- PACKAGE_MANAGER ここではsubmodulesを指定しています。他の候補はREADMEに書いてあるとおりソースコードを参照します
アプリケーションリポジトリをチェックしていく
あとは、先ほど作った .drone.yml
ファイルにアプリケーションリポジトリを追加してくだけです。
たとえば frontend-app
というリポジトリをチェックしたい場合は、このようになります。
# 省略...
pipeline:
# 省略...
dependabot-drone:
# 省略...
frontend-app:
image: dependabot/dependabot-core
environment:
- GITHUB_ACCESS_TOKEN=xxxxxxxxxxxxxxxxx
- GITHUB_ENTERPRISE_HOSTNAME=github.xxxxx.com
- GITHUB_ENTERPRISE_ACCESS_TOKEN=xxxxxxxxxxxxxxxxx
- PROJECT_PATH=xxxx/frontend-app
- PACKAGE_MANAGER=npm_and_yarn
commands:
- cd dependabot-script
- bundle exec ruby ./generic-update-script.rb
when:
status: [success, failure]
event: cron
PROJECT_PATH
と PACKAGE_MANAGER
、パイプラインの名前が違うだけで他の定義はすべて一緒です。
status: [success, failure]
を入れているのは、複数リポジトリある場合に、途中で失敗しても継続したいための設定です。
PRがやってくる日々
daily cron に従って Dependabot からPRが送られてきます。
これでWatchしてPRしなくて良いし、とても便利ですよね。 PRのコメントに Changelog や Commit など変更のリンクがあるので、内容をチェックすることもできます。
プライベートでも依存関係の更新をちゃんとやれるよ!ということでした。
2020年の目標と昨年のふりかえり
Friday, January 03, 2020 04:00:00 PM
ふりかえり
昨年は、よりBlog発信、登壇に力を入れていました。 成果としては、Blog記事が41投稿ということで、(2018年は31投稿なので) +10記事増やせました。
これは登壇や中の人としてイベントに参加したことが大きかったのですが、それらをふりかえってみます。
イベント登壇と運営
2019年は、2018年以上にずっとイベントに追われていました。 2018年のふりかえりはこちらを参照ください。
- 主催: ESM社内勉強会(IoT Study) 22回 (基本的に第一/第三水曜日)
- 主催: Polymer.co-edo meetup 7回 ( #21 から #28 まで、月一 )
- 参加: 01/13(土) 次世代Webカンファレンス
- 発表: 01/26(土) PHPカンファレンス仙台2019
- 運営: 02/09 - 02/10 Web×IoT メイカーズチャレンジ 2018-19 in 東京【ハンズオン講習】
- 参加: 02/13(水) CakePHPの国際イベント、CakeFestの動画を見よう!第13回CakePHP MeetUp
- 参加: 02/27(水) 第135回 PHP勉強会@東京
- 運営: 03/02 - 03/03 Web×IoT メイカーズチャレンジ 2018-19 in 東京【ハッカソン】
- 参加: 03/27(水) 第136回 PHP勉強会@東京
- 発表: 03/31(日) PHPer Kaigi 2019
- 発表: 04/05(金) ESM LT #4
- 運営: 04/24(水) 開発リーダのための「明日の開発カンファレンス 2019」
- 発表: 05/19(月) I/O Extended 2019 Tokyo@GDG
- 参加: 05/29(水) 第138回 PHP勉強会@東京
- 発表: 06/01(土) 初夏のJavaScript祭 in メンバーズキャリア
- 参加: 06/07 - 06/08 開発合宿
- 出展: 06/12 - 6/14 Interop 2019
- 発表: 06-29(土) PHPカンファレンス福岡2019
- 参加: 07/26(金) Chrome Tech Talk Night #14
- 出展: 07/31 - 08/01 Google Cloud Next Tokyo'19
- 出展: 08/03 - 08/04 Maker Faire Tokyo 2019
- 参加: 08/28(水) 第141回 PHP勉強会@東京
- 発表: 09/21(土) PHPカンファレンス北海道 2019
- 発表: 10/12(土) PHPカンファレンス沖縄 2019
- 参加: 10/30(水) 第143回 PHP勉強会@東京
- 発表: 11/09 11/10 CakeFest 2019 Tokyo
- 参加: 11/11(月) GMOリサーチ テックカンファレンス 2019
- 参加: 11/16(土) CHIRIMENおさわり&もくもく会 〜Raspberry Pi 4 & Jetson対応記念〜
- 発表: 11/30(土) 冬のJavaScript祭 in メンバーズキャリア
- 発表: 12/01(日) PHP Conference 2019
- 運営: 12/06(金) 明日の開発カンファレンス アスカントークナイト
- 発表: 12/14(日) GDG DevFest Tokyo 2019
運営/主催/発表/出展などは、その準備だったりミーティングがあったりして、これよりも私のGoogleカレンダーは濃密にイベントスケジュールで埋まっています。 トータルの数としては昨年とほぼ一緒なのですが、参加よりも運営/主催/発表/出展が多かったのも、多忙に感じた原因にはあったかと思います。
なんといっても、全国PHPカンファレンスに発表枠で参加できたことは思い出です。
#phpcon2019 #phpcon デカ象ヤバい pic.twitter.com/iKP5Jedh6O
— しずひこ (@sizuhiko) December 1, 2019
はじめのおわり
今年は
- WPSG
- CHIRIMEN
- OSS (Fabricateのアプデ頑張る)
あたりが主戦場になると思います。 もちろんカンファレンスなどにも、なるべく参加していきたいとは思っています(今年のようにフル参加は難しいかもしれませんが)。
昨年同様に何をするにも健康第一なので、運動してお酒はほどほどに?みなさまと楽しい1年にできればと思います。 どこかでお会いしましたら、よろしくお願いします!
GDG Devfest 2019 に WPSG として参加してきました
Saturday, December 28, 2019 03:41:00 PM
GDG DevFest Tokyo 2019にWeb Platfoem Study Groupとして、Hands-on Teachersで参加してきました。
Web Codelab
ということで、スプレッドシートに最近のCodelabのリストを列挙しました。
これらは、すべて事前にちゃんとできるか確認したので、しばらくは大丈夫だと思います(ブラウザのアップデートなどでエラーになる場合もあります)。
このリストの選択は、以下の方針となっています。
- GCPとかクレカ情報とか必要でないもの
- ほかのページで解説しないもの(Basics of Angularとか見出しページだけで、中は別ページのスライド形式だった…
- Chromeの翻訳機能で日本語がある程度理解可能なもの
一部うまくいかない箇所もあるので、リストの備考を参考にしてください。
ということで、このDevFestをもって、中の人のコミュニティ活動はすべて終了です。
来年はWPSGで勉強会とかもやりたいなー
明日の開発カンファレンス アスカントークナイトを開催しました
Sunday, December 08, 2019 09:03:00 PM
明日の開発カンファレンス アスカントークナイトの中の人として運営参加しました。
今回は「明日の開発カンファレンス年末スペシャル」ということで、以下の趣旨で開催となりました。
開発にまつわる全ての話題について、腹を割って話し合える「明日の開発カンファレンス」 今回は過去のカンファレンスに登壇いただいた皆様により熱く語っていただけるようトークライブ形式のイベント「アスカントークナイト」 を12/6(金)に開催致します。
私は、最初のトークセッションでモデレータを担当しました。
一つ目のセッション始まってます!「開発現場の生の声 〜様々な障害を乗り越えて〜」 #asucon #アスカン pic.twitter.com/5MAHZCKpVb
— asuconjp (@asuconjp) December 6, 2019
開発現場の生の声 〜様々な障害を乗り越えて〜
とはまた重厚なテーマですが、基本的には3名の登壇者に、登壇してから現在までのアップデートを5分ずつ話してもらい、チャチャをちょっと入れながら進め、最後20分ぐらいをQ&Aセッションにする、という流れでした。
質問ないだろうなぁ?というのはこういうセッションでは あるある
なので、ちゃんとお題も2つ用意しておきました。
- 最近取り入れてみて良いと思ったプラクティス
- 課題対私たち の構図を生み出すために、良いと思う施策やアイデア
開発現場
ということで、なるべく チーム
にフォーカスした話をしたかったのですが、
人
の話が多くなってしまったのはすり合わせ不足なのか、それが現場のリアルな悩みなのか?
ということがありましたが、後で聞くと盛り上がっていて良かったという感想をいただきましたので、
良かったと思います。
当日の雰囲気は アスカンナイトトーク2019 にTogetterまとめがありますので、みていただければと思います。
SNS書けない話もたくさんあったので、次回あるときはみなさまぜひご来場ください。
PHPカンファレンス2019で、「PHPを学ぶということ」について発表してきました
Sunday, December 08, 2019 08:33:00 PM
12/1に開催されたPHPカンファレンスに参加&登壇してきました。
#phpcon 到着 (@ 大田区産業プラザPiO in 大田区, 東京都) https://t.co/ycLLHX1Pwk pic.twitter.com/ttXiGBi9BK
— しずひこ (@sizuhiko) December 1, 2019
早速ですが、当日のスライドです。
実はこの発表そのものは、PHPカンファレンス北海道 2019で「PHPを学ぶということ」について発表してきましたで登壇したときとまったく同じ内容です。 スライド内容の話などは、こちらの記事を辿ってください。
変更箇所としては、今回PHPUnit生みの親であるSebastian Bergmannのゲストセッションがあったので、 これは海外から来ていて日本在住のプログラマーとか、結構来るのでは?と思い英語を併記しました。 さらに発表の最初で「英語で字幕読んでね」みたいな挨拶も入れたのですが、反応薄かったので皆さん日本語でokだったようですw
北海道では30分だったセッションが、今回は25分です。 この5分をどうしても巻かないといけなくて、全体的に説明が雑になったりして、やっぱり30分以下は無理だな…と思いました。 すみません。 でも伝えたい重要なところは、ちゃんと時間をかけて話ました。
2019年最後のPHPカンファレンス
ということで、例のスタンプラリーも全制覇はできませんでした(LaraConは気づいたらチケット売り切れてた)が、7つ。 よく参加しました。特典として、大きい像がスタンプ1つあたり1,000円引きだったので、1万円の像を3,000円でお買い上げしてきました。
#phpcon2019 #phpcon デカ象ヤバい pic.twitter.com/iKP5Jedh6O
— しずひこ (@sizuhiko) December 1, 2019
小さい像はスピーカー特典でした。
さいごに
20回目の節目となるPHPカンファレンスで登壇できたのは、とても良かったです。 心残りなのはSebastianのセッションが自分の1つ前だったので、彼の登壇後話せなかったのと、 懇親会にはいるだろ?と思ったら、早めに退席されてしまっていて、まったく話せなかったことです。 まぁでもまだどこかで会えるよね?という期待を抱いて生きていきます。 彼のセッション聞いて、OSS開発のモチベも上がったので、来年はOSS開発いろいろ頑張るぞー
Recent Articles
- AWS Lambda の Node.js 14 を 18 に移行する(aws-sdk v3 移行編) 2023/01/04
- AWS Lambda の Node.js 14 を 18 に移行する(CI/CD環境移行編) 2022/12/30
- Node.js で Lambda ハンドラのテストを書くときに AWS イベントを生成する 2022/12/18
- Node.js で AWS SQS を使ったコードの自動テストを記述する 2022/12/18
- Node.js で BigQuery を使ったコードの自動テストを記述する 2022/12/18
- @swc-node/jest を使ってテストを高速化する(v1.5対応版) 2022/07/12
- Rails 7の採用提案で注目を集め始めた Import maps の過去、現在、そして未来について... 2022/05/06
- Middleman を 3系から 4系にアップグレードした 2022/05/06
- uvu での Test Double 2022/05/05
- GitHub Enterprise の Actions で依存関係を S3 にキャッシュする 2022/05/05