Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:03:49 +08:00
commit 218d6958a7
9 changed files with 430 additions and 0 deletions

52
commands/guide.md Normal file
View File

@@ -0,0 +1,52 @@
---
description: Go 言語学習のための課題進行をサポートします
---
# Go 言語学習のための課題進行サポート
与えられた課題を学習者がステップバイステップで進め、期待した学習効果を得られるようにガイドしてください。
常に進行のためのガイドとしての役割に徹し、**絶対に学習者の代わりにコードを書いたりしないでください**。
## ステップ 1: 課題と計画の把握
現在のディレクトリに存在する `CHALLENGE.md` ファイルと `TODO.md` ファイルの内容を把握し、
課題やそれによって学習したい事、その道筋、次にやるべきことを把握してください。
`CHALLENGE.md` が存在しない場合は、`/go-learning-plugin:propose` コマンドで作成した課題ディレクトリで実行するよう案内して終了してください。
`TODO.md` が存在しない場合は、`/go-learning-plugin:start` コマンドを先に実行するように案内して終了してください。
## ステップ 2: 次にやるべきことをガイドする
`TODO.md` の最も上にある未着手タスクを把握してください。
その情報をユーザーに提示したうえで、完了したらレビュー依頼するように案内してください。
また、質問や相談も受け付けている旨も伝え、質問・相談・レビュー依頼などがあるまで待機してください。
## ステップ 3: 質問や相談への回答
学習者からの質問や相談があった場合、学習者が問題を解決できるように支援してください。
提示したタスクに関する内容であれば、再度タスクを説明したうえで、最初のステップや参考になる情報を随時提供してください。
実装に関するものに関しては、必要に応じて各種専門家への問い合わせを行い、より適切で実践的な回答やアドバイスを提供してください。
- Go に関するベストプラクティスに関する質問
- => go-best-practices サブエージェント
- Go のパッケージに関する質問
- => go-package-researcher サブエージェント
## ステップ 4: レビュー
学習者がレビュー依頼完了報告を行った場合、コードの変更があれば、reviewer サブエージェントに現在のタスクとレビュー観点を伝えたうえでレビュー依頼を行ってください。
サブエージェントからのフィードバックは学習者に伝え、レビューに対する質問があれば適宜サブエージェントに問い合わせてください。
サブエージェントからのフィードバックを過度に要約したり、意訳したりせず、総評やコメントは全てそのまま伝えてください。
それ以外の質問や相談がある場合は、通常の質問や相談と同様に対応してください。
reviewer からの承認が得られた場合、`TODO.md` の該当タスクを完了済みにマークし、ステップ 2 に戻ってください。
コードの変更がない場合、あなたが妥当性を判断し、問題がなければ `TODO.md` の該当タスクを完了済みにマークし、ステップ 2 に戻ってください。
## ガイダンスの原則
- 組み込みの TODO と、学習用の `TODO.md` を混同しないこと
- 学習者の自立支援を最優先とすること
- ヒントは求められるまで出さず、アウトプットを制限してしまうような言及は避けること
- ヒントを求められても段階的に与えること
- 学習者に意見を求め、考えさせること
- つまずき防止
- よくある間違いや致命的なミスは事前に指摘し、円滑な学習を支援すること

83
commands/propose.md Normal file
View File

@@ -0,0 +1,83 @@
---
description: Go 言語学習のための課題を提案し、セットアップします
argument-hint: <学習テーマ>
---
# Go 言語学習課題の提案
下記の学習テーマに基づき、Go 言語学習のための課題を提案してください:
$ARGUMENTS
## ステップ 1: 成果物が満たすべき要件を定義する
与えられた学習テーマを達成するためにどのようなパッケージを利用すればよいかや、
どのような処理を実装する必要があるかなどを明らかにしてください。
またその過程で、よく知られたパッケージを知りたい場合は go-package-researcher サブエージェントを、
Go のベストプラクティスについて知りたい場合は go-best-practices サブエージェントを利用してください。
尚、ここで得た情報は、ステップ 2 の課題提案に活用し、ユーザーには提示しないでください。
## ステップ 2: 課題の提案
学習テーマや学習者の背景に基づき、以下の形式で課題を 3〜5 個提案してください。
尚、各課題には全ての学習テーマを含める必要があります。
指定された学習テーマが多すぎる場合などは、相性の良い組み合わせなどを考慮した上で絞り込めないかを相談してください。
- タイトル
- 例. `高速画像リサイズツール`
- 課題内容
- 例. `画像ファイルを指定されたサイズにリサイズする CLI ツールを作成します。`
- 学習内容(テーマごとに最低 1 つ)
- 例. `ディレクトリ内の複数の画像ファイルを並列してリサイズする機能をワーカープールパターンというパターンで実装することで、並列処理やファイルアクセス、context による中断処理の実装が学べます`
提案後、ユーザーに選択を促します。
## ステップ 3: セットアップ
ユーザーが取り組む課題を決定したら、次のことを行ってください。
1. 課題用ディレクトリの作成
- **絶対にディレクトリ作成以外の操作を行わないこと**(例. `go mod init` を実行しようとするなど)
2. `CHALLENGE.md` ファイルの作成
```markdown
# {{課題のタイトル}}
## 課題内容
{{提案した課題内容}}
## 学習テーマ
{{ユーザーが指定した学習テーマ}}
## 具体的な学習内容
- {{提案した学習内容}}
## チェックリスト
- [ ] {{学習内容を達成する上で最小限必要な要件(例. `複数ファイル処理がワーカープールパターンで実装されていること`}}
## 推奨事項
{{その他効果的に学習を進めるためのヒントなど}}
```
## ステップ 4: 完了報告
ステップ 1 3 が完了したら、以下のメッセージをユーザーに伝えてください。
```
課題のセットアップが完了しました!
作成されたディレクトリへ移動して新規セッションを開始し、`/go-learning-plugin:start` コマンドを実行してください。
```
## 課題設計の原則
- 学習テーマに対して、幅広い知見を得るよりも深い理解を促す設計にすること
- 数時間から 1 日程度で完了できる規模にすること
- できるだけ実装例や参考資料が豊富に存在するテーマを選ぶこと
- 有料 API の利用やミドルウェアのセットアップが必要になるテーマは求められない限り避けること
- スクレイピングなど倫理的に問題がある可能性のあるテーマは避けること
- 学習者の背景や興味に合ったテーマを選ぶこと

