このガイドは、新しいSaaS製品を計画しているか、最初のアーキテクチャを使い切ったプロダクトを立て直そうとしている創業者、プロダクトリーダー、CTOを対象としています。早期に安価に決定できることと、後から変更するとコストがかかること、そしてAI機能がマルチテナント製品にどう組み込まれるかを、実際に直面する順序で説明します。実例として取り上げるのはPrintcartです。Netbase JSCが設計・構築・運営するWeb to Print SaaSで、同社のビジネス部門のひとつです。
このガイドの内容
- すべてのSaaSプラットフォームを構成する2つの要素
- テナンシーモデルの選択
- 課金、メタリング、エンタイトルメント
- クラウドコストとユニットエコノミクス
- マルチテナント製品におけるAI機能
- 初回リリースからのセキュリティ
- MVPからスケールへ:ステージとタイムライン
- 基盤を構築するか再利用するか
- 実例:Printcart
- アーキテクチャ決定チェックリスト
- よくある失敗
- このガイドの制限事項
- よくある質問
- このガイドの作成方法
- 次のステップ
すべてのSaaSプラットフォームを構成する2つの要素
SaaS製品は、セットで提供される2つのシステムから成ります。アプリケーションプレーンは顧客が対価を支払う部分で、機能・ワークフロー・データが含まれます。コントロールプレーンはサービスとして成立させる部分で、サインアップとオンボーディング、テナントプロビジョニング、ID管理、ロール、プラン、課金、メタリング、管理ツール、運用監視が含まれます。
この区別を無視したチームは、コントロールプレーンを一時しのぎの積み重ねで偶発的に構築してしまい、百番目の顧客が来たときにそのツケを払うことになります。意図的に設計したチームは、価格を変更したり、エンジニアなしで顧客をオンボードしたり、どのテナントにどれだけコストがかかっているかを把握したりできます。
| コントロールプレーンの機能 | 役割 | 省いた場合のコスト |
|---|---|---|
| オンボーディングとプロビジョニング | テナント、その設定、最初のユーザーを1つのフローで作成する | エンジニアが新規顧客を毎回手動でセットアップする |
| IDとロール | ユーザーを認証し、すべてのリクエストにテナントコンテキストを伝達する | アクセスルールがコード全体に散在し、テナント間でデータが漏洩する |
| プランとエンタイトルメント | 各テナントが利用できる機能と制限を決定する | 価格変更のたびにコードリリースが必要になる |
| メタリング | テナントごと・機能ごとに使用量を記録する | 使用量ベースの価格設定ができず、顧客ごとのコストも把握できない |
| 課金 | 請求・更新・アップグレード・クレジット・請求書発行を行う | 経理がスプレッドシートでサブスクリプションを手動照合する |
| 管理コンソール | スタッフがテナント、プラン、サポートを管理できるようにする | サポートリクエストがデータベースの直接編集になる |
| テナント対応モニタリング | テナントごとにエラー・レイテンシ・負荷を表示する | 1つのうるさいテナントが全体のパフォーマンスを低下させても誰も原因を特定できない |
| AI使用量とガードレール | テナントごとにモデル呼び出しを計測し、制限を適用し、AIの入出力をログに記録する | 誰にも帰属できないAIコストが発生し、AIが顧客に何を伝えたかの記録も残らない |
AWS SaaS Lensも同じ点を逆の方向から指摘しています。テナントが専用リソースを持つ場合でも、SaaS環境は共有ID・オンボーディング・運用に依存するということです。この共有レイヤーこそが、SaaS製品と顧客ごとにソフトウェアの個別コピーをホスティングするケースを区別するものです。
テナンシーモデルの選択
テナンシーはSaaSにおいて最も重要なアーキテクチャ上の決定です。コスト・分離・コンプライアンス・運用のすべてを同時に左右するからです。AWSは3つのパターンを説明しています:
| モデル | 意味 | 強み | トレードオフ |
|---|---|---|---|
| サイロ | 各テナントが専用リソース(独自のデータベースや独自のスタックなど)を持つ | 強力な分離、テナントごとのチューニング、シンプルなデータレジデンシー | テナントあたりのコストが高く、運用するデプロイメントが増える |
| プール | テナントがリソースを共有する(すべての行にテナントキーを持つ1つのデータベースなど) | 規模の経済、1つのデプロイメント、迅速なオンボーディング | コードとデータアクセスで分離を強制する必要があり、ノイジーネイバー問題がある |
| ブリッジ | 混合:一部のサービスはサイロ、他はプール | 各サービスがデータと負荷に適したモデルを使える | 設計作業が増え、2つのパターンを運用する必要がある |
ほとんどの新製品では、プール型のコアに特定のテナントやサービスをサイロ化するオプションを持つ構成が現実的な出発点です。MVPの運用コストを低く抑えながら、専用データストレージを必要とするエンタープライズ顧客への対応経路も確保できます。テナント分離・課金・スケールについては、マルチテナントSaaSアーキテクチャガイドで詳しく解説しています。
どのモデルを選択しても、3つの実践は共通して適用されます:
- テナントコンテキストをすべての場所に伝達する。すべてのリクエスト、ジョブ、ログ行、メトリクスがどのテナントに属するかを認識できる必要があります。これは認証済みIDから取得し、クライアントが変更できる値から取得してはなりません。
- アプリケーション層の下で分離を強制する。データベースポリシー、スコープ付きクレデンシャル、テナントごとのキーを使用することで、1つのクエリでフィルタが漏れても別のテナントのデータが露出しないようにします。
- ノイジーネイバーを想定して設計する。レート制限、テナントごとのクォータ、バックグラウンドジョブの公平性により、1つの大量利用テナントが他のテナントの処理を遅くするのを防ぎます。
課金、メタリング、エンタイトルメント
価格設定はプロダクト上の決定であり、頻繁に変わります。そのため、アーキテクチャはエンジニアなしにビジネスが価格を変更できる設計にすべきです。
- エンタイトルメントをプランから分離する。コードが問うべきは「このテナントは機能Xを制限Y以内で利用できるか?」であり、「このテナントはProプランか?」ではありません。プランはエンタイトルメントにマッピングする設定として管理します。
- 初回リリースから計測する。最初の価格設定がフラットなサブスクリプションであっても、テナントごと・機能ごとに使用イベントを記録します。使用データは後の価格設計と各テナントの提供コスト把握の根拠になります。
- カードデータは決済プロバイダに任せる。カードキャプチャ・トークン化・定期課金はプロバイダに委ね、自社システムにカードデータを持ち込まないようにします。
- ライフサイクル全体を設計する。トライアル・アップグレード・ダウングレード・日割り計算・支払い失敗・猶予期間・解約・データ保持のすべてについて、ローンチ前に動作を定義します。
- 経理に可視性を提供する。収益・チャーン・支払い失敗のレポートは管理コンソールに組み込み、手動エクスポートに頼らないようにします。
クラウドコストとユニットエコノミクス
SaaSにおいて、クラウドコストは売上原価の一部です。問うべきは「プラットフォームのコストはいくらか?」だけでなく、「各テナントのコストはいくらか、そして価格でそれをカバーできているか?」です。
FinOps Foundationは、FinOpsをエンジニアリング・経理・ビジネスチームの協働を通じてテクノロジーのビジネス価値を最大化し、財務的な説明責任を生み出す運用フレームワークおよび文化的実践と定義しています。SaaS製品においては、これはいくつかの具体的な習慣になります:
-
すべてにタグを付ける
環境・サービス別にリソースにラベルを付け、プール型の場合はテナント使用量で配賦する
-
テナントごとのコストを把握する
メタリングデータとクラウド請求書を組み合わせ、テナントごと・プランごとのコストを推計する
-
アーキテクチャを負荷に合わせる
スパイクのある負荷にはオートスケーリングとマネージドサービスを、安定した負荷にはリザーブドキャパシティを使う
-
月次でレビューする
エンジニアリングと経理が同じコストレポートを確認し、アクションに合意する
-
コストを念頭に価格を設定する
使用量が多いプランには、そのコストをカバーする制限または使用量ベースの課金が必要
クラウドプロバイダの選択よりも、これらの習慣の方が重要です。Netbase JSCはAWS、Google Cloud、DigitalOcean、Cloudflareと連携しており、製品はクライアントが選択するクラウドアカウントで稼働します。クラウドパートナーティアは主張しません。小規模な製品はシンプルなインフラから始め、負荷・コンプライアンス・地域要件が生じたときに大規模なプロバイダに移行できます。ただし、アプリケーションがポータブルに構築されていることが条件です。
マルチテナント製品におけるAI機能
顧客は今や、利用しているSaaS製品のワークフロー内でコンテンツの要約・検索・下書き・質問への回答を期待しています。これらの機能は上記のすべての決定に影響します。テナントデータを読み取り、呼び出しごとにコストが発生し、情報を漏洩したり事実と異なる情報を生成したりする可能性があります。1つの画面への後付けではなく、プラットフォームに組み込んで設計してください。
- テナントスコープの検索。ドキュメントを検索するアシスタントは、現在のテナントのデータのみ、かつユーザーが閲覧権限を持つものだけをクエリする必要があります。データベースと同様に、アプリケーション層の下で強制される専用インデックスまたは必須テナントフィルタを維持してください。
- クロステナント学習はデフォルト無効にする。1顧客のデータで共有モデルをファインチューニングしてはならず、モデルプロバイダにそのデータで学習させてもなりません。使用状況からの学習に価値がある場合はテナントレベルのオプトインを提供し、利用規約に明記してください。
- テナントごとにモデルコストを計測する。テナントごと・機能ごとにモデル呼び出しとトークンを計測し、エンタイトルメントに対応させ、上限を設定してください。AIはしばしば、1つの大量利用テナントがプランのマージンを消し去る最初の機能になります。アドオン、使用量課金、または制限として価格を設定してください。
- インターフェースの背後にモデル選択を置く。モデル呼び出しを自社のサービス層の背後に置くことで、価格と品質の変化に応じて機能ごとにモデルやプロバイダを変更でき、特定のリージョンやプライベートデプロイメントを必要とするエンタープライズテナントにも対応できます。
- 評価と人間による制御。各リリース前にAI出力を固定の評価セットに対してテストし、コンテンツがAI生成であることをユーザーに示し、データやお金を変更するアクションは人が確認することを必須にしてください。
Netbase JSCはこれらの機能を製品ごとに選択したモデルで構築しており、特定のAIベンダーに縛られていません。詳細はAIとデータサービスをご覧ください。
初回リリースからのセキュリティ
テナント分離はアクセス制御の問題であり、Webアプリケーションが最もよく失敗するのもアクセス制御です。OWASP Top 10:2025では壊れたアクセス制御が1位に挙げられています。SaaS製品において、テナントチェックが1つ欠けるだけで、ある顧客のデータが別の顧客に露出する可能性があり、多くの若い製品にとってビジネス終了につながる事態です。
初回リリースから以下を組み込んでください:
- すべてのエンドポイントとバックグラウンドジョブにテナントスコープの認可を実装し、別テナントのデータを読み取ろうとする自動テストを用意する。
- 管理者向けの多要素認証と、要望するビジネス顧客向けのシングルサインオンを含む強力な認証。
- 転送中および保存時の暗号化。鍵はアプリケーションコードの外で管理する。
- セキュアなデリバリー:コードレビュー、依存関係スキャン、デプロイ内容の記録。
- 「誰がいつこのテナントのデータにアクセスしたか?」に答えられるログとアラート。
- バックアップジョブの実行だけでなく、復元によって検証されるバックアップとリカバリ。
- AIの入力を信頼できないものとして扱う。ドキュメントやプロンプトが別テナントのデータを開示したり承認をスキップするようアシスタントに指示できないようにする。
Netbase JSCのデリバリーはこの実践セットに従っています。セキュアなコードレビューとバージョン管理、転送中のTLS・保存時のAES暗号化、ロールベースのアクセス制御、管理ダッシュボードへのMFA、脆弱性スキャンとペネトレーションテスト、そして災害復旧計画が含まれます。NDA、DPA、SLAはリクエストに応じて提供します。Netbase JSCは情報セキュリティマネジメントのISO 27001認証とSOC 2 Type II保証を取得しています。これらはNetbase JSC自身の運用に関するものです。お客様の製品やホスティングには、独自の管理策・証拠・顧客が求める場合には独自の監査が引き続き必要です。
MVPからスケールへ:ステージとタイムライン
スケールは、大きくなる1つの問題ではなく、異なる問題が連続するものです。各ステージは次のステージを始める前に何かを証明する必要があります。
-
MVP
- 証明すべきこと
- 顧客がコアジョブを使用し、対価を支払うこと
- 典型的な期間
- 8〜12週間
- アーキテクチャの焦点
- 1つのコアワークフロー、コントロールプレーンの基礎、プール型テナンシー、メタリングフック
-
ミッドティア製品
- 証明すべきこと
- 製品が顧客を維持し、モデルがスケールすること
- 典型的な期間
- 3〜6カ月
- アーキテクチャの焦点
- セルフサービスオンボーディング、課金ライフサイクル、インテグレーション、テナント対応モニタリング
-
エンタープライズプラットフォーム
- 証明すべきこと
- 大企業が自社のルールで採用できること
- 典型的な期間
- 6〜12カ月以上
- アーキテクチャの焦点
- SSO、監査ログ、サイロオプション、データレジデンシー、大量アクセス時のパフォーマンス
これらはNetbase JSCの典型的な期間の目安であり、見積もりではありません。ワークフロー・インテグレーション・コンプライアンス要件の数と、プロダクト上の意思決定の成熟度によってプロジェクトの位置が決まります。MVPが典型的な8〜12週間に収まるのは、スコープが規律正しく絞られている場合のみです。1つのコアジョブをしっかりと実現し、コントロールプレーンの基礎が整っていることが条件です。
MVPに含めるべきこと、待てること:
-
MVPに含める:
サインアップ、テナントプロビジョニング、ロール、コアワークフロー、決済プロバイダを使ったシンプルなプラン、使用イベント、基本的な管理機能、バックアップ。
-
直後に追加:
セルフサービスのプラン変更、顧客から最も求められるインテグレーション、プロダクト内分析、テナント対応ダッシュボード、コアジョブに寄与する最初の計測型AI機能。
-
エンタープライズ顧客が来たとき:
シングルサインオン、監査ログ、専用データオプション、契約上のサービスレベル。
基盤を構築するか再利用するか
コントロールプレーンは製品をまたいで似た形になるため、再利用に最も適した候補です。プロダクタイズされたモジュールを再利用することで開発時間を最大60%短縮できます。この節約額はモジュールが製品のどれだけの部分をカバーするかに依存しており、モジュール再利用に適用されるものであって、製品全体に適用されるものではありません。ドメイン固有の機能は引き続き設計・構築が必要です。製品がマルチテナントサービスではなくECサイトである場合、カスタムECプラットフォームガイドがより適した出発点です。
再利用が有効な条件:
- モジュールがアカウント・テナント・ロール・課金・管理・インテグレーションをカバーし、製品を特定の形に強制しない場合。
- 製品のために作成されたコードの所有権を維持でき、再利用モジュールのライセンス条件が明確である場合。
- モジュールがデモだけでなく、すでに本番環境で稼働している場合。
Netbase JSCはこのアプローチをSaaSプロダクトアクセラレータとしてパッケージ化しており、プロダクト機能はWebアプリケーション開発を通じて、週次レビュー付きのアジャイルスプリントで、APIファーストかつ初回リリースからセキュリティを設計に組み込んで構築します。
実例:Printcart
PrintcartはNetbase JSCが設計・構築・運営するWeb to Print SaaSです。CMSmart、Cloodo、Poslor、Storellyと並ぶ、Netbase JSCの5つのビジネス部門のひとつです。公開プロダクトサイトでは、顧客がカスタマイズできるオンラインデザインスタジオ、すべての注文に対応した印刷用ファイルの返却、請求書と各種ステータスのリアルタイム表示付き印刷受注ワークフロー、Shopify・Wix・WooCommerce向けアプリ、WebhooksつきのREST API、マルチストア・マルチベンダー運用、印刷ジョブフルフィルメントAPIが説明されています。Printcartは商用ECサイト上、またはShopify・Wix・WooCommerceアプリとして動作し、約7日でセットアップが完了します。10年のサービス提供で10,000+のパートナーを報告しています。
このガイドの各決定にマッピングすると、製品が各決定の重要性を示しています:
-
コントロールプレーン対アプリケーションプレーン
マーチャントアカウント・ストア・注文が共有サービス。デザインスタジオと印刷ファイル生成がプロダクト
-
テナンシー
1つのプラットフォームが多くのマーチャントにサービスを提供し、各マーチャントが独自のストア接続・カタログ・注文を持つ
-
インテグレーション経路
ホスト型ストアはアプリで接続し、カスタムストアフロントはREST APIとWebhooksで接続する
-
イベント
Webhooksが注文作成・印刷ファイル生成・フルフィルメントを通知し、接続されたシステムが対応できる
-
運用
Netbase JSCが初回ローンチだけでなく、リリース・インテグレーション・マーチャントサポート・稼働率を担う
他の製品への教訓はインテグレーション選択です。Printcartはマーチャントがすでに販売しているストアアプリで接続し、カスタムビルドにはAPIで対応します。多くのB2B SaaS製品は同じ2経路が必要です。主要プラットフォーム向けのパッケージコネクタと、それ以外向けのAPIです。
Printcartのポートフォリオ記録でスコープ・スタック・運用を確認できます。パフォーマンス指標は公開していません。業界の文脈は印刷・パッケージングを、印刷側のアーキテクチャとビルドオアバイの選択はWeb to Printプラットフォームガイドをご覧ください。
アーキテクチャ決定チェックリスト
最初のスプリントの前に、アーキテクチャフェーズでこれらの問いを使ってください。各問いには担当者と書面による回答が必要です。
| 問い | 重要な理由 | 回答者 |
|---|---|---|
| MVPが証明すべき唯一のコアジョブは何か? | スコープ規律がMVPを典型的な8〜12週間に収められるかを決める | プロダクトオーナー |
| 各サービスが使用するテナンシーモデルとその理由は? | テナンシーはコスト・分離・コンプライアンスを長年にわたって左右する | ソリューションアーキテクト |
| テナントコンテキストはどこで設定され、データアクセスでどのように強制されるか? | チェックが1つ欠けるだけで1テナントのデータが別テナントに露出する | ソリューションアーキテクトおよびセキュリティリード |
| 各プランが付与するエンタイトルメントと制限は何か? | 設定としてのプランにより、リリースなしで価格変更が可能になる | プロダクトオーナーおよび経理 |
| 初日から計測する使用イベントは何か? | 使用履歴は後の価格設定とコスト分析の根拠になる | プロダクトオーナーおよびエンジニアリングリード |
| テナントごとのコストはどのように推計・レビューするか? | ユニットエコノミクスが成長が利益をもたらすか損失をもたらすかを決める | エンジニアリングリードおよび経理 |
| 最初の顧客が必要とするインテグレーションと経路は何か? | コネクタとAPIは最初の売上を成立させることが多い | プロダクトオーナー |
| バックアップはどのように復元し、復元にどれだけかかるか? | リカバリは実際にテストして初めて確実なものになる | オペレーションリード |
| AI機能はテナントごとにどのようにスコープ・計測・評価されるか? | AIは呼び出しごとのコストとデータ漏洩の新しい経路をもたらす | ソリューションアーキテクトおよびプロダクトオーナー |
担当者のいない問いはリスクであって、決定ではありません。回答をアーキテクチャ記録に書き込み、各ステージ変更時に見直してください。MVPに適した答えがエンタープライズプラットフォームには間違いであることが多いからです。
よくある失敗
- マルチテナント製品へのシングルテナントのショートカット。ハードコードされた顧客設定とスコープなしのクエリは、2週目には安価ですが2年目には高コストになります。
- コードに埋め込まれた価格設定。プラン変更にリリースが必要な場合、あらゆる実験でセールスとプロダクトがエンジニアリングを待つことになります。
- 使用量ベース価格が必要になるまでメタリングしない。そのときには、価格設計の根拠となる履歴データが存在しません。
- セキュリティをローンチタスクとして扱う。最後に追加されたテナント分離は証明が難しく、漏れが生じやすくなります。
- リテンションより先にスケーリングを追求する。顧客が定着する前にエンタープライズ機能に投資することは、間違ったステージへの支出です。
- 全テナントに1つのAIインデックス。テナントフィルタが強制されていない共有検索インデックスは、有用なアシスタントをデータ漏洩口に変えます。
- テナントごとのコストを無視する。大量利用ユーザーで損失が出るプランは、成長とともに損失を拡大します。
このガイドの制限事項
このガイドはNetbase JSCのデリバリー経験に基づく実践的なガイダンスであり、独自研究やベンチマークではありません。テナンシー・FinOps・セキュリティの参照情報は一般的なフレームワークを説明しており、適用方法はお客様の製品・市場・規制によって異なります。タイムラインはスコープに依存する典型的な目安であり、最大60%の再利用という数値はモジュール再利用に結びついた上限値です。AIモデルの価格と機能は急速に変化します。AIセクションは設計原則を示すものであり、コスト数値ではありません。Printcartの実例は公開されている機能と数値を説明しており、内部実装は開示していません。Netbase JSCの認証はクライアントの製品やホスティングには及びません。
Plan the next step with a Netbase consultant
よくある質問
SaaSのMVPにはどのくらいかかりますか?スコープが1つのコアワークフローとコントロールプレーンの基礎に絞られていれば、通常8〜12週間です。ワークフローやインテグレーションが増えると期間が延びます。
プール型とサイロ型のどちらから始めるべきですか?ほとんどの製品はプール型から始め、アプリケーション層の下で分離を強制します。コンプライアンスや負荷が求める場合に、特定のテナントやサービスをサイロ化します。
使用量ベースの価格設定はいつ追加すべきですか?初回リリースから使用量を計測し、データが使用量と価値・コストの関係を示したときに使用量ベースの課金を導入してください。
テナント間でAI機能がデータを漏洩しないようにするには?アプリケーション層の下で認証済みテナントに検索とプロンプトをスコープし、インデックスを分離するか強制されたポリシーでフィルタリングし、データベース分離のテストと同様に検証してください。別テナントのデータを読み取ろうとして失敗することを期待します。
どのクラウドプロバイダを使うべきですか?チームのスキル・顧客のリージョン・コンプライアンス要件に基づいて選択してください。ポータブルに構築し、どのプロバイダを使用してもテナントごとのコストを追跡してください。
Netbase JSCは既存のSaaS製品を引き継げますか?はい。テナンシー・課金・セキュリティ・コストのアーキテクチャレビューから始め、保持・リファクタリング・置き換えを決定します。SaaSプロダクトアクセラレータで再利用可能な基盤を説明しています。
このガイドの作成方法
Netbase JSCの編集チームが、Netbase JSCが公開しているSaaS・セキュリティ・モジュールライブラリのページ、Printcartのプロダクトサイト、AWS・FinOps Foundation・OWASPの公開フレームワークをもとにこのガイドを執筆し、David(CEO)がすべてのNetbase JSCに関する事実をレビューしました。外部ソースはアクセス日付付きで引用しています。草稿作成にはAIアシスタンス(Claude)を使用しており、Netbase JSCの数値はすべて検証済みの会社記録に基づいています。その目的は、プロダクトチームがSaaSの初期決定を、変更にコストがかかるようになる前に意図的に行えるよう支援することです。
次のステップ
SaaS製品の計画中または見直し中であれば、製品アイデア・ターゲット顧客・現在のアーキテクチャをお知らせください。テナンシー・課金・デリバリープランをマッピングするソリューションレビューを予約します。関連サービスを確認したり、Netbase JSCのインサイトをさらに読んだりすることもできます。
Related services and solutions
AIを組み込んだWebアプリケーション開発でコンバージョンを高める
NetbaseはプロダクトチームおよびECチームに向け、高速で保守性の高いWebアプリとストアフロントを構築するWebアプリケーション開発を提供します。AIサーチ・アシスタント・自動化は効果が計測できる箇所にのみ導入します。印刷・EC領域での実績として、PrintLeoのページ読み込みが35%改善し、4over4ではNetbaseがユーザージャーニーを改修した結果、コンバージョンが48%向上しました。
詳しく見る
SaaSプロダクトアクセラレーター:実績あるNetbaseモジュールでAI対応SaaSを立ち上げる
SaaSプロダクトアクセラレーターは、アカウント、請求、ロール、インテグレーションに対応した再利用可能なNetbaseモジュールのセットです。ファウンダーやプロダクトチームがサブスクリプション型ソフトウェアを迅速にリリースし、初回リリースからプロダクト内AIにも対応できます。これらのモジュールの再利用により開発期間を最大60%短縮できる可能性があり、Netbaseが構築・運用するWeb to Print SaaSであるPrintcartで実証済みのアプローチです。
詳しく見る
Discuss a project
Netbase JSC helps organizations design, build, modernize, and operate digital products and AI-enabled business systems.+84 937 869 689
91 Nguyen Chi Thanh, Dong Da, Hanoi, Vietnam
Get in touch
Tell us what you want to build, modernize, or operate.