FlutterプロジェクトのSDK/パッケージの更新を自動チェックしたい...!

image

この記事は、【 可茂IT塾 Advent Calendar 2025 】の16日目の記事です。

💭 作ろうと思ったきっかけ

複数のFlutterプロジェクトを管理していると、依存関係の更新をチェックするのが意外と面倒です。定期的にflutter pub outdatedを実行して、どのパッケージが更新可能か確認して...という作業を手動でやるのは時間がかかります。

「GitHub Actionsで自動的にチェックして、更新があったらSlackに通知してくれたら楽だよなぁ」

そんな何気ない思いつきから、このツールを作りました。GitHub Actionsを使って定期実行し、更新が必要な場合にSlackに通知を送ることで、依存関係の管理を自動化できます。

Slackでの通知例
Slack で更新可能なパッケージをサマリー通知

詳細チェック結果
スレッド内に詳細Excelファイルを添付

パッケージ詳細リスト
更新可能なパッケージの詳細なバージョン情報を確認できる(Excel形式)

✨ 主要機能

GitHub Actionsを使用してFlutterプロジェクトの依存関係を自動チェックし、更新状況をSlackに通知

  • Flutter SDKバージョンの更新チェック(.fvmrcファイルから取得)
  • pubspec.yamlに記載されているパッケージの更新チェック
  • 更新可能なパッケージがある場合、Slackに通知を送信
  • Excelレポートの自動生成(リポジトリごとにシート分け)
  • 定期実行(cron)による自動チェック
  • 複数のFlutterプロジェクトを一度にチェック可能
  • パッケージの更新状況を色分けで視覚的に表示(黒色、青色、赤色)

🛠 技術スタック

ツール

  • GitHub Actions: 定期実行
  • Slack Bot API: 通知送信とExcelファイルのアップロード
  • Flutter CLI: 依存関係のチェック
  • ExcelJS: Excelレポートの生成

必要な環境変数

GitHubリポジトリのSecretsに以下を設定する必要があります:

  • SLACK_BOT_TOKEN: Slack Bot Token(files:writeスコープが必要)
  • SLACK_CHANNEL_ID: 通知を送信するSlackチャンネルID
  • GH_TOKEN: プライベートリポジトリにアクセスする場合のGitHub Token(オプション)

🔧 システム構成

  1. GitHub Actionsがcronスケジュールに従って実行
  2. 指定された複数のFlutterプロジェクトを順次チェック
  3. 各プロジェクトの.fvmrcからFlutter SDKバージョンを取得
  4. pubspec.yamlを解析してパッケージ情報を取得
  5. パッケージの更新状況を判定(色分けルールに基づく)
  6. Excelレポートを生成(リポジトリごとにシート分け)
  7. 更新がある場合、Slackに通知を送信し、Excelファイルをスレッドに添付

🎨 Excelレポートの色分けルール

Excelレポートでは、パッケージの更新状況を色で視覚的に表示します。

パッケージの色分け

意味説明
黒色更新不要(任意更新可能)現在のバージョン制約(^~)の範囲内に最新バージョンが含まれる^4.8.04.9.0^4.8.0>=4.8.0 <5.0.0なので、4.9.0を含む)
青色マイナー/パッチバージョンアップ最新バージョンが現在のバージョン制約の範囲外だが、メジャーバージョンは同じ^0.12.00.14.4(マイナーアップ)
赤色メジャーバージョンアップ最新バージョンのメジャーバージョンが現在より大きい。破壊的変更の可能性あり^2.2.03.0.3(メジャーアップ)

Flutter SDKの色分け

意味
黒色最新バージョンを使用中
オレンジ色Flutter SDKの更新が利用可能

バージョン制約記号について

Flutterのpubspec.yamlでは、バージョン制約を指定する際に以下の記号を使用します:

  • ^4.8.0: >=4.8.0 <5.0.0を意味します(4.8.0以上5.0.0未満)
  • ~4.8.0: >=4.8.0 <4.9.0を意味します(4.8.0以上4.9.0未満)
  • 4.8.0: 厳密に4.8.0のみ

