Skills for Fabric 技術テスト実績レポート

Skills for Fabric 調査まとめ (2026-10版)で紹介したスキルを、Fabric の無料トライアル環境と Copilot CLI で実際に試した記録です。アイテム一覧の取得、サンプル CSV の取り込み、Delta テーブル化、月別集計までの操作と、途中でつまずいた点をまとめています。

  • 実施日: 2026-10-08
  • 目的: 個人の Azure アカウントから Fabric の無料トライアルを用意し、microsoft/skills-for-fabric を Copilot CLI で試す
  • 情報源: 環境構築までの AI アシスタントとのやり取りの記録と、Copilot CLI でスキルを実行した際の操作ログ

1. 結果サマリ

項目 結果
Entra テナント作成 成功(<ドメイン>.onmicrosoft.com、Entra ID Free)
Fabric トライアル容量 有効(SKU FTL4、Southeast Asia、Active)
ワークスペース SkillTest を作成済みで、トライアル容量を割り当て済み
Fabric REST API への接続 成功(az login + az rest)
Lakehouse 作成 成功(lh_skilltest)
Skills for Fabric の導入 成功(fabric-skills@fabric-collection、24 スキル)
アイテム一覧、CSV 取り込み、Delta テーブル化、月別集計 すべて成功

2. 環境情報

項目 値
テナント ID <テナントID>
プライマリドメイン <ドメイン>.onmicrosoft.com
ワークスペース SkillTest <ワークスペースID>
トライアル容量 ID <容量ID>(作成は 2026-10-08 07:03 UTC。期限は約 60 日後の見込みで、ポータルで確認が必要)
Lakehouse lh_skilltest <LakehouseID>
SQL エンドポイント <SQLエンドポイントID>
ノートブック ingest_sample_sales <ノートブックID>
取り込みジョブ <ジョブID>

My workspace(Personal)と、Premium Per User - Reserved(PP3)の容量も API で見えていたが、テストでは使っていない。

3. 実施の時系列

3.1 アカウントと環境の準備(チャット)

  1. 課題: 個人アカウントだと Entra テナントがなく、Fabric トライアルを作れない。
  2. 方針: Microsoft 365 Developer Program のテナントか、自分の Entra テナントを使う案を提示した。この環境では、自分の Entra テナントを使う形で進んだ。
  3. テナントの作成: テナント ID <テナントID> と <ドメイン>.onmicrosoft.com を確認した。
  4. az login の失敗: ユーザー名とパスワードをコマンドラインに渡す方式で実行すると、次のエラーになった。
    • AADSTS50076(MFA が必須)
    • この方式は MFA 環境では使えない。
  5. 対処: az login --tenant <ID> --allow-no-subscriptions --use-device-code を案内し、ログインに成功した。
    • テナントに MSDN サブスクリプション(Visual Studio Ultimate)が見えていた。
  6. Fabric API の疎通確認
    • az account get-access-token --resource https://api.fabric.microsoft.com でトークンを取得できた(期限 17:40)。
    • GET /v1/workspaces で My workspace と SkillTest が返った。
    • SkillTest には容量が割り当て済みだった。
  7. 容量の確認: GET /v1/capacities で、Trial-<日時>-...(FTL4、Active)を確認した。
  8. Lakehouse 作成(手動、az rest)
    az rest --method post --resource https://api.fabric.microsoft.com \
      --url https://api.fabric.microsoft.com/v1/workspaces/<ワークスペースID>/lakehouses \
      --body '{"displayName":"lh_skilltest"}'
    
    結果は lh_skilltest(<LakehouseID>)の作成成功だった。

3.2 Skills for Fabric の導入

  • リポジトリ: microsoft/skills-for-fabric(GitHub 検索で特定)。

  • 導入コマンド(Copilot CLI):

    /plugin marketplace add microsoft/skills-for-fabric
    /plugin install fabric-skills@fabric-collection
    
  • 結果: 24 スキルのインストールに成功した。

  • MCP サーバーの状態:

    サーバー 状態
    powerbi-modeling-mcp 起動に時間がかかった
    fabric-sqlendpoint 起動に時間がかかった
    FabricIQ 起動に時間がかかった
    github-mcp-server 接続失敗(Fabric とは無関係)

    この 3 つは、起動の待機がタイムアウトした後も継続して起動を試みていた。

