広告 Flutter Dart アプリ開発

Flutter用のbuild script

はじめに

Flutterコンパイルしていると、定形文を何度もタイプしますよね。特にbuild_runnerとiconはコマンドも長いし。build_runnerはriverpodのstatusファイルを弄ったときのみ実行しないと、待ち時間が長過ぎるし。

そこで、ビルド用のスクリプトと、キャッシュを含めたクリーンナップをするスクリプトを作成しました。

build 支援スクリプト

run_build.sh

#!/bin/bash

# ==========================================
# Flutter Build Assistant
# ==========================================

# 色の定義
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# ------------------------------------------
# 関数定義
# ------------------------------------------
# build_runner無しのシンプル処理(各種genは実行しない)
run_simple_build() {
    echo -e "${YELLOW}[Normal] Cleaning project...${NC}"
    flutter clean

    echo -e "${YELLOW}[Normal] Getting packages...${NC}"
    flutter pub get

    # flutter_launcher_icons が pubspec.yaml にあるか確認
    if grep -q "flutter_launcher_icons:" pubspec.yaml; then
        echo -e "${GREEN}[Normal] flutter_launcher_icons detected. Generating icons...${NC}"
        dart run flutter_launcher_icons
    else
        echo -e "${BLUE}[Normal] flutter_launcher_icons not found. Skipping.${NC}"
    fi
}

# 通常ビルドの処理
run_normal_build() {
    echo -e "${YELLOW}[Normal] Cleaning project...${NC}"
    flutter clean

    echo -e "${YELLOW}[Normal] Getting packages...${NC}"
    flutter pub get

    # flutter_localizations が pubspec.yaml にあるか確認
    if grep -q "flutter_localizations:" pubspec.yaml; then
        echo -e "${GREEN}[Normal] flutter_localizations detected. Running build...${NC}"
        flutter gen-l10n
    else
        echo -e "${BLUE}[Normal] flutter_localizations not found. Skipping.${NC}"
    fi

    # build_runner が pubspec.yaml にあるか確認
    if grep -q "build_runner:" pubspec.yaml; then
        echo -e "${GREEN}[Normal] build_runner detected. Running build...${NC}"
        dart run build_runner build --delete-conflicting-outputs
    else
        echo -e "${BLUE}[Normal] build_runner not found. Skipping.${NC}"
    fi

    # flutter_launcher_icons が pubspec.yaml にあるか確認
    if grep -q "flutter_launcher_icons:" pubspec.yaml; then
        echo -e "${GREEN}[Normal] flutter_launcher_icons detected. Generating icons...${NC}"
        dart run flutter_launcher_icons
    else
        echo -e "${BLUE}[Normal] flutter_launcher_icons not found. Skipping.${NC}"
    fi
}

# 拡張ビルドの処理
run_extended_build() {
    echo -e "${RED}[Extended] Upgrading Flutter SDK...${NC}"
    flutter upgrade

    echo -e "${RED}[Extended] Clearing global package cache...${NC}"
    flutter pub cache clean -f

    echo -e "${RED}[Extended] Upgrading project packages...${NC}"
    flutter pub upgrade

    # 最後に通常ビルドを実行
    run_normal_build
}

# ------------------------------------------
# メインメニュー
# ------------------------------------------

echo -e "${BLUE}=== Flutter Build Menu ===${NC}"
echo "1. シンプルビルド (Clean, pub get, Icons)"
echo "2. 通常ビルド (Clean, pub get, build_runner, Icons)"
echo "3. 拡張ビルド (Upgrade SDK/Modules, Cache Clear + Normal)"
echo "4. Quit"
echo -e "${BLUE}==========================${NC}"

read -p "番号を入力してください (1-4): " option

case $option in
    1)
        echo -e "${GREEN}>>> Starting Simple Build <<<${NC}"
        run_simple_build
        echo -e "${GREEN}>>> Simple Build Completed <<<${NC}"
        ;;
    2)
        echo -e "${GREEN}>>> Starting Normal Build <<<${NC}"
        run_normal_build
        echo -e "${GREEN}>>> Normal Build Completed <<<${NC}"
        ;;
    3)
        echo -e "${RED}>>> Starting Extended Build <<<${NC}"
        echo "※ SDKのアップグレードやキャッシュクリアには時間がかかります"
        run_extended_build
        echo -e "${GREEN}>>> Extended Build Completed <<<${NC}"
        ;;
    4)
        echo "終了します。"
        exit 0
        ;;
    *)
        echo -e "${RED}無効な選択です。終了します。${NC}"
        exit 1
        ;;
esac

clean up (ソース内キャッシュを含む)スクリプト

cleanup_with_cache.sh

#!/usr/bin/env bash
set -euo pipefail

# ==========================================
# Flutter project deep-clean (Ubuntu)
# - Cleans ONLY project folder contents
# ==========================================

PROJECT_ROOT="${1:-$(pwd)}"

if [[ ! -f "$PROJECT_ROOT/pubspec.yaml" ]]; then
  echo "ERROR: pubspec.yaml not found in: $PROJECT_ROOT"
  echo "Usage: $0 /path/to/flutter_project"
  exit 1
fi

echo "Project: $PROJECT_ROOT"

cd "$PROJECT_ROOT"

echo "== flutter clean =="
flutter clean

echo "== remove project-local build artifacts =="
rm -rf \
  .dart_tool \
  build \
  .flutter-plugins \
  .flutter-plugins-dependencies \
  .packages \
  .metadata \
  android/.gradle \
  android/app/build \
  android/build \
  ios/Pods \
  ios/.symlinks \
  ios/Flutter/Flutter.framework \
  ios/Flutter/Flutter.podspec \
  ios/build \
  linux/build \
  macos/build \
  windows/build \
  web/.dart_tool \
  web/build \
  .idea \
  *.iml \
  2>/dev/null || true

echo "== done =="

-Flutter Dart アプリ開発