コンテンツ管理
コレクション、エントリ、ロケール、リリースを備えたヘッドレス CMS。Content パネルまたは SDK からコンテンツを管理できます。
Proyecta にはフル機能のヘッドレス CMS が搭載されています。スキーマファーストの設計で、まず コレクション(構造化されたコンテンツタイプ)を定義し、各コレクションのフィールドに合わせた エントリ を作成します。エントリはローカライズしたり、リリース としてまとめたりすることができます。
Content パネル
Section titled “Content パネル”コンテンツは SDK を使って管理することも、AI に依頼して管理することもできます。Content API には 6 種類のリソースタイプがあります。
| タブ / リソース | 用途 |
|---|---|
| Collections | コンテンツスキーマの定義と管理(例:「Blog Post」「FAQ」「Product Spec」) |
| Fields | コレクション内の型付きスロット(Collections のサブリソースとして管理) |
| Entries | コレクション内のエントリの閲覧、作成、編集、公開、削除 |
| Locales | 翻訳コンテンツ用の言語・地域ロケールの追加と管理 |
| Releases | 複数のエントリをまとめて公開(または非公開に)する;releases.publish() で手動公開 |
| Assets | エントリから参照できるメディアファイル(画像、動画、PDF)のアップロードと管理 |
Collections タブでコレクションをクリックすると、そのエントリに移動します。Entries タブでは、個々のコンテンツアイテムの作成、編集、公開、削除が行えます。
すべての操作は SDK(proyecta.content)を使ってプログラムで行うこともできます。
| 概念 | 説明 |
|---|---|
| Collection | スキーマ — 1 種類のコンテンツの形状(例:「Blog Post」「FAQ」「Product Spec」) |
| Field | コレクション内の型付きスロット(例:title: string、body: rich_text、coverImage: asset) |
| Entry | コレクションの単一インスタンス(ブログ記事 1 件、FAQ アイテム 1 件) |
| Asset | エントリから参照できるアップロード済みメディアファイル |
| Locale | コンテンツを翻訳する対象の言語・地域 |
| Release | 同時に公開(または非公開に)するエントリのグループ |
クイックスタート
Section titled “クイックスタート”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });コレクション
Section titled “コレクション”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);エントリは実際のコンテンツ行です。各エントリはコレクションに属し、そのコレクションのフィールドに合ったデータを持ちます。
// Browse entries (pass the collection's api_id, not its numeric id)for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) { console.log(entry);}
// Update an entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);アセットのアップロードはファーストクラスの機能です。画像、動画、PDF をエントリに添付するために使用します。
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteチャットを使ったファイルアップロード(Builder へのドラッグ&ドロップ)については、ファイルとメディア を参照してください。
ローカライゼーション
Section titled “ローカライゼーション”コンテンツは複数のロケールに翻訳できます。各ロケールは proyecta.content.locales で管理されるレコードです。
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}エントリを取得する際に、特定ロケールの翻訳を指定できます。i18n 全体の概要については 国際化 を参照してください。
リリース は、同時に公開(または非公開に)するエントリのまとまりです。マーケティングローンチ、新しい製品ページ、FAQ の刷新など、協調したコンテンツ公開をステージングして、すべてをアトミックに切り替えることができます。
注意: 時刻指定による自動公開はまだ実装されていません。
scheduled_atに日時を設定したリリースはscheduledステータスになりますが、releases.publish()を使って手動で公開する必要があります。指定時刻での自動公開は近日中に対応予定です。
// Create a release (optionally with a target date)const release = await proyecta.content.releases.create({ name: 'Monday launch', scheduled_at: '2024-01-08T09:00:00Z',});
// Manually publish a release when readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}リリースのスケジュールを変更するには、削除して再作成してください — update エンドポイントは存在しません。
よくある使い方(AI に実装してもらう)
Section titled “よくある使い方(AI に実装してもらう)”"Proyecta Content API を使ってブログを作成してください。'Blog Post' コレクションにフィールド: title、slug、excerpt、body(リッチテキスト)、coverImage(アセット)、author を追加し、/blog と /blog/[slug] にパブリックルートを設けてください。""Proyecta Content に FAQ コレクションを作成してください。FAQ を追加・編集できる管理ページと、公開用の /faq ページを作ってください。""Proyecta Content を使って英語とスペイン語のロケールを持つ多言語ランディングページを設定してください。""3 つのブログ記事を含むリリースを作成し、準備ができたら手動で公開してください。"
Content と Database の使い分け
Section titled “Content と Database の使い分け”| ユースケース | 使うべきもの |
|---|---|
| 編集コンテンツ(記事、FAQ、マーケティングコピー)— 公開/下書き状態、スケジュール管理、ローカライゼーションが必要 | Content API |
| アプリデータ(ユーザー、注文、明細行)— クエリ速度、トランザクション、リアルタイムが必要 | Database |
| コード内の静的アセット | プロジェクト内の public/ ディレクトリ |
| ユーザーがアップロードするファイル | ファイルとメディア |
近日公開予定
Section titled “近日公開予定”- リッチテキストエントリエディタ — Content パネルで
rich_textフィールドをフル WYSIWYG 編集 - コンテンツ変更のアプリへの ライブプレビュー
- コンテンツロール — 編集者権限と開発者権限の分離