ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Swan's Quest 第1章:暗闇からの声
Swift Playgroundsはすべての世代に向けて4章から成るインタラクティブな冒険、"Swan's Quest"をお届けします。第1章では、ヒーローが暗い洞穴を移動します。トーチに明かりを灯すただ一つの方法は、トーチをアクセス可能なものにする、ただそれだけです。 VoiceOverや面白い音声解説について学びましょう。そうすればあなたは、ヒーローが帰り道を見つけ・・・次のチャレンジへのヒントを手に入れることを手助けことができるかもしれません。 Swan's QuestはiPadとMacのSwift Playgroundsのために作成されており、Sonic Workshop、Sensor Arcade、Augmented RealityなどのPlaygroundsの多くで教育的体験を生むフレームワークとリソースを統合しています。Playgroundを作成するには、"Create Swift Playgrounds content for iPad and Mac"をご覧ください。 Developer Forumに立ち寄るのも忘れずに。Swan's Questへのご意見をぜひお聞かせください。
リソース
関連ビデオ
WWDC20
-
ダウンロード
こんにちは WWDCへようこそ “Swan's Quest 第1章:暗闇からの声” 今回はSwan's Questです 司会のロブです 私たちのチームが作成した― Swift Playgroundsチャレンジの 内側をご案内します このチャレンジは コーディングの 楽しさを思い出していただくために作られました Swift Playgroundsはたくさんの フレームワークやAPIが 詰め込まれた開発環境です 複雑なテクノロジーを 少量のコードでシンプルに 試すことができます 皆さんが構築したい内容に 集中できて やり方を調べることに 時間をかけずにすみます このエピソードでは
4つの章に分けて Swan's Questをご紹介します 各章にはプログラミングチャレンジが 用意されており 前の章の 続きを構築していきます 第一回のチャレンジでは 暗くミステリアスな 洞窟を探検しなければなりません 皆さんの装備はVoiceOverと オンスクリーン要素に 説明的なコンテキストを提供する 使いやすいAPIだけです VoiceOverを皆さんのデバイスで オンにする方法と さらに アクセシビリティAPIの 入門編をご紹介します これは 私たちの教育用コンテンツを 最高にアクセシブルな プログラミング環境にしてくれます 最後に これらのAPIを使用して 洞窟を通り抜け スワンに会うための 手がかりをお教えします 用意はいいかな?
Swan's Questの チャレンジは4パートです 皆さんの プログラミングスキルを使って 勇者のカメの 伝説のクエストを 導いてもらいます
旅の中でカメは 暗い洞窟へと入り スワン王を探して 先へ進みます スワンは カメに王国を通過する 許しを与えます ただし カメのことを気に入った場合に 限ります
気に入られるには スワンからの 音楽のチャレンジを 成し遂げなくてはなりません ここで 皆さんの助けが 必要なのです
そして トカゲもスワンの謎の手がかりを解く 助けをくれます
トカゲは皆さんに どのAPIを使うかの ヒントをくれます
Swan's Questは 4つのプログラミング演習で構成され 構築に使用されている フレームワークは 教育用コンテンツをSwift Playgroundsで 配信するために使うものと同じです 私たちは このフレームワークで 初級のプログラマーに Swiftのコーディング方法を お教えしています 私たちのコンテンツを取り入れて 皆さんのプロジェクトで 同じフレームワークを使えるのをご存じですか? SDKを学び始める最良の方法は ここにある3つのような テンプレートから始めることです これらは テンプレート形式の プレイグラウンドブックで 新しいページと 新しいSwiftモジュールを作成でき Swift Playgroundsだけで 完結できます これらのテンプレートには 指導者付き学習コンパニオンの 作成用に構築されたものと 同じモジュールが含まれます “Sonic Create”では オーディオAPIを 簡単に実験できるようにしています “Sensor Create”では さまざまなiPadのセンサーを利用し “AR Create”では皆さんが 独自の拡張現実体験を作成できます カスタムアートは サラ・ロスバーグさんの作品です
Swan's Questでは 新しい よりパワフルなテンプレートを作成しました いくつかのテンプレートの APIを組み合わせています
Swan's Questと併せて このテンプレートを デベロッパアプリケーションから直接 ダウンロードしてください 提供されるすべてのコンテンツと同様 これらのブックはオープンソースです つまり Macで展開して 各チャレンジの構築で 私たちがどのように APIを使ったか 見ることができます
全4回のセッションでは 各チャレンジをクリアするのに必要な いくつかのAPIを解説します 今日のチャレンジで使うのは アクセシビリティAPIと VoiceOverです 後で必要になります 両方を使って 暗い洞窟を抜けて スワンに会いに行くのです ご安心ください 最初のゲストのジョーディンは アシスティブテクノロジーの第一人者です VoiceOverの集中講義をしてくれます VoiceOverは洞窟の謎を解く 最重要ツールですので 注意してください
ありがとう ロブ 皆さんこんにちは Appleのアクセシビリティエンジニアの ジョーディンです アシスティブテクノロジーの 構築を支援するだけでなく 自分で毎日使って 家族や友人と 連絡を取り合ったり 猫のフードを注文したり ピアノを習ったり もちろん コードも書いています コーディングの話が出たところで 早速始めましょう 第1回のチャレンジをクリアするには VoiceOverを使用します VoiceOverはAppleの画面読み上げ機能で すべての製品に埋め込まれています テキスト コントロール その他の要素についての情報を アプリケーションのインターフェイスの操作中に テキスト読み上げ 点字 またはその2つの組み合わせで提供します
VoiceOverは 暗く不気味な洞窟を通り また 道を照らすコードを書くために 必要になります VoiceOverを使って コードを書くのです ご心配なく コツがわかれば そんなに難しくありません 大丈夫ですよ 始める前にアクセシビリティ ショートカットを設定しましょう アクセシビリティ設定を すばやくオンまたはオフに切り替えられます ホームまたは スリープ/スリープ解除ボタンを 3回押します 設定のアクセシビリティへ移動し 一番下まで行くと アクセシビリティショートカットがあります ここの VoiceOverを選択します 次に VoiceOverをオンにします iPadの場合 設定 アクセシビリティ そして VoiceOverに移動します 上にトグルスイッチがあります ここのVoiceOverをオンにして 有効にするか または 先ほど設定した アクセシビリティショートカットを使用します また Siriに頼むこともできます “VoiceOverをオンにして” 最初に “VoiceOverオン”という プロンプトが聞こえます
ここで 場合によっては OKボタンをダブルタップして VoiceOverが有効になると ジェスチャが変更されることを 確認する必要があります
選択中のコントロールの周囲にある 黒色の四角形は VoiceOverカーソルと呼ぶもので
VoiceOverのフォーカスがどこにあるかを 視覚的に確認するものです
指で左右にフリックしてカーソルを 画面上のさまざまな要素に移動します
“アクセシビリティ機能を利用すると…” “視覚サポート 見出し”“VoiceOver オン” “ズーム オフ”“VoiceOverオン ボタン”
または 画面上を指でドラッグして カーソルをより速く 要素に移動させることができます
“バリアフリー音声ガイ…” “VoiceOver オ…” ここで VoiceOverの読み上げ速度を お好みに調整します 読み上げ速度のスライダーを 1本の指で上または下にスワイプします
“読み上げ速度 45% 55% 65% 75%”
“85% 95% 100% 95% 80% 70%” 経験豊富なVoiceOverユーザーの多くは 読み上げ速度を最速にして すばやく情報を取得し 効率的に操作します 1分あたり 約720ワードのスピードです こんな感じになりますね “読み上げ速度…” 不思議かも知れませんが 私はこの速さでVoiceOverを理解でます 設定を閉じるには iPadのホームボタンを押すか ホームボタンのないデバイスでは 画面の下の端から 指1本で 音が聞こえるまで 上にスライドします そこで止めると VoiceOverが 次のように言います
“指を離すとホーム画へ” ホーム画面に戻ったら Swift Playgroundsのアイコンに移動し ダブルタップして開きます
“Playgrounds”
“開くには ダブル…” “Playgrounds” Macの場合 Command+F5キー または Touch IDボタンをトリプルクリックで VoiceOverを有効にします
有効になったら 画面上で VoiceOverカーソルを Control+Option+左または右の矢印キー を押して移動します
同じように 上下も Control+Option+上下の矢印キーを 使って移動します コントロールや要素のグループに 入力する場合 たとえばプレイグラウンドの ソースコードエディタなどでは Control+Option+Shift+下向き矢印キー を押します これを インタラクティングと 呼びたいと思います
インタラクティングを停止して コントロールのグループから抜けるには Control+Option+Shift+上向き矢印キー を押します
Control+Option+スベースバーで コントロールをアクティブ化します VoiceOverと オンにする方法 基本的なジェスチャ そしてコマンドに慣れたところで お話ししたいのが 皆さんが開発したアプリケーションから 去っていってしまう― 多くの視覚障害者の 悲しい体験についてです
Appleは 私たちの製品の インターフェイスデザインが 同クラスで最高であることに 誇りを持っています 同じ品質が アクセシビリティにも 備わっています アクセシビリティは Appleの コアバリューの1つなのです VoiceOverをオンにしたときに 豊富なコンテキストが 設定やホーム画面に触れるのに合わせ 提供されていました
しかし デベロッパ全員がアクセシビリティに これほどの注意を払うことはありません 実際にそうです
まずアプリケーションをダウンロードすると すぐに聞こえてくるのは 豊富な詳細ではなく ラベルなしのボタンばかりなのです 画面をスワイプすると 聞こえてくるのは ボタン ボタン ボタン… たまに 画像ファイル名が 挿入されていることはあります その場合 画面をスワイプしたときに どう聞こえるかというと “画面 20…”“トーチ2 グラフィック” “トーチ3 グラフィック” “トーチ6 グラフィック” それで 思うわけです トーチって 一体何?
これをどうしろというの? そして アプリケーションの場合 途方に暮れるわけです このボタンたちは何をするボタン? どうやって使えばいいの? ラベルなしのボタンがある アプリケーションは削除してしまいます 開いて1分以内にです でも このような体験を変える力が 皆さんにはあるのです 皆さんは すべての人のための より良いインターフェイスを作れます ボタンとコントロールに ラベルを追加するところから始められます
“画面”“トーチ3”“トー…”“トーチ” “神秘的な青い炎を点す12インチの支柱” この方がずっと意味があります これはいいです Swift Playgroundsを使うときに 優れたユーザー体験を期待します 私たちのコンテンツは コーディング方法を学ぶ― すべての人のために デザインされなくてはなりません 例外はありません そのために 私の同僚のエンジニアたちが 使いやすいAPIを構築し 完全にアクセシブルなSwift Playgrounds コンテンツを構築できるようにしました
それらのAPIの詳細については Swift Playgroundsチームの スティーブンに説明してもらいます ありがとう ジョーディン Swift Playgroundsチームの 教育エンジニアのスティーブンです 私たちのコンテンツでは ジョーディンのような経験を 誰にもして欲しくありません Appleは“すべての人がコーディングできる” という信念を持っています それが 私たちが使いやすい アクセシビリティインターフェイスを Swift PlaygroundsのコンテンツSDKに 構築した理由です コンテンツSDKの基礎には 4つのオンスクリーン要素があります グラフィック ボタン スプライト ラベルです すべてBaseGraphicを継承し アクセシビリティをサポートする プロパティを持っています ここに オプションの accessibilityHintsプロパティがあります このプロパティの設定により このオンスクリーン要素が VoiceOverによって 読み上げられる必要があることを示し 他の支援サービスで 可視化できるようにします VoiceOverをサポートするために これらの値の設定が必要です makeAccessibilityElementは VoiceOverに この項目でカーソルを停止するよう伝えます accessibilityLabelは 項目で停止したときに VoiceOverが読み上げる内容です
例を見ていきましょう まず accessibilityHintsの インスタンスを作成します VoiceOverがこのグラフィックで 停止し 次の文言を読み上げます “ボタンをアクティブにして パーティーを開始します” 次に Graphicを作成して そのaccessibilityHintsを 最初の手順で作成した hints変数に設定します この例の意味が伝わるよう 願っています というのも 第1回のチャレンジで 必要になるからです ありがとう ステファン お察しのとおり 第1回のチャレンジ “暗闇の声”は オンスクリーンコントロールを もっとアクセシブルにする内容です 洞窟に入ると トーチは点いていません 実際 何も見えないでしょう 皆さんが十分な数のトーチを 点灯させるまで キャラクターは動きません トーチを点灯させるには それらにアクセシビリティラベルを設定します VoiceOverで それぞれのトーチに移動できます トーチのところまで来ると プロパティ名が聞こえてきます “トーチ1”とか“ トーチ3”のようにです
それぞれのトーチに アクセシビリティラベルを追加すると キャラクターは洞窟を進んでいき スワンに会うことができます
Playgroundsのソースエディタで あの不親切なラベルを もっと説明的なものに置換します 耳を使って ラベルを変更してください このようにして 完了すると スワンに会って 次のチャレンジの手がかりをもらえます このエピソードでは Swan's Questをご紹介しました WWDC参加者向けの 4パートのチャレンジです 皆さんには VoiceOverをご紹介し Swift Playgroundsで アクセシブルな ソフトウェアを書く方法をご紹介しました 最後に 洞窟を進んで スワンに会いに行くための いくつかのヒントを差し上げました 明日は 第2章をご説明します それまで 幸運を祈ります フォーラムに参加して 第1回の チャレンジの感想を教えてくださいね
-
-
12:21 - Graphic.swift
// Graphic.swift open class BaseGraphic: InternalGraphic { public var accessibilityHints: AccessibilityHints? // ... }
-
12:32 - AccessibilityHints.swift
// AccessibilityHints.swift public struct AccessibilityHints: Codable { /// Indicates a graphic should be treated as a UIAccessibilityElement by VoiceOver. public var makeAccessibilityElement: Bool = false /// Label spoken by VoiceOver for the accessible graphic (a localized character name). public var accessibilityLabel: String? // ... }
-
12:45 - Make an Accessible Graphic
// Make an Accessible Graphic import SPCCore import SPCAccessibility let hints = AccessibilityHints(makeAccessibilityElement: true, accessibilityLabel: "Activate button to start the party") let graphic = Graphic(name: "Let's get it Started") graphic.accessibilityHints = hints
-
13:51 - Activating torch1 and torch2
// activate torch1 and torch2 cave.torch1.accessibilityHints = AccessibilityHints(makeAccessibilityElement: true, accessibilityLabel: "Torch next to a stairwell, where dripping water can be heard.") cave.torch2.accessibilityHints = AccessibilityHints(makeAccessibilityElement: true, accessibilityLabel: "Right before the edge of the platform—be careful!")
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。