MergifyとSnykで依存関係の更新を効率化
2023年8月23日
0 分で読めますプロジェクトの依存関係を管理するには、継続的な取り組みと注意が必要です。プロジェクトを保守する中で、次のようなことが気になったことはないでしょうか。
依存関係に、新機能やバグ修正を含む新しいバージョンがリリースされた。
依存関係にセキュリティ上の脆弱性があり、新しいバージョンで修正がリリースされた。
古くなったコードを避けるため、依存関係のバージョンを最新に保つ。
幸い、DependabotやGreenKeeperなどのソリューションを使い、GitHubボットで依存関係の管理をある程度自動化できるようになりました。
ただし、こうしたボットが自動化するのは、変更を提案する新しいプルリクエストの作成が中心です。CIを壊すプルリクエストをマージしないよう注意しながら、それぞれをマージする作業は依然として手動で行う必要があります。
依存関係の更新を自動化するだけでは不十分です。マージまで自動化しましょう。
Mergifyとは?
Mergifyは、GitHubのワークフローを自動化する革新的なツールです。細かな管理作業に追われることなく、優れたソフトウェアの開発に集中できます。Mergifyはプルリクエストの自動化サービスとして、ユーザーが定義した条件に基づくカスタムワークフローの作成を支援します。たとえば、プルリクエストの自動マージ、クローズ、コメント、レビュー、ラベル付け、転送、バックポート、リベースなど、さまざまな処理を自動化できます。
セットアップが完了すると、Mergifyがコードレビューやプロジェクト管理の面倒な作業を引き受けます。リポジトリを適切な状態に保ち、masterブランチが常にグリーンであることを確認し、自動化できる作業を手動で処理する時間を最小限に抑えます。
次のセクションでは、Mergifyを活用して依存関係の更新を悩みの種から楽しみへと変える方法をご紹介します。
Snykの依存関係アップグレードPRについて
脆弱性の修正を適用し、古くなった依存関係を最新に保つには、Snykが役立ちます。
Snykは、開発者がアプリケーションのセキュリティに責任を持てるよう支援する、開発者に使いやすいセキュリティプラットフォームです。脆弱性スキャンで知られるSnykは、依存関係の更新もスムーズに管理できます。特に、自動プルリクエストによる更新が便利です。
Snykの依存関係アップグレードPRは、どのように機能するのでしょうか。Snykは定期的にプロジェクト内のすべての依存関係を確認し、利用可能な更新がないかをチェックします。新しいバージョンが見つかると、更新に必要な変更を含むプルリクエストをGitHubリポジトリに直接作成します。依存関係のバージョン変更の履歴や最新バージョンのリリース日など、アップグレードに関する詳しい情報もプルリクエストに含まれるため、変更をマージする前に十分なレビューができます。

利用を開始する
利用を始めるには、次の簡単な手順をいくつか実行します。
GitHubのコードリポジトリを1つ選び、依存関係のアップグレードとマージのワークフローを自動化するよう設定します。
Mergifyアカウントを作成し、Mergify GitHub Appをリポジトリに招待します。
Snykアカウントを作成し、GitHubリポジトリを接続します。
Snykで依存関係の自動アップグレードを有効にする
Snykアプリを開き、必要に応じてサインアップを続けます。GitHubリポジトリをインポートして、自動化するリポジトリを接続します。SnykのUIでProjectsページを開き、Add projectsを選択します。Snykにインポートするコードリポジトリを選び、Add selected repositoriesをクリックします。

プロジェクトのインポートが完了したら、Settings、インテグレーション、GitHubの順に選択し、Snykの依存関係アップグレードPRを有効にします。

次に、下にスクロールしてAutomatic dependency upgrade PRsの設定項目を探し、この機能を有効にします。

これでSnykボットがプロジェクトの依存関係をアップグレードするプルリクエストを自動で作成するようになりました。次はMergifyの設定に移り、プルリクエストのマージを自動化しましょう。
Mergifyの自動マージポリシーを作成する
Snykの場合と同様に、GitHubアカウントでMergifyに接続します。次に、Mergifyで管理するリポジトリを追加します。
Mergifyで管理するGitリポジトリを編集するには、GitHubアプリケーションのページにリダイレクトされます。ドロップダウンからリポジトリを選択できます。

