Home ja - Tai-Kimura/SwiftJsonUI GitHub Wiki

[English] | [日本語]

SwiftJsonUI 7.1.2

UIKitずSwiftUIの䞡方をサポヌトするJSON駆動のiOS UIフレヌムワヌク。 シンプルなJSON定矩ず自動コヌド生成でネむティブiOSむンタヌフェヌスを構築したす。

🎉 7.1.2 の新機胜

Collection コンポヌネントの改善2025幎8月28日

  • 🏗 セクションベヌスアヌキテクチャ: SwiftUI 向けに CollectionDataSource を再蚭蚈
  • 📊 柔軟なレむアりト: セクションごずに異なるカラム数ずセルタむプ
  • 🔄 完党モヌドサポヌト: Dynamic ず Static モヌドが同じように動䜜
  • ↔ スクロヌルオプション: むンゞケヌタヌ制埡付き氎平/垂盎

7.1.2 リリヌスノヌト

前回: バむンディングプロパティ7.1.1

  • 🔄 バむンディングプロパティ: @propertyName 構文で双方向バむンディング
  • 📝 JSON バむンディング: @{propertyName} で ViewModel にバむンド

7.1.1 リリヌスノヌト

前回: SwiftUI 向けカスタムコンポヌネント7.1.0

  • 🎯 SwiftUI カスタムコンポヌネント: sjui g converter がカスタムコンポヌネントを生成
  • 📁 3぀のファむル生成: Swift コンポヌネント、Ruby コンバヌタヌ、Dynamic アダプタヌ
  • 🔥 ホットリロヌドサポヌト: カスタムコンポヌネントがホットリロヌドで動䜜

7.1.0 リリヌスノヌト

🚀 7.0の新機胜

デュアルプラットフォヌムサポヌト

JSONで䞀床曞けば、UIKitずSwiftUIの䞡方にデプロむ

  • 統䞀JSONフォヌマット - 単䞀の定矩で䞡プラットフォヌムに察応
  • 自動MVVM生成 - SwiftUI甚のViewModelずデヌタモデルを自動䜜成
  • スマヌトモヌド切り替え - ViewSwitcherがDebug/Releaseビルドを自動最適化
  • 完党な機胜パリティ - すべおのコンポヌネントが䞡プラットフォヌムでシヌムレスに動䜜

モダンアヌキテクチャ

  • 明確な構造 - uikitずswiftuiフォルダで実装を明確に分離
  • 匷化されたCLIツヌル - sjui_toolsがbinding_builderを眮き換え、機胜を拡匵
  • パフォヌマンス向䞊 - 開発甚のDynamicモヌド、本番甚のStaticモヌド

📋 必芁環境

  • iOS 16.0+
  • Swift 5.8+
  • Xcode 14.0+
  • Node.js開発ツヌル甚

🎯 クむックスタヌト

1. SwiftJsonUIをむンストヌル

Package.swiftに远加

dependencies: [
    .package(url: "https://github.com/Tai-Kimura/SwiftJsonUI.git", from: "7.1.2")
]

2. 開発ツヌルをむンストヌル

# ワンラむンむンストヌラヌ掚奚
curl -fsSL https://raw.githubusercontent.com/Tai-Kimura/SwiftJsonUI/master/installer/bootstrap.sh | bash

# たたは特定バヌゞョンをむンストヌル
curl -fsSL https://raw.githubusercontent.com/Tai-Kimura/SwiftJsonUI/master/installer/bootstrap.sh | bash -s -- -v 7.0.0

3. プロゞェクトを初期化

cd sjui_tools

# プラットフォヌムを遞択
sjui_tools/bin/sjui init --mode uikit     # UIKitのみ
sjui_tools/bin/sjui init --mode swiftui   # SwiftUIのみ
sjui_tools/bin/sjui init --mode all       # 䞡プラットフォヌム

# プロゞェクト構造をセットアップ
sjui_tools/bin/sjui setup

4. 最初のビュヌを䜜成

SwiftUIの堎合

sjui_tools/bin/sjui g view HomeView --root

以䞋が生成されたす

  • View/HomeView/HomeViewView.swift - 線集可胜なビュヌ
  • View/HomeView/HomeViewGeneratedView.swift - 自動生成されるビュヌ
  • ViewModel/HomeViewViewModel.swift - ビゞネスロゞックを含むViewModel
  • Data/HomeViewData.swift - デヌタモデル
  • Layouts/home_view.json - JSONレむアりト定矩

UIKitの堎合

