🍏

ライブラリのバージョン管理ツールDependabotを導入しました

2024/10/09に公開

はじめに

こんにちは。株式会社ココナラアプリ開発グループ、iOSチームのじょにーです!
今回はiOSチームで最近導入したDependabotについて概要から設定方法、どのように運用しているかまでお話ししていきます。

Dependabotとは?

Dependabotはリポジトリ内の依存関係をチェックし、必要に応じてパッケージバージョンの脆弱性をメールなどで通知したり、バージョン更新用のPull Requestを任意のタイミングで自動的に発行してくれるなどの役割を担っています。
元々は独立したサービスでしたが、2019年にGitHubが買収し、現在はGitHubがホストしているbotサービスのひとつとなっています。

Dependabotは大きく分けて以下3つの機能が存在します。

Dependabotの機能 説明
Dependabot alerts パッケージバージョンの脆弱性が検知されたとき、メールなどでアラート通知をする
Dependabot security updates パッケージバージョンの脆弱性が検知されたとき、その問題を解決するバージョンにアップデートするためのPRを自動で生成する
Dependabot version updates パッケージバージョンを最新にする為のPRを自動で生成する

はじめはDependabot security updatesも検討しましたが、脆弱性に対応かつ最新版を追従できるDependabot version updatesを導入しました。

以下はdependabotによって自動生成されたPRのキャプチャです。
dependabotによって自動生成されたPR
dependabotによって作成されたPRにはラベルも自動付与されます。
dependabotによって自動生成されたPRの詳細
トグルをクリックするとリリースノートをPR上で確認することができます。

導入した目的

主には以下2点です。

  1. ライブラリのEOLを防ぎたい
  2. PrivacyManifestのような大幅な対応が必要な際、日頃からパッケージバージョン管理をしておくことでチームの負荷を減らしたい

設定方法

Dependabot version updatesは.gitHubディレクトリにdependabot.ymlファイルを置くことで有効化します。

まずはローカルでdependabot.ymlファイルを作成し、ルールを設定してプロジェクトの.gitHubディレクトリに追加します。
以下は設定例です。こちらを適用することで日本時間で平日の毎朝10時にdependabotが実行されるようになり、directoryで設定したパッケージを管理しているディレクトリをチェックして必要に応じてPRが自動生成されます。

.github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "swift"
    directory: "/Hoge"  
    schedule:
      interval: "daily"
      timezone: "Asia/Tokyo"
      time: "10:00"
    target-branch: "develop"

なおDependabotによって生成されるオープンPull Request数には上限があり、デフォルト設定だと5つまでです。
上限に達すると以下のキャプチャのようにGitHub上でアラートが表示されます。
エラー画像
マージやクローズなどで1つ枠が空くと次の実行タイミングで1つのPull Requestが自動生成されます。
この上限はopen-pull-requests-limitをymlファイル上で設定することによって変更が可能です。
上記以外でも例えばassigneesでPRのアサイン担当者を設定したり、labelsでPRに設定するラベルの設定が可能だったりもします。
設定できる内容の詳細についてはこちらの公式ドキュメントに記載されています。

ちなみにGitHub上でdependabot.ymlファイルを作成してDependabot version updatesを有効にする方法もあります。
詳細はこちらに記載されてます。

運用ルール

リリースごとに最大5つのパッケージアップデート対応を行うようにしています。
基本的にメインプロジェクトを抱えていないメンバーが担当しており、週例のチームMTGで誰が担当するかを決めています。
パッケージをバージョンアップしたブランチに最新の開発ブランチを取り込んでビルドが成功するかを検証し、必要に応じてソースコードを更新してチームレビューを行うというフローで運用しています。

ルールを設定することでdependabotによって生成されたPRが放置されないように運用できているかなと思います。

終わりに

いかがでしたでしょうか。今回はDependabotの概要、導入してからの運用ルールなどについてお話ししました。
今後運用していく過程で学んだことや苦労したことなども機会があれば発信していきたいです。

最後まで読んで頂きありがとうございました。
ココナラでは、一緒に事業のグロースを推進していただける様々な領域のエンジニアを募集しています。iOSアプリ開発だけでなく、フロントエンド領域・バックエンド領域などでも積極的にエンジニア採用を行っています。少しでも興味を持たれた方がいましたら、エンジニア採用ページをご覧ください。
https://coconala.co.jp/recruit/engineer/

Discussion