# InvenTree Mobile App

## 概要

InvenTreeモバイルアプリは、オープンソースの在庫管理システム[InvenTree](https://github.com/inventree/InvenTree)のコンパニオンアプリです。Flutter環境で開発されており、AndroidおよびiOSデバイスでネイティブに動作します。バーコードスキャン、在庫管理、発注・受注管理などの機能を外出先から利用できます。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| サーバー接続 | InvenTreeサーバーとのトークンベース認証による安全な接続 |
| バーコードスキャン | カメラを使用したバーコードスキャンおよびウェッジスキャナー対応 |
| 在庫管理 | 在庫アイテムの閲覧、検索、追加、移動、数量調整 |
| 部品管理 | 部品カテゴリ・部品情報の閲覧、BOM（部品表）表示 |
| 発注管理 | 仕入先への発注書の閲覧・管理、入荷処理 |
| 受注管理 | 顧客からの受注書の閲覧・管理、出荷処理 |
| 会社管理 | 仕入先・顧客・製造元の情報管理 |
| 添付ファイル | 各種モデルへのファイル添付・閲覧 |
| 通知 | サーバーからの通知受信・表示 |
| 多言語対応 | 複数言語のローカライゼーション対応 |
| ダークモード | システム設定またはユーザー設定によるテーマ切替 |
| ラベル印刷 | サーバー側プラグインを使用したラベル印刷 |

## 技術スタック

### コア

- フレームワーク: Flutter 3.32.4
- 言語: Dart 3.8.1+
- プラットフォーム: Android / iOS

### 主要ライブラリ

- adaptive_theme: テーマ管理（ダークモード対応）
- audioplayers: バーコードスキャン時のサウンド再生
- cached_network_image: ネットワーク画像のキャッシュ
- camera / mobile_scanner: カメラ・バーコードスキャン機能
- dropdown_search: オートコンプリート付きドロップダウンフォーム
- flutter_markdown: マークダウンレンダリング
- http: HTTP通信
- image_picker: 画像選択・撮影
- infinite_scroll_pagination: ページネーション処理
- intl: 国際化対応
- one_context: コンテキストなしでのダイアログ表示
- path_provider: ローカルファイルストレージ
- sembast: NoSQLローカルデータベース
- sentry_flutter: エラー報告
- url_launcher: 外部リンク起動
- wakelock_plus: スリープ防止

## ディレクトリ構成

```
inventree-app-master/
├── lib/                          # メインソースコード
│   ├── main.dart                 # アプリケーションエントリーポイント
│   ├── api.dart                  # InvenTree API通信クラス
│   ├── api_form.dart             # APIフォーム処理
│   ├── preferences.dart          # アプリ設定管理
│   ├── user_profile.dart         # ユーザープロファイル管理
│   ├── labels.dart               # ラベル印刷機能
│   ├── helpers.dart              # ヘルパー関数
│   ├── l10.dart                  # ローカライゼーション
│   ├── app_colors.dart           # アプリカラー定義
│   ├── barcode/                  # バーコード関連機能
│   │   ├── handler.dart          # バーコードハンドラー
│   │   ├── barcode.dart          # バーコード処理
│   │   ├── camera_controller.dart # カメラコントローラー
│   │   ├── wedge_controller.dart # ウェッジスキャナーコントローラー
│   │   ├── stock.dart            # 在庫バーコード処理
│   │   ├── purchase_order.dart   # 発注バーコード処理
│   │   ├── sales_order.dart      # 受注バーコード処理
│   │   ├── tones.dart            # スキャン音
│   │   └── controller.dart       # バーコードコントローラー
│   ├── inventree/                # InvenTreeモデル定義
│   │   ├── model.dart            # 基底モデルクラス
│   │   ├── part.dart             # 部品モデル
│   │   ├── stock.dart            # 在庫モデル
│   │   ├── company.dart          # 会社モデル
│   │   ├── purchase_order.dart   # 発注モデル
│   │   ├── sales_order.dart      # 受注モデル
│   │   ├── attachment.dart       # 添付ファイルモデル
│   │   ├── notification.dart     # 通知モデル
│   │   ├── parameter.dart        # パラメータモデル
│   │   ├── bom.dart              # BOMモデル
│   │   ├── project_code.dart     # プロジェクトコード
│   │   ├── status_codes.dart     # ステータスコード
│   │   ├── orders.dart           # 注文共通
│   │   └── sentry.dart           # Sentryエラー報告
│   ├── widget/                   # UIウィジェット
│   │   ├── home.dart             # ホーム画面
│   │   ├── drawer.dart           # ナビゲーションドロワー
│   │   ├── search.dart           # 検索機能
│   │   ├── dialogs.dart          # ダイアログ
│   │   ├── snacks.dart           # スナックバー
│   │   ├── part/                 # 部品関連画面
│   │   ├── stock/                # 在庫関連画面
│   │   ├── order/                # 注文関連画面
│   │   └── company/              # 会社関連画面
│   └── settings/                 # 設定画面
│       ├── settings.dart         # 設定メイン
│       ├── app_settings.dart     # アプリ設定
│       ├── barcode_settings.dart # バーコード設定
│       ├── login.dart            # ログイン画面
│       └── select_server.dart    # サーバー選択
├── test/                         # テストコード
├── android/                      # Android固有設定
├── ios/                          # iOS固有設定
├── assets/                       # アセットファイル
│   ├── image/                    # 画像リソース
│   ├── sounds/                   # サウンドファイル
│   ├── release_notes.md          # リリースノート
│   └── credits.md                # クレジット
├── res/                          # リソースファイル
├── pubspec.yaml                  # パッケージ設定
├── l10n.yaml                     # ローカライゼーション設定
└── crowdin.yml                   # Crowdin翻訳設定
```

## セットアップ

### 必要条件

- Flutter 3.32.4（`.fvmrc`で指定）
- Dart SDK 3.8.1以上
- Android Studio または Xcode（プラットフォームに応じて）
- FVM（Flutter Version Management）推奨

### インストール手順

1. リポジトリをクローン
   ```bash
   git clone https://github.com/inventree/inventree-app.git
   cd inventree-app
   ```

2. FVMを使用してFlutterバージョンを設定（推奨）
   ```bash
   fvm install
   fvm use
   ```

3. 依存パッケージをインストール
   ```bash
   fvm flutter pub get
   ```

4. アプリを実行
   ```bash
   fvm flutter run
   ```

### インストール済みアプリの取得

- **Google Play Store**: [Android版](https://play.google.com/store/apps/details?id=inventree.inventree_app&hl=en_AU)
- **Apple App Store**: [iOS版](https://apps.apple.com/au/app/inventree/id1581731101)
- **直接ダウンロード（Android）**: [polar.sh](https://buy.polar.sh/polar_cl_UnGILJ0c7P3hQrOrJs127oyLTTDOTHKrnqfCg30XtBI)

## 開発

### コードフォーマット

Dartの標準フォーマッターを使用してコードを整形します：

```bash
fvm dart format .
```

### テスト実行

```bash
fvm flutter test
```

### リンター

プロジェクトでは`lint`パッケージを使用しています。

### プリコミットフック

`.pre-commit-config.yaml`で設定されたプリコミットフックが利用可能です。

### 貢献

貢献ガイドラインについては[CONTRIBUTING.md](../../CONTRIBUTING.md)を参照してください。

### ビルド手順

詳細なビルド手順については[BUILDING.md](../../BUILDING.md)を参照してください。

## ライセンス

MIT License - Copyright (c) 2019 InvenTree

## 関連リンク

- [InvenTree サーバー](https://github.com/inventree/InvenTree)
- [ユーザードキュメント](https://inventree.readthedocs.io/en/latest/app/app/)
- [Google Play Store](https://play.google.com/store/apps/details?id=inventree.inventree_app&hl=en_AU)
- [Apple App Store](https://apps.apple.com/au/app/inventree/id1581731101)