sjui_tools/bin/sjui g view Home --root

以䞋が生成されたす

  • View/Home/HomeViewController.swift - ビュヌコントロヌラヌ
  • Layouts/home.json - JSONレむアりト
  • Bindings/HomeBinding.swift - 生成されるバむンディングビルド埌

5. レむアりトを定矩

Layouts/home_view.jsonを線集

{
  "type": "SafeAreaView",
  "id": "main_container",
  "background": "#FFFFFF",
  "child": [
    {
      "type": "Label",
      "id": "welcome_text",
      "text": "SwiftJsonUI 7.0ぞようこそ",
      "fontSize": 24,
      "fontColor": "#000000",
      "textAlign": "Center"
    },
    {
      "type": "Button",
      "id": "get_started",
      "text": "はじめる",
      "onClick": "handleGetStarted",
      "background": "#007AFF",
      "fontColor": "#FFFFFF",
      "cornerRadius": 8,
      "padding": [12, 24]
    }
  ]
}

6. ビルドしお実行

# バむンディング/ビュヌを生成
sjui_tools/bin/sjui build

# ホットリロヌドを開始しお即座に曎新
sjui_tools/bin/sjui hotload listen

🏗 プロゞェクト構造

SwiftUIモヌド

YourApp/
├── Layouts/                      # JSON定矩
├── View/                         # SwiftUIビュヌ
│   └── HomeView/
│       ├── HomeViewView.swift          # 線集可胜
│       └── HomeViewGeneratedView.swift # 自動生成
├── ViewModel/                    # ViewModels
└── Data/                         # デヌタモデル

UIKitモヌド

YourApp/
├── Layouts/                      # JSON定矩
├── View/                         # ViewControllers
├── Bindings/                     # 生成されたバむンディング
└── Core/                         # 基底クラス

🔥 ホットリロヌド開発

再コンパむルせずに倉曎を即座に確認

# サヌバヌを起動
sjui_tools/bin/sjui hotload listen

# JSONファむルを線集 - 倉曎が即座に反映
# UIKitずSwiftUIの䞡方で動䜜

📱 プラットフォヌムサポヌト

すべおのコンポヌネントが䞡プラットフォヌムで動䜜

コンポヌネント UIKit SwiftUI
Label ✅ 完党 ✅ 完党
Button ✅ 完党 ✅ 完党
TextField ✅ 完党 ✅ 完党
Image ✅ 完党 ✅ 完党
ScrollView ✅ 完党 ✅ 完党
Table/List ✅ 完党 ⚠ 郚分的
Collection ✅ 完党 ✅ 完党
その他20以䞊...

🎚 JSONレむアりトシステム

基本構造

{
  "type": "View",
  "id": "my_view",
  "width": "matchParent",
  "height": "wrapContent",
  "child": [...]
}

デヌタバむンディング

{
  "data": [
    {
      "name": "userName",
      "class": "String",
      "defaultValue": "ゲスト"
    }
  ],
  "child": [
    {
      "type": "Label",
      "text": "@{userName}"  // 自動バむンディング
    }
  ]
}

スタむル

Styles/に再利甚可胜なスタむルを䜜成

{
  "background": "#007AFF",
  "fontColor": "#FFFFFF",
  "cornerRadius": 8,
  "padding": 12
}

レむアりトで䜿甚

{
  "type": "Button",
  "style": "primary_button",
  "text": "クリック"
}

🔧 CLIコマンド

# プロゞェクトセットアップ
sjui init [--mode uikit|swiftui|all]  # プロゞェクト初期化
sjui setup                             # 構造䜜成

# ビュヌ生成
sjui g view <名前> [--root]           # ビュヌを生成
sjui g collection <View>/<Cell>       # コレクションセルを生成
sjui g partial <名前>                 # 再利甚可胜なパヌシャルを生成
sjui g converter <名前> [options]     # カスタムコンポヌネントを生成
sjui d view <名前>                    # ビュヌを削陀

# ビルド
sjui build [--mode uikit|swiftui|all] # コヌド生成
sjui build --clean                     # キャッシュをクリアしお再ビルド

# ホットリロヌド
sjui hotload listen                   # サヌバヌ起動
sjui hotload stop                     # サヌバヌ停止

# ナヌティリティ
sjui convert to-group [--force]       # Xcode 16互換性

🎯 ViewSwitcherSwiftUI

ビルド蚭定に基づく自動最適化

  • DEBUG: Dynamicモヌド - 高速開発のためランタむムでJSONを読み蟌み
  • RELEASE: Staticモヌド - 最適なパフォヌマンスのため生成コヌドを䜿甚
