Fóirにできることのすべて

コンテンツAPIは、アプリケーションに必要なもののごく一部です。ここでは、その残りを紹介します。

コンテンツ

情報の形づくり。

モデルとフィールド

リッチテキスト、正確な小数、メディア、参照、ジオポイントなど16種類の組み込みフィールドタイプから、データの形をコンソールまたはコードで定義します。

リレーション

参照フィールドで、あるモデルから別のモデルを指し、1回のクエリでまたいで読み取れます。リレーションの種類によって、アクセスや削除が参照先に及ぶかどうかが決まります。

proseとインラインモデル

段落の合間に自分のモデルを任意の順序で含められるリッチテキスト、一度定義すればフィールドタイプとして再利用できるインラインモデル、型付きリスト。

階層

参照フィールドをモデルの階層として宣言すると、そのレコードがツリーを構成し、すべての読み取りがレコードのパスと祖先を返します。

ロケール

テキストフィールドとproseフィールドをロケールごとに翻訳できます。フォールバックチェーンはフィールドごとにたどり、厳密モードでは翻訳のなかったフィールドを報告します。

パーソナライズ

リクエストが受け取るレコードのバージョンは、読み取りが渡すコンテキストと、サインイン中のユーザーが属するセグメントから、サーバーが選びます。実例付きです。

バリアント

レコード全体、単一のフィールド、またはprose内の単一のエントリーをオーディエンスごとに変えられます。バリアントは、再利用可能で優先順位のあるターゲティングルールから、サーバー上で選択されます。

オーディエンスとセグメント

デバイス、プラットフォーム、ロケール、サインイン状態といったコンテキストディメンションと、リクエストごとにサーバーが評価するルールベースのセグメントから、オーディエンスを作成します。

ナチュラルキーとルックアップ

読みやすいキーでレコードを指定でき、モデルに一意のルックアップキーを追加で宣言すれば、ハンドルやSKUから型付きクエリ1回でレコードを見つけられます。

デザイントークン

色、書体、余白をプロジェクトのトークンとして保持し、APIから配信します。実行時にそれを読み込むアプリは、公開後にリブランドを反映します。

公開

公開し、そして元に戻す。

下書き

公開を有効にしたモデルでは、保存のたびに下書きが書き込まれ、APIは公開済みのバージョンを配信し続けます。コンソールでは、APIが配信する形で下書きをプレビューできます。

バージョン履歴

バージョン管理されたモデルでは、保存のたびに番号付きのバージョンとなり、プランで決まる期間保持されます。復元すると新しいバージョンが追加され、ドライランで先に影響を確認できます。

予約公開

レコードのバージョンに公開日時を設定でき、コンテンツを再び取り下げる場合は非公開日時も設定できます。スケジュールは、実行されるまで変更や取り消しができます。

ロールアウト

ロールアウトは、名前を付けたレコードバージョンのまとまりを、予約した1つの時点で公開します。失敗した項目はスキップされてリトライでき、まとまり全体をロールバックすることもできます。

リリース

モデルと設定の変更は下書きとしてステージングされ、すぐに、または指定した時刻に、まとめてリリースされます。破壊的変更の差分とロールバックがあります。

モデルごとの動作

バージョン管理、公開、バリアントはモデルごとに有効にし、デフォルトではオフです。各モデルは、そのレコードに必要なワークフローだけを取り入れます。

配信

アプリケーションに届く仕組み。

型付きGraphQL

FóirはモデルからGraphQLスキーマを生成します。本番では公開済みのスキーマを配信し、コミット済みの型がプロジェクトより古くなっているとCLIのチェックがビルドを失敗させます。

読み取り時に解決

読み取りはロケール、コンテキスト、プレビューフラグを渡します。サーバーがロケールのフォールバックを適用し、バリアントを選び、下書きか公開済みのバージョンを選択します。

ライブアップデート

WebSocketでサブスクライブし、レコードの変更を受け取ります。イベントには変更されたもののIDが含まれ、SDKのliveモジュールがそれをクエリキャッシュに反映します。

APIキー

各キーは公開用またはシークレットで、1つのプロジェクトに属します。付与したスコープを持ち、選択したモデルとオペレーション、または1つの組織に絞り込めます。

レスポンスキャッシュ

GraphQL APIは、解決済みのレスポンスをデフォルトで60秒間キャッシュし、含まれるレコードが書き込まれると破棄します。CLIコマンドで手動パージもできます。

SDKとCLI

アプリケーション向けのGraphQLを書いてくれる型付きクライアントで、型はキーごとに生成されます。コンテンツ、スキーマ、公開、設定を扱うCLIは、スクリプト向けにJSONで出力できます。

