# アーキテクチャ

このページでは、開発者や上級ユーザー向けにWCPOSの技術アーキテクチャを説明します。

## 二部構成システム[​](#two-part-system "二部構成システムへの直接リンク")

WCPOSは二部構成のシステムとして設計されています：

1. **PHPプラグイン:** サーバーにホストされている比較的小さなプラグインで、[WooCommerce REST API](/ja/reference/wc-rest-api.md)を拡張します。

2. **JavaScriptクライアント:** これはローカルであなたのブラウザまたはデスクトップアプリで実行され、後にはiOSおよびAndroidアプリでも利用可能になります。

これは二つの別々の世界と考えることができます：

* \_PHP世界\_は、WordPressとWooCommerceを使用してデータ管理が行われる場所です。
* \_JavaScript世界\_は、ローカルでWooCommerceストアを複製し、高速検索とオフライン使用に最適化されています。

SVG not found

## データ同期[​](#data-synchronization "データ同期への直接リンク")

データは[WooCommerce REST API](https://woocommerce.github.io/woocommerce-rest-api-docs/)を使用してWooCommerceから取得されます。これは、POSがすべての製品、バリエーション、製品カテゴリ、顧客、税率などをローカルに保存するためにダウンロードする必要があることを意味します。

最初は時間がかかることがありますが、一度ダウンロードされると、サーバーから継続的に取得する必要なく、すぐに利用可能です。

### 同期するものは？[​](#what-gets-synced "同期するものは？への直接リンク")

* 製品とバリエーション
* 製品カテゴリとタグ
* 顧客
* 税率と税クラス
* 支払いゲートウェイ（チェックアウト用）
* 注文（Proの注文履歴用）

### 同期戦略[​](#sync-strategy "同期戦略への直接リンク")

WCPOSは増分同期戦略を使用します：

1. **初回同期:** 初回読み込み時にすべてのデータをダウンロードします
2. **増分更新:** 最後の同期からの変更のみを取得します
3. **バックグラウンド同期:** 定期的に更新をチェックします
4. **手動同期:** ユーザーはいつでも同期をトリガーできます

## アーキテクチャの利点と欠点[​](#architecture-pros-and-cons "アーキテクチャの利点と欠点への直接リンク")

| 良い 😊                                                            | 悪い 😟                                                    |
| ------------------------------------------------------------------ | ---------------------------------------------------------- |
| ローカルデータの検索は瞬時です                                     | データの同期を保つのは困難です                             |
| オフラインで利用可能なキャッシュデータ                             | WooCommerce REST APIに制限されています                     |
| デスクトップ、iOS、Android用のより良いネイティブアプリを作成できる | WordPressのテーマやフックがPOSアプリをカスタマイズできない |

## ローカルデータベース[​](#local-database "ローカルデータベースへの直接リンク")

JavaScriptクライアントはIndexedDBにデータを保存します。これはブラウザベースのデータベースです。これにより：

* **永続性:** データはブラウザの再起動を経ても生き残ります
* **パフォーマンス:** ネットワークの遅延なしに迅速なクエリが可能です
* **オフラインブラウジング:** キャッシュデータはインターネットなしでアクセス可能です

## チェックアウトアーキテクチャ[​](#checkout-architecture "チェックアウトアーキテクチャへの直接リンク")

チェックアウトプロセスでは、WooCommerceの注文支払いページをロードするiframe/webviewを使用します。このアプローチは：

* **既存の支払いゲートウェイを活用:** すべてのWooCommerce支払いゲートウェイがPOSで機能できます
* **セキュリティを維持:** 支払い処理はWooCommerceの安全なインフラストラクチャを通じて行われます
* **複雑さを減少:** 支払いゲートウェイの統合を再実装する必要がありません

## API拡張[​](#api-extensions "API拡張への直接リンク")

PHPプラグインはPOS特有の機能のために追加のエンドポイントでWooCommerce REST APIを拡張します。詳細は[WooCommerce REST API](/ja/reference/wc-rest-api.md)を参照してください。

***