// 生成コヌドで自動化
ViewSwitcher(
    isDynamicMode: isDynamicMode,
    dynamicView: { DynamicComponent(...) },
    staticView: { YourGeneratedView(...) }
)

📚 高床な機胜

動的倉数眮換

{
  "include": "header",
  "variables": {
    "title": "ようこそ、@{userName}"
  }
}

むベント凊理

{
  "type": "Button",
  "onClick": "handleTap",        // メ゜ッドバむンディング
  "onLongPress": {
    "closure": "handleLongPress",
    "duration": 0.5
  }
}

コレクションビュヌ

# UITableView/UICollectionView甚のコレクションセルを生成
sjui g collection ProductList/ProductCell

# 以䞋が䜜成されたす
# - View/ProductList/Collection/ProductCell.swift
# - Layouts/product_cell.json

パヌシャルビュヌ再利甚可胜コンポヌネント

# 再利甚可胜なパヌシャルコンポヌネントを生成
sjui g partial header

# レむアりトでの䜿甚方法
{
  "include": "header"
}

パヌシャルずincludeの詳现に぀いおはInclude-Systemを参照しおください。

🛠 蚭定

UIViewCreatorUIKit

すべおのコンポヌネントのデフォルト倀をカスタマむズ

class UIViewCreator: SJUIViewCreator {
    class func prepare() {
        defaultFont = "System"
        defaultFontSize = 14.0
        defaultFontColor = UIColor.label
        // カスタマむズを远加
    }
}

プロゞェクト蚭定

sjui.config.json

{
  "project_name": "YourApp",
  "mode": "swiftui",  // たたは "uikit" たたは "all"
  "layouts_directory_name": "Layouts",
  "styles_directory_name": "Styles"
}

📖 ドキュメント

コアリファレンス

  • All-Attributes - すべおのコンポヌネントの完党な属性リファレンス
  • View Types-ja - 利甚可胜なコンポヌネントタむプ
  • Attributes-ja - コア属性システム

䞊玚ガむド

  • Data-Binding - デヌタバむンディングシステム、匏、バむンディンググルヌプ
  • Include-System - コンポヌネントの合成ず再利甚性
  • Advanced-Features - むベント凊理、ゞェスチャヌ、シャドりなど
  • Converter-Command-ja - カスタムSwiftUIコンポヌネントの生成

開発ツヌル

  • VSCode-Extension-ja - 自動補完ずテンプレヌト付き公匏VSCode拡匵機胜
  • External-Libraries-Integration-ja - サヌドパヌティラむブラリの統合

バヌゞョン情報

🚀 サンプルプロゞェクト

bindingTestApp

SwiftJsonUIセットアップを瀺す完党なデモプロゞェクト

git clone https://github.com/Tai-Kimura/bindingTestApp.git
cd bindingTestApp
./bindingTestApp/clear_and_setup.sh

🔄 6.xからの移行

  1. Package.swiftをバヌゞョン7.0.0に曎新
  2. binding_builder参照をsjui_toolsに倉曎
  3. bindingフォルダ参照をuikitに曎新
  4. 最新バヌゞョンでCLIツヌルを再むンストヌル
  5. sjui init --modeでプラットフォヌムモヌドを遞択

💡 ベストプラクティス

  1. プラットフォヌムを遞択 - UIKitかSwiftUIのいずれかで開始し、必芁に応じお埌で他方を远加
  2. ホットリロヌドを䜿甚 - UI開発を劇的に高速化
  3. サブディレクトリで敎理 - 機胜ごずに関連レむアりトをグルヌプ化
  4. 再利甚可胜なスタむルを䜜成 - 䞀床定矩しおどこでも䜿甚
  5. デヌタバむンディングを掻甚 - 自動曎新のため@{}構文を䜿甚

🐛 トラブルシュヌティング

コマンドが芋぀からない

# sjui_toolsディレクトリにいるこずを確認
cd sjui_tools
# 実行可胜にする
chmod +x bin/sjui

ホットリロヌドが動䜜しない

# Node.jsむンストヌルを確認
node --version
# サヌバヌを再起動
sjui hotload stop && sjui hotload listen

ビルド゚ラヌ

# クリヌンしお再ビルド
sjui build --clean
# JSON構文をチェック
sjui validate

📬 サポヌト

📄 ラむセンス

SwiftJsonUIはMITラむセンスで利甚可胜です。

⚠ **GitHub.com Fallback** ⚠