重要なポイント: ^記号がある場合、更新は必須ではありませんが、更新可能なバージョンがあることを示します。

📦 使い方

1. リポジトリをクローンまたはテンプレートとして使用

このツールは個人プロジェクトとして開発しており、たまにメンテナンスしていこうと思っています。
そのため、フォークして使用してもらっても問題ありません。自分の環境に合わせてカスタマイズしたり、改善を加えたりして使っていただけます。

git clone https://github.com/vintage-tracker/flutter-dependency-checker.git

2. Slack Botの作成と設定

  1. Slack APIで新しいアプリを作成
  2. Bot Token Scopesに以下を追加:
    • chat:write(メッセージ送信)
    • files:write(Excelファイルのアップロード)
  3. Botをチャンネルに招待(/invite @your-bot-name

3. GitHubリポジトリのSecretsを設定

リポジトリのSettings > Secrets and variables > Actionsから以下を設定:

  • SLACK_BOT_TOKEN: Slack Bot Token(xoxb-で始まる)
  • SLACK_CHANNEL_ID: 通知を送信するSlackチャンネルID(Cで始まる)
  • GH_TOKEN: プライベートリポジトリにアクセスする場合のGitHub Token(オプション)

4. チェック対象リポジトリの設定

repositories.jsonファイルを作成または編集して、チェックしたいFlutterプロジェクトのリポジトリ情報を指定します。

単一リポジトリの例:

{
  "repositories": [
    {
      "name": "example_app",
      "description": "サンプルFlutterアプリ",
      "url": "https://github.com/your-org/example_app"
    }
  ],
  "settings": {
    "includeDevDeps": true
  }
}

複数リポジトリの例:

{
  "repositories": [
    {
      "name": "example_app",
      "description": "メインアプリ",
      "url": "https://github.com/your-org/example_app"
    },
    {
      "name": "admin_dashboard",
      "description": "管理画面アプリ",
      "url": "https://github.com/your-org/admin_dashboard"
    },
    {
      "name": "shared_package",
      "description": "共通パッケージ",
      "url": "https://github.com/your-org/shared_package"
    }
  ],
  "settings": {
    "includeDevDeps": true
  }
}
  • name: リポジトリの名前(識別用)
  • description: リポジトリの説明(オプション)
  • url: GitHubリポジトリのURL
  • settings.includeDevDeps: 開発依存関係(dev_dependencies)もチェックするかどうか

5. 定期実行のスケジュールを設定

cron形式で実行スケジュールを設定できます。例:毎週月曜日の午前9時

on:
  schedule:
    - cron: '0 9 * * 1'

🔍 トラブルシューティング

Flutterバージョンが正しく表示されない

  • チェック対象のリポジトリに.fvmrcファイルが存在するか確認
  • .fvmrcファイルの形式が正しいか確認(flutter: "3.24.0"またはflutter: 3.24.0
  • pubspec.yamlenvironmentセクションにFlutterバージョンが記載されているか確認

Excelファイルが送信されない

  • Slack Botにfiles:writeスコープが設定されているか確認
  • Botがチャンネルに参加しているか確認(/invite @your-bot-name
  • GitHub Actionsのログでエラーメッセージを確認

プライベートリポジトリにアクセスできない

  • GH_TOKENシークレットが設定されているか確認
  • GitHub Tokenにrepoスコープが付与されているか確認

GitHubリポジトリはこちら↓
https://github.com/vintage-tracker/flutter-dependency-checker

お知らせ

可茂IT塾ではFlutter/Reactのインターンを募集しています!(募集停止中)

可茂IT塾ではFlutter/Reactのインターンを募集しています!(募集停止中)

可茂IT塾ではFlutter/Reactのインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More

タグ

Flutter (125)初心者向け (32)イベント (19)Google Apps Script (17)Nextjs (13)可茂IT塾 (12)AI (8)React (8)riverpod (7)デザイン (7)Firebase (7)Figma (6)VSCode (6)JavaScript (6)ChatGPT (5)Slack (5)TypeScript (5)新卒 (4)就活 (4)Prisma (4)Dart (4)お知らせ (4)FlutterWeb (3)経験談 (3)NestJS (3)アプリ開発 (3)tailwindcss (3)ワーケーション (3)インターン (3)Web (2)Obsidian (2)Supabase (2)設計 (2)線型計画法 (2)事例 (2)Git (2)CSS (2)Freezed (2)Image (2)File (2)GitHub Actions (2)Material Design (2) (2)会社員 (2)画像 (2)Mac (2)iOS (2)React Hooks (2)社会人 (2)大学生 (2)RSS (1)Google (1)CodeRunner (1)NotebookLM (1)個人開発 (1)Android (1)Unity (1)WebView (1)Twitter (1)フルリモート (1)TextScaler (1)textScaleFactor (1)学生向け (1)Java (1)Spring Boot (1)shell script (1)正規表現 (1)table (1)テーブル (1)hooks (1)パワーポイント (1)ブックマーク (1)Pocket (1)ブクマク (1)MCPサーバー (1)OpenAI (1)ベクトル検索 (1)趣味 (1)モンスターボール (1)SCSS (1)Swift (1)MapBox (1)Cupertino (1)gpt-oss (1)生成AI (1)llama.cpp (1)LLM (1)ListView (1)postgresql (1)cloudrun (1)gcp (1)就活浪人 (1)既卒 (1)保守性 (1)iPad (1)シェアハウス (1)スクレイピング (1)PageView (1)画面遷移 (1)dotenvx (1)dotenv (1)Python (1)flutter_hooks (1)Gmail (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)GCPコンソール (1)Google_ML_Kit (1)Vercel (1)Google Domains (1)DeepLeaning (1)深層学習 (1)Google Colab (1)Firebase Analytics (1)Gemini AI (1)コード生成 (1)GitHub Copilot (1)gemini (1)オンラインオフィス (1)html (1)オブジェクト指向 (1)クラスの継承 (1)ポリモーフィズム (1)LINE Messaging API (1)LINE Notify (1)LINE (1)Bitcoin (1)bitFlyer (1)コミュニティー (1)文系エンジニア (1)build_runner (1)ヒーター (1)作業効率 (1) (1)Flutter実践開発 (1)permission_handler (1)flutter_local_notifications (1)markdown (1)GlobalKey (1)ValueKey (1)Key (1)アイコン (1)go_router (1)FireStorage (1)debug (1)datetime_picker (1)Apple Store Connect (1)FlutterGen (1)デバッグ (1)Widget Inspector (1)VRChat (1)API (1)検索機能 (1)ローディング (1)Skeletonizer (1)Simmer (1)Shader (1)SharedPreferences (1)オフラインサポート (1)Navigator (1)メール送信 (1)FlutterFlow (1)Firebase App Distribution (1)Fastlane (1)Dio (1)CustomClipper (1)ClipPath (1)video_player (1)IMA (1)カスタム認証 (1)アニメーション (1)Arduino (1)ESP32 (1)フリーランス (1)会社設立 (1)csv (1)docker (1)GithubActions (1)Dialog (1)BI (1)sora2 (1)iPhone (1)Gemini CLI (1)Claude Code (1)LifeHack (1)ショートカット (1)Chrome (1)高校生 (1)キャリア教育 (1)非同期処理 (1)生体認証 (1)BackdropFilter (1)レビュー (1)Antigravity (1)getAuth (1)クローズドテスト (1)PlayConsole (1)Algolia (1)コンサルティング (1)Symbol (1)

お知らせ

可茂IT塾ではFlutter/Reactのインターンを募集しています!(募集停止中)

可茂IT塾ではFlutter/Reactのインターンを募集しています!(募集停止中)

可茂IT塾ではFlutter/Reactのインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More