feat: add IS_BUSINESS_APP build flag for consumer/business APK split

消費者向けビルド(IS_BUSINESS_APP=false)では店舗タブを完全非表示にする。
build_consumer.sh / build_business.sh でワンコマンドビルド可能。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ponshu Developer 2026-04-04 23:13:40 +09:00
parent 9f63578ca7
commit c0a23d2afb
4 changed files with 143 additions and 1 deletions

66
build_business.sh Normal file
View File

@ -0,0 +1,66 @@
#!/bin/bash
# ============================================================================
# Ponshu Room Lite - 店舗向けAPKビルドスクリプト
# IS_BUSINESS_APP=true / IS_PRO_VERSION=false
# ============================================================================
set -e
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
OUTPUT_DIR="build/apk_releases/$TIMESTAMP"
mkdir -p "$OUTPUT_DIR"
# APIキー (.env から読み込む)
if [ -f "$(dirname "$0")/.env" ]; then
export $(grep -v '^#' "$(dirname "$0")/.env" | xargs)
fi
MAITA_KEY="${MAITA_API_KEY:?MAITA_API_KEY is not set in .env}"
EIJI_KEY="${EIJI_API_KEY:?EIJI_API_KEY is not set in .env}"
# build.gradle.kts バックアップ
GRADLE_FILE="android/app/build.gradle.kts"
BACKUP_FILE="android/app/build.gradle.kts.backup"
cp "$GRADLE_FILE" "$BACKUP_FILE"
cleanup() {
if [ -f "$BACKUP_FILE" ]; then
cp "$BACKUP_FILE" "$GRADLE_FILE"
rm "$BACKUP_FILE"
fi
}
trap cleanup EXIT
echo "============================================================================"
echo "Ponshu Room Lite - Business APK Build"
echo "============================================================================"
echo "Output: $OUTPUT_DIR"
echo ""
sed -i 's/applicationId = "com.posimai.ponshu_room"/applicationId = "com.posimai.ponshu_room_lite"/' "$GRADLE_FILE"
echo "[1/2] Building Maita Business..."
flutter build apk --release \
--dart-define=GEMINI_API_KEY=$MAITA_KEY \
--dart-define=IS_PRO_VERSION=false \
--dart-define=IS_BUSINESS_APP=true \
--dart-define=USE_PROXY=false
cp build/app/outputs/flutter-apk/app-release.apk "$OUTPUT_DIR/ponshu_room_business_maita.apk"
echo "Saved: $OUTPUT_DIR/ponshu_room_business_maita.apk"
echo ""
echo "[2/2] Building Eiji Business..."
flutter build apk --release \
--dart-define=GEMINI_API_KEY=$EIJI_KEY \
--dart-define=IS_PRO_VERSION=false \
--dart-define=IS_BUSINESS_APP=true \
--dart-define=USE_PROXY=false
cp build/app/outputs/flutter-apk/app-release.apk "$OUTPUT_DIR/ponshu_room_business_eiji.apk"
echo "Saved: $OUTPUT_DIR/ponshu_room_business_eiji.apk"
echo ""
echo "============================================================================"
echo "Business build completed!"
echo "============================================================================"
ls -lh "$OUTPUT_DIR"

66
build_consumer.sh Normal file
View File

@ -0,0 +1,66 @@
#!/bin/bash
# ============================================================================
# Ponshu Room Lite - 消費者向けAPKビルドスクリプト
# IS_BUSINESS_APP=false / IS_PRO_VERSION=false
# ============================================================================
set -e
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
OUTPUT_DIR="build/apk_releases/$TIMESTAMP"
mkdir -p "$OUTPUT_DIR"
# APIキー (.env から読み込む)
if [ -f "$(dirname "$0")/.env" ]; then
export $(grep -v '^#' "$(dirname "$0")/.env" | xargs)
fi
MAITA_KEY="${MAITA_API_KEY:?MAITA_API_KEY is not set in .env}"
EIJI_KEY="${EIJI_API_KEY:?EIJI_API_KEY is not set in .env}"
# build.gradle.kts バックアップ
GRADLE_FILE="android/app/build.gradle.kts"
BACKUP_FILE="android/app/build.gradle.kts.backup"
cp "$GRADLE_FILE" "$BACKUP_FILE"
cleanup() {
if [ -f "$BACKUP_FILE" ]; then
cp "$BACKUP_FILE" "$GRADLE_FILE"
rm "$BACKUP_FILE"
fi
}
trap cleanup EXIT
echo "============================================================================"
echo "Ponshu Room Lite - Consumer APK Build"
echo "============================================================================"
echo "Output: $OUTPUT_DIR"
echo ""
sed -i 's/applicationId = "com.posimai.ponshu_room"/applicationId = "com.posimai.ponshu_room_lite"/' "$GRADLE_FILE"
echo "[1/2] Building Maita Consumer..."
flutter build apk --release \
--dart-define=GEMINI_API_KEY=$MAITA_KEY \
--dart-define=IS_PRO_VERSION=false \
--dart-define=IS_BUSINESS_APP=false \
--dart-define=USE_PROXY=false
cp build/app/outputs/flutter-apk/app-release.apk "$OUTPUT_DIR/ponshu_room_consumer_maita.apk"
echo "Saved: $OUTPUT_DIR/ponshu_room_consumer_maita.apk"
echo ""
echo "[2/2] Building Eiji Consumer..."
flutter build apk --release \
--dart-define=GEMINI_API_KEY=$EIJI_KEY \
--dart-define=IS_PRO_VERSION=false \
--dart-define=IS_BUSINESS_APP=false \
--dart-define=USE_PROXY=false
cp build/app/outputs/flutter-apk/app-release.apk "$OUTPUT_DIR/ponshu_room_consumer_eiji.apk"
echo "Saved: $OUTPUT_DIR/ponshu_room_consumer_eiji.apk"
echo ""
echo "============================================================================"
echo "Consumer build completed!"
echo "============================================================================"
ls -lh "$OUTPUT_DIR"

View File

@ -18,6 +18,15 @@ import 'services/migration_service.dart';
/// falseLite版 ponshu_room_liteディレクトリのため /// falseLite版 ponshu_room_liteディレクトリのため
const bool isProVersion = bool.fromEnvironment('IS_PRO_VERSION', defaultValue: false); const bool isProVersion = bool.fromEnvironment('IS_PRO_VERSION', defaultValue: false);
///
///
/// :
/// - : flutter build apk --release --dart-define=IS_BUSINESS_APP=false
/// - : flutter build apk --release --dart-define=IS_BUSINESS_APP=true
///
/// false
const bool isBusinessApp = bool.fromEnvironment('IS_BUSINESS_APP', defaultValue: false);
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();

View File

@ -127,7 +127,8 @@ class _MainScreenState extends ConsumerState<MainScreen> {
}); });
final userProfile = ref.watch(userProfileProvider); final userProfile = ref.watch(userProfileProvider);
final isBusiness = userProfile.isBusinessMode; // isBusinessApp=false
final isBusiness = isBusinessApp && userProfile.isBusinessMode;
final t = Translations(userProfile.locale); // Translation helper final t = Translations(userProfile.locale); // Translation helper
// Define Screens for each mode // Define Screens for each mode