古典的なプログラミングや他のノーコード/ローコード・プラットフォームの経験があれば、多くの概念はなじみのあるものでしょう。
他のノーコード/ローコード・ソリューションとは異なり、AppMasterはアプリケーションを構築するための古典的なアプローチで構築されている。AppMasterの基本アイテムはプロジェクトであり、他のプラットフォームのようなアプリケーションではない。プロジェクトは複数のバックエンド、ウェブ、モバイルアプリケーションで構成することができる。ソリューションのアーキテクチャ - クライアント・サーバ(Bubbleや同様のプラットフォームのようなモノリスではない)。
他のノーコード・プラットフォームから移行する場合、AppMasterではバックエンド、ウェブ、モバイルを別々のプラットフォーム・ツールで別々に作成することに留意してください。そのようなユーザーにとって最もイライラする瞬間の一つは、別々のアプリケーションを作成し、そのアプリケーションでロジックを構築する必要があることを思い出すことです。
どのように始めるか?
ほとんどのプロジェクトでは、バックエンドとウェブ、バックエンドとモバイル、あるいはすべてのタイプのアプリケーションを構築する必要があります。
重要です。ほとんどのロジックは必ずバックエンドアプリケーションに実装してください。重要なロジックを、あなたがコントロールできないウェブアプリケーションやモバイルアプリケーションに配置してはいけません。フロントエンドは、データの可視化とユーザー入力からの情報収集のためだけのものです。
最も簡単な方法は、バックエンドアプリケーションを作成することから始めることです。
バックエンドアプリケーション
バックエンド ステップ1.Backend Data Models Designerでデータモデルを定義します。各モデルはSQLデータベースのテーブル(リレーションを含む)と考えることができます。AppMasterでは、データモデルはプライマリデータベースのテーブルを定義するだけでなく、プロジェクト全体の構造宣言としても使用されます。例えば、もしあなたのロジックが'User'というデータモデルを使用している場合、そのタイプの構造はすべて同じフィールドを持つことになります。
データモデルデザイナーのキャンバス上で右クリックして新しいモデルを作成し、あるモデルの境界線から別のモデルの境界線までドラッグしてリレーションを作成します。リレーションまたはモデルフィールドをクリックして編集します。
もしNOT NULLやUniqueポリシーを既存のデータベースに適用し、値が空であったり重複していたりすると、DBスキーマの移行は最終的に失敗します。
バックエンド ステップ2.アプリケーションのビジネスプロセスを作成する。AppMaster Platformにおけるビジネスプロセス(BP)とは、古典的なプログラミングにおける関数(Function)の一種です。
すべてのバックエンドBPには2つの必須ブロックがあります:開始と終了です。BPにデータを渡す必要がある場合、Startブロックに変数を定義し(古典的なプログラミングの関数における引数のように動作します)、BP内部のブロックに接続する必要があります。
BPからデータを返すには、Endブロックに変数を追加します(古典的なプログラミングの関数におけるreturnのようなものです)。
BPブロック間の接続には2種類あります:
- 青い矢印の実線はフロー接続と呼ばれ、ブロックの実行順序を定義します(どのブロックが次に実行されるべきか)。
- Variable Connectionsと呼ばれる複数色の細い線は、データバインディング(どこからデータを取得するか、つまりBPブロック間のデータ接続)を定義します。色ごとにデータ型が異なる
通常、BPブロック内でフローや変数接続を行う場所はコネクタと呼ばれる。ブロックの左側にあるコネクタはすべてインコネクタ(フローまたはデータを受け取る)であり、右側にあるコネクタはアウトコネクタ(フローまたはデータを前方に渡す)である。
接続を作成するには、あるコネクターから別のコネクターへドラッグする必要がある(接続する必要があるブロック間をドラッグする)。
どちらからドラッグしても、コネクションが形成されます。
BPエディタは自動的に可変コネクションのデータ型をチェックし、データ型が同一でない場合は接続させません。
左側のパネルから適切なブロックをドラッグ&ドロップするだけで、別のBPを呼び出すことができます。ロジックの複雑さを最小限に抑え、プロジェクト内で同じロジックを何度も再利用するために、私たちは頻繁にこの方法を使用します。
バックエンドアプリケーションには2種類の変数があり、BPに一時的にデータを格納することができます:
- ローカル変数 - 現在のBPのライフサイクル中にデータを格納します(最も効率的で、インメモリのみ)。
- グローバル変数 - バックエンドアプリケーションのライフサイクル中にデータを保存します。
BPエディタの左パネルからグローバル変数をドラッグして使用する前に、バックエンドロジックの一部を使ってグローバル変数を作成する必要があります。
API経由で外部ソースからBPを呼び出す必要がある場合(Web、モバイル、postman/curl、外部システムから)、BPをエンドポイントにアタッチする必要があります。
バックエンドのステップ3.エンドポイントの作成AppMasterではエンドポイントに古典的なREST APIアプローチを採用しています。AppMasterはREST APIエンドポイントだけでなく、WebHooksやWSSエンドポイントもサポートしていますが、ここでは最初のタイプに焦点を当てます。
エンドポイントを作成する際は、メソッド(GET、POST、PUT、PATCH、DELETE)、ペイロード(JSONを使用)、URL(非ASCII文字、スペースなし、スラッシュで始まりスラッシュで終わる)の点でREST API標準を遵守してください。
BPを選択し、URLとRESTメソッドを定義し、エンドポイントの認証が必要ならミドルウェアの設定を確認する。
データモデル、ビジネスプロセス、エンドポイントの準備ができたら、いよいよ公開だ!通常30秒以内に、AppMaster Platformはあなたの全ての設計図(そう、実はあなたが行った全てのことは、未来のソフトウェアのための設計図なのです)を受け取り、ソースコードを生成し、コンパイルし、Dockerイメージにパックし、AppMasterクラウドにデプロイします。公開のプロセスが終了したら、REST APIドキュメント(OpenAPI/Swagger)を開き、Swagger組み込みのリクエストや、PostmanやInsomniaのようなサードパーティツールを使ってエンドポイントをテストできます。
重要Learn & Exploreサブスクリプションを使用している場合、Studioで30分間操作を行わないと、Resource Saving Daemonがアプリケーションコンテナを停止します。再度実行するには、[Deploy Plan]トグルをクリックするか、もう一度パブリッシュしてください。
ウェブアプリケーション
バックエンドが適切に計画され、作成されたら、次はフロントエンドです。Webアプリケーションから始めます。
ウェブアプリケーション ステップ1.もしプロジェクトにウェブアプリケーションがなければ、作成しましょう。現在のところ、ウェブアプリケーションデザイナーには2つのタイプがあります:現在のものと新しいもの(ベータ版)です。大きな違いはカスタマイズの量です。現在のWebApp Designerは、UIのカスタマイズ機能が非常に限られていますが、管理パネルやカスタマーポータルの標準的なUIインターフェースをシンプルかつ簡単に構築できます。新しいWebApp Designer(現在ベータ版)は、UIの外観と塗りつぶしのフルカスタマイズが可能で、SPA(Vue、Reactの方法)からのレイアウトを使用したフレックスボックスのアプローチを採用しています。どちらのデザイナーにも、トリガーや便利なブロックの束を含むビジネスプロセスが組み込まれています。
ウェブアプリのステップ2.トップパネル(現在のデザイナー)または左パネル(新しいデザイナー)から UI 要素をドラッグ&ドロップして、Web アプリケーションの UI 設計を開始します。テーブルやリストのような)列挙型の要素を持ついくつかの要素では、要素を自動的に調整するために、最初のドロップ段階でデータモデルを選択する必要があります。
Webアプリケーションには2種類のビジネスプロセスがあります:トリガーと標準です。トリガーは、各UI要素とアプリケーション全体のスコープ(アプリトリガー)で利用できます。UI要素のトリガーにアクセスするには、要素を選択し、BPタブでトリガーを作成します。標準的なBPとは異なり、トリガーには複数の開始ブロックがあります。トリガーは値を返すことがないため、Endブロックは必要ありません。Webアプリケーションで標準的なビジネスプロセスを作成することはできますが、それを実行する唯一の方法はトリガーから呼び出すことです。頻繁に使用するロジックを標準の Web BP に移動し、トリガーから呼び出すだけというのは良い方法です。
重要バックエンドBPはバックエンドアプリケーション内で実行され、WebアプリBPはユーザのブラウザ内で実行されること、そしてWebワークロードを最小化することがユーザエクスペリエンスに有益であることを覚えておいてください。
非常に重要なアプリケーションレベルのトリガーがいくつかあります。例えば、App onLaunchはブラウザのアプリケーションが起動したときに発火します。これは、ユーザが認証されているかどうかをチェックし、認証されていない場合、適切なページにリダイレクトするのに最適な場所です(認証が必要な場合)。
Webアプリケーションスキーマを保存し、変更を確認するためにプロジェクトを公開することを忘れないでください。
モバイルアプリケーション
モバイルアプリケーションを作成する必要がある場合、プロセスはWebアプリケーションと同じです:画面を作成し、UI要素を配置し、UI要素のトリガーを作成し、App onLaunchトリガーを調整すれば準備完了です。AppMasterモバイルアプリケーションにはウェブプレビューはありませんが、AndroidおよびIOS用のAppMaster Developerモバイルアプリケーションをインストールすることで、BLE、NFCなどハードウェアに関連するすべての機能を備えたアプリケーションをライブプレビューすることができます。
モバイルアプリケーションの開発が完了し、公開する準備ができたら、AppMasterはプロジェクト内のすべてのモバイルアプリケーションのリスト内のコンテキストメニューから特別な公開ウィザードを利用できます。Androidの場合、AppMasterはAPKファイルとAABファイルを生成します。
概要
AppMasterは、データモデルデザイナー、ビジネスプロセスエディター、ウェブデザイナー、モバイルデザイナーの高度な設計図を使ってアプリケーションを計画できる大きなIDEです。
よくある質問
なぜプロジェクトごとに複数のアプリが必要なのですか?
AppMaster はモノリスではなく、クライアント・サーバ・アーキテクチャを採用しています。機能を分離する必要がある場合、プロジェクトごとに複数のアプリが必要になるケースが多々あります:
- 複雑なプロジェクト:タクシーのように、乗客用のアプリと運転手用のアプリが同じバックエンドで動作している場合。
- 複数のバックエンドアプリケーションを作成することで、作業負荷のバランスをとり、変更を簡単でリスクの少ないものにする。
プロジェクトごとに複数のウェブアプリやモバイルアプリを作成することはすでに可能ですが、プロジェクトごとに複数のバックエンドアプリケーションを導入することはまだ検討中です。
生成されたアプリケーションの利点と欠点は何ですか?
最も明白で顕著な利点は、大幅に向上したパフォーマンス、スケーラビリティ、オンプレミスで実行するためのバイナリファイルを取得する能力、および認証や監査に合格するためのソースコードです。バックエンド・アプリケーションの生成には、最新バージョンのGoプログラミング言語を使用しています。Goは、コンパイルされたアプリケーションのパフォーマンス、複数のOSやCPUアーキテクチャに対応するクロスコンパイル、柔軟性を維持することによる全体的なシンプルさを提供します。
最も一般的な欠点は、設計図に変更を加えた場合、その都度アプリを再生成してビルドし直す必要があることで、中規模プロジェクトでは通常平均35~45秒程度かかる。また、当社のクラウドでアプリを実行する必要があるため、追加の複雑さとコストが発生します。Dockerコンテナで実行する各アプリはCPUとRAMを消費し(アイドル状態でも)、DBスキーマの移行が必要です(当社は自動的に行います)。
しかし一般的に、コードで生成されたアプリケーションは、古典的なプログラミングで作成されたものと同じように動作します。
ウェブアプリケーションにはどのような技術が使われていますか?
Vue3フレームワークとTypeScript(TS)を使用してウェブアプリケーションを生成します。ウェブアプリケーションは、SPAモードとSSGモードの組み合わせで動作します。サーバーサイドレンダリング(SSR)は後で追加され、新しいウェブアプリケーションのデザイナーのためにのみ追加されます。
モバイルアプリケーションではどのような技術が使われていますか?
私たちのモバイルアプリケーションは、宣言的なバックエンド主導のアプローチを使用して構築されています:私たちは、IOS用のSwiftとSwiftUI、Kotlin、Android用のJetpack Composeの完全ネイティブ(最もネイティブな)コードベースを使用しています。技術的にモバイルアプリケーションは、JSONとProtobufを使用してオンデマンドでネットワーク経由で設定と画面をロードし、パフォーマンスを最大化します。このアプローチには多くの利点があります:AppStoreやPlay Marketにアプリケーションの更新版を公開する必要がなく、リアルタイムでアプリケーションを変更でき、完全にオフラインで作業でき、すべてのハードウェア機能にアクセスできます。私たちのモバイル・アプリケーションでは、HTML/JS/ReactNativeやPWA技術は使用していません。AppMasterで作成されたモバイルアプリケーションは、AppStore、Play Market、またはその他の配布プラットフォームを通じて配布する必要があります(技術的には、Android用のapk/aabファイルを共有することもできますが、それには多くの手間がかかります)。
デフォルトではどこでアプリケーションをホストするのですか?
最も信頼性が高く、スケーラブルなサービスをお客様に提供するため、AWSインフラストラクチャ上にAppMaster Cloudを構築しました。デフォルトでは、どのサブスクリプションのお客様でも、3つのコア・リージョンのいずれかをご利用いただけます:北米(米国)、ヨーロッパ(ドイツ)、アジアです。専用ホスティングプランでは、ほとんどのAWSリージョンをご利用いただけます(コアリージョン以外)。アプリケーションのホスティングに特定の国が必要な場合は、お知らせください。
アプリケーションのバンドル、バイナリ、ソースコードはどのように入手できますか?
バイナリファイルまたはバンドルを入手するには、少なくともBusinessサブスクリプションが必要です。バックエンドアプリケーションは、バイナリファイルとしてアーティファクトストアからダウンロードするか、当社のレジストリ(Docker Hubのようなもの)からdocker pull経由でプルすることができます。モバイルとウェブのバンドルもアーティファクトストアからダウンロードできます。モバイルアプリバンドルは、Learn & Exploreを除くすべてのサブスクリプションでダウンロードできます。アプリケーションのソースコードを入手するには、エンタープライズサブスクリプションが必要です。エンタープライズサブスクリプションでは、バックエンドとWebアプリケーションの完全なソースコードを入手できますが、モバイルアプリのコードベースは限られています。
モデルと仮想モデルの違いは何ですか?
モデルという用語は、データベースにテーブルを作成し、検索やレコードの作成などの基本的な操作を行うためのDBブロックを自動的に事前に作成する構造を指しています。仮想モデルも同じですが、テーブルを作成せず、DBブロックも存在しません。仮想モデルは、多くの開発者が最も望んでいた機能の一つです。仮想モデルの最も頻繁なユースケースは、(JSやJSONのオブジェクトのような)構造を作成し、それを外部リクエスト、UIエレメント、またはエンドポイントに使用する必要がある場合です。バックエンドアプリケーションで定義されたモデルが、Webやモバイルアプリで自動的に仮想モデルとして表示されるのは不思議なことです。
ビジネスプロセスでモデルを扱うには?フィールドの抽出方法など
各モデルに対して、MakeブロックとExpandブロックを事前に生成します。Makeはモデルレコードにフィールドを集め、Expandはモデルレコードからフィールドを抽出します。これらのブロックは、ブロックの入力に渡される初期データを変更しないことに注意してください。
ローカル変数やグローバル変数に値を設定する方法は?
使用するすべてのブロックは、入力に渡すときに初期データを変更しません。データを変更する唯一のブロックはSet Variableです:変数と値を接続し、ブロック実行後に変数内の値を取得します。モバイル・アプリケーションやウェブ・アプリケーションのグローバル変数は永続性を持つことができ、適切なフラグが設定されていれば、アプリケーションの再起動後も存続します。
外部システムへAPIコールを行うには?
外部システムへのリクエストを行う最良の方法は、バックエンドアプリケーションから行うことです。そうすることで、データとセキュリティをよりコントロールすることができます。それには2つの方法があります:
- HTTPリクエストブロックを使用するのが最も簡単な方法で、どのバックエンドBPでも使用できます。
- External API Designerを使用して最初にリクエストを作成し、BPの内部で細工されたブロックを使用します。
バックエンドアプリケーションだけでなく、WebやモバイルでもHTTP Requestブロックを使って外部システムを呼び出すことができますが、フロントエンドアプリがローカルネットワーク内のデバイスに呼び出したい場合、またはサードパーティシステムのために設計された場合など、それを行う理由が必要です。
外部システムを呼び出す場合、どのようなリクエストやプロトコルがサポートされますか?
現在のところ、JSONまたはXMLペイロード、プレーンテキストまたはバイナリー・ペイロードのREST APIリクエストをサポートしています。
AppMasterで作成したアプリケーションはWebSocketをサポートしていますか?
はい、バックエンドアプリケーションでWSSエンドポイントを作成し、ウェブアプリやモバイルアプリ内での通信に使用できます。また、WSSエンドポイントを作成する際に、モデルを使用して独自のペイロード構造を定義することもできます。WebSocketを使用した外部システムとの通信は実装されていません。
ウェブアプリケーションやモバイルアプリケーションからバックエンドエンドポイントを呼び出す方法は?
バックエンドアプリケーションで作成したすべてのエンドポイントについて、プラットフォームはウェブおよびモバイルアプリケーション用のサーバーリクエストブロックを作成します。そのブロックを任意のトリガーに配置して呼び出すだけです。ブラウザ開発者コンソールのネットワーク要求タブで、サーバー要求ブロックの実行を監視できます。モバイルアプリでは、ログを使用することができます(AppMaster Developer App設定で最初に有効にする必要があります)。
カスタム認証とサインアップを作成できますか?
もちろんです。組み込みの認証モジュールを完全に無効にし、完全なカスタムソリューションを作成することができます。バックエンドのアプリケーションに、認証トークンの取得(通常はリクエストヘッダから)を行う別のBPを作成し、あなたのルールに従ってチェックする必要があります。リクエストヘッダを取得するには、BP ブロックのGet Request Headers を使います。組み込み認証を無効にすると、Get Current Userブロックが使えなくなることに注意してください。また、標準のAuthモジュールでは、電子メールの代わりに任意のID、電話番号、その他の識別子を使用することができます。
信頼できるカウンタや他の順序実行のケースのために、スレッドセーフなオペレーションを作成する方法はありますか?
AppMaster はビジネス・プロセスの実行において、ビジネス・プロセスのすべてのコールが一度にひとつずつ、厳密な順序で実行されるシングル・スレッド・モードをサポートしています。このモードは高負荷の状況ではパフォーマンス・ペナルティが発生する可能性がありますが、ほとんどの場合、大きなパフォーマンス低下は発生しません。このモードのコール・スタック(キュー)には制限があることに注意。
SMS、電子メール、またはOTPによる2FA?
はい、認証ロジックを調整して2FAメソッドを含めることができます。SMSやEメールを使用するには、Twilioのような外部プロバイダーに接続する必要があります。最も簡単な方法は、セッションを拡張し、セッション内で2FAを制御するための追加フィールドを含めることです。2023年第3四半期には、GoogleやMicrosoft Authenticatorで動作するTime-based OTPモジュールを導入する予定です。
AppMasterが生成したバックエンドを他のウェブアプリケーションやモバイルアプリケーションで使用できますか?
はい、AppMasterが生成したバックエンドアプリケーションには、標準的なREST APIエンドポイントがあります。各アプリケーションに対して、REST API ドキュメント(OpenAPI/Swagger)が自動的に生成され、別のエンドポイントで提供されます。
テンプレートを使ってプロジェクトやアプリケーションを作成できますか?
テンプレートはまだありませんが、近い将来リリースする予定です。AppMaster プロジェクトは WebFlow や Bubble よりも複雑で、実装には時間がかかります。
AppMasterはどのようなデータベースをサポートしていますか?
AppMasterが生成するバックエンドアプリケーションは、PG12以降のPostgreSQL互換のデータベースで動作しますが、最新のバージョンのPostgreSQL DB (このドキュメントの時点では15.3)を使用することを推奨します。MSSQL、MariaDB、MySQL、SQLiteのサポートは計画中で、2023年末から2024年初頭に追加される予定です。
データベースに直接アクセスしてレコードを編集するにはどうすればいいですか?
AppMasterは、AppMaster CloudでホストされているアプリケーションのDBへの直接アクセスをサポートしていません。オンプレミスのホスティングを使用している場合は、PGAdminのようなビジュアルツールを使用するか、pgsqlコマンドラインツールを使用してDBにアクセスできます。将来的には、お客様が直接DBを編集できる機能を追加する予定です。
リアルタイムのコラボレーションはありますか?同じプロジェクトでチームとして作業できますか?
新しいウェブデザイナーでのみリアルタイムコラボレーションが可能です。新ウェブデザイナー(ベータ版)では、Conflict-free Replicated Data Type Protocol(CRDT)によるネットワークドラフトを使用し、すべてのユースケースをカバーし、状態管理(Ctrl+Z、操作のロールバック)を実現しています。今後、CRDTをBPエディタとデータモデルデザイナに順次導入していく予定です。チームで作業する必要がある場合、データモデルスキーマ、同じBP、同じWeb/モバイルアプリを編集しないでください。
AppMasterに欠けている重要な機能は何ですか?
- Visual SQL Designerです。フィルタや結合を使った検索、idによるレコードの取得、更新、パッチ、削除、ソフト削除など、基本的な操作のほとんどはサポートされていますが、より柔軟性とパフォーマンスを高めるため、私たちはVisual SQL Designerに取り組んでおり、2023年10月にリリースする予定です。
- バックエンドのマイクロサービス。プロジェクトごとに複数のバックエンドアプリケーションの実装に積極的に取り組んでいます。現時点では、1つのプロジェクトにつき1つのバックエンドアプリケーションしか作成できません。
- ウェブアプリケーションのSSRはまだありません。最も高度に最適化されたWebアプリケーションやWebサイトでは、SSRはSEOのための追加の利点を追加します。ETA Nov-2023.
- 外部APIリクエストのgRPCサポート。システム間の相互接続の可能性を広げるために、protobufペイロードと圧縮オプションを持つgRPCを追加する予定です。
- プロジェクト、ウェブ、モバイルアプリケーションのテンプレート。テンプレートの導入に取り組んでいます。最初のステップとして、2023年9月にウェブ・アプリケーションのテンプレートを追加する予定です。プロジェクト全体のテンプレートについては、まだETAはありません。