3.3 Copilot CLI でのテスト

シナリオ 1: アイテム一覧(07:20)

  • プロンプト: 「SkillTest ワークスペース (<ワークスペースID>) のアイテム一覧を出して」

  • 動作:

    • fabric-skills:FabricAdmin エージェントがサブエージェントとして起動した。
    • spark-cli スキルを読み込み、GET /v1/workspaces/{id} でワークスペースを確認した。
    • 続けて GET /v1/workspaces/{id}/items で一覧を取得した。読み取りのみ。
  • 結果:

    名前 種類 ID
    lh_skilltest SQLEndpoint <SQLエンドポイントID>
    lh_skilltest Lakehouse <LakehouseID>
  • 補足: 全 API 呼び出しに、テレメトリ用ヘッダー x-ms-fabric-skill: spark-cli が付いていた(スキルの必須仕様)。

シナリオ 2: CSV 作成と Delta テーブル化(07:21〜07:26)

  • プロンプト: 「lh_skilltest に、売上のサンプルCSVを作って取り込み、Delta テーブル sales にして」

  • 経緯:

    順 試行 結果
    1 OneLake(DFS API)へ curl で Files/samples ディレクトリを作成(Lakehouse を ID 指定) HTTP 400
    2 同じ操作を Lakehouse を名前(lh_skilltest.Lakehouse)で指定して再試行 HTTP 400
    3 方式を変更: ノートブックを作ってその中で CSV 生成と取り込みを行う 成功
    4 ノートブックの作成スクリプトで jq を使おうとした jq が未導入で失敗。python3 に切り替えて成功(HTTP 202)
    5 ノートブック実行の最初の API 呼び出し HTTP 411(Length Required)。ジョブは作られなかったことを確認した
    6 本文なしの POST に Content-Length: 0 を付けて再実行 成功
  • 作成したノートブック ingest_sample_sales の処理内容:

    1. 5 件の売上 CSV を Files/samples/sales.csv に保存する。
    2. spark.read で読み込み、sale_date を日付型へ変換する。
    3. Delta テーブル sales に overwrite で書き込む。
  • サンプルデータ:

    sale_id sale_date product region quantity unit_price
    1001 2026-10-01 Laptop Tokyo 2 120000.00
    1002 2026-10-02 Monitor Osaka 3 35000.00
    1003 2026-10-03 Keyboard Tokyo 5 8500.00
    1004 2026-10-04 Mouse Nagoya 10 3200.00
    1005 2026-10-05 Docking Station Osaka 2 18000.00
  • 実行結果: ジョブ <ジョブID> は NotStarted → InProgress → Completed。実行時間は約 49 秒(07:24:07〜07:24:56 UTC)。

  • 検証: sqldw-cli スキルに切り替えて SQL エンドポイントで確認しようとした。ただし sqlcmd が未導入で、MCP の fabric-sqlendpoint も接続待ちだったため、SQL での件数確認は実施されなかった。取り込み完了はジョブの Completed で確認した。

シナリオ 3: 月別集計(07:27 と 08:10)

  • プロンプト: 「sales テーブルを月別に集計して」(2 回実施)

  • 動作: spark-cli の consumption モードで、Livy API 経由の PySpark セッションを使った。sqldw-cli は使っていない。

    1. lh_skilltest の ID を名前から解決する。
    2. idle の Livy セッションがあれば再利用し、なければ新規作成する(Starter Pool)。作成した場合は終了時に削除する。
    3. statements に PySpark のコードを投入し、結果をポーリングする。
  • 実行された集計コード:

    from pyspark.sql import functions as F
    result = (
        spark.table("sales")
        .groupBy(F.date_format("sale_date", "yyyy-MM").alias("sales_month"))
        .agg(
            F.count("sale_id").alias("transaction_count"),
            F.sum("quantity").alias("total_quantity"),
            F.round(F.sum(F.col("quantity") * F.col("unit_price")), 2).alias("total_sales"),
        )
        .orderBy("sales_month")
    )
    
  • 結果(2 回とも同じ):

    月 売上件数 販売数量 売上金額
    2026-10 5 22 455,500.00

    手計算の確認: 240,000 + 105,000 + 42,500 + 32,000 + 36,000 = 455,500。一致した。

