ミーティングプラン
ミーティングプランでは、クラブでSwiftUIの基礎、データのモデル化の基礎、機械学習、空間コンピューティングを学習する際に役立つ推奨事項を提示します。
ミーティングプランでは、クラブでSwiftUIの基礎、データのモデル化の基礎、機械学習、空間コンピューティングを学習する際に役立つ推奨事項を提示します。
Xcode、Swift、またはSwiftUIを使ったことがなければ、SwiftUIの基礎から始めましょう。
5つのチュートリアルを各自で完了する
10回のミーティング(グループアクティビティを含む)を実施する
SwiftUIでのアプリ構築を通じてアプリ開発の基礎を学びます。まずは詳しいチュートリアルに従ってプロトタイプとアプリ画面を作成し、適切に機能するアプリを構築します。次に、クラブのサポートも得ながら、学んだことを生かして自分だけの作品を作り上げます。
注:アプリのプレビューにはiPhoneは必要はありません。Xcodeには、アプリの見た目と動作をMacで直に確認できるツールが含まれています。
まずは「Welcome to Develop in Swift Tutorials(Swiftでの開発へようこそ)」のチュートリアルをご確認ください。
メッセージアプリのプロトタイプの作成を通じて、XcodeとSwiftUIの知識を深めます。Swiftの構文のほか、ソースエディタとプレビューの使い方を学びます。
準備:最初のミーティングの前に「Hello, SwiftU(SwiftUIの概要)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて「Wrap-up: Explore Xcode(まとめ:Xcodeを学ぶ)」の記事の「Extend your app(アプリの拡張)」セクションにある2つの推奨事項を実施します。
準備:「Wrap-up: Explore Xcode(まとめ:Xcodeを学ぶ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:新規Xcodeプロジェクトを開始し、「MyselfInSixWords」という名前を付けます。テキスト
ビューを使って、自分を表す6つの単語を表示します。各単語にパディングを追加し、背景色を変えます。
をVStack
HStack
に置き換えて、単語を横向きに表示します。次に、追加のチャレンジとして、HStack
とVStack
ビューを組み合わせて、アプリ用にさまざまなレイアウトを作成します。ビューのHStack
をVStack
の中に埋め込むことはできますか?その逆はどうですか?実行するとどうなりますか?
ミーティングの最後に、各自数分で自分のMyselfInSixWordsプロジェクトを発表します。
カスタムビューを構築して数日間の天気予報を作成する方法を学びます。ビューでは、プロパティを使用して各日の表示をカスタマイズします。
準備:「Customize views with properties(プロパティを使ったビューのカスタマイズ)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて、「Wrap-up: Views, structures, and properties(まとめ:ビュー、ストラクチャ、プロパティ)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項のうち1〜2つを実施します。
準備:「Wrap-up: Views, structures, and properties(まとめ:ビュー、ストラクチャ、プロパティ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:計算プロパティを使った演習を行います。最高気温が80℉を超えた場合に異なる色を返すように計算プロパティを追加します(high > 80
)。.foregroundStyle
モディファイア(修飾子)を使うと、プロパティの値に応じてテキストの色を変えることができます。
達成できたことを各自数分で発表します。プロジェクトに追加できた内容と、サポートや時間がもう少し必要な部分を書き出します。
iOSアプリ用の2つのオンボーディング画面の作成を通じて、ビューを画面上の任意の位置に配置したり、ビューのサイズを確認するための便利なツールについて学びます。アセットカタログで色を定義し、それを使ってグラデーションのある背景を作成します。
準備:「Design an interface(インターフェイスのデザイン)」のチュートリアルを実施します。
グループアクティビティ:オンボーディングフローに3ページ目を追加します。新しいページには、適切と思われる要素を含むことができます。時間があれば、アプリのデザインや色を編集します。
準備:「Wrap-up: Layout and style(まとめ:レイアウトとスタイル)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:複数のビュー間をスワイプする演習を行います。新規Xcodeプロジェクトを開始し、.tabViewStyle(.page)
を使って短い物語を作成して、本のページをスワイプで切り替えられるようにします。最初のページを本の表紙としてデザインします。大きなタイトル、著者名、1つ以上のSF Symbolsを配置し、適度に色をつけます。物語の各ページに章のタイトル、テキスト、画像をクリエイティブに表示する方法を考えます。
本のプロジェクトで達成できたことを各自数分で発表します。どのような取り組みを継続するのか、今後のプランについて話します。
アプリにボタンを追加します。Swiftクロージャとボタンの関係について学びます。ステートプロパティを使って、ユーザーインターフェイスを自動的に更新します。
準備:「Update the UI with state(ステートを使ったUIの更新)」のチュートリアルを実施します。
グループアクティビティ:さいころの画像とその下に「転がす」ボタンを配置するのではなく、DiceView
を修正して、ユーザーがさいころをタップするとランダム化されるようにします。
準備:「Wrap-up: Buttons and state(まとめ:ボタンとステート)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:シンプルなボタンのアプリを作成します。新規Xcodeプロジェクトを開始し、1つまたは2つのボタンのアプリを作成します。「シンプルなアプリをデザインしよう」プロジェクトをアイデア探しの参考にしてください。
ボタンアプリのデザインとプロジェクトについて各自数分で発表します。思っていたよりも簡単だった点や難しかった点についてクラブに共有します。
一連のアイテムを配列に格納してリストを使って表示する、動的なインターフェイスを作成します。テキストフィールドやバインディングを使って、ユーザーがテキストを入力できるようにします。
準備:「Create dynamic content(動的コンテンツの作成)」のチュートリアルを実施します。
グループアクティビティ:「Wrap-up: Lists and text fields(まとめ:リストとテキストフィールド)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項のうち1つを選択します。
準備:「Wrap-up: Lists and text fields(まとめ:リストとテキストフィールド)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:住所ラベルの書式設定をします。新規Xcodeプロジェクトを開始し、「AddressLabel」という名前を付けます。@State
プロパティやテキストフィールドを使って、都市や国など、住所の各種要素を収集します。次に、完全な形式の住所を画面の上部に表示します。取り込みフォームと住所のフォント、サイズ、色をカスタマイズします。
このクラブが終了したあとのプランについて各自数分で発表します。アプリ開発の学習をどのようにして継続する予定ですか?今後どのようなアプリを作成したいですか?
7つのチュートリアルを各自で完了する
9回のミーティング(グループアクティビティを含む)を実施する
SwiftUIでのアプリ構築を通じてデータのモデル化の基礎を学びます。まずは詳しいチュートリアルに従ってプロトタイプを作成し、適切に機能するアプリを構築します。次に、クラブのサポートも得ながら、学んだことを生かして自分だけの作品を作り上げます。
注:iPhoneやiPadでアプリをプレビューする必要はありません。Xcodeには、アプリの見た目と動作をMacで直に確認できるツールが含まれています。
まずは「Welcome to data modeling(データのモデル化へようこそ)」をご確認ください。
独自のカスタム型を作成して最初のデータモデルを定義し、ユニットテストで正しく動作することを実証します。次に、そのカスタム型を使ってゲームのスコアをトラッキングします。
準備:「Model data with custom types(カスタム型を使ったモデルデータ)」のチュートリアルを実施し、最初のミーティングの前に「Wrap-up: Model data with custom types(まとめ:カスタム型を使ったモデルデータ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読んでおきます。
グループアクティビティ:全員で、または少人数のグループに分かれて、「Wrap-up: Model data with custom types(まとめ:カスタム型を使ったモデルデータ)」の記事の「Extend your app(アプリの拡張)」セクションにある1つの推奨事項を実施します。
準備:「Add functionality with Swift Testing(Swift Testingによる機能の追加)」のチュートリアルを実施し、「Wrap-up: Custom types and Swift Testing(まとめ:カスタム型とSwift Testing)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:勝ち点の合計を追加します。プレイヤーが指定の合計ポイントに達したときにゲームが自動的に終了するよう、アプリを更新します。合計ポイントの指定は、設定ビューで行います。プレイヤーのポイントを増やすテストを追加し、指定の合計ポイントに達したときにゲームの状態が遷移することを検証します。
ミーティングの最後に、(プレイヤーが指定の合計ポイントに達したときにゲームが自動的に終了するように)どのようにプロジェクトを改善したか各自数分で発表します。
友人の誕生日のリストを作成し、SwiftDataを使ってそのデータを保存し、次回起動時に読み出せるようにします。
準備:「Save data(データの保存)」のチュートリアルを実施します。
グループアクティビティ:ミーティングで、「Wrap-up: Models and persistence(まとめ:モデルと永続性)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項の中から各自が1つ選択します。
準備:「Wrap-up: Models and persistence(まとめ:モデルと永続性)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:Pick-a-Palを強化します。Pick-a-Palに再度アクセスし、names: [String]
をSwiftDataを利用したPal
モデルに置き換えます。
Pick-a-PalアプリにSwiftDataを追加することでどのような効果を得られるか、グループで数分話し合います。
SwiftDataを使って友人や友人のお気に入りの映画をトラッキングするアプリを作成し、モデルオブジェクトを管理します。クエリを使ってアイテムをリスト形式で表示し、詳細ビューを作成してそれらを編集します。さらに、友人と映画とのリレーションシップを作成して表示する方法や、高度なクエリを作成する方法を学びます。
準備:「Navigate sample data(サンプルデータのナビゲーション)」のチュートリアルを実施し、「Wrap-up: Navigate sample data(まとめ:サンプルデータのナビゲーション)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:Birthdaysに再度アクセスし、SampleData
クラスを実装して、.task
がなくてもサンプルデータを挿入できるようにします。
準備:「Create, update, and delete data(データの作成、更新、削除)」のチュートリアルを実施し、「Wrap-up: Create, update and delete data(まとめ:データの作成、更新、削除)」の記事の「Reflect on the concepts(コンセプトの振り返り)」を読みます。
グループアクティビティ:iOSアプリプロジェクトを作成し、プロジェクトのオプション設定ダイアログで、保存するSwiftDataを選択します。サンプルコードを確認します。これまでの2つのチュートリアルで作成したインターフェイスとよく似ていることがわかると思います。ここで理解した仕組みを次のアプリ作成に生かしましょう。
準備:「Work with relationships(リレーションシップに対応)」のチュートリアルを実施し、「Wrap-up: Navigation, editing, and relationships(まとめ:ナビゲーション、編集、リレーションシップ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:全員で、または少人数のグループに分かれて、「Wrap-up: Navigation, editing, and relationships(まとめ:ナビゲーション、編集、リレーションシップ)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項のうち1〜2つを実施します。
Observationを使ったアルファベットゲームを作成します。多数の独立したビューを含む複雑なデータモデルを共有します。
準備:「Complete a game with logic(ゲームにロジックを実装)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて、「Wrap-up: Observation and shareable data models(まとめ:Observationと共有可能なデータモデル)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項の1つまたは両方を実施します。
グループアクティビティ:さまざまな難易度。さまざまな難易度のモードを追加して、より挑戦しがいのあるゲームを目指します。順番を間違えた場合は減点し、再度挑戦できないようにする、単語を非表示にしてアイコンだけをヒントにアルファベット順に並べ替える、などの方法が考えられます。
このクラブが終了したあとのプランについて各自数分で発表します。アプリ開発の学習をどのようにして継続する予定ですか?今後どのようなアプリを作成したいですか?
4つのチュートリアルを各自で完了する
8回のミーティング(グループアクティビティを含む)を実施する
SwiftUIでのアプリ構築を通じて機械学習の基礎を学びます。まずは詳しいチュートリアルに従って適切に機能するアプリを構築します。次に、クラブのサポートも得ながら、学んだことを生かして自分だけの作品を作り上げます。
注:アプリのプレビューにはiPhoneは必要はありません。Xcodeには、アプリの見た目と動作をMacで直に確認できるツールが含まれています。
まずは「Welcome to machine learning(機械学習へようこそ)」をご確認ください。
Natural Languageフレームワークと感情分析を通じて、機械学習への理解を深めます。ハイキングに関する意見を集め、回答を分析して結果を視覚的に表示するアプリを作成します。
準備:ミーティングの前に「Analyze sentiment in text(テキストから感情を分析)」のチュートリアルを実施します。
グループアクティビティ:少人数のグループに分かれてScorer
の機能を拡張します。Natural Languageフレームワークを使用し、回答が書かれた言語を返します。Response
を更新し、この新しい情報を保存して、ResponseView
で表示します。
ミーティングの最後に、この情報をどのように配置し、読みやすくしたかを各グループ数分で共有します。
準備:「Wrap-up: Natural language(まとめ:Natural Language)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:少人数のグループに分かれて、Sentimentの列挙型を更新し、ケースを3つではなく5つにします。ラベル付けの方法、感情スコアの範囲の分割方法、UIへの表示方法を決めます(アイコンにはSF Symbolsを使用できます)。
次に、アプリ内のサンプルセットに回答を追加し、正常にスコアリングされるかどうかを確認します。列挙型ケースごとに新しい回答を作成できるかどうかを確認します。
ミーティングの最後に、利用しているアプリの中で感情分析が組み込まれていると考えられるものについて、グループで数分話し合います。利用中のその他のアプリの中で、何らかの方法で感情分析を追加すればさらに良くなると考えられるものはありますか?
機械学習のVisionフレームワークとTranslationフレームワークを使用して画像内のテキストを識別し、別の言語に翻訳するアプリを作成します。
準備:ミーティングの前に「Extract text from images(画像からテキストを抽出)」のチュートリアルを実施します。
グループアクティビティ:少人数のグループに分かれて、標識の画像のコピーを作成し、標識のテキストの部分だけをトリミングします。トリミングした画像をアプリに追加し、ユーザーが任意の認識レベルを選んで、速度か正確性のいずれかを優先できるようにアプリを変更します。速度を優先した場合に、トリミングした画像と元の画像がどのように認識されるかを試します。
次に、認識されたテキストの確実性値に基づいて、外接矩形の色を変更します。元の画像とトリミングした画像の結果をあらためて比較します。
ミーティングの最後に、入力画像についてわかったことを数分話し合います。
準備:「Wrap-up: Recognize text in images(まとめ:画像内のテキストを認識)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:少人数のグループに分かれて、Visionフレームワークに複数のオプションがある場合は複数の候補から選択する方法を提示します。新しいコントロールを追加してオプションを選択するか、キーボードを使用して正しくない結果を修正することを検討します。
ミーティングの最後に、各グループ数分で解決策を発表します。次に、Visionフレームワークを使用して便利なアプリを構築する方法をグループで話し合います。
XcodeのCreate MLツールを使用して、機械学習モデルをトレーニングします。指定されたデータを使用してモデルをトレーニングし、距離や標高などの特性に基づいてトレイルの難易度を予測します。
準備:ミーティングの前に「Train a Core ML model(Core MLモデルのトレーニング)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて、線形回帰アルゴリズムのパラメータを調整します。モデルの結果を改善できますか?トレーニングに費やす時間を短縮し、同等の品質のモデルに仕上げることができますか?
ミーティングの最後に、どのような変更を行い、精度やスピードがどの程度改善したかを数分で共有します。
準備:「Wrap-up: Model training with Create ML(まとめ:Create MLを使用したモデルトレーニング)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。データを使用してリスク値を計算する数式を特定します。アプリと同程度のリスク値を予測できれば、その数式は正しいということになります。ヒント:TrailData1k.csvをプレビューすると、個々のフィールドを分離しやすくなります。
グループアクティビティ:少人数のグループに分かれて、トレイルデータを使用し、リスク以外の値(標高、距離、危険な野生生物の存在など)を予測するモデルをトレーニングします。
次に、Create MLモデルを使用して構築できるアプリにはほかにどのような種類があるかグループで話し合います。
機械学習モデルをアプリにインポートし、ハイキングに関する詳細情報を取得して、難易度が表示されるようにします。
準備:ミーティングの前に「Import models with Core ML(Core MLを使用したモデルのインポート)」チュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて、アプリのリスク設定を変更します。このチュートリアルのリスクカテゴリは、アプリのユーザーがハイキング愛好家であることを前提としています。アマチュアハイカーのリスクを調整し、正確なリスクを表示するUIを作成します。リスクの数値を単にテキストとして表示する以外の方法を検討します。ほかのトレイルと比較してリスクを示す方法はありますか?
ミーティングの最後に、入力として使用できるほかパラメータについて数分話し合います。結果の精度を改善したり、アプリを使用するほかのユーザーをサポートしたりするにはどうすればよいでしょうか?
準備:「Wrap-up: Custom models with Core ML(Core MLを使用したカスタムモデル)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:少人数のグループに分かれて、「送信」ボタンを予測されるリスクのライブ更新に置き換えます。ヒント:入力状態が変化する際、.onChange
を使用します。
次に制作したいものを各自数分で発表します。アプリ開発の学習をどのようにして継続する予定ですか?今後どのようなアプリを作成したいですか?
3つのチュートリアルを各自で完了する
6回のミーティング(グループアクティビティを含む)を実施する
SwiftUIでのアプリ構築を通じて空間コンピューティングの基礎を学びます。まずは詳しいチュートリアルに従ってプロトタイプを作成し、適切に機能するアプリを構築します。次に、クラブのサポートも得ながら、学んだことを生かして自分だけの作品を作り上げます。
注:Apple Vision Proデバイスは必要ありません。Xcodeには、アプリの見た目と動作をMacで直に確認できるツールが含まれています。
まずは「Welcome to spatial computing(空間コンピューティングへようこそ)」をご確認ください。
SwiftUIを使って、ウインドウに対応するvisionOSアプリを作成します。
準備:最初のミーティングの前に「Add depth to your app(アプリに奥行きを与える)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて「Wrap-up: Windows in visionOS(まとめ:visionOSのウインドウ)」の記事の「Extend your app(アプリの拡張)」セクションにある2つの推奨事項を実施します。
準備:「Wrap-up: Windows in visionOS(まとめ:visionOSのウインドウ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:単語のグリッドを作成します。新規Xcodeプロジェクトを開始し、「CloserWordGrid」という名前を付けます。Grid
とGridRow
を使って、自分を表す言葉を格子状に並べます。各単語の後方にパディングを追加します。別のチャレンジとして、単語を1つ無作為に選んで後方にパディングを余分に追加し、前方の余白が最も小さい単語を毎回当てられるかどうか試します。
ミーティングの最後に、各自数分で自分のCloserWordGridプロジェクトを発表します。この新しいプラットフォームを選んだきっかけや、新しい機会を次回のアプリでどのように活用できるかを共有します。
SwiftUIを使って、visionOSで複数のウインドウを作成します。オーナメントを使って、ウインドウコンテンツを詰め込んだり隠したりせずによく使うコントロールにアクセスできるようにします。
準備:「Present common controls in an ornament(オーナメントによく使うコントロールを表示)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて、「Wrap-up: Ornaments and multiple windows(まとめ:オーナメントと複数のウインドウ)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項の1つまたは両方を実施します。
準備:「Wrap-up: Ornaments and multiple windows(まとめ:オーナメントと複数のウインドウ)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループでのアクティビティ:ラベルにすばやくアクセスできる機能を追加します。作成するラベルは、閉じたり、ほかのラベルの奥に隠したりすることができます。SwiftUIリスト
を作成し、選択したラベルを目立たせることができます。リストにあるラベルが選択されているときは、openWindow
を使ってラベルを前面に出し、必要に応じて再び開くことができます。
実施したことを各自数分で発表します。達成できた内容と、サポートや時間がもう少し必要な部分を書き出します。
Reality Composer ProとSwiftUIを使って、共有スペースでさまざまな角度から3Dコンテンツを表示します。
準備:「Create 3D models in the Shared Space(共有スペースに3Dモデルを作成)」のチュートリアルを実施します。
グループアクティビティ:全員で、または少人数のグループに分かれて「Wrap-up: Volumes in visionOS(まとめ:visionOSのボリューム)」の記事の「Extend your app(アプリの拡張)」セクションにある推奨事項の1つまたは両方を実施します。
準備:「Wrap-up: Volumes in visionOS(まとめ:visionOSのボリューム)」の記事の「Reflect on the concepts(コンセプトの振り返り)」セクションを読みます。
グループアクティビティ:Hello Worldを確認します。Hello Worldアプリをダウンロードして、コードを確認します。WorldAppファイルを開いて、使い慣れたものであることを確認します。使われているWindowGroup
シーンを数えます。ボリュメトリックウインドウスタイルが使われている場所を確認します。コードのコメントを読んで、できる限り多くのことを学びます。読み終えたら、プロジェクトに小さな変更を加えます。
このクラブが終了したあとのプランについて各自数分で発表します。アプリ開発の学習をどのようにして継続する予定ですか?今後どのようなアプリを作成したいですか?