Mergifyに追加するリポジトリを選択したら、Saveボタンをクリックします。
次に、プロジェクトのマージポリシーを設定します。リポジトリのルートにある.mergify.ymlファイルでマージ設定を行います。ヒント:CI関連のほかのワークフローや設定とまとめるため、.github/ディレクトリにファイルを配置することもできます。
MergifyのYAML設定ファイルは、次の要素で構成されます。
マージキュー - プルリクエストを項目としてキューに追加し、1件ずつmainブランチにマージする仕組みです。マージコンフリクトや互換性を損なう変更を防ぎます。
プルリクエストのルール - 名前のとおり、プルリクエストを検証するための一連の条件です。検証後、マージキューへの移動などのアクションを実行できます。
簡単な例を見てみましょう。
上記の設定では、少なくとも1人のレビュアーがプルリクエストを承認するという条件が満たされると、プルリクエストがマージされます。
Mergifyを使わない場合、レビュアーがプルリクエストの変更をすぐに承認しても、すべてのCIチェックが完了するまで待つ必要があります。または、作成者が承認済みのレビューを確認し、マージ可能な状態になったことを知らせるまで待たなければなりません。マージは手動で行う必要があります。
上記の条件をMergifyで設定すると、レビューが承認された時点でプルリクエストが自動的にmainブランチにマージされます。
Snykのアップグレードプルリクエストを自動でマージする
依存関係をアップグレードするSnykのプルリクエストにも、同じ自動化を設定しましょう。Mergifyの設定ファイルは次のようになります。
設定内容を詳しく見てみましょう。
Snyk PRs Queueという名前のマージキューを作成します。すべてのCIステータスチェックが成功した場合にのみ、プルリクエストがマージされます。これにより、CIで実行されるテストやその他の自動処理が正常に完了し、アップグレードした依存関係のバージョンによって互換性が損なわれないことを(テストで確認できる範囲で)確かめられます。プルリクエストをSnyk PRs Queueに追加するには、次の条件を満たす必要があります。
プルリクエストのタイトルが
[Snyk]で始まる。プルリクエストのヘッドブランチ名が
snyk-fixで始まる。マージ先となるベースブランチ名が
mainである。
上記の条件を満たすと、プルリクエストにGitHubの「auto-merge」ラベルを付け、Snyk PRs Queueに追加します。
新しいMergify設定ファイルをリポジトリにコミットし、Snykが新しいプルリクエストを作成する様子を見てみましょう。

ヒント:Snykの依存関係アップグレードポリシーで通知を抑える
依存関係のプルリクエストを自動化すると、その数が増えすぎてチームの負担になることがあります。更新によってチームのワークフローが妨げられないよう、バランスを取ることが重要です。そんなときに役立つのがSnykの依存関係アップグレードポリシーです。
1. 同時にオープンできるアップグレードPRの数を制限する:Snykでは、一度にオープンできる自動アップグレードPRの数を制限し、プルリクエストの量を管理できます。これにより、アップグレードのリクエストに追われることなく、開発パイプラインの重要なタスクに集中できます。
2. アップグレードを無視するパッケージを選ぶ:すべてのパッケージに頻繁な更新が必要とは限りません。最新バージョンへのアップグレードを繰り返すと、コードが壊れたり不安定になったりする場合もあります。Snykでは、特定のパッケージを自動更新の対象外にできます。これにより、依存関係の更新スケジュールを管理し、プロジェクトにとって重要なパッケージに集中できます。
3. マイナーおよびパッチバージョンのみをアップグレードして変更範囲を制限する:メジャーバージョンのアップグレードでは、互換性を損なう変更に対応するため、追加のコード変更が必要になることがあり、手間がかかる場合があります。Snykでは、マイナーおよびパッチバージョンのみを自動アップグレードするよう設定できます。アプリケーションの安定性を保ちながら、互換性を損なわない改善やセキュリティパッチを適用できます。
これら3つのポリシーを導入すれば、依存関係のアップグレードによる通知や作業を減らし、開発チームが重要な更新を把握しやすくなるとともに、コードベースの混乱を防げます。自動更新の目的は手動更新の負担をなくすことであり、別の場所に移すことではありません。Snykの強力な機能を活用して、不要な妨げのない、スムーズで整然としたCIワークフローを維持しましょう。
自動化して、あとはおまかせ
依存関係のアップグレードを自動でマージすれば、チームの開発スピードと生産性を高められます。ぜひ自動化したい作業のひとつです。
Snykの依存関係アップグレードPRを利用すれば、依存関係の更新を手作業で追跡したり確認したりする必要はありません。依存関係の更新に追われる状況から脱却し、より効率的で安全、かつシンプルな更新プロセスを実現しましょう。MergifyとSnykを組み合わせれば、ワークフローをさらに進化させることができます。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。