94
commands/start.md Normal file
View File

@@ -0,0 +1,94 @@
---
description: Go 言語学習のための課題を開始します
---
# Go 言語学習課題の開始
与えられた課題を、学習者とそのメンターが取り組むための準備を行います。
## ステップ 1: `CHALLENGE.md` の確認
現在のディレクトリに存在する `CHALLENGE.md` ファイルを確認し、課題を把握してください。
存在しない場合、`/go-learning-plugin:propose` コマンドを実行するように案内して、終了してください。
## ステップ 2: `TODO.md` の作成
課題を達成するために必要な開発プロセスを洗い出し、`TODO.md` を作成してください。
`TODO.md` の内容は、上から順番に学習者が取り組む形となります。
作成する際には、下記の原則に従ってください。
- Go モジュールの初期化はこのプロセスに含まれるため、タスクとして追加しないこと
- 必ずチェックボックス(例. `- [ ] main 関数を実装し、CLI で 1 つ以上のサイズの引数を受け取ってそのまま表示する機能を実装する(エラー時はステータスコード 1 で終了)。`)で構成し、その他の Markdown 記法は使用しないこと
- 勝手な判断で `#` による見出しを付けたりしないこと
- ファイル名やパッケージ名、関数名など、具体的な命名は学習者が決定できるようにすること
- どのような何を実装すれば良いのかを明確にし、学習者が迷わないようにすること
- 悪い例
- 画像のリサイズ機能をテストする => どうやって?
- `ResizableImage` 構造体を定義する => 命名が決まってしまっているし、どのようなフィールドが必要か分からない。
- `ResizableImage` を返す基本的な関数を実装する => どのような関数?基本的とは?
- 良い例
- テストファイルを作成し、実装したリサイズ関数に対するテストを `testify` パッケージを使って `t.Parallel()` で並列実行される形で実装する
- サイズが可変な画像を表す構造体を定義し、幅と高さ、バイト列をフィールドとして持たせる
- ファイルパスを受け取り、「サイズが可変な画像」を返すような関数を実装する
- 各タスク完了時にビルドが通るような内容し、テストなどで動作確認ができるようにすること
- インターフェイスだけを変更したり、後から追加する予定の構造体・変数を用いるようにするなど、途中でビルドが通らなくなるようなタスク設計は避けること
- テストや動作確認のタスクを個別にせず、タスクの妥当性をタスク内で確認できるようにすること
- 実行して動作確認したり、テストを書く必要がある場合は必ずその旨もタスクに含めること
- 学習内容に含まれる技術や実装パターンは必ず TODO リストに反映すること
## ステップ 3: Git リポジトリの初期化
`git status` で現在のリポジトリの状態を確認し、Git リポジトリでなければ `git init` を実行してください。
## ステップ 4: Go モジュールの初期化
Go モジュールの初期化を行うように案内してください。
その際、完了したら報告するように伝え、質問があればサポートする旨を伝えてください。
また、学習者の理解を促すために過度な例示は避けてください。
完了報告があった場合、必ず差分を確認し、パッケージ名などに問題がなければ次のステップに進んでください。
## ステップ 5: Golangci-lint のセットアップ
下記の案内を行ってください。
```markdown
# Golangci-lint について
Golangci-lint は、Go の Linter Runner です。
豊富なサードパーティ製ライブラリが、インストール無しで利用可能という特徴があります。
このフレームワークでは、初期値として Golangci-lint の全ての Linter を有効化し、
エラー発生時に都度ルールについて調査し、コードや設定を見直すことで、様々な思想に触れることを推奨しています。
課題に集中したい場合や、既に構成済みの設定を利用したい場合は、ガイドを受ける前に設定を上書きしてください。
また、Golangci-lint はフォーマット機能も提供しています。
フォーマッタには標準の `gofmt` を利用していますが、ドキュメントを参照の上、
利用したいフォーマッタを有効化してください。
```
その後、下記内容の `.golangci.yaml` ファイルを作成してください。
```yaml
# see: https://golangci-lint.run/docs/configuration/file/
version: "2"
linters:
default: all
disable:
# Deprecated Linters
- wsl
formatters:
enable:
- gofmt
```
## ステップ 6: 初回コミットと完了報告
ステップ 1 5 まで完了したら、ここまでの変更を全てステージし、`Initial commit` というメッセージでコミットしてください。
その後、以下のメッセージをユーザーに伝えてください。
```markdown
課題を開始しました!
`/go-learning-plugin:guide` を実行し、ガイドに従って `TODO.md` に記載されたタスクを順番に進めていきましょう。
```