【Flutter】GithubのDependbotを導入する

Flutterを使って個人で以下のスマホ向けのおみくじアプリ（大御心アプリ）を開発・運用しています。

<img width="130" alt="Screenshot_home.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/d4a6102b-53cd-eb2c-f333-5e23392e7f29.png">
<img width="130" alt="Screenshot_fortune_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/ccc35e8e-f92e-308a-3fb8-8d194e2edc16.png">
<img width="130" alt="Screenshot_fortune_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/c6959d28-9900-9789-84b1-d909607acc40.png">
<img width="130" alt="Screenshot_emperor_list.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/34b47a38-04e2-1ac9-baf8-6da0e8848086.png">
<img width="130" alt="Screenshot_emperor_detail.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/d68400a0-2926-1b1c-764f-76efaa7729e3.png">

[iOS]
https://apps.apple.com/us/app/%E5%A4%A7%E5%BE%A1%E5%BF%83%E3%82%A2%E3%83%97%E3%83%AA/id1627544916

[Android]
https://play.google.com/store/apps/details?id=jp.sikisimanomiti.oomigokoro

今回上記アプリのリポジトリにGithubのDependbotを導入する記事を書きたいと思います。

## Dependbotとは
アプリを開発する際に必要に応じてライブラリを使って開発することがあると思いますが、ライブラリから致命的な脆弱性が入ってしまい個人情報が流出するなど開発するアプリのセキュリティが低下しないよう定期的に使用するライブラリのアップデートも行わなければなりません。

しかし、開発が活発なライブラリはマイナーバージョンアップであれば1、2日で行うこともあるので、使用しているライブラリを１個1個確認してアップデートを行うのはとても面倒で手動で行うのはあまり現実的ではありません。

上記のようなアップデートの確認をGithubのDependbotを使うことで自動化できます。

Dependbotは`npm`の`package.json`や`python`の`Pipfile`などそれぞれの言語のパッケージ管理機構のマニフェストファイルを見て依存関係を管理することで、古かったり脆弱性があったりしたライブラリを発見しPull Requestを作成して通知してくれます。

今回は2022年4月にDependabotがpubパッケージのベータサポートを開始したということで、

[pub beta support for Dependabot version updates](https://github.blog/changelog/2022-04-05-pub-beta-support-for-dependabot-version-updates/)

早速、上記アプリのリポジトリにDependabotを導入しようと思います。
（※Dependabotのpubサポートはベータのためsecurity updatesをサポートしていないらしい）


> Support for pub is in beta, and thus, we are aware of some limitations. For example, security updates are not supported in this release but will be in the future.

## Dependbotを導入

まずはDependabotを動かすために、プロジェクトディレクトリ配下に`.github`ディレクトリと設定ファイルを作成します。

```:bash
$ mkdir .github
$ touch .github/dependabot.yml
```

ディレクトリ構成は以下のようになりました。

```:bash
$ tree -L 1
.
├── .github
│   └── dependabot.yml
├── backend
└── frontend
```

ファイルが作成できたらファイルの中身を記述します。設定できるオプションは[Configuration options for the dependabot.yml file](https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#configuration-options-for-the-dependabotyml-file)を参照

```:.github/dependabot.yml
version: 2
enable-beta-ecosystems: true
updates:
  - package-ecosystem: "pub"
    directory: "/frontend"
    schedule:
      interval: "weekly"
      time: "09:00"
      timezone: Asia/Tokyo
```

記述できたら、Githubへプッシュします。

プッシュできたら、Githubにあるpubspec.yamlに対してチェックを開始します。

![スクリーンショット 2022-07-31 16.01.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/fe8b6edd-6f38-b4e3-5d63-412df576df52.png)

チェックが完了しました。チェックが完了すると、`pubspec.yaml`と`pubspec.lock`が監視対象となりました。
![スクリーンショット 2022-07-31 16.12.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/c10119d8-008f-bb32-9588-bf00d975ce5c.png)

Githubの「Pull Request」タブを開くと、5個のライブラリのアップデートを通知するプルリクがありました。

![スクリーンショット 2022-07-31 16.15.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/809c6aea-8d77-6aec-1bb1-80b3127d817c.png)

試しにflutter_svgのアップデートのプルリクの詳細を開きます。

![スクリーンショット 2022-07-31 16.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76958/775e83dc-6dbb-cd12-b3a5-40219bbe5ae5.png)


現在（2022年7月31日時点）ではまだsecurity updatesに対応していないようですが、以上でライブラリのアップデートには追随できるようになりました。



### 参考
[GitHubにDependabotを導入して依存ライブラリを自動アップデートする](https://dev.classmethod.jp/articles/dependabot-101/)
[DependabotとGithub Actionsで自動バージョンアップを実現する話](https://qiita.com/t-okibayashi/items/0ed33ff9c34c50e1582c)
[Flutterプロジェクトのpubパッケージに対してGitHub Dependabotを使ってみた](https://dev.classmethod.jp/articles/using-github-dependabot-in-the-flutter-project-pub/)
[[Flutter] GitHub Dependabot](https://dev-yakuza.posstree.com/flutter/github/dependabot/)