Git リポジトリから、非表示のテスト付きのプログラミング課題を作る

よいプログラミング演習は、たいてい小さなプロジェクトです。スターターコード、いくつかのヘルパーファイル、パッケージファイル、テストのフォルダー。すでに Git で管理しているなら、ブラウザーに1ファイルずつ写す必要はありません。リポジトリを課題に読み込み、生徒に見せないテストのファイルを指定して、配布するだけです。

プラットフォームに付属する Git サーバーで、学校の教職員と生徒が使えます。どのコーディング課題もこの方法で読み込め、生徒がクローンしてプッシュする課題も同じです。そちらには専用のページがあります。

リポジトリから課題を読み込む

課題のエディターで「Git から読み込む」を押し、読み取れるリポジトリとブランチを選ぶか、タグかコミットを入力して、「プレビュー」を押します。プレビューには、読み込まれるファイル、プログラムを開始するファイル、読み込まれないファイルとその理由(テキストではない、大きすぎる、使えない名前)が一覧になります。「読み込む」を押すまでは何も変わりません。

ファイルのコピーは1回だけで、フォルダーもパッケージファイルも含まれます。その後の課題は他の課題と同じで、いつもどおりブラウザーで編集でき、リポジトリは変更されません。上限はほかのプロジェクトと同じで、50個のファイル、1ファイル64 KB までです。

  1. 課題をエディターで開く. コードの上のツールにある「Git から読み込む」を押します。
  2. リポジトリとブランチを選ぶ. 一覧には読み取れるリポジトリだけが表示されます。タグやコミットも指定できます。
  3. 非表示と保護のパスを指定する. 1行に1つ。tests/ のようなフォルダー、test_*.py のような名前、またはパスです。
  4. プレビューしてから読み込む. 何かが変わる前に、読み込まれるものと読み込まれないものを確認できます。
  5. 配布する. 生徒は全員、非表示ファイルを除いた自分専用のコピーを受け取ります。

非表示のテストファイルと、生徒が変更できないファイル

同じ画面で、生徒に見せないパス(tests/ や test_*.py など)と、見せても結果は変えられないパスを指定します。非表示ファイルは配布されず、生徒のリポジトリにも入りません。

生徒の課題物をテストまたは採点するたびに、教員の非表示ファイルと保護ファイルが先に課題から戻されるため、生徒が自分のコピーでテストを変更しても結果は変わりません。Python、Java、Go、Node の JavaScript では、非表示のテストファイルはその言語のテストツール(pytest、JUnit、go test、Node のテストランナー)で、課題の「テスト」タブと一緒に実行されます。

このリストは Git から読み込んだ課題だけのものではありません。ブラウザーで作った課題にも非表示と保護のパスを指定できます。

新しいコミットから課題を更新する

課題はどのコミットから読み込んだかを覚えています。「Git から更新」で新しいコミットを読み込むと、それ以降にブラウザーで編集した内容は置き換わります。すでに課題を持っている生徒のコピーはそのままなので、スターターコードの修正は次に配布する生徒から反映されます。

よくある質問

GitHub から課題を読み込めますか?
プラットフォームの Git サーバーから読み込みます。GitHub にあるプロジェクトを使うには、先に当社の Git サーバーのリポジトリにプッシュしてください。git remote add と git push を1回ずつ実行するだけです。
生徒に教員のリポジトリが見えますか?
いいえ。生徒が受け取るのは、非表示ファイルを除いた自分専用の課題のコピーです。クローンを許可した場合も、生徒ごとに自分のコピーから新しいリポジトリが作られ、教員のリポジトリが渡されることはありません。
生徒は採点に使うテストを変更できますか?
いいえ。非表示のテストファイルは生徒に渡されず、課題物をテストまたは採点するたびに、教員の非表示ファイルと保護ファイルが課題から戻されます。