はじめに
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 =="