Canva アプリへようこそ!🎉
これは、選択したテンプレートを使用したアプリの出発点です。プラットフォームの完全なドキュメントは canva.dev/docs/apps にあります。
注意: このコードとドキュメントは、TypeScript と React の経験があることを前提としています。
このアプリには以下の機能が実装されています:
- キャンバスに要素を追加するボタン: アプリのメインインターフェースにボタンが配置されており、クリックするとCanvaのキャンバスに画像要素が追加されます。
src/app.tsx ファイルに以下の変更を加えました:
import { Button } from "@canva/app-ui-kit";
import "@canva/app-ui-kit/styles.css";
import * as styles from "./index.css";
import { useAddElement } from "../utils/use_add_element";
export function App() {
const addElement = useAddElement();
const handleAddImageElement = () => {
addElement({
type: "image",
dataUrl: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAwIiBoZWlnaHQ9IjMwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iNTAwIiBoZWlnaHQ9IjMwMCIgZmlsbD0iIzQyODVmNCIvPjx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LWZhbWlseT0iQXJpYWwiIGZvbnQtc2l6ZT0iMzYiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkeT0iLjNlbSI+Q2FudmEgQXBwIEVsZW1lbnQ8L3RleHQ+PC9zdmc+",
altText: undefined,
});
};
return (
<div className={styles.centerInPage}>
<Button
variant="primary"
onClick={handleAddImageElement}
>
Add Image to Canvas
</Button>
</div>
)
}useAddElementフックを使用して、Canvaのキャンバスに要素を追加する機能を実装しています- ボタンをクリックすると、青い背景に「Canva App Element」というテキストを表示するSVG画像がキャンバスに追加されます
- 画像はBase64エンコードされたSVGデータとして提供されています
この機能をテストするには:
- アプリを起動します(
npm start) - Canvaエディタでアプリをプレビューします
- サイドパネルに表示される「Add Image to Canvas」ボタンをクリックします
- キャンバス上に青い長方形の要素が追加されることを確認します
- ボタンのクリックイベントが正常に動作することを確認
- 画像要素がキャンバスに正しく追加されることを確認
- 追加された要素が期待通りに表示されることを確認
- Node.js
v18またはv20.10.0 - npm
v9またはv10
注意: 正しいバージョンの Node.js を実行していることを確認するために、nvm などのバージョンマネージャーを使用することをお勧めします。このリポジトリのルートディレクトリにある .nvmrc ファイルは、nvm install を実行すると正しいバージョンが使用されることを保証します。
npm installボイラープレートの開発サーバーを起動するには、次のコマンドを実行します:
npm startサーバーは http://localhost:8080 で利用可能になります。
アプリのソースコードは src/app.tsx ファイルにあります。
ローカル開発サーバーは JavaScript バンドルのみを公開するため、http://localhost:8080 にアクセスしてアプリをプレビューすることはできません。Canva エディタを介してのみアプリをプレビューできます。
アプリをプレビューするには:
- 開発者ポータル からアプリを作成します。
- App source > Development URL を選択します。
- Development URL フィールドに開発サーバーの URL を入力します。
- Preview をクリックします。これにより、Canva エディタ(およびアプリ)が新しいタブで開きます。
- Open をクリックします。(この画面は、アプリを初めて使用する場合にのみ表示されます。)
アプリはサイドパネルに表示されます。
Safari でのアプリのプレビュー
デフォルトでは、開発サーバーは HTTPS が有効になっていません。これは便利ですが、セキュリティ証明書が不要である一方、Safari でのアプリのプレビューができなくなります。
なぜ Safari は開発サーバーが HTTPS 対応である必要があるのか?
Canva 自体は HTTPS を介して提供され、ほとんどのブラウザは HTTPS ページが非 HTTPS 接続を介してスクリプトを読み込むことを防止します。Chrome と Firefox は localhost などのローカルサーバーに例外を設けていますが、Safari はそうではないため、Safari を使用している場合は開発サーバーが HTTPS 対応である必要があります。
詳細については、混合コンテンツリソースの読み込み を参照してください。
Safari でアプリをプレビューするには:
- HTTPS を有効にして開発サーバーを起動します:
npm start --use-https- https://localhost:8080 にアクセスします。
- 無効なセキュリティ証明書の警告をバイパスします:
- 詳細を表示 をクリックします。
- ウェブサイトにアクセス をクリックします。
- 開発者ポータルで、アプリの Development URL を https://localhost:8080 に設定します。
- プレビューをクリックします(またはすでに開いている場合はアプリを更新します)。
ローカルサーバーを起動するたびに、無効なセキュリティ証明書の警告をバイパスする必要があります。HTTPS が有効になっている場合は、他のブラウザでも同様の警告が表示されます(そしてバイパスする必要があります)。
デフォルトでは、アプリに変更を加えるたびに、その変更の結果を確認するためにアプリ全体を再読み込みする必要があります。ホットモジュール置換(HMR)を有効にすると、完全な再読み込みなしで変更が反映され、開発ループが大幅に高速化されます。
注意: HMR は Docker コンテナで開発サーバーを実行している間は機能しません。
HMR を有効にするには:
-
Your apps からアプリにアクセスします。
-
Configure your app を選択します。
-
App origin フィールドから値をコピーします。この値は各アプリに固有であり、カスタマイズできません。
-
ルートディレクトリで
.envファイルを開きます。 -
CANVA_APP_ORIGIN環境変数を App origin フィールドからコピーした値に設定します:CANVA_APP_ORIGIN=# ここにあなたのアプリオリジンを入力 -
CANVA_HMR_ENABLED環境変数をtrueに設定します:CANVA_HMR_ENABLED=true
-
ローカル開発サーバーを再起動します。
-
HMR が有効になるようにアプリを手動で再読み込みします。
一部のテンプレートはバックエンドの例を提供しています。このバックエンドはテンプレートの backend/server.ts ファイルで定義され、npm start コマンドが実行されると自動的に起動し、http://localhost:3001 で利用可能になります。
バックエンドを持つテンプレートを実行するには:
-
Your apps ページにアクセスします。
-
App ID 列からアプリの ID をコピーします。
-
スターターキットの
.envファイルで、CANVA_APP_IDをアプリの ID に設定します。例えば:
CANVA_APP_ID=AABBccddeeff CANVA_APP_ORIGIN=# CANVA_BACKEND_PORT=3001 CANVA_FRONTEND_PORT=8080 CANVA_BACKEND_HOST=http://localhost:3001 CANVA_HMR_ENABLED=FALSE -
アプリを起動します:
npm start
アプリの ID は、HTTP リクエストの送信と検証 に必要なため、明示的に定義する必要があります。.env ファイルで ID を設定しないと、例を実行しようとするとエラーがスローされます。
アプリにバックエンドがある場合、サーバーの URL は開発ビルドか本番ビルドかによって異なる可能性があります。例えば、開発中はバックエンドはおそらく localhost URL で実行されていますが、アプリが本番環境にある場合、バックエンドはインターネットに公開される必要があります。
サーバーの URL をより簡単にカスタマイズするには:
-
お好みのテキストエディタで
.envファイルを開きます。 -
CANVA_BACKEND_HOST環境変数をサーバーの URL に設定します。 -
リクエストを送信する際に、ベース URL として
BACKEND_HOSTを使用します:const response = await fetch(`${BACKEND_HOST}/custom-route`);
注意:
BACKEND_HOSTはCANVA_BACKEND_HOST環境変数の値を含むグローバル定数です。この変数は webpack を介してアプリで利用可能になり、インポートする必要はありません。 -
本番用にアプリをバンドルする前に、
CANVA_BACKEND_HOSTを本番バックエンドを指すように更新します。
アプリがサードパーティサービスとの認証を必要とする場合、Canva がリクエストを送信できるように、サーバーは公開 URL を介して公開される必要があります。 このステップでは、ngrok を使用してこれを行う方法を説明します。
注意: ngrok は便利なツールですが、誰かがサーバーの URL を把握して機密情報にアクセスするなどの固有のセキュリティリスクがあります。リスクに注意し、組織の一部として作業している場合は、IT 部門に相談してください。 本番アプリでは、ngrok URL をホストされた API エンドポイントに置き換える必要があります。
ngrok を使用するには、次のことを行う必要があります:
-
https://ngrok.com/ で ngrok アカウントにサインアップします。
-
ngrok の authtoken を見つけます。
-
コマンドラインを使用して、authtoken の環境変数を設定します。
<YOUR_AUTH_TOKEN>を実際の ngrok authtoken に置き換えてください:macOS と Linux の場合:
export NGROK_AUTHTOKEN=<YOUR_AUTH_TOKEN>
Windows PowerShell の場合:
$Env:NGROK_AUTHTOKEN = "<YOUR_AUTH_TOKEN>"
この環境変数は現在のターミナルセッションで利用可能であるため、新しいセッションごとにコマンドを再実行する必要があります。または、変数をターミナルのデフォルトパラメータに追加することもできます。