TypeScript と JavaScript アプリケーションのビルド、テスト、デプロイ
このガイドでは、CCF を対象とする TypeScript および JavaScript アプリケーションを開発し、ローカルでデバッグし、クラウド上のマネージド CCF リソースにデプロイする手順について説明します。
前提条件
- CCF のインストール
- Node.js
- npm
-
- Python 3 以降。
- 最新バージョンの CCF Python パッケージをインストールします。
このガイドでは、IDE として Visual Studio Code を使用します。 ただし、Node.js、JavaScript、TypeScript アプリケーション開発をサポートする IDE を使用できます。
プロジェクトのセットアップ
- CCF ドキュメントの 指示 に従ってプロジェクトをブートストラップし、必要なフォルダー構造を設定します。
アプリケーションを開発する
- このドキュメント に従って TypeScript アプリケーションを開発します。 コードで使用する 名前付け標準とトランザクション セマンティクスについては、CCF キー/値ストア のドキュメントを参照してください。 例とベスト プラクティスについては、GitHub で公開されているサンプル アプリケーションを参照してください。
アプリケーション バンドルをビルドする
CCF の JavaScript アプリケーションのネイティブ形式は、JavaScript アプリケーション バンドルまたは短いアプリ バンドルです。 バンドルは、デプロイのためのガバナンス提案に直接ラップできます。 CCF ドキュメントでアプリケーション バンドルを作成する手順に従って、アプリ バンドルを作成し、デプロイの準備をします。
アプリケーションをビルドします。 アプリケーション バンドルは dist フォルダーに作成されます。 アプリケーション バンドルは、set_js_app.json という名前のファイルに配置されます。
npm run build
> build
> del-cli -f dist/ && rollup --config && cp app.json dist/ && node build_bundle.js dist/
src/endpoints/all.ts → dist/src...
created dist/src in 1.3s
Writing bundle containing 8 modules to dist/bundle.json
ls -ltr dist
total 40
drwxr-xr-x 4 settiy settiy 4096 Sep 11 10:20 src
-rw-r--r-- 1 settiy settiy 3393 Sep 11 10:20 app.json
-rw-r--r-- 1 settiy settiy 16146 Sep 11 10:20 set_js_app.json
-rw-r--r-- 1 settiy settiy 16061 Sep 11 10:20 bundle.json
Logging
- CCF には、ノードの出力に独自の行を追加するためのマクロが用意されています。 CCF ドキュメントのアプリケーションへのログ記録の追加に関する記事に記載されている手順に従ってください。
1 ノード CCF ネットワークをデプロイする
- /opt/ccf_virtual/bin/sandbox.sh スクリプトを実行して 1 ノード CCF ネットワークを開始し、アプリケーション バンドルをデプロイします。
sudo /opt/ccf_virtual/bin/sandbox.sh --js-app-bundle ~/ccf-app-samples/banking-app/dist/
Setting up Python environment...
Python environment successfully setup
[10:40:37.516] Virtual mode enabled
[10:40:37.517] Starting 1 CCF node...
[10:40:41.488] Started CCF network with the following nodes:
[10:40:41.488] Node [0] = https://127.0.0.1:8000
[10:40:41.489] You can now issue business transactions to the libjs_generic application
[10:40:41.489] Loaded JS application: /home/demouser/ccf-app-samples/banking-app/dist/
[10:40:41.489] Keys and certificates have been copied to the common folder: /home/demouser/ccf-app-samples/banking-app/workspace/sandbox_common
[10:40:41.489] See https://microsoft.github.io/CCF/main/use_apps/issue_commands.html for more information
[10:40:41.490] Press Ctrl+C to shutdown the network
- メンバー証明書と秘密キーは、/workspace/sandbox_0 で使用できます。 アプリケーション ログは/workspace/sandbox_0/out で使用できます。
- この時点で、1 つのメンバーを持つローカル CCF ネットワークを作成し、アプリケーションをデプロイしました。 ネットワーク エンドポイントは
https://127.0.0.1:8000
. メンバーは、提案を送信することで、アプリケーションの更新やメンバーの追加などのガバナンス操作に参加できます。
curl -k --silent https://127.0.0.1:8000/node/version | jq
{
"ccf_version": "ccf-4.0.7",
"quickjs_version": "2021-03-27",
"unsafe": false
}
- ネットワークからサービス証明書をダウンロードします。
curl -k https://127.0.0.1:8000/node/network | jq -r .service_certificate > service_certificate.pem
アプリケーションの更新
アプリケーション開発は反復的なプロセスです。 新機能が追加された場合やバグが修正された場合は、set_js_app提案で実行できる 1 ノード ネットワークにアプリケーションを再デプロイする必要があります。
アプリケーションをリビルドして、dist フォルダーに新しい set_js_app.json ファイルを作成します。
アプリケーションを送信する提案を作成します。 提案が承認されると、新しいアプリケーションが 1 ノード ネットワークにデプロイされます。
Note
ローカルの 1 ノード ネットワークでは、送信後すぐに提案が受け入れられます。 提案を承諾または拒否するために投票を送信する必要はありません。 その背後にある根拠は、開発プロセスを迅速にするために行われます。 ただし、これは、メンバーが提案を承認または拒否するために投票を送信する必要がある Azure Managed CCF でのガバナンスのしくみとは異なります。
$ ccf_cose_sign1 --content dist/set_js_app.json --signing-cert workspace/sandbox_common/member0_cert.pem --signing-key workspace/sandbox_common/member0_privk.pem --ccf-gov-msg-type proposal --ccf-gov-msg-created_at `date -Is` | curl https://127.0.0.1:8000/gov/proposals -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem
マネージド CCF リソースにアプリケーションをデプロイする
次の手順では、JavaScript アプリケーションをデプロイする手順に従って、マネージド CCF リソースを作成し、アプリケーションをデプロイします。