ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Assessmentの新機能
今では、Macで学力テストを行うことがこれまで以上に容易になっています。教育開発者が、iPhone、iPad、およびMacのAutomatic Assessment Configurationフレームワークを活用して、全てのデバイスで学生にテストと評価を提供する方法について学びます。また、開発者が、学生のニーズやテスト内容に合わせて、iOSのテストや試験で制限された機能を有効にする方法についても学びます。
リソース
関連ビデオ
WWDC20
-
ダウンロード
こんにちは WWDCへようこそ “Assessmentの更新情報” 私はジョシュです 教育・エンタープライズチームの エンジニアです 今回は Appleがアセスメント分野で 実践してきた内容をお話しします 教育は AppleのDNAの一部です Apple IIの学校への普及や iPadやApple Booksによる 教科書の変容など Appleの製品は 革新的な教育ツールとして 歓迎されてきました 私たちがアセスメントを 導入した2013年には iPad上の 自律型単体 アプリケーションモードでした 試験中にデバイスの機能を制限する MDMをベースとするものでしたが すぐに資格ベースのシステムに 置き換えられました 自動アセスメント構成 または またはAACとして 知られています このステップにより アセスメント アプリケーションの展開は容易になり 管理下にないデバイスでも 使用できるようになりました
デベロッパと協力して iPadを最新の アセスメントプラットフォームにしています アプリケーションの切り替えや 自動テキスト補完 辞書の用語検索などの 不正使用防止に貢献しています この結果 iPadの アセスメントモードは ほとんどの標準デジタル試験ベンダーに 採用されています ここで もう一歩前進し 新しいフレームワークで 標準試験を Macにも広げていきます これが “自動アセスメント構成”です この新しいフレームワークの内容を ご紹介したいと思います Macのアセスメントモードは iPadと同じではありません 実行環境は iPadではありませんから 各プラットフォームの試験環境を 同一に保つことを目標としています
通常 新しい機能ではユーザーができる ようになることをご説明しますが アセスメントモードでは ユーザーができなくなることの 魔力をお見せします アセスメントモード中は 皆さんのアプリケーションのみが表示され それ以外の Dockや Mission Control 通知センターなどは 利用できません スクリーンの録画や キャプチャはできません 他のアプリケーションは開けますが ウィンドウは非表示になり 他のすべてのプロセスから ネットワークへのアクセスは阻止されます メディア再生は一時停止し セッションの開始時と終了時に ペーストボードがクリアされます このリストはサブセットです 具体的な疑問があれば いつでも デベロッパドキュメントを見て このモード中に影響を受ける システムサービスを確認できます 重要な点として この新しい機能は 資格により保護されます この資格の申請方法に関する 情報と アプリケーションへの統合方法についても デベロッパドキュメントに掲載されています AACフレームワークの概要について わかったところで どのように機能するか 詳しく見てみましょう コードに入る前に アセスメントモードのライフサイクルと アプリケーションとの関連性をご説明します アプリケーションが実行を開始するとき アセスメントモードは非アクティブです デバイスを制限するのは いつが適切か 皆さんが 決定することになります その時が来ると アプリケーションがアセスメントモードの 開始をリクエストします その時点で AACフレームワークが システムサービスの 修正と制限を開始し 安全な試験環境を作成します 少々時間がかかりますので ここでアプリケーションにトランジションUIを 表示すると良いでしょう スピナーなどです すべてのサービスが 適切な状態になると アプリケーションに通知され 試験を開始できます
試験が完了した後 アプリケーションがアセスメントモードの終了を リクエストします 先ほどと同じように ここも時間がかかるので トランジションUIを表示すると ユーザー体験が向上します
OSが前の状態に 復帰すると アプリケーションに通知され これで アセスメントモードの ライフサイクルが終了です これはAACのハッピーシナリオですが 実際には エラーが発生する 可能性は常にありますので アプリケーションがそれを処理する方法が 考慮されていることが重要です エラーが発生しうる最初の場所は モードの開始をリクエストした 直後です サービスを制限できないことが 考えられます または アプリケーションにこの機能を使用する 資格を付与し忘れたとか いずれの場合も アプリケーションに通知され アセスメントモードは 非アクティブの状態に戻ります 次にエラーが発生しやすいのは 試験の実施中です 非常にまれですが サービスがアセスメントモードに 準拠しなくなり それまでのような安全性を 保証できなくなります この場合 アセスメントモードを中止せず 代わりに アプリケーションに通知して 異常発生を知らせ 受験者が試験を中止します アプリケーションは直ちに機密情報の コンテンツを非表示にし モードを終了して 残りのシステムサービスを 解放します それでは このサイクルを 実際のコードで見てみましょう 始めに 独自のAACクライアントの 実装方法をご説明します まず AssessmentManagerという 新しいクラスを作成します このクラスは アプリケーションのUIと アセスメントモードライフサイクルの ブリッジになります 2つの関数を使用します beginAssessmentMode と endAssessmentModeです 実際にモードを開始 および終了するには マネージャーに フレームワークで提供される AEAssessmentSessionが 必要です アセスメントセッションは ライフサイクルの すべてのイベントをデリゲーションで通知します そのため マネージャーにAEAssessment SessionDelegateプロトコルを実装します 開始関数で起きることに 注目してみましょう
まず AEAssessmentConfigurationを 生成します このオブジェクトは カスタマイズされたアセスメント体験を定義し デフォルトでは 最大の制限度合いです これを使って AEAssessmentSessionを生成します 生成後に ライフサイクルイベントを受けるための デリゲートをセットします また セッションを保持しておき アセスメントモード終了の 途中で解放しないようにすることが重要です 先ほど言ったように アセスメントモードの 開始に時間がかかるため トランジションUIを表示します ユーザーは 進行中であることを 理解できます 最後に セッションの開始を 呼び出し OSがアセスメントモードに 入るのを待機します セッションはマネージャーに デリゲートします DidBegin または failedToBegin デリゲート関数を介して行います
DidBeginの場合 完全にアセスメントモードに 突入済みです トランジションUIをティアダウンして
試験資料を 受験者に表示します
別の可能性は failedToBegin関数が呼ばれた場合です failedToBeginの場合 DidBiginと同じように トランジションUIをティアダウンして
異常が発生しているので 何らかのエラーを ユーザーに表示するでしょう 最後に モードに入れなかったため セッションが無効になり その参照が破棄されます
さて すべてが 上手くいき DidBeginデリゲートコールを受けたので 受験者は受験を開始できるとします
受験者が 解答をすべて終了したことを 知らせたら assessmentManagerで endAssessmentModeを呼び出して終了します
まず ストアされたセッションは オプショナルですので アンラップしなければなりません アセスメントモード突入時と同じく 終了も時間がかかります ユーザーにトランジションUIを 表示します 最後に アンラップしたセッションの 終了をリクエストし OSをアセスメントモードから 解放します OSがリストアされ 元の状態に戻ると アセスメントセッションは マネージャーに DidEndデリゲート関数を介して 通知します DidEnd関数では トランジションUIをティアダウンして 試験終了後の コンテンツを表示します 結果ページや 合格ページなどでしょう そして アセスメントセッションへの 参照を破棄して終了します
このプロトコルの最後のパートが wasInterrupted関数です これはアクティブなアセスメントセッション中の 問題発生時に呼ばれます この関数では 機密情報コンテンツを 直ちに非表示にします また このタイミングで 必要なクリーンアップや 試験進捗の保存も行えます その後で ユーザーに エラーメッセージを表示します 次に 終了のトランジションUIを 表示し セッションの終了をリクエストして OSをアセスメントモードから解放します これが完了したことは DidEndデリゲート関数を 受け取ったことでわかります 以上です これで AACクライアントが できました アセスメントアプリケーションに 上手く統合されています アセスメントモードのライフサイクルは わかりましたし コードも見てみました 新しいフレームワークの適用には いくつかの戦略を 見ておくことが重要です ただし まずは 野菜についてです
子供の頃 野菜が 混ざっているのがいやで グリーンピースとにんじんが 触れているのが苦手でした 自分の皿に分けるときに 明確な境界線を設けていました デベロッパになっても 相変わらずです さすがに グリーンピースと にんじんではないですが ロジックと作用には 明確な境界線を引いています
ロジックと作用という場合 コードの中で 行うと決めるパートと 実際に行うパートの間を 明確に線引きしています
この考え方の例が こちらです 文字列をplistに書き込むと決めること vs 実際に書き込むこと あるいは ネットワーク要求をすると決めること vs 実際に要求すること 私たちの場合は アセスメントモードに入ると決めること vs 実際にモードに入ること です すべてのケースで 重要なパターンが見えてきました これらを 所有者が誰か という観点で見るとどうなるでしょうか? アプリケーションはすべてのロジックの 所有者です ショーのスターですね クールで新しい体験を 作成する主体です それ以外はすべて 単なる詳細に過ぎません さて 皆さんお考えでしょう “整頓アセスメントモードと何の関係が?” 他の副作用と同様に AACでは テストを書くことが 難しくなります また 皆さんの場合 Xcodeでのデバッグも難しくなります ではどうするか? ロジックと作用の間に 明確な境界を設けるのです AACによって提供されます 1つのやり方は プロトコルで行う方法です “プロトコル指向プログラミング”と 称されることがあります プロトコルによって どのような仕事をするか 詳細な契約を定義でき その仕事をするのが誰なのか 心配する必要がなくなります なぜそれに価値があるのか? 理由を サンプルコードで 見てみましょう ここで アセスメントモード全体を カプセル化するプロトコルを 定義したとしましょう 開始 終了 その間にあるすべてです AssessmentManagingと 呼ぶことにします このプロトコルの実装の 1つは 本番のAEAssessmentSessionに依存します この実装は運用設定で 動作するものです ですが テスト設定では コンピュータがロックされてしまうと不都合です この場合 実機を アセスメントモード突入要求を ロギングするだけの 実装に置き換えます もっと良いのは テスト用の 実装を書いて それに テストの期待値を 入れ込んでおくことです そうすれば 依存性を正しく 呼び出していることも確認できます プロトコルへの依存は アセスメントモードにまつわる すべてのロジックの実行を 簡単にします 抽象的すぎたり 混乱するようでしたら プレゼンテーションのサンプル アプリケーションを見てみてください これらすべての 動くサンプルを確認できます
ここまでは プロトコル指向プログラミングの 軽めの説明でした 過去のセッションをチェックしして 詳しく学ぶことをお勧めします アセスメントアプリケーションの テスト構築を ずっと簡単にしてくれる 価値あるツールです 結果として アプリケーションそのものの品質が向上します アセスメント開発者は 受験者向けの試験を配信するのですから アプリケーションもテストされていて 然るべきだと思います テストに加えて 境界を設定することが 特に役に立つのは アセスメントアプリケーションを Xcodeでデバッグするときです Macのアセスメントモードはユーザー入力 イベントを受け取るアプリケーションを制限し Xcodeでデバッグしている場合 ブレークポイントに達すると 先に進む手段がありません アプリケーションはブレークポイントを待機して ハングし Xcodeを操作できなくなります 幸い 解決策があります Macを再起動すると アセスメントモードは実行を停止します 実は すべてのシステムサービスは リブート時のリストアが保証されています これは 機能であり かつ 受験者とそのMacを仲介する 優れた方法でもあります Xcodeとアセスメントアプリケーションが デッドロックしたときは リブートは味方だと 覚えておいてください 今年 iOSとiPadOSで行った 内容についてご説明します Macと併せ AACフレームワークは iOSと iPadOSでも利用可能です 統一されたデベロッパ体験を どのプラットフォームでも 得られます iOSとiPadOSでは AACフレームワークはこれまでの アセスメント体験をさらに向上させています お見せしましょう UIKitのオリジナルのAPIです iPadでアセスメントモードに 入るために使われてきたものです 先ほど少し触れましたが サンプルコードのセグメントでは アセスメントに詳しい方は AEAssessmentSessionで 何か少し違うことにお気付きだったでしょう configです アセスメントセッションは 構成可能に設計されています 強いご要望があり もっとカスタマイズされたアセスメント体験を 提供する手段が デベロッパに 必要だったため 新しいフレームワークで 実現しました iOS 14では AEAssessmentConfigurationの オプションで ディクテーション 予測キーボード スペルチェックなどの システムサービスを 有効化できます
この互換性は 優れたユーザー体験に 決定的に重要で 特に さまざまな試験の種類や 受験者の国 受験者の異なるニーズなどを 考慮するさいに重要です たとえば スペルチェックの許可は 数学の試験では意味があります スペリングが試験対象ではないからです あるいは 連続入力キーボードは 外国語の試験で 解答の入力が簡単になる 利点があります 私たちがリリースする機能の リストはなかなか良いですが リストそのものよりも その考え方のほうがクールなのです つまり アセスメントモードが 構成可能であることは 公平さに関わることです AEAssessmentConfigurationは その価値を広げ オペレーティングシステムを 取り巻く状況と共に また デベロッパのニーズと共に 進化するよう設計されているのです 素晴らしいと思います 新しいカスタマイズの ポイントは 新しいAACフレームワークでのみ 利用可能ですので UIKitの既存のアセスメントモードAPIから 移行を検討すると良いかも知れません あと1つ AACのニュースが あります 新しいアセスメント フレームワークは iOS用 iPadOS用 そして macOS用ですので これらすべてで 同一のAPIを 公開しています この機能をCatalyst アプリケーションで 利用可能にするのが 唯一自然なことです iOS 14 および macOS Big Surからは Macで実行されるiOS用アプリケーションで アセスメントモードが 完全にサポートされます どのプラットフォームでも コンテキストに応じて正しい アセスメントモードを開始できます 要約すると アセスメントモードがMacに対応し 新しい専用フレームワークが誕生しました このフレームワークは iOSとiPadOSでも利用可能です そして よりカスタマイズ性を高めるよう 拡張されました 最後に 使いやすい クロスプラットフォームAPIを公開し 簡単に iOS用およびiPadOS用アプリケーションを Macへ移行できるようにしました ご視聴ありがとうございました 以上 Appleのアセスメント分野での 実践でした 素晴らしいアプリケーションを パワフルな新しいツールで構築してください
-
-
3:51 - Working with AAC
import AutomaticAssessmentConfiguration class AssessmentManager: NSObject { private var assessmentSession: AEAssessmentSession? func beginAssessmentMode() { let config = AEAssessmentConfiguration() // Configure AAC behavior let session = AEAssessmentSession(configuration: config) // Construct your session session.delegate = self // Receive lifecycle events via delegation assessmentSession = session // Retain the session // Present assessment mode bringup transition UI // ... session.begin() } func endAssessmentMode() { guard let session = assessmentSession else { return } // Present assessment mode teardown transition UI // ... session.end() } } extension AssessmentManager: AEAssessmentSessionDelegate { func assessmentSessionDidBegin(_ session: AEAssessmentSession) { // Stop showing assessment mode bringup transition UI // ... // Present sensitive testing content // ... } func assessmentSession(_ session: AEAssessmentSession, failedToBeginWithError error: Error) { // Stop showing assessment mode bringup transition UI // ... // Present some kind of error UI // ... // Release your reference to the AEAssessmentSession assessmentSession = nil } func assessmentSessionDidEnd(_ session: AEAssessmentSession) { // Stop showing assessment mode teardown transition UI // ... // Present your post-test UI // (maybe a result, a confirmation, or just the initial view) // ... // Release your reference to the AEAssessmentSession assessmentSession = nil } func assessmentSession(_ session: AEAssessmentSession, wasInterruptedWithError error: Error) { // Hide all sensitive UI // ... // Present some kind of error UI // ... session.end() } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。