自動で適用される制限

リクエストレートはプランに応じてキーごとに設定され、クエリの深さ、フィールド数、エイリアスはクエリの実行前に上限が適用されます。レスポンスのヘッダーに制限値が含まれます。

アイデンティティとアクセス

誰が何を見て、何をできるか。

ホスト型サインイン

確認済みのログインドメイン上でFóirがユーザー向けにホストするサインインページ。プロジェクトの名前、ロゴ、色を反映し、パスワード、メールで送るコード、プロバイダーによるサインインに対応します。

OpenID Connectサインイン

ユーザーは、OpenID Connectのディスカバリードキュメントを公開している任意のIDプロバイダーでサインインできます。ディスカバリーURLとクライアント認証情報を指定すれば、Fóirがやり取りを実行します。

ステップアップ認証

機密性の高いオペレーションの前、またはアプリへのサインインのたびに、パスワードに続く第2のステップとして、パスキーまたは認証アプリのコードを必須にできます。

ロール

ロールは、組み立てた権限のセットで、ワークスペース全体または1つのプロジェクトに付与します。ユーザーのロールは、プロジェクトごとに設定またはCLIで宣言します。

レコードレベルのアクセス

モデルがレコードの所有者を宣言し、各レコードは非公開か公開になります。非公開のレコードは、取り消し可能な付与によって、指定した個人と共有できます。

フィールドレベルのアクセス

フィールドごとに、読み取れる呼び出し元の種類と書き込める種類を指定できます。種類は5つあり、リクエストが持つ認証情報で決まります。

セッション制御

コンソールには、カスタムログインドメインでユーザーが保持するセッションがサインインアプリごとに一覧表示され、任意の1件を取り消せます。それ以外のサインインは、トークンの取り消しまたは有効期限で終了します。

監査証跡

誰がいつ何をしたかが変更とともに記録され、権限を持つチームメンバーがコンソールで確認できます。エントリーは90日間保持されます。

セキュリティ

データをほかの誰のものとも分離する仕組み。

データベースで適用

アクセスルールはPostgresの行レベルセキュリティにコンパイルされるため、リクエストが読み取れるものはデータベースが絞り込み、アプリケーションコードでのチェック漏れがあっても行が露出しません。

ワークスペースの分離

ワークスペースはアカウントです。管理対象のすべての行がそのIDを持ち、テーブルのポリシーは、ほかの何よりも先にそのIDを呼び出し元のセッションと比較します。

プロジェクトの分離

各プロジェクトには、独自のコンテンツ、ユーザー、ファイル、キー、シークレット、サインインドメインがあります。APIキーは必ず1つのプロジェクトに属し、別のプロジェクトに向け直すことはできません。

組織の分離

製品に独自のテナントがある場合、それぞれが組織になります。データベースはすべての行に組織の印を付け、すべての読み取りをそれで絞り込みます。

承認によるサポートアクセス

Fóirのスタッフが支援のためにワークスペースの内部を確認する必要があるときは、その管理者の1人がワンタイムコードでリクエストを承認します。アクセスは1時間続き、記録されます。

Demesne

ルールをコンパイルするエンジンはオープンソースなので、ポリシーの書かれ方を読み、テストを自分で実行できます。

プロジェクトと組織

制作会社向け、そして独自のテナントを持つ製品向け。

クライアントごとのプロジェクト

各クライアントには、独自のコンテンツ、キー、ユーザー、サインインを持つプロジェクトが用意されます。1つのワークスペースですべてを管理でき、招待したクライアントは自分のプロジェクトにしか到達できません。

組織

製品に独自のテナントを持たせます。顧客それぞれが、プロジェクト内の組織となり、独自のメンバー、ユーザー、データ、制限を持ちます。

組織ツリー

組織は任意の深さまで入れ子にできます。親はその下のすべてを読み取れますが、変更できるのは自分の行だけです。モデルと設定は、ツリーの下位へ継承されます。

組織プロビジョニング

1回の呼び出しで、ブランド、設定、最初のメンバー、その組織に限定したキーを備えた組織を作成します。2回実行しても、組織は1つのままです。

ステージングと本番

1つの設定ファイルでステージングと本番を名前付きプロジェクトとして宣言し、CLIは1回の実行につき一方へプッシュします。宣言した宛先以外は同一に保たれ、差異は報告されます。

カスタムドメイン

プロジェクトは、確認済みのドメインからAPIを配信でき、サインインアプリは、ホスト型サインインページをドメインから配信できます。どちらも任意で、TLSは自動的に発行されます。

メディア

ファイルと、それに対してできること。

アセットライブラリ

ファイルを一度アップロードすれば、任意のレコードからIDで参照できます。画像は、アップロードの確定時にサイズとプレースホルダーが読み取られます。

画像変換

各画像は名前付きの8サイズと4フォーマットで配信され、URLが最初にリクエストされたときにレンダリングされます。クロップとフォーカルポイントは用途ごとに設定します。

非公開ファイル

ファイルには独自の所有者と可視性があります。公開ファイルは通常のURLから、非公開ファイルは有効期限付きの署名付きリンクから配信されます。

動画

アップロードされたすべての動画に、サムネイル、短いアニメーションプレビュー、再生時間が付きます。アダプティブなHLSストリーミングは、一部のプランに含まれます。

自動化

人手を介さずに進む作業。

スケジュール

スケジュールは、Cron式に従い、指定したタイムゾーンで、いずれかのオペレーションを実行します。一時停止、再開、手動での実行もできます。

ライフサイクルフック

フックは、レコードの公開など、プロジェクト内で何かが起きたときにいずれかのオペレーションを実行し、すべての配信がステータスとともに保存されます。

オペレーション

オペレーションとは、自分でホストしてFóirに登録するHTTPエンドポイントです。Fóirは署名付きのペイロードでそれを呼び出し、失敗をリトライし、すべての実行を記録します。

利用クォータ

クォータは、オペレーションを実行できる頻度にローリングウィンドウで上限を設けます。サインイン中のユーザーごと、またはより広いプール全体に適用でき、自分で書いたメッセージを返します。

事前条件

事前条件は、呼び出し元のセグメントへの所属、または入力に対するルールによって、オペレーションを実行してよいかを判定し、自分で書いたメッセージとともに拒否します。

シークレット

オペレーションが使う認証情報を保管するボールト。暗号化して保存し、参照で指定でき、再デプロイなしでローテーションできます。

通知

ユーザーにメール、アプリ内通知、プッシュ通知を、直接またはイベントから送信します。設定は、ユーザーがカテゴリーとチャネルごとに指定します。

共同作業

人と、エージェント。

ノート

チームが、レコード、ファイル、モデルなどの対象に付けるスレッド形式のコメントで、1つのフィールドや1か所の記述にも付けられます。メンションと、プロジェクトごとの受信トレイがあります。

タスク

ノートをチームメンバーに割り当てるとタスクになり、期限、サブタスク、個人ごとのキューが使えます。ノートを解決済みにすると完了になります。

Ask Fóir

サインイン中の本人の権限で動作する、コンソール内のアシスタント。編集内容は、未保存の変更、下書き、または承認するリクエストとして届きます。

スレッドをFóirに任せる

ノートのスレッドをアシスタントに渡すと、無人で短時間の実行を1回行います。プロジェクトを読み、スレッドに回答しますが、コンテンツの編集、公開、削除はできません。

任意のMCPクライアント

自分のエージェントをFóirのホスト型MCPサーバーに接続します。接続した人の権限、または与えられたシークレットキーのスコープの範囲内で動作します。

ユーザーからのフィードバック

サインイン済みのユーザーは、レコードについてのノートを書き、チームからの返信を読めます。Reactウィジェットがノートを登録し、プロジェクトは訪問者からのフィードバックを受け付けることもできます。

手元に残るもの

出口と、拡張。

Postgresエクスポート

1つのコマンドで、プロジェクトを、モデルから生成された型付きのPostgresテーブルとしてエクスポートします。外部キー、公開済みコンテンツ、ファイルのダウンロードリンクが含まれます。

エクスポートに含まれるアクセスルール

エクスポートのバンドルには、各ユーザーが読み取れる行を定めるPostgresの行レベルセキュリティが含まれます。適用は利用者が行います。フィールドの権限、APIスコープ、書き込みルールは含まれません。

ロジックは自分のもの

Fóirはコードをホストしません。自分でホストする関数をオペレーションとして登録すると、Fóirは署名付きでスコープを限定したトークンでそれを呼び出し、失敗をリトライし、各実行を記録します。

アプリ

自分のツールでコンソールを拡張します。アプリは自分でホストするWebページで、ページ、エディタータブ、サイドバー、フィールドエディターとして埋め込まれます。

コードとしての設定

モデル、APIキー、フック、サインインプロバイダーなど、プロジェクトの設定を、コミットする1つのファイルにまとめます。プッシュすると下書きがステージングされ、リリースで公開されます。

モデルを1つから始める

プロジェクトを作成し、モデルを定義して、APIで読み戻します。