Microsoft Fabric Apps 調査まとめ(2026-10版)
Fabric Apps は、TypeScript でデータモデルを書くだけで、データベース・GraphQL API・認証・フロントエンドのホスティングまでを Fabric 上のマネージドサービスとして用意してくれる、アプリ開発向けのプレビュー機能です(公式概要)。
概要
- 位置づけ: Fabric を「分析基盤」から「アプリケーション層」へ広げる新しい Fabric アイテム。Fabric の既存データ(レイクハウス、ウェアハウス、SQL データベース、セマンティックモデル)の上に、業務アプリや社内ツールを直接構築できます。
- 土台: Rayfin SDK(コードファーストのフレームワーク)と Rayfin CLI。公式概要では「Fabric Apps は Rayfin SDK 上に構築されている」と説明されています。
- ステータス: プレビュー。Microsoft Build 2026(2026年6月)で公開プレビューとなりました(出典: 第三者記事 Beyond the Analytics)。公式ドキュメントの最終更新は 2026-09-29 で、今も更新が続いています。
- 利用できる言語: データモデル、クライアントコード、アプリロジックのいずれも TypeScript。
- 料金面: ワークスペースに割り当てた Fabric 容量(キャパシティ)の CU(容量ユニット)を消費します。
- 主な機能(公式の整理): データモデルから API を自動生成 / Fabric データコネクタ / 型安全なクライアント / 組み込み認証 / 静的ホスティング / Docker を使ったローカル開発。
Rayfin とは
Rayfin は Fabric Apps を動かすコードファーストの開発フレームワークで、SDK と CLI の2つで構成されます。アプリのバックエンドをコードとして宣言すると、Fabric 上のマネージドなバックエンドサービスとして配備・運用される、というのが基本の考え方です(公式ブログ、Rayfin SDK 概要)。Fabric Apps は Rayfin SDK の上に構築されており、「Fabric Apps」は Fabric 側の製品(アイテム)、「Rayfin」は開発者が触るコード側の道具、と区別すると理解しやすくなります。
| 要素 | 内容 |
|---|---|
@microsoft/rayfin-core | デコレーター(@entity() @text() @uuid() @role() など)。スキーマ、権限、リレーションを TypeScript のクラスで宣言する |
@microsoft/rayfin-client | RayfinClient。生成された型安全なクライアントで、データの読み取り・書き込み・削除を行う |
| Rayfin CLI | npm create @microsoft/rayfin@latest(プロジェクト作成)、npx rayfin up(配備)、npx rayfin up db apply(スキーマ反映)。デコレーター付きクラスを解析して API などを生成する |
rayfin.yml | 利用するサービス(データ、ストレージ、関数)、データベース種別、コネクタ、静的コンテンツのアクセス設定を宣言する設定ファイル |
3つの中核(公式の整理): デコレーターで一度スキーマを書く / コントローラーを書かずに GraphQL エンドポイントが自動生成される / 生成された型付きクライアントでコンパイル時に検証できる。
開発の流れ: コードを書く → Rayfin CLI が解析して API・クライアント・インフラ定義を生成 → npm run dev でローカル確認 → npx rayfin up で Fabric に配備。画面、データスキーマ、認証設定、関数、データコネクタが1つのプロジェクトのソースコードに収まるため、コーディングエージェント(GitHub Copilot など)が型情報を手がかりに作業しやすい、と公式ブログは説明しています。
補足: オープンソースのリポジトリ(microsoft/rayfin)があり、不具合報告や要望の窓口として案内されています。なお、アプリのバックエンド URL(*.rayfin.windows.net)にも Rayfin の名前が使われています。
TypeScript での書き方(サンプル)
Rayfin のコードは、データモデル(エンティティ)、スキーマ登録、rayfin.yml、フロントエンドからのクライアント呼び出しの4種類に分かれます。以下の主なコードは、Microsoft の GitHub にあるテンプレート集 microsoft/awesome-rayfin を git clone して、実際のソース(todo-local-experimental、field-technician、helsinki-public-transport)から抜粋したものです。ファイル名は各テンプレート内のパスです。長いコードは一部を省略し、環境固有の値(公開キーやデプロイ先 URL)は載せていません。
1. データモデルを定義する(rayfin/data/Todo.ts)
クラスに @entity() を付け、列ごとにデコレーターを付けます。@role で行レベルの認可ルールも書けます(公式概要)。
// rayfin/data/Todo.ts(todo-local-experimental テンプレート)
import {
entity,
role,
text,
boolean,
date,
uuid,
} from '@microsoft/rayfin-core';
@entity()
@role('authenticated', '*', {
// サインインしたユーザー本人の行だけを操作できる
policy: (claims, item) => claims.sub.eq(item.user_id),
})
export class Todo {
@uuid() id!: string;
@text({ min: 1, max: 100 }) title!: string;
@boolean() isCompleted!: boolean;
@date() createdAt!: Date;
@text() user_id!: string;
}
- 使える主な列デコレーターは
@uuid()@text()@int()@decimal()@boolean()@date()@email()@set()(列挙文字列)。{ optional, unique, default, min, max }などの修飾子で制約を付けます。 id(UUID)は主キーで、書かなければ自動追加されます。複合キーは未対応です。- TypeScript の
?は型だけの指定です。DB 列を NULL 許可にするには{ optional: true }が必要です。 - テーブル間の関係は
@one()と@many()で表し、外部キー列は{プロパティ名}_idの規則で自動生成されます。多対多は未対応のため、結合テーブルを自分で作ります(以上、コミュニティブログの解説)。
リレーションと列挙値の実例(field-technician テンプレートの Job.ts から抜粋)
// rayfin/data/Job.ts(抜粋)
import { entity, role, text, uuid, date, boolean, set, one } from '@microsoft/rayfin-core';
import { Customer } from './Customer.js';
import { UserProfile } from './UserProfile.js';
@entity()
@role('authenticated', '*')
export class Job {
@uuid() id!: string;
@text() title!: string;
@text({ optional: true }) description?: string;
// 列挙値は @set で宣言し、型は文字列リテラルのユニオンで合わせる
@set('new', 'scheduled', 'in-progress', 'blocked', 'complete')
status!: 'new' | 'scheduled' | 'in-progress' | 'blocked' | 'complete';
@boolean({ default: false }) needsHelp!: boolean;
// 他のエンティティへの参照(1対多)。optional も指定できる
@one(() => Customer) customer!: Customer;
@one(() => UserProfile, { optional: true }) technician?: UserProfile;
}
元のファイルにはさらに複数の列と参照があります(上は説明のために短くしたものです)。
2. スキーマに登録する(rayfin/data/schema.ts)
import { Todo } from './Todo.js';
export type TodoAppSchema = {
Todo: Todo;
};
export const schema = [Todo];
エンティティを追加・変更したら npx rayfin up db apply で反映します。列の削除やテーブル名の変更を含む変更は CLI が止めます。--force で上書きできますが、データ損失は元に戻せません。
3. 使うサービスとデータソースを宣言する(rayfin.yml)
# rayfin/rayfin.yml(todo-local-experimental テンプレートの抜粋)
id: todo-local-experimental
name: todo-local-experimental
version: 1.0.0
services:
auth:
enabled: true
fabric:
enabled: true # 本番は Fabric SSO
password:
enabled: true # ローカル開発用のメール/パスワード認証(実験的)
allowedRedirectUris:
- http://localhost:5173
data:
enabled: true
dialect: mssql # PostgreSQL を使う場合は postgresql
staticHosting:
enabled: true
folder: dist # ビルド成果物のフォルダ
buildCommand: npm run build
indexDocument: index.html
storage:
enabled: false
functions:
enabled: false
Fabric のセマンティックモデルに接続する場合は、connectors を追加します。helsinki-public-transport テンプレートの例です(ID は伏せてあります)。
connectors:
transitModel:
connector: fabric-semanticmodel
version: "1"
auth:
type: delegated # サインインしたユーザーの権限で実行
config:
workspaceId: 00000000-0000-0000-0000-000000000000
itemId: 00000000-0000-0000-0000-000000000000
operations:
- name: executeQuery
なお、公式ブログの例(type: fabric-warehouse や config: { ... } を並べる書き方)とは、キー名や構造が少し違います。プレビュー中でスキーマが変わっている可能性があるため、実際に書く際は、使うバージョンの Rayfin ドキュメント(rayfin docs)に合わせてください。
4. フロントエンドから呼び出す(RayfinClient)
アプリ自身のデータは client.data、既存の Fabric データは client.connectors、ファイルは client.storage、サーバー側ロジックは client.functions から、型付きで呼び出します(公式ブログの例を元にしています)。
// アプリ自身のデータ: 作成して読み戻す
const record = await client.data.CustomerFeedback.create(formValues);
const saved = await client.data.CustomerFeedback.findById(record.id);
// 既存の Fabric データ(ウェアハウス)を型付きで検索
const products = await client.connectors.inventory.Product
.select(['name', 'sku'])
.execute();
// セマンティックモデルには DAX で問い合わせ(既存のメジャー定義を再利用)
const revenue = await client.connectors.salesModel.executeQuery({
query: 'EVALUATE TOPN(10, Sales)',
});
// ファイルはストレージへ、参照パスはレコードに保存
const { path } = await client.storage.documents.upload(file);
await client.data.CustomerFeedback.create({
...formValues,
documentName: file.name,
documentPath: path,
});
// サーバー側の関数(rayfin/functions 配下)を型付きで呼ぶ
const result = await client.functions.generateProductIdeas.invoke({
brief: 'Opportunities for the next quarter',
context,
});
テンプレート実物のクライアントコード(todo-local-experimental の src/services/ から抜粋)
// src/services/rayfinClient.ts(抜粋): スキーマの型を渡してクライアントを作る
import { RayfinClient } from '@microsoft/rayfin-client';
import type { TodoAppSchema } from '../../rayfin/data/schema';
const client = new RayfinClient<TodoAppSchema>({
baseUrl: config.baseUrl,
publishableKey: config.publishableKey,
useProxy: false,
authStorage: true,
});
// src/services/todos.ts(抜粋): 一覧・作成・更新・削除
const results = await client.data.Todo
.select(['id', 'title', 'isCompleted', 'createdAt'])
.orderBy({ createdAt: 'desc' })
.execute();
const session = client.auth.getSession();
const todo = await client.data.Todo.create({
title,
isCompleted: false,
createdAt: new Date(),
user_id: session.user.id, // @role のポリシーと対応する列
});
await client.data.Todo.update({ id }, { isCompleted: true });
const updated = await client.data.Todo.findById(id);
await client.data.Todo.delete({ id });
client.data.Todo の Todo はエンティティ名で、RayfinClient<TodoAppSchema> と型を合わせているため、列名の打ち間違いなどはコンパイル時に検出されます。
クライアントの初期化には、配備先ごとの設定を実行時に読む RayfinClient.fromConfig() が使われます(rayfin.config.json から読み込む。Rayfin リリースノートのテンプレート更新説明に基づく)。
5. 配備
npm create @microsoft/rayfin@latest -- "<アプリ名>" --template todoapp --workspace <ワークスペース名>
npm run dev # Fabric に配備してから Vite を起動(todo テンプレートの場合。既定は http://localhost:5173)
npx rayfin up # Fabric に配備(--dry-run で事前確認、up status で状態確認)
npx rayfin up db apply # スキーマ変更の反映
サンプルとして使えるテンプレート集
Microsoft の GitHub に、テンプレートのギャラリー microsoft/awesome-rayfin があります。npm create @microsoft/rayfin -- --template https://github.com/microsoft/awesome-rayfin で選んで展開できます。READMEに載っている主なものは次のとおりです。
| テンプレート | 内容 | 構成 |
|---|---|---|
| Universal App | 最小構成の React + Vite。要望に応じて必要なサービスやモジュールを足していく入口 | React, Vite, Tailwind |
| Blank App | 認証付きの最小構成。JS/CSS フレームワークなし | TypeScript, Vite |
| Todo app(Experimental) | ユーザー名/パスワード認証、データモデル、Docker でのローカル開発を含む CRUD の例 | React, Vite, Tailwind |
| Angular Dashboard App | Project/Task のデータモデルを持つダッシュボード | Angular, Material |
| Finance Analytics | セマンティックモデルに接続する FP&A 向けアプリ(表・チャート・エクスポート) | React, Vite, Tailwind |
| Semantic Directory | セマンティックモデルのメジャーやリレーションを検索・確認するディレクトリ | React, Vite, Tailwind |
仕組み
Fabric Apps は、コードで定義した内容(rayfin up で配備)をもとに、Fabric が裏側のサービス群を作成・運用するマネージドサービスです。ホスティング、ネットワーク、スケーリングは Fabric が担当します(公式概要)。
開発から実行までの流れ
- TypeScript のクラスに
@entity()@text()などのデコレーターを付けてデータモデルを定義する。 - Rayfin SDK/CLI が、テーブル定義・GraphQL API・行レベルの認可ルール・型安全なクライアントを自動生成する。
- Docker でフルスタックをローカル実行して確認する。
npx rayfin upで Fabric に配備する。rayfin.ymlの設定に応じて、子サービスが Fabric アプリの子アイテムとして作られる。
配備後に動く構成要素
| 構成要素 | 役割 | 補足 |
|---|---|---|
| SQL database in Fabric(または PostgreSQL) | アプリ自身のデータ保存先 | スキーマは TypeScript から生成。ポータル上は読み取り専用で、変更はコード側から行う |
| 認証 | Fabric SSO(Microsoft Entra ID) | 配備後は Fabric SSO のみ。ローカル開発ではメール/パスワードも利用可 |
| 静的コンテンツ | ビルド済みフロントエンド(HTML/CSS/JS)の配信 | 保護付き、または匿名アクセスをアセット単位で設定 |
| データ API | /api/graphql で読み書き | バックエンド URL は https://<app>-app.rayfin.windows.net/ |
| ストレージ / 関数 / Secret Store | ファイル保管、サーバー側ロジック、資格情報の暗号化保管 | FabCon Europe 2026 で追加された機能(公式ブログ) |
| アプリメトリクス | サインイン数、読み込み数、クエリ量・エラー・平均所要時間 | 標準で内蔵 |
既存の Fabric データとの接続(コネクタ)
データをコピーせず、rayfin.yml に接続先を宣言して利用します。SQL データベースとウェアハウスは読み書き可、レイクハウスの SQL 分析エンドポイントとセマンティックモデルは読み取り専用です。セマンティックモデルには DAX で問い合わせでき、既存のメジャー定義をそのまま再利用できます。
認証と権限(重要な区別)
アプリは既定で非公開で、Entra 認証はコンテンツ配信の前に行われます。公式ブログは、認証は「誰がアプリを開けるか」を決め、Fabric の権限は「アプリ内でどのデータに届くか」を決める、と整理しています。コネクタで delegated(委任)認証を使うと、サインインしたユーザー本人の権限で実行され、行レベルセキュリティも接続先で適用されます。一方、アプリ ID での接続はユーザーの権限境界を引き継ぎません。
アイテム権限は「Run and interact(実行と操作)」「Edit(編集)」「Reshare(再共有)」の3段階です。ワークスペースロールはアイテム権限を上書きしません。
プログラムはいつ・どこで動くか
Fabric Apps は、利用者がブラウザで開いて操作する Web の GUI アプリが基本形です。常駐プログラムや定期バッチを動かす仕組みではなく、画面からの呼び出し(リクエスト)に応じて、Fabric 上のバックエンドが応答します。確認できた範囲では、タイマーやデータ変更をきっかけに自動で起動する仕組みの記述は、公式ドキュメント、公式ブログ、テンプレートのいずれにも見つかりませんでした。
| 層 | 動く場所 | 動くタイミング |
|---|---|---|
| フロントエンド(HTML/CSS/JS。テンプレートでは React や Angular など) | 利用者のブラウザ。Fabric は完成した静的ファイルを配信する | 利用者がアプリの URL を開いている間 |
| データ API(GraphQL)、データベース、認証 | Fabric のマネージドサービス。自分でサーバーコードは書かない | 画面から client.data などで呼ばれたとき(リクエストに応答) |
| Functions(TypeScript で書くサーバー側ロジック) | Fabric 上のマネージド環境 | 画面などから client.functions.<名前>.invoke() で呼ばれたとき |
| コネクタ(ウェアハウスやセマンティックモデルへの接続) | Fabric 内で接続先に問い合わせ | クエリが実行されたとき。delegated ならサインインしたユーザーの権限で実行 |
配備(rayfin up) | 開発者の端末から Fabric へ | 開発者が実行したとき |
1回の操作の流れ
- 利用者がアプリの URL を開く。Microsoft Entra の認証がコンテンツ配信の前に行われ、権限のない人には画面が配信されない(公式ブログ)。
- ブラウザが HTML と JavaScript を読み込み、画面が動き始める。
- 画面の操作(一覧表示、保存ボタンなど)に応じて、フロントエンドがバックエンド URL(
/api/graphqlなど。公式概要)へリクエストを送る。 - バックエンドがデータベースやコネクタ、必要なら Functions を使って処理し、結果を返して画面が更新される。
Functions の位置づけ
Functions は、ブラウザに置きたくない処理(業務ルール、外部 API 呼び出し、秘密情報を使う処理、Foundry のモデル呼び出しなど)をサーバー側で実行するためのものです。アプリのコードと一緒に rayfin/functions に置いて rayfin up で配備し、アプリの ID で動きます。サインインしたユーザーの情報を引き継ぐこともできます(公式ブログ)。ローカル開発では、テンプレートのコードに、呼び出し先をローカルの関数ホスト(Azure Functions Core Tools の /api/<名前> の形式)に切り替える設定があります。
定期実行・自動実行が必要な場合(テンプレートの実例からの整理)
| 例 | 実際の動き方 |
|---|---|
| angular-dashboard | 画面を開いたとき、前回の同期から24時間以上経っていれば、ブラウザ側のコードが自動同期を始める(「Sync now」ボタンもある) |
| fabric-atlas | 利用者が「Sync」を押すと、ブラウザから Fabric の User Data Function(Python)を呼ぶ。この関数は Rayfin Functions とは別の Fabric 側の機能で、200 秒のタイムアウトがあると README に書かれている |
| helsinki-public-transport | 取り込み処理は Fabric のノートブックで、Fabric 側のスケジュールにより毎時実行される。アプリ自体は結果を表示する |
これらから言えるのは、定期処理や取り込みはアプリの外(Fabric のノートブック、パイプラインなど)に置き、Fabric Apps は「利用者が開いて操作する画面と、その裏の API」を担当するという使い分けが、テンプレートでは取られているということです。これは私の整理で、公式がそう定めているわけではありません。
表示のされ方
アプリは URL で直接開けます。公式ブログでは、アクセスを「非公開」「埋め込み専用」「(承認された匿名シナリオ向けの)公開」から選べると説明されており、埋め込みの対応は2026年後半の計画にも挙がっています。ネイティブのデスクトップアプリやモバイルアプリを作るものではなく、ブラウザで動く Web アプリが対象です。
使いどころとユースケース
公式は、Fabric Apps を「Fabric のデータの上で、レポートの先(判断・記録・アクション)までを担うアプリ」を素早く作る手段と位置づけています。レポートで終わっていた業務の「最後の一歩」を埋める用途が中心です(公式ブログ)。
公式が挙げる適した用途(公式概要)
- 素早いプロトタイプ: 事前構成済みのインフラで、アイデアから公開 URL まで数分。
- 社内ツール・ダッシュボード: バックエンドの定型コードなしで、認証付きの管理画面を作る。
- データの探索・可視化: コネクタ経由で Fabric のデータを読み、独自フロントエンドで表示する。
- AI・エージェント向けアプリ: 永続的な状態を持つ構造化バックエンドを提供する。
具体的なシナリオ例
- 承認フロー、入力フォーム、計画・予算の修正など、画面から Fabric のデータへ書き戻す業務(SQL データベース/ウェアハウス経由)。
- レポートで確認した結果に対する「決定内容・メモ・添付ファイル」の記録(データベース+ストレージ)。
- セマンティックモデルのメジャーを DAX で呼び出して表示する、独自 UI のダッシュボード。
- Foundry のモデルを関数から呼び出す AI 機能付きの業務アプリ。
公式が「向かない可能性あり」とする用途
- 複雑な複数ステップのトランザクションやストアドプロシージャが必要なアプリ。
- Fabric SSO とメール/パスワード以外の独自認証プロバイダーが必要なアプリ。
公式ブログは、最初の一歩として「ダッシュボードから始まりスプレッドシートで終わっている週次の判断業務」を1つ選び、その「終わり」の部分を作ることを勧めています。
類似サービスとのすみ分け
目安は「画面をどこまで自由に作るか」と「書き込み先がどこか」です。今回確認した範囲では、Microsoft の公式ドキュメントに Fabric Apps と他サービスを直接比較したページは見当たりませんでした。下表は、各サービスの公式説明を踏まえた筆者の整理で、一部(Power Apps、Azure 側のサービス)は一般的な特性に基づくため、選定時は各公式ドキュメントでの確認をおすすめします。
| サービス | 得意なこと | Fabric Apps との違い |
|---|---|---|
| Power BI レポート/セマンティックモデル | 信頼できる指標の可視化と共有 | 基本は閲覧中心。Fabric Apps はレポートの先(入力・承認・記録)を担い、セマンティックモデルは DAX 経由で再利用できる |
| 翻訳型タスクフロー(translytical task flows)+ User Data Functions | Power BI レポート内のボタンから、Fabric データを更新・追加・削除する、または外部 API を呼ぶ | ユーザーはレポートの中にとどまる。画面を持つ独立したアプリではなく、レポートに小さな書き込み機能を足したい場合に向く |
| Power Apps(+ Power Automate) | ローコードの画面作成、Dataverse・SharePoint など Fabric 外のデータやコネクタ連携 | Power Platform 側のライセンスと環境が前提。Fabric Apps はコードファーストで、Fabric の容量と権限モデルの中で完結する |
| Fabric Extensibility Toolkit / Workload Development Kit | 独自のワークロードやアイテム種別を Fabric ポータルに統合(パートナー・ISV 向け) | Web アプリは自分のインフラで動かす(iFrame で Fabric に表示)。Fabric Apps は Fabric がホスティングまで担う |
| Azure の汎用ホスティング(Static Web Apps、App Service など) | 任意の認証・ネットワーク・外部ユーザー向け公開を含む柔軟な構成 | 自由度は高いが、DB・認証・API・運用を自前で用意する。Fabric Apps は既定で Entra の SSO 前提で、独自認証プロバイダーは使えない |
選び方の目安
- レポートの中で完結する簡単な書き込み → 翻訳型タスクフロー。
- 複数画面・独自 UI・アプリ専用のデータ保存が必要で、利用者が Fabric/Entra のユーザー → Fabric Apps。
- Fabric 以外のデータ(Dataverse など)や既存の Power Platform 資産が中心 → Power Apps。
- 社外ユーザー向けや独自認証が必須 → Fabric Apps は不向きで、Azure の汎用ホスティングなどを検討。公式の注意書きどおり、Fabric Apps は Fabric SSO を前提とします。
なお、公式ブログのロードマップには、Copilot への統合、管理・セキュリティポータル、埋め込み、デプロイメントパイプラインなどが挙がっており、すみ分けは今後変わる可能性があります。
始め方ガイド
最短ルートは、テナント設定の有効化 → ポータルでアプリ作成 → Rayfin CLI でローカル開発 → rayfin up で配備、の4段階です(クイックスタート)。
事前に確認すること
- Fabric 容量が割り当てられたワークスペースがあること(Fabric Apps は容量ユニットを消費します)。
- そのワークスペースで Contributor 以上(または Admin)の権限があること。
- 自分のリージョンで Fabric Apps が使えること(公式は「すべてのリージョンではまだ利用できない」と明記。リージョン一覧で確認)。
- Node.js/npm、エディター(VS Code など)。Docker は、実験的なフルローカル方式を使う場合のみ必要です(後述の注記) (Docker の説明は 公式概要の記述に基づきます)。
手順
- テナント管理者が有効化: Fabric 管理ポータル → テナント設定 →「Fabric Apps (preview)」を有効化し、組織全体か特定のセキュリティグループかを選んで適用します。反映に数分かかる場合があります。
- アプリアイテムを作成: 対象ワークスペースで「新しいアイテム」→「App」を選び、名前を付けて作成します。
- プロジェクトを取得: ポータルに表示されるコマンドを端末で実行します。例:
npm create @microsoft/rayfin@latest -- "<アプリ名>" --template todoapp --workspace <ワークスペース名> - コードを編集: 直接編集するか、GitHub Copilot(Rayfin プラグイン、Universal App テンプレート)を使います。Fabric のデータを読み表示したい場合は、「Data app」テンプレートが入口になるとの解説があります(出典: 公式ではなく第三者記事 datatraining.io の記述)。
- ローカルで確認:
npm run dev。 - 配備:
npx rayfin up。別ワークスペースへは--workspaceを指定します。スキーマ変更の反映はnpx rayfin up db applyです。
注記(ローカル開発の2つの方式): 公式概要は Docker でのローカル実行を、コミュニティブログは Fabric 上のバックエンドに接続する開発を説明しており、一見食い違っていました。テンプレート実物の package.json と AGENTS.md を確認したところ、どちらも存在する別々の方式でした。
- クラウドバックエンド方式(既定):
npm run dev。テンプレートではrayfin up(静的ホスティングを除く)で Fabric に配備してから Vite を起動し、リモートの API に接続します。Docker は不要です。 - フルローカル方式(実験的):
npm run dev:local。Docker でバックエンドをローカル実行します。機能フラグ(docker-local-dev)が必要で、todo-local-experimentalテンプレートでは実験的機能と明記されています。
また、検索結果に出た最新版とみられるクイックスタートの抜粋では、npm create → npx rayfin up → npm run dev の4コマンドで、バックエンドはローカルで動かさないと書かれていました(私が全文を開けた版は 2026-07-07 更新のもので、この記述は含まれていません)。プレビュー中に手順が変わっているため、実際に始める際は最新のクイックスタートを確認してください。なお、コミュニティブログによる対応リージョン(2026-08-18 時点)には Japan East も含まれています。
最初の一歩としておすすめ
- まず
todoappテンプレートで、作成から配備までの一連を一度通す。 - 次に、公式ブログの提案どおり、「ダッシュボードで見て、判断し、スプレッドシートに記録している」小さな業務を1つ選び、その記録部分をアプリ化する。
- セマンティックモデルや SQL データベースへのコネクタを
rayfin.ymlに追加し、delegated認証でユーザー本人の権限が効くことを確認する。
学習リソース
- データモデルとデコレーター
- Fabric データへの接続(コネクタ)
- デプロイ
- 認証の設定
- CLI リファレンス
- Rayfin の GitHub リポジトリ(不具合報告・要望の窓口)
- 作例ギャラリー: Fabric Apps Gallery
留意点と制限事項
- プレビュー段階: 仕様・機能は変更される可能性があります。本番利用は、プレビューの扱い(公式のプレビュー説明)を確認のうえ判断してください。
- 認証は Fabric SSO 前提: 配備後は Entra ID(Fabric SSO)のみ。社外ユーザー向けや独自認証が必要な用途には向きません。
- スキーマ変更はコードから: ポータルの SQL データベースは読み取り専用で、直接変更するとスキーマの競合でアプリが壊れる恐れがあります。
- データソースごとの違い: SQL データベースとウェアハウスは読み書き可、レイクハウスの SQL 分析エンドポイントとセマンティックモデルは読み取り専用。
- 接続の認証方式は意図して選ぶ:
delegatedはユーザーの権限、アプリ ID はユーザーの権限境界を引き継ぎません。 - 責任範囲: シークレットをコードやフロントエンドに置かない、Fabric SSO はサインインを制御するだけで画面に何を出すかは自分のコード次第、データの法令・コンプライアンス責任は利用者側、という整理が公式に示されています。
- AI 生成コード: 公式ブログは「生成コードは出発点であり、レビュー・権限確認・テストが必要」としています。
- リージョンと容量: 対応リージョンは限定的で、利用分は Fabric 容量を消費します。
- 今後の予定(公式ブログ): 管理・セキュリティポータル、Copilot 統合、Kusto コネクタ、カスタムクレーム、埋め込み、デプロイメントパイプラインなどが2026年後半の計画に挙がっています。
参考資料(開いて確認したページ)
| 資料 | 種別 | 最終更新/公開 |
|---|---|---|
| What is Fabric Apps (Preview)? | 公式ドキュメント | 2026-09-29 |
| Create your first Fabric app | 公式ドキュメント | 2026-07-07 |
| From prompt to production: What’s new in Fabric Apps | Microsoft 社員による公式 Fabric Updates ブログ(FabCon Europe 2026) | 2026-09-25 頃 |
検索結果の抜粋のみ確認し、ページ全体は開いていない資料: 翻訳型タスクフロー概要、Fabric Extensibility Toolkit 概要(いずれも公式)、第三者の Beyond the Analytics、datatraining.io(Build 2026 でのプレビュー公開時期などの補足に使用)。
情報は 2026-10-01 時点です。プレビュー機能のため、最新の仕様は公式ドキュメントで確認してください。
追加で開いて確認したページ(コードサンプル節で使用): An introduction to Fabric Apps(Microsoft Fabric Community のブログ、2026-08-17 更新。Microsoft 社員ではなくコミュニティの Super User による投稿)、microsoft/awesome-rayfin の README(Microsoft の GitHub)。同リポジトリは git clone で取得し、todo-local-experimental、field-technician、helsinki-public-transport の各テンプレートのソースを直接確認しました。Rayfin リポジトリのリリースノートは検索結果の抜粋のみ確認しました。