はじめに

最初のタスクを実行。 結果まで確かめる。

MonkeyCodeで小さなプロジェクトを開き、修正を依頼して結果を確認します。ブラウザーかデスクトップを選び、順に進めましょう。

手順を始める

実行環境を選ぶ

作業する環境を選びます。サンプルと完了条件は共通です。

リポジトリで始める

MonkeyCodeアカウント、自分のGitHubリポジトリ、利用枠のあるモデルが必要です。

MonkeyCodeを開く

リンク先の製品画面は英語です。ログイン時は「User」タブを選びます。

現在の画面の操作ガイド

地域の確認が出たら「Stay on International」を選びます。

ログイン画面では一般ユーザーのタブを選び、利用するログイン方法を選択します。進む前に利用規約を確認してください。

User
一般ユーザー
GitHub Sign-in
GitHubでログイン
Google Sign-in
Googleでログイン
Email and Password
パスワードでログイン
英語のMonkeyCodeログイン画面。一般ユーザーのタブとGitHub・Google・パスワードのボタン。
実際の公開ログイン画面。撮影日 .

ローカルフォルダーで始める

MonkeyCodeデスクトップアプリ、利用可能なアカウントまたは設定済みのモデル接続、タスク環境のPythonが必要です。

デスクトップアプリを入手

リンク先の製品画面は英語です。ログイン時は「User」タブを選びます。

現在の画面の操作ガイド

地域の確認が出たら「Stay on International」を選びます。

リンク先はデスクトップ版のダウンロード欄です。お使いのWindows・macOS・Linux向けを選び、インストーラーに従います。

Download for Windows
Windowsインストーラー
Download for macOS
macOS DMG
Download for Linux
Linux AppImage

自分のサーバーで実行しますか? セルフホストの手順 →

サンプルを開く

開始用ファイルをダウンロードし、新しいmonkeycode-first-taskフォルダーに展開します。やり直せるよう元のZIPを保存してください。

開始用ZIPをダウンロード

フォルダー直下にintervals.py、retry.py、2つのテストファイル、README.md、TASKS.mdがあることを確認します。

Python 3.10+

最初の確認にはパソコンにPython 3.10+が必要です。修正の確認にはMonkeyCodeのタスク環境にもPythonが必要です。標準ライブラリだけを使います。手動でローカル実行するだけならアカウントやAPIキーは不要です。 Pythonを入手 ↗

MonkeyCodeで開く前に、ローカル端末でintervals.pyのある展開済みフォルダーへ移動し、次のコマンドを実行します。

確認コマンド
python3 -m unittest discover -v

Windowsでpython3が使えずPythonランチャーがある場合は、すべてのコマンドとプロンプトのpython3をpy -3に置き換えてください。

修正前の期待結果
Ran 8 tests
FAILED (failures=1)

8テストを実行し、test_touching_is_not_overlapだけが失敗します。これが練習の開始状態です。

「Ran 0 tests」と出ますか?作業フォルダーを確認してください。0テストはこの練習の合格ではありません。

MonkeyCodeでファイルを開く

ブラウザー

  1. 展開したサンプルを自分の新しいGitHubリポジトリに追加します。
  2. MonkeyCodeの設定でGitHubアカウントを連携し、そのリポジトリへのアクセスを許可します。
  3. プロジェクトを作成し、名前、連携済みアカウント、サンプルのリポジトリを選びます。
詳しい設定手順 →

デスクトップ

  1. 公式製品サイトからデスクトップアプリをダウンロードしてインストールします。
  2. ローカルAgentを選び、intervals.pyを含む展開済みフォルダーを開きます。
  3. タスクの作業フォルダーと利用可能なモデルを確認します。
詳しい設定手順 →

修正を依頼する

サンプルプロジェクトでタスクを開始します。選択したリポジトリとモデルを確認し、下のプロンプトをタスク入力欄に貼り付けます。

サンプルフォルダーでローカルタスクを開始します。フォルダーとモデルを確認し、下のプロンプトをタスク入力欄に貼り付けます。

MonkeyCodeに貼り付ける
intervals.pyの半開区間の不具合を修正してください。(1, 3)と(3, 5)は重なりません。intervals.pyだけを変更し、テストを弱めないでください。python3 -m unittest discover -vを実行し、差分、正確なコマンド、結果を報告してください。完了条件:接する区間、空区間、逆順の区間を含む既存8テストがすべて成功すること。

完了したら変更ファイルと確認結果を読みます。元のテストは保持してください。

結果を確認する

同じ確認コマンドを再実行し、差分を読みます。次の3点を満たしたら変更を採用できます。

確認コマンド
python3 -m unittest discover -v

  • 編集したソースはintervals.pyのみ。自動生成されたキャッシュはソース変更に含めません。
  • 元のテストは変更せず、接する区間、空区間、逆順の区間を含む8テストがすべて成功。
  • タスクが変更内容、正確なコマンド、実行結果を報告。
修正後の期待結果
Ran 8 tests
OK

