View in English

  • Apple Developer
    • 今すぐ始める

    「今すぐ始める」を詳しく見る

    • 概要
    • 学ぶ
    • Apple Developer Program

    最新情報

    • 最新ニュース
    • Hello Developer
    • プラットフォーム

    プラットフォームを詳しく見る

    • Appleプラットフォーム
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    特集

    • デザイン
    • 配信
    • ゲーム
    • アクセサリ
    • Web
    • Home
    • CarPlay
    • テクノロジー

    テクノロジーを詳しく見る

    • 概要
    • Xcode
    • Swift
    • SwiftUI

    特集

    • アクセシビリティ
    • App Intent
    • Apple Intelligence
    • ゲーム
    • 機械学習とAI
    • セキュリティ
    • Xcode Cloud
    • コミュニティ

    コミュニティを詳しく見る

    • 概要
    • 「Appleに相談」イベント
    • コミュニティによるイベント
    • デベロッパフォーラム
    • オープンソース

    特集

    • WWDC
    • Swift Student Challenge
    • デベロッパストーリー
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Center
    • ドキュメント

    ドキュメントを詳しく見る

    • ドキュメントライブラリ
    • テクノロジー概要
    • サンプルコード
    • ヒューマンインターフェイスガイドライン
    • ビデオ

    リリースノート

    • 注目のアップデート
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • ダウンロード

    ダウンロードを詳しく見る

    • すべてのダウンロード
    • オペレーティングシステム
    • アプリ
    • デザインリソース

    特集

    • Xcode
    • TestFlight
    • フォント
    • SF Symbols
    • Icon Composer
    • サポート

    サポートを詳しく見る

    • 概要
    • ヘルプガイド
    • デベロッパフォーラム
    • フィードバックアシスタント
    • お問い合わせ

    特集

    • アカウントヘルプ
    • App Reviewガイドライン
    • App Store Connectヘルプ
    • 近日導入予定の要件
    • 契約およびガイドライン
    • システムステータス
  • クイックリンク

    • イベント
    • ニュース
    • Forum
    • サンプルコード
    • ビデオ
 

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • すべてのビデオ
  • 利用方法

