問題作成者マニュアル Stable
参加者が解く内容、つまり状況、実際に動く問題環境、verifier、採点metadata、hintを 作成・保守する人のためのマニュアルです。TenkaCloud tenantの運用やplatform codeの 変更は必要ありません。
あなたのゴール
公開できる状態とは、次の3点を第三者が再現できることです。
- 新しいcheckoutで
make pack-validateが成功する。 - 対応するlocal runtimeがある問題は、作成者が起動からflag提出までリハーサルできる。
- 問題を作っていない人が、参加者向け問題文だけでゴールと最初の操作を説明できる。
local runtimeが未対応なら、実行結果を推測せずNot runと記録します。対応する
test環境で実行を確認するか、未確認であることを開催者へ明示します。第三者が問題文を
理解できなければ、環境を作り直す前に「状況・ゴール・最初の操作・完了条件」を書き直します。
packを作成して検証する
make pack-init ARGS="./my-first-pack"
make pack-validate ARGS="./my-first-pack"
最初のpackチュートリアルでは、最小構成の packを雛形作成、検証、不変Git commitへの固定、install、tenantへの有効化、削除まで 通して扱います。
JSONだけをMCPで事前検証する
MCP 2026-07-28対応clientから
{ALWAYS_ON_CONTROL_PLANE_ORIGIN}/mcp/problem-authorへ接続すると、
validate_pack_manifestとvalidate_problem_metadataを認証なしで呼べます。
この2つは、渡されたJSONを同じProblem SDK contractで純粋かつ決定的に検証します。
filesystem、network、cloud、環境変数、credentialへアクセスせず、同じ入力には同じ
diagnosticを返します。ただし、参照fileの存在、templateの起動、local mode、
flag提出は確認しません。公開前の最終確認では必ずmake pack-validateと実際の
リハーサルを行います。
参加者の体験を書く
技術詳細より前に、各問題が次の質問へ答えるようにします。
- 状況の中で何が起きたか。
- 参加者が作る、目で確認できる結果は何か。
- 最初に行う安全な操作は何か。
- URL、shell、cloud console、local appのどこで操作するか。
- どの証拠が
TC{...}形式のflagになるか。 - 問題環境をどうリセット・停止するか。
行動に必要な用語は初出時に説明します。cloud、container、Docker、region、database などの概念自体が学習目標でない限り、単語の暗記を採点しません。
問題を構成する契約
| 部分 | 担当 |
|---|---|
tenkacloud-pack.json |
packのID、version、license、problem root、runtime、dependency |
metadata.json |
問題ID、runtime、template、scoring、endpoint、phase、disruption |
| runtime entry | 参加者が実際に使う分離された環境を作る |
| verifierまたは採点rule | 提出された証拠が正しいか判定する |
| README / 問題文 | 状況、ゴール、最初の操作、成功条件、後片付け |
| hint | 最終解答を早く見せすぎない段階的な助け |
field名を推測せず、生成済みの pack manifestと problem metadataを参照してください。
実際の操作をリハーサルする
validationは契約と参照fileを検査しますが、問題が理解でき、解けることまでは証明 しません。
- 初期状態のlocal環境またはtest環境を使う。
- 参加者に見える問題文だけを読む。
- deployされた問題環境またはlocal問題環境を起動する。
- 意図した調査または修正を行う。
- 正確なflagをParticipant Portalから提出する。
- 誤ったflag、リセット、停止、2回目の起動も試す。
- 問題を作っていない人に同じ流れを完了してもらう。
最後の確認者には実装、verifier、正解flagを見せません。確認者が問題文を読んだあと、 「何が起きているか」「何を直すか」「最初に何を開くか」「何をもって完了とするか」を 自分の言葉で説明でき、実際にflag提出まで到達したときだけ公開へ進みます。
local modeは対応するlocal runtimeを宣言した問題のためのものです。WordPressの チュートリアルでも、参加者オンボーディングの代替でもありません。WordPress問題を 作る場合は、独立した学習目標とverifierを持つlocal問題としてここで扱います。
安全に公開する
- 不変releaseごとにpack versionを上げる。
- commit前にvalidateする。
- install時は完全な40文字のGit commit SHAへ固定する。
- secret、変更可能なremote asset、install時に動くscriptをpackへ入れない。
- 作成者だけが知る答えを参加者向けmetadataやendpointへ出さない。
- 必要account、region、想定起動時間、停止方法、費用は開催者向けメモへ分ける。
packに含められるものは securityとprovenance、 validator messageはvalidation error を参照してください。
問題内容ではなく新しいplatform機能が必要なら、platform Issueを作り、 開発者マニュアルへ切り替えます。