-
Notifications
You must be signed in to change notification settings - Fork 0
ColorManager
Taichiro Kimura edited this page Apr 19, 2026
·
1 revision
SwiftJsonUI 7.2.0で導入された色管理システム
ColorManagerは、JSONレイアウトファイルから色情報を自動的に抽出し、アプリ全体で使用する色を一元管理するシステムです。UIKitとSwiftUIの両方に対応し、色の定義と使用を効率化します。
JSONレイアウトファイルから以下の色属性を自動的に検出・抽出:
backgroundColortextColortintColorborderColorhighlightColor- その他の色関連属性
プロジェクトで使用される全ての色を定義:
{
"primary_blue": "#007AFF",
"background_gray": "#F2F2F7",
"text_primary": "#000000",
"text_secondary": "#8E8E93"
}JSONレイアウトで使用されているが、まだ定義されていない色を追跡:
{
"#FF5733": "orange_red_FF5733",
"#28A745": "green_28A745"
}UIKitとSwiftUIの両方で使用可能な色管理クラスを自動生成:
// Generated/ColorManager.swift
import UIKit
import SwiftUI
public class ColorManager {
// UIKit colors
public static let primaryBlue = UIColor(hex: "#007AFF")
public static let backgroundGray = UIColor(hex: "#F2F2F7")
// SwiftUI colors
public struct SwiftUI {
public static let primaryBlue = Color(hex: "#007AFF")
public static let backgroundGray = Color(hex: "#F2F2F7")
}
}sjui.config.jsonでresource_manager_directoryを設定:
{
"resource_manager_directory": "ResourceManager"
}sjui buildビルドコマンド実行時に以下が自動的に行われます:
- JSONレイアウトファイルから色を抽出
-
Layouts/Resources/colors.jsonを更新 - 未定義色を
defined_colors.jsonに記録 -
ColorManager.swiftを生成/更新
view.backgroundColor = ColorManager.primaryBlue
label.textColor = ColorManager.textPrimaryText("Hello")
.foregroundColor(ColorManager.SwiftUI.textPrimary)
.background(ColorManager.SwiftUI.backgroundGray)RGB値に基づいて自動的に色名を生成します:
-
#007AFF→blue_007AFF -
#FF0000→red_FF0000 -
#00FF00→green_00FF00
生成規則:
- 主要な色成分を判定(red, green, blue, gray, etc.)
- HEX値を付加して一意性を確保
SwiftJsonUIConfigurationでcolorProviderを設定することで、カスタム色プロバイダーを優先的に使用:
SwiftJsonUIConfiguration.shared.colorProvider = { colorName in
// カスタム色の解決ロジック
return MyColorPalette.color(for: colorName)
}優先順位:
-
colorProviderで定義された色 -
ColorManagerで定義された色 - デフォルトの色
Project/
├── Layouts/
│ └── Resources/
│ ├── colors.json # 定義済み色
│ └── defined_colors.json # 未定義色のトラッキング
├── ResourceManager/
│ └── ColorManager.swift # 生成されたSwiftコード
└── sjui.config.json
-
色の命名規則を統一:
primary_blue,background_mainなど、用途が分かる名前を使用 -
defined_colors.jsonを定期的に確認: 未定義色を適切な名前で
colors.jsonに移行 - ダークモード対応: 色定義時にライト/ダークモードを考慮
-
チーム間での共有:
colors.jsonをバージョン管理し、チーム全体で色定義を共有