その他のビデオ

  • 概要
  • トランスクリプト
  • ClassKitの導入

    最新のClassKitフレームワークを使ってApp上の教育用コンテンツを整理し、教師が特定のアクティビティを探して割り当てたり、新しいスクールワークAppで生徒の進捗状況を確認したりできるようにしましょう。コンテンツ構造にClassKitを導入する方法、割り当て可能なコンテンツを宣言する方法、教師がスクールワークで割り当てるアクティビティの生徒の進捗状況を共有する方法について紹介します。

    リソース

    • Incorporating ClassKit into an Educational App
    • ClassKit
      • HDビデオ
      • SDビデオ
    • プレゼンテーションスライド(PDF)

    関連ビデオ

    WWDC21

    • ファイルベースApp向けのClassKitについて
  • このビデオを検索

    (音楽)

    (拍手) ようこそ パヴェルです ClassKitについて マリンと話します

    3部構成にしました ClassKitの概要説明では データの流れを話します 続いて クラスについて取り上げ 面白い特徴を紹介します 最後はアプリケーションへの 適用についてです では 始めましょう

    ClassKitは教育向けの フレームワークで 学校等で活用されます

    例えば 教師が アプリケーションを使い 生徒に課題を出すことができます

    更に そうした課題の進捗を 管理することもできます

    個人情報は守られます 具体的に説明します 教師は課題の進捗を 確認できますが 自ら出した課題の進捗以外は 見られない仕組みです

    ClassKitを導入すれば 生徒の学習と教師の指導の 効率が一層増します アプリケーションで 課題を把握できるからです 教師にとっては生徒の 学習状況を見通せる上に 個別指導も可能になります 学習状況が正確に分かると 必要な課題を 工夫して出せるでしょう デベロッパの皆さんにも 利点があります 教師にとっては 自分の仕事に影響します 皆さんのアプリケーションが 気に入れば 学校中で勧めてもらえます 類似の技術に Apple School Managerがあります IT管理者はこのシステムを使って 管理対象 Apple IDを 学校関係者に発行できます 要は 教師と生徒の全員に このIDが付与されます この他にも IT管理者は 教科ごとにクラスを作れます

    そして 特定のIDを持つ教師と生徒を 各クラスに割り当てられます

    コンテンツとデバイスも 管理できます デベロッパの利点と 先ほど言ったように―

    ClassKitと連動して 生徒の進捗が記録されます

    また 学校はアプリケーションを 一括購入できます ClassKitに対応している場合 “スクールワークと連動”に チェックマークが付きます

    スクールワークは まもなくリリースされます このアプリケーションで 生徒はHandoutを確認し 教師は課題を作成できます システム内では課題を Handoutと呼びます 例えば コンテンツの1つが Handout内のタスクになります

    教師は特定のHandoutを 確認すれば アプリケーション上で 生徒の進捗を把握できます

    Handoutの 流れを見てみましょう 作成する前に準備が必要です 課題としてアサインする内容を 決めておいてください

    本フレームワークではCLS準拠の コンテキストを使用しており コンテンツをツリー構造で表せます アプリケーションに合わせ 再定義した―

    App コンテキストが 用意されています コンテキストツリーの ルートとなっています すべてのコンテンツが ここから派生します

    コンテンツは できるだけ早く定義してください コンテンツの定義が 速やかであるほど 教師がすぐに利用できます

    コンテキストツリーができたら 教師はスクールワーク上で ボタンをタップするだけです Handoutを新規作成できます 特定のコンテンツを指定して あとはHandoutを 生徒に送るだけです 生徒がHandoutをタップすると アプリケーションが起動します この時点で 必要なコンテキストが生成されます 生徒たちが同じコンテンツを 使うようにガイドしてください

    手法はマリンが説明します そして 実際に生徒が 課題に取りかかると 進捗の記録が始まります データはすべて 1つのレポートに集約され 教師のデバイスに送られます 教師は作成した Handoutにアクセスし レポートを確認します

    このフローの実現に必要なのは 教師と生徒の 管理対象 Apple IDです それと 動作テストできるように 最低でも 1台のデバイスが必要です より一層 実行しやすくするため デベロッパモードを用意しました このモードではデベロッパが 教師として操作できます つまり Handoutを作成したり 生徒の進捗を 確認したりできます また 生徒として課題に取り組み 進捗を教師と共有できます

    開発データの リセット機能もあり―

    個人的には何度も利用しました 続いて クラスを説明します DataStoreから始めます

    コンテキストツリーを 管理するものです

    ここでコンテキストが プロパティとして表示され システム内のオブジェクトの 変更履歴が記録されます オブジェクトを保存するには― CLSDataStoreをコールしてください

    CLSDataStoreの 共有インスタンスもあります

    コンテキストの話に移りましょう

    先ほどの例では 3つの階層がありました コンテキストの使い方や特徴は 後ほどマリンが詳しく説明します 私はコンテキストIDの話をします

    ClassKitの アイデンティティは2つです まずidentifierプロパティ

    このプロパティは― 兄弟ノード内で コンテキストを識別します

    つまり同じ識別子を 複数のコンテキストに 設定しても構いません 親ノードが別なら 問題ありません

    これをContext Identifier Pathと 呼んでいます

    ツリー内で 特定のコンテキストを 識別する時に必要となります これはコンテキスト識別子の 配列です パスに沿い 最後の ノードに到達するまで コンテキストを走査します

    実際に見てみましょう

    コンテキストカードが 本 第2章 第1節の順に指しています コンテキストツリーもあります 第1節を探すには Appに行き― 次に本に進みます 本の子である第2章を見つけ 同様に第1節を見つけます 第1節はパスの最後なので ここが参照先となります

    コンテキストの検索法は 複数あります 絶対パスを使って検索する場合 matchingIdentifierPathを呼びます

    完了ブロックはパス内の 全コンテキストを返します この場合の配列は-- App 本 第2章 第1節 となります もし第1節の中に 第2章がなければ 完了ブロック内のその後の配列は Appと本になります ここで欠けているコンテキストを 他のもので補えます

    相対パスでの検索も可能です 特定のコンテキストの 子孫を探す時に便利です descendantMatchingIdentifierPath です 該当コンテキストがなければ nilになります

    一般的な コンテキスト検索法として Context Matching プレディケートが使えます この例ではコンテキストの 子の探し方を示しています CLSDataStoreDelegateもあります これはパスを利用した手法と 組み合わせて使います

    デリゲートの定義の例がこちらです

    利用できない コンテキストがあり 必要に応じて追加で 作成したい時に役立ちます まず最初に パス内にクエリを出します コンテキストが見つからなければ createContextforIdentifierを コールします 存在しないコンテキストを 生成することができます 作成されたコンテキストは 適切な場所に追加されます

    動的なコンテンツを利用する アプリケーションに便利です 流れを見てみましょう 先ほどと同じパスですが 不完全な構造です デリゲートもあります

    先ほどと同じように Appから本に向かいます 続いて 第2章に進むはずですが 存在しないので デリゲートを使い生成します ツリー内の正しい位置に コンテキストが追加されます 第1節にも 同じ処理を行いましょう 第1節はパスの最後なので ここがパスの参照先です

    次はActivity Objectです

    教師への進捗報告に 使われるオブジェクトで 実は これが レポートになります

    常にコンテキストに ひも付けられています 単体では存在しません 新規で作成するには― CLSContext.createNewActivityを コールします レシーバと共に返されます

    コンテキストに関連した アクティビティを調べるには CLS Context上の プロパティをクエリします

    アクティビティの新規作成は― アクティビティの実行と同義です つまり 教師に 新しい進捗レポートが送られます

    進捗機能を設定するには 直接プロパティを追加します この時 開始から終了の 範囲を入力します

    直接プロパティを設定するのは― 開始の数値を0にするのと同じです

    範囲の一部または全部を 重複させて 繰り返し用いても問題ありません 最終的には 正しい範囲の進捗が 教師のもとへ報告されます

    もう1つ Activity Itemの 話もしましょう Activity Itemとは―

    報告の一部として 教師に提供される数値です

    各アクティビティは1つ primaryActivityItemを持ち― この情報が先生に表示されます 進捗とは別の情報です 例えばテストの点数などに 活用できます

    この他にも複数の情報を additionalActivityItems として追加できます 例えばヒントの数や 個々の質問への答えなどです

    現状 Activity Itemには サブクラスを3つ定義しています まずCLSQuantityItemは ヒントの数などを 求める際に役立ちます CLSScoreItemは 全体に対する数値を出すので テストの点数などを 求めるのに便利です CLSBinaryItemは― 2択式の問題に 回答するのに使えます

    ではActivity Itemを作り primaryActivityItemを 追加しましょう “Total Score”というタイトルで Score Itemを作成します primaryActivityItemとして 関連付けるため プロパティを設定します

    additionalActivityItemsの 追加も同様です ここでは CLSQuantityItemを作成しています タイトルは“Hints”です 作成したアイテムを渡した後― addAdditionalActivityItem をコールします これでアクティビティに ひも付きます Activity Itemを扱う際の 注意点があります まず primaryActivityItemの サブクラス統一です 教師が2人の生徒に 同じ課題を出す場合を考えます primaryActivityItemを 生徒AではScoreItemに設定し 生徒BではBinaryItemに 設定したとします これだと教師への報告時に データを統合できません ScoreItemとBinaryItemは 互換性がありません primaryActivityItemに関し サブクラスは統一してください また タイトルは 明確かつ簡潔にしましょう 設定したタイトルは 教師の目に触れる情報です

    additionalActivityItemsも ぜひ ご活用ください 教師が生徒を理解する上で必要な 多くの情報を提供できます これからマリンが 実際の動作を説明します (拍手)

    こんにちは ClassKitチームのマリンです 既存アプリケーションへの 適用について話します サンプルアプリケーションを 用意しました 計算テストのアプリケーション Quizzlerです まず 計算問題の種類を 選択する画面が表示されます 足し算にしましょう こちらが次の質問です 高成績者の得点表を見るか 計算を始めるか どちらかを選択します 計算を始めましょう 表示される計算問題を解いて 最後まで終えると 成績が分かります このようなアプリケーションに ClassKitを適用する 方法を解説します まず どのような コンテキストデータが このアプリケーションに 適しているか考えます 続いて― 生徒の学習データについても 掘り下げましょう ディープリンクの方法は 2通りあります まずはユニバーサルリンク 対応済みの アプリケーションであれば ユニバーサルリンクプロパティを 設定するだけです

    このサンプルは非対応の アプリケーションなので ハンドラを使う 第2の方法を用います

    デベロッパモードと スクールワークで 実装テストを行います ではコンテキストの 構造を見ていきます まずUIと対応する― コンテキストツリーを 作ることにしましょう そうすると このような構造になります Appのコンテキストが最上位で その下位が足し算と掛け算の コンテキストです 更に得点表と テストのコンテキストが それぞれ続きます 前述のとおりコンテキストは アプリケーションの一部で 生徒にアサインされます それを念頭に置き 得点表について考えます 得点表のコンテキストが 何かというと 高得点の記録です 教師はこれを生徒へ アサインしませんよね

    ですので消去します すると構造はこうなります 次は足し算のコンテキストですが その実体は何でしょうか? 単に足し算のテストですよね これらは重複するので 1つにまとめるべきです 掛け算のコンテキストにも 同じことが言えます ツリーはこうなりました パヴェルと先の展開を話し合い 引き算と割り算のテストの 追加を検討しました その場合 兄弟ノードを 簡単に作れます 皆さんのアプリケーションに 合った構造を考える時は 現状に加え 将来的な内容も 考慮してください 構造の拡張性を確保しましょう

    コンテキストに関して説明します まずタイトルを明確にします タイトルとは 教師と生徒にとって どんなコンテキストか 知るための情報だからです コンテキストは なるべく早い段階で決めましょう この例では 静的コンテンツがあるので 起動と同時に 内容を決められます

    次は 教師のために 決まった順で コンテキストを表示します そこで サンプルでは足し算を 掛け算の上に 表示させようと思います そのために役立つのが displayOrderプロパティです コンテキストが決まったので 次は生徒側を見ましょう

    これはスクールワークの画面で 学習データが このように表示されます 生徒がテストにかけた時間を 記録するのが良さそうです そのため― メソッドのstartとstopを コールしましょう 更に テストの点数を 表示できるといいですよね ただ よく考えると 生徒の得点は テストで恐らく 最も重要な情報です スクールワークの画面上で 目立たせましょう そのためには CLSScoreItemを作成して primaryActivityItemに 設定します すると 画面に反映されます

    加えて それぞれの回答の 正誤も表示したいところです ですから 今度は CLSBinaryItemを作成して additionalActivityItems として追加します 書くコードの内容は 決まったので 実際の動作を見てみましょう

    私のディスプレイの Xcodeを映します まず プロジェクトの ターゲットを選びます Capabilitiesペインを選択し ClassKitのAPIを見つけます ClassKitをオンにすれば コードを書く準備は万全です アプリケーションを起動すればすぐ コンテキストを 書き始められます デリゲートを起動します コンテキストをパブリッシュする 関数を作成します

    ここに関数が作成されました CLSContextの インスタンスを生成します コンテキストの型を渡して 固有の識別子と 簡潔なタイトルを入力します displayOrderも忘れず追加し 足し算を掛け算の上に 表示させます 掛け算も同様に インスタンスを生成し displayOrderを設定します その後はコンテキストの 辞書を作成しておきます

    これを追加する 親コンテキストを選択します 水平構造なので 親は常に App コンテキストになります これらのコンテキストが存在するか クエリを発行します プレディケートを作り 親コンテキスト以下を すべて検索します CLSDataStoreの 共有インスタンスに対して プレディケートに一致する 全コンテキストを検索します コンテキストの配列が返されます 存在する全コンテキストに これを繰り返します その各コンテキストを コンテキスト辞書から 消去しましょう

    次は 存在しない コンテキストへのイテレートです 各コンテキストを 親コンテキストの下に 子として追加しましょう 変更を保存します これで起動時に関数を使えます

    コンテキストが実在するか テストしましょう 私のデバイス画面を映します Quizzlerが起動しました ただ 見た目は以前と同じです 作成したコンテキストの 確認に用いるのが デベロッパモードと スクールワークです ホームボタンを押し 設定を開きます デベロッパ設定を探します 選択するとClassKitの APIが出てきます ここを切り替えることで 教師として操作できます 選択を確認したら ホームボタンから スクールワークを開きます

    起動時のウェルカム画面は 閉じて先に進みます 画面の右上に見える プラスボタンは 教師でログインした印です タップすると Handout作成画面が開き 課題を追加できます ここにQuizzlerが表示されます ちゃんとコンテキストが ありました これで存在を確認できましたね ちなみに足し算の下に 掛け算が表示されています displayOrderも 正しく機能しています では今から 足し算の問題を Handoutに追加して 自分のクラスに配布します TOフィールドでクラスを選び― Handoutに名前を付けます

    “Post”をタップすると Handoutをクラスに送れます 同時にコンテキストが認証され 進捗データの 記録が始まります Handoutをタップすると コンテキストが表示されます 隣にアプリケーションの アイコンもあります ここから足し算テストに 飛べるはずなので タップします アプリケーションは開きますが 画面が違います ディープリンクを忘れたので Xcodeで追加します デリゲートに戻って ハンドラを追加しましょう

    このハンドラが処理する― ユーザアクティビティを選択します contextIdentifierPathを続けます ここまでできたら― コンテキストにひも付く 計算問題をインスタンス化します そして先ほどの関数を コールします もしコンテキストがなければ 作成しましょう エラーがあれば返されるので 対処します

    更に メインのスレッドで storyboardとviewControllerを インスタンス化します viewControllerで計算問題の 見え方を設定します では ディープリンクが 機能するかテストしましょう 再度 私のデバイスで スクールワークを開きます

    アイコンをタップします 今回は足し算テストに 飛びました 次は生徒の学習データに 移りましょう Xcodeに戻って テスト開始時にコールされる コードに進みましょう

    先ほど話していた機能を― テストに設定しましょう

    タイマーです まず CLSDataStoreに クエリを発行します 対象はAppコンテキストの全子孫で Identifier Pathが一致し テストにひも付くものです 任意のコンテキストが 返されます becomeActiveを確認し 新規アクティビティを インスタンス化します このコードが実行されるのは 生徒が新たに テストを始める時だからです アクティビティとプロパティを キャッシュします

    タイマー用に startをコールします 各問題への回答も 報告したいと思います 回答時にコールされる コードを見ていきます

    ここで活用するのは すでに実行している アクティビティです そして CLSBinaryItemを インスタンス化します 固有の識別子と 明確なタイトルをつけます 型も忘れずに渡してください 生徒の回答について 正解かどうかを valueで設定します このBinaryItemを additionalActivityItemsとして 実行中の アクティビティに追加します あとは タイマーの停止と 総得点の設定ですね テスト終了時にコールされる コードを見ていきます 現在実行中のアクティビティを 取得します では CLSScoreItemを 作りましょう 識別子とタイトルは 固有にします それから満点中 生徒が何点を取ったか データを渡します primaryActivityItemとして ScoreItemを追加します ここのポイントは CLSActivityItemの サブクラス統一です 常にScoreItemです stopでタイマーを停止させ 変更をすべて保存します 生徒の学習データに関し 正しく設定できたか テストしましょう 今回は 生徒として 操作できるよう切り替えます そのため デベロッパ設定に戻ります 各種ある設定の中から 生徒に切り替えます スクールワークを開きます 画面の右上に プラスボタンがないのは 生徒だからです 教師からHandoutが 届いています タップすると 課題内容が表示されて アイコンから テスト画面に飛べます 進捗記録が 教師に送られることが アラートされます これを閉じ― すべての問題を 解いていきます

    最後に成績が出ます 100%得点しました スクールワークに戻ると データを確認できます 所要時間と得点です 得点がはっきり目立ちますね Activity Itemが 機能しています 更にタップすると 設定した全データが出ます ここに総得点とタイトルも 表示されています 下にあるのは 1問ずつにかけた時間です 各問題について 設定したタイトルも見えます これで 設定内容の確認は 完了しました では パヴェルに登壇してもらい 内容を振り返りましょう (拍手)

    ありがとう ClassKitでの 重要点をまとめます まず 教師が使えるように コンテキストを早く決めます すべてをコンテキストに する必要はありません

    必要な時には デリゲートが使えます additionalActivityItemsも 便利です 生徒の進捗を把握する上で 役に立つ詳細情報を 教師に提供できます

    教育関係全般に 言えることですが― StoreKitへの依存をなくしましょう 学校でApp 内課金は 不適切です また パージ可能領域は― 一般に便利ですが学校では特に iPadが共有されることが多く 容量が貴重だからです 最後は Managed app configurationです これで設定を行えば 学校のIT管理者の 負担が減ります 今日話した内容のリンクや 詳細情報は developer.apple.com/education までどうぞ 引き続きWWDCを お楽しみください 以上です (拍手)

Developer Footer

  • ビデオ
  • WWDC18
  • ClassKitの導入
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • Apple Intelligence
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習とAI
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • Mini Apps Partner Program
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    最新ニュースを読む。
    Apple Developerアプリを入手する。
    Copyright © 2026 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン