--- 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` に記載されたタスクを順番に進めていきましょう。 ```