4. 「実行されたクエリの確認方法」についての訂正

チャットでは、SQL 分析エンドポイントの queryinsights.exec_requests_history で確認する方法を最初に案内した。ただしセッションログを確認すると、集計は SQL エンドポイントではなく Spark(Livy)で実行されていた。そのため、次のとおり訂正する。

  • queryinsights には、今回の集計は記録されない。
  • 実行内容を確認できる場所:
    • Copilot CLI のセッションログ。PySpark のコードがそのまま残っている。
    • Fabric ポータルの「モニター」ハブ。ノートブックの実行ジョブ(<ジョブID>)の履歴はここで確認できる。Livy の statement はノートブック実行と別枠の履歴になる可能性があり、表示されるかは未確認。
  • SQL でも集計したい場合は、fabric-sqlendpoint MCP の接続を確認してから、sqldw-cli で再実行する。

5. 学び・注意点

うまくいった点

  • Entra ID Free のテナントでも、Fabric トライアル容量を使えた。
  • 自然言語の指示で、アイテム確認、取り込み、集計まで進められた。
  • 失敗時にスキルが原因に応じて方式を切り替えた。
    • OneLake の直接アップロードで 400 が出た場合は、ノートブック方式に切り替えた。
    • jq が未導入の場合は、python3 に切り替えた。

つまずき・環境依存

事象 原因・対処
az login で AADSTS50076 MFA が必須。パスワード渡しは不可。デバイスコード認証に切り替えた
OneLake DFS への PUT が HTTP 400 原因は未特定。ノートブック方式で回避した
HTTP 411 本文なし POST に Content-Length: 0 が必要
rg、jq、sqlcmd が未導入 代替コマンド(grep、python3)で対応。SQL での検証は未実施
MCP サーバーの起動が遅い 今回のテストには影響しなかった

セキュリティ上の注意

  • パスワードの平文入力: チャットとシェルの履歴に、ユーザーのパスワードが平文で残った。パスワードを変更し、~/.bash_history から該当行を削除する(本レポートにはパスワードを記載していない)。
  • 本レポートの ID 類(テナント ID など)は機密情報ではないが、共有範囲には配慮する。
  • スキルが実行するコマンドは、実行前に内容を確認する運用が望ましい。

後片付け・次のステップ

  • トライアルは 60 日間の見込み。期限後は容量が停止する。
  • sales、ingest_sample_sales、lh_skilltest は残したままになっている。不要になったら SkillTest ワークスペースごと削除する。
  • 未試行のもの:
    • sqldw-cli(SQL エンドポイント経由の検証と集計)
    • Power BI 系(powerbi-authoring)
    • FabricIQ
    • 他のスキル(24 個のうち、今回使ったのは spark-cli と sqldw-cli の読み込みのみ)

6. 付録: 再現手順(要約)

# 1. ログイン(MFA 対応)
az login --tenant <テナントID> --allow-no-subscriptions --use-device-code

# 2. 疎通確認
az rest --method get --resource https://api.fabric.microsoft.com --url https://api.fabric.microsoft.com/v1/workspaces
az rest --method get --resource https://api.fabric.microsoft.com --url https://api.fabric.microsoft.com/v1/capacities

# 3. Lakehouse 作成(上記 3.1 を参照)

# 4. Copilot CLI でスキル導入
#    /plugin marketplace add microsoft/skills-for-fabric
#    /plugin install fabric-skills@fabric-collection

# 5. プロンプトでテスト
#    - SkillTest ワークスペース (<ワークスペースID>) のアイテム一覧を出して
#    - lh_skilltest に、売上のサンプルCSVを作って取り込み、Delta テーブル sales にして
#    - sales テーブルを月別に集計して

Skills for Fabric 調査まとめへ戻る · ドキュメント一覧