「OK」とテスト数の両方を確認します。要件を満たす別の正しい実装でも構いません。

3点を満たしましたか?最初のタスクは完了です。

プロジェクトを開き、範囲を絞った変更を依頼し、自分で結果を確認できました。次のタスクの前に差分を保存しましょう。

準備ができたら、次の2課題へ

TASKS.mdに2つの追加課題があります。別々のタスクとして実行し、直前の状態との差分を確認します。

  1. retry.pyを変えずに4つのリトライテストを追加。合計12テストが成功することを確認します。
  2. コードを変えずREADME.mdに「How it works」を追加。12テストが引き続き成功することを確認します。
参照解答と確認記録

試してから比較してください。ローカルで確認した参照ファイルが期待動作を示します。MonkeyCodeの実行記録ではありません。

参照解答と証跡をダウンロード ↓
変更前 · 1テスト失敗return a[0] <= b[1] and b[0] <= a[1]

[1, 3) + [3, 5) → True

変更後 · 8テスト成功return a[0] < b[1] and b[0] < a[1]

[1, 3) + [3, 5) → False

下記はCodexがローカルで作成・検証した参照例です。MonkeyCode製品の実行や顧客ベンチマークではなく、時間、トークン費用、エージェント成功率を主張しません。

1. 不具合修正

接する区間は重なりません。intervals.pyだけを変更。

記録した出力と差分を見る
--- a/intervals.py
+++ b/intervals.py
@@ -2,4 +2,4 @@
 def overlaps(a, b):
     if a[0] >= a[1] or b[0] >= b[1]:
         return False
-    return a[0] <= b[1] and b[0] <= a[1]
+    return a[0] < b[1] and b[0] < a[1]
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 8 tests in 0.000s

OK

2. テスト追加

制限、恒久エラー、回数境界、不正引数を4テストで確認。

記録した出力と差分を見る
--- a/test_retry.py
+++ b/test_retry.py
@@ -9,5 +9,18 @@
     def test_budget(self):
         self.assertFalse(should_retry(503, 3))
 
+class AddedRetryTests(unittest.TestCase):
+    def test_rate_limit(self):
+        self.assertTrue(should_retry(429, 1))
+    def test_permanent_error(self):
+        self.assertFalse(should_retry(400, 1))
+    def test_before_budget(self):
+        self.assertTrue(should_retry(503, 2))
+    def test_invalid_attempts(self):
+        for attempt, maximum in [(0, 3), (-1, 3), (1, 0)]:
+            with self.subTest(attempt=attempt, maximum=maximum):
+                with self.assertRaises(ValueError):
+                    should_retry(503, attempt, maximum)
+
 if __name__ == "__main__":
     unittest.main()
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK

3. コードの説明

READMEで2モジュールを説明し、再現コマンドを保持。

記録した出力と差分を見る
--- a/README.md
+++ b/README.md
@@ -9,3 +9,11 @@
 ```
 
 The initial interval test intentionally fails. Work on a copy.
+
+## How it works
+
+- `intervals.py` checks half-open intervals: touching endpoints do not overlap.
+- Empty or reversed intervals never overlap.
+- `retry.py` retries 408, 429, 500, 502, 503 and 504 responses only.
+- A retry is allowed only while `attempt < max_attempts`; attempts start at 1.
+- Non-positive attempt values or budgets raise `ValueError`.
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK
環境、ファイルハッシュ、全段階の結果 →

参照結果を再現

参照ZIPを展開し、最上位フォルダーでpython3 verify.pyを実行します。一時コピーで意図的な失敗、修正、文書、変異を確認します。解答が公開されているためブラインド評価には不適切です。

確認コマンド
python3 verify.py

困ったときは

アカウントやAPIキーは必要ですか?
ローカルのPython練習自体には不要です。MonkeyCodeで実行する場合、ホスト型にはアカウントとモデル利用枠、デスクトップには利用可能なアカウントまたは設定済みのモデル接続が必要です。
Pythonがない場合は?
テストを実行する環境にPython 3.10以降を入れ、python3 --versionで確認します。WindowsでPythonランチャーを使う場合はpy -3 --versionで確認し、コマンドとプロンプトのpython3をpy -3に置き換えます。
最初の確認が失敗するのはなぜですか?
開始用ファイルには意図的な境界の不具合があります。8テスト中test_touching_is_not_overlapだけが失敗する想定です。0テストや別のエラーなら、フォルダー、Python、開始用ファイルを確認してください。
GitHubリポジトリが見つからない場合は?
連携したGitHubアカウントとアプリのリポジトリアクセスを確認します。組織のリポジトリには所有者の承認が必要な場合があります。権限変更後に一覧を更新してください。
不具合が直らなかった場合は?
失敗出力を保存し、同じファイル範囲で再修正を依頼します。テストや無関係なソースを変更されたら新しいコピーでやり直します。元の8テストが成功してから採用してください。

Cookie 設定

分析目的(GA4・Matomo)のみにクッキーを使用します。広告やクロスサイト追跡は行いません。