トラックの構築


トラックは、さまざまな要素から成り立っています。

メタデータ

トラックの設定とメタデータは、config.jsonファイルで定義します。ここには、トラックの演習、概念、エディターの設定など、さまざまな情報が記述されています。詳しくは、config.jsonのドキュメントを参照してください。

概念

トラックの概念演習と練習演習は、すべて_概念_を扱います。これらの概念は、それぞれが独立した存在です。詳しくは、ドキュメントを参照してください。

トラックの概念演習で教える概念は、_シラバス_を構成します。_シラバス_は、_概念マップ_として学習者に表示されます。_シラバス_の概念マップをどのように構築するかについては、_概念マップ_のドキュメントを参照してください。

シラバスの設計方法について詳しくは、シラバスのドキュメントを参照してください。

演習

トラックには、次の2種類の演習があります。

  • 概念演習:学習者に1つ以上の概念を教えるために設計されています。詳しくは、ドキュメントを参照してください。
  • 練習演習:学んだ概念を練習するために設計されています。詳しくは、ドキュメントを参照してください。

さらに深く掘り下げる

各演習には、任意で「さらに深く掘り下げる」セクションを設けることができ、そこには次の内容を含められます。

  • アプローチ:その演習を解くためのさまざまな方法
  • 記事:演習の興味深い側面を解説したもの
  • コミュニティ動画:演習を紹介する動画で、通常は誰かが演習を一から解く様子を収録したものです

共有ファイル

なかには、個々の演習に固有のものではなく、_すべて_の演習に共通して適用されるファイルもあります。詳しくは、ドキュメントを参照してください。

ドキュメント

各トラックには、必須のドキュメントファイルがいくつかあります。詳しくは、ドキュメントを参照してください。

ウィジェット

トラックの一部の要素は、ウィジェットとして表示できます。

スタイルガイド

すべてのドキュメントは、スタイルガイドに従う必要があります。Markdownドキュメントは、Markdown標準にも従う必要があります。

例

csharp
├── config
|   ├── exercise_readme.go.tmpl
|   └── maintainers.json
├── docs
|   ├── ABOUT.md
|   ├── INSTALLATION.md
|   ├── LEARNING.md
|   ├── RESOURCES.md
|   └── TESTS.md
├── concepts
|   └── numbers
|       ├── about.md
|       ├── introduction.md
|       └── links.json
└── exercises
|   ├── concept
|   |   └── cars-assemble
|   |       ├── .docs
|   |       |   ├── hints.md
|   |       |   ├── introduction.md
|   |       |   └── instructions.md
|   |       ├── .meta
|   |       |   ├── config.json
|   |       |   ├── design.md
|   |       |   └── Exemplar.cs (track-specific)
|   |       ├── CarsAssemble.cs (track-specific)
|   |       ├── CarsAssemble.csproj (track-specific)
|   |       └── CarsAssembleTests.cs (track-specific)
|   ├── practice
|   |   └── leap
|   |       └── .docs
|   |       |   └── instructions.md
|   |       └── .meta
|   |       |   ├── config.json
|   |       |   └── Example.cs (track-specific)
|   |       ├── Leap.cs (track-specific)
|   |       ├── Leap.csproj (track-specific)
|   |       └── LeapTests.cs (track-specific)
|   └── shared
|       └── .docs
|           ├── debug.md
|           ├── help.md
|           └── tests.md
└── config.json

メンテナンス

リポジトリの権限

各トラックには(自動的に)メンテナンスカテゴリが割り当てられ、これによってトラックメンテナーのGitHubリポジトリ権限が決まります。

不要なテスト実行を避ける

演習に変更を加えるトラックのPRをマージすると、学習者が公開した解答の最新イテレーションが_すべて_再テストされます。 人気のある演習では、これは_非常に_コストのかかる処理です(極端な例では、PythonのHello Worldで7万回のテスト実行にもなります!)。

こうした事態をむやみに引き起こさないようにしましょう。

マージされるコミットが次のいずれかに当てはまる場合、解答は再テストされません。

  • .docsや.metaファイル、その他ユーザーが直接触れないファイルだけを変更している
  • または、コミットメッセージ本文に[no important files changed]が含まれている

マージされるコミットが次の両方に当てはまる場合、解答は再テストされます。

  • コミットメッセージ本文に[no important files changed]がない
  • かつ、その演習の次のいずれかのファイル(.meta/config.jsonファイルで指定されているもの)を変更している
    • テストファイル
    • エディターファイル
    • インバリデーターファイル

いくつかの例を挙げます。

  • Python#3423:ドキュメントのみを変更しているため、テストは実行されませんでした
  • Python#3437:[no important files changed]を付けてマージしたため、テストは実行されませんでした
  • Csharp#2138:テストから空白を削除しました。キーワードは追加されませんでした。そのため、テストが不要に再実行されました。