iimon TECH BLOG

iimonエンジニアが得られた経験や知識を共有して世の中をイイモンにしていくためのブログです

Claude Codeと一緒に行う学習方法を試してみる

こんにちは、木村です。 本記事はiimonアドベントカレンダー18日目の記事となります。

最近Claude Codeを使用し始めたんですが、AIって便利ですね!全肯定でAIを使うのは良くないとは思うのですが、できることが多くて試しきれないと思うこの頃です。

Claude Codeへの指示プロンプトを手探りで作っていたら先輩に「学習モード」なるものを教えてもらったので、気になって調べてみました。2年目でまだまだいろんな分野への理解が浅い自分ですが、これを利用して勉強をより効率的にできたらと思い手を動かしながら記事を書いたので、ちょっと気になる…という方のきっかけなどになれば幸いです。

output-style

Claude Codeでは、output-style 機能を提供しています。これは、Claude Codeとユーザーのやり取りの方法をカスタマイズすることができる機能です。

説明型(Explanatory) ソフトウェアエンジニアリングのタスクの完了を支援する合間に、教育的な「インサイト」を提供します。実装の選択肢やコードベースのパターンを理解するのに役立ちます。

学習(Learning) 共同で学びながら実践するモードです。Claudeはコーディング中に「インサイト」を共有するだけでなく、皆さん自身にも戦略的な小さなコードの作成を依頼します。Claude Codeがコードにマーカーを追加し、実装を支援します。

https://code.claude.com/docs/en/output-styles

とのことです。output-styleを選択すると、defaultexplanatorylearning が選択肢として出てくるので自分の好きなタイミングで切り替えて使用できます。

※ 以降、本記事中の”学習モード”とは、Claude Code が提供する output-style: learning を、”説明モード”はoutput-style:explanatoryを指しています。

最近バックエンドを勉強したいなーと思っているので、DjangoPython、Dockerを使用してAPIを作成するまでをClaude Codeにサポートしてもらいながら勉強してみたいと思います。

1. 丸投げで学習カリキュラムを進める

最初の時点で考えた「今回やりたいこと」は以下の通りです。

  • DjangoPython、Dockerを使用した開発環境の構築から
  • Docker内でPythonDjangoの環境を作成すること
  • getとpostを使用して、簡易的に記事投稿ができるアプリの構築

最初にこの情報だけClaude Codeに渡して、完全にClaude Codeに学習プランを組み立ててもらって進めてみようと思います。

早速進めてみます!

カリキュラムが作成されました。

まずDockerとは何かについての理解を求められていますね。随時学習しながらそのアウトプットを入力して進めていきます。

作成されたカリキュラム

    # Django + Docker 記事投稿アプリ 学習カリキュラム
    
    ## 概要
    
    Docker環境でDjango(Python)を使った記事投稿アプリを作成しながら、バックエンド開発の基礎を学びます。
    
    ---
    
    ## Phase 1: Docker基礎と開発環境構築
    
    ### 1.1 Dockerとは何か
    - [ ] コンテナ技術の概念を理解する
    - [ ] Docker、コンテナ、イメージの違いを理解する
    - [ ] なぜDockerを使うのか(環境の再現性)
    
    ### 1.2 Docker環境のセットアップ
    - [ ] Dockerfile の作成と理解
    - [ ] docker-compose.yml の作成と理解
    - [ ] requirements.txt の作成
    
    ### 1.3 Python環境の構築
    - [ ] Dockerコンテナ内でPythonが動くことを確認
    - [ ] コンテナの起動・停止方法を理解
    
    ---
    
    ## Phase 2: Djangoプロジェクトの作成
    
    ### 2.1 Djangoとは何か
    - [ ] Djangoの特徴(フルスタックフレームワーク)
    - [ ] MTVアーキテクチャの理解(Model-Template-View)
    - [ ] プロジェクトとアプリの違い
    
    ### 2.2 Djangoプロジェクトの初期設定
    - [ ] django-admin startproject でプロジェクト作成
    - [ ] settings.py の基本設定
    - [ ] 開発サーバーの起動確認
    
    ### 2.3 Djangoアプリの作成
    - [ ] python manage.py startapp でアプリ作成
    - [ ] アプリの登録(INSTALLED_APPS)
    - [ ] URLルーティングの基礎
    
    ---
    
    ## Phase 3: 記事投稿アプリの実装
    
    ### 3.1 モデル(Model)の作成
    - [ ] Article モデルの定義
    - [ ] マイグレーションの実行
    - [ ] Django Admin での確認
    
    ### 3.2 GET機能の実装(記事一覧・詳細表示)
    - [ ] 記事一覧を表示するビュー
    - [ ] 記事詳細を表示するビュー
    - [ ] テンプレートの作成
    
    ### 3.3 POST機能の実装(記事投稿)
    - [ ] 記事投稿フォームの作成
    - [ ] POSTリクエストの処理
    - [ ] バリデーションの基礎
    
    ### 3.4 完成・動作確認
    - [ ] 全機能の動作確認
    - [ ] まとめと振り返り
    
    ---
    
    ## 学習の進め方
    
    1. **説明を読む** → 各概念について説明を聞く
    2. **コードを書く** → 一緒にコードを書いていく
    3. **動作確認** → 実際に動かして確認する
    4. **質問する** → 分からないことはその場で質問
    
    ---
    
    ## 現在の進捗
    
    - [ ] Phase 1: Docker基礎と開発環境構築
    - [ ] Phase 2: Djangoプロジェクトの作成
    - [ ] Phase 3: 記事投稿アプリの実装
    
    ---
    
    ## 目標成果物
    
    ```
    プロジェクト構成:
    ├── docker-compose.yml
    ├── Dockerfile
    ├── requirements.txt
    └── app/
        ├── manage.py
        ├── config/           # プロジェクト設定
        └── articles/         # 記事アプリ
            ├── models.py     # 記事モデル
            ├── views.py      # GET/POST処理
            ├── urls.py       # URLルーティング
            └── templates/    # HTMLテンプレート
    ```
    
    ---
    
    *最終更新: 2024年12月*
    
    ```

やってみる

どんどん進めていきましょう!

学習カリキュラム1ログ

※最初の学習内容について、docsフォルダを作成し、そこにメモとして記述していました。

感想

  • 随時重要ポイントの説明をしてくれる
  • 「TypeScriptだったらこういうイメージ」でも説明してくれるので、フロントエンドメインでも理解しやすい工夫があった
  • ユーザーによる入力フェーズが少ない
    • コード実装が2回
    • 理解についてのアウトプットが最初のみ
    • コマンドはClaude Codeが実行
      • →コマンド入力もそのコマンドについての説明があるとはいえClaude Code側で自動実行されるので初学者の自分にとっては理解・記憶が難しい
  • 説明部分をしっかり読んで、その箇所についての学習を自主的に行える人物がやると効果的かもしれないが、結構なペースで進められるので流れ作業になってしまいがちかも

そもそもoutput-styleでの設定は質問に対する答えを詳細に説明するか、結論を提示せずにユーザーに解決させるか、という選択なので、「カリキュラム」を進めるにあたっては丸投げだと「ユーザーによる解決」をするべき箇所の判定が難しいのかなと思いました

2. 学習カリキュラムに手をいれる

個人的には、学習では自分で作成・実行して理解をしていきたいタイプなので、より具体的にカリキュラムを作成して、そのサポートをしてもらう方が合っている気がします。

もう一度、同じ内容の成果物を目指してハンズオンをやってみます。

ただし、最初に作成されたカリキュラムに、以下の指定を行ってみます。

- claudeによる自動実装を一切行わないこと
- 各フェーズで`study-docs`配下のドキュメントを参照し、ユーザーの理解を確認すること
- コマンドの説明を行った後、その実行はユーザーに行わせること
- ユーザーの実装が間違っている場合、その指摘で正解を提示せず、より具体的なヒントを提示すること

時間がかかると思われるので、ユーザーがどこまでカリキュラムを進めたかを保存してもらうようにもします。

また、学習を行う旨を毎度指示するのは面倒なので、.claude/commands ファイルを作成し、その中にstudy.md としてカリキュラムを記述することで、カスタムコマンドを使用できるようにします。

作成したカリキュラム(.claude/commands/study.md)

```markdown
# Django + Docker 記事投稿アプリ 学習カリキュラム

## 概要

Docker 環境で Django(Python)を使った記事投稿アプリを作成しながら、バックエンド開発の基礎を学びます。

---

## Claude 向け指示(重要)

このカリキュラムに沿って学習をサポートする際、以下のルールを必ず守ること:

### 実装ルール

1. **自動実装の禁止**: Claude による自動実装を一切行わないこと。コードはすべてユーザーに書かせる
2. **コマンド実行**: コマンドの説明を行った後、その実行はユーザーに行わせること(Claude が実行しない)
3. **ヒント提示**: ユーザーの実装が間違っている場合、正解を直接提示せず、より具体的なヒントを段階的に提示すること

### 学習サポートルール

1. **ドキュメント参照**: 各フェーズで `study-docs/` 配下のドキュメントを参照し、ユーザーの既存知識を確認すること
2. **理解度確認**: 新しい概念を導入する前に、ユーザーの理解を確認する質問を行うこと
3. **段階的進行**: ユーザーが理解・実装できたことを確認してから次のステップに進むこと

### 進捗管理ルール

1. **進捗の更新**: 各項目が完了したら、このファイルのチェックボックスを `[ ]` から `[x]` に更新すること
2. **セクション完了時**: Phase が完了したら「現在の進捗」セクションも更新すること
3. **学習再開時**: 学習再開時は「現在の進捗」を確認し、未完了の項目から再開すること

---

## 学習の進め方

1. **説明を聞く** → Claude から概念の説明を受ける
2. **理解を確認** → 質問に答えて理解度を確認
3. **自分で書く** → コード・コマンドを自分で書いて実行
4. **動作確認** → 実際に動かして結果を確認
5. **質問する** → 分からないことはその場で質問

---

## 作業ディレクトリ

```
/Users/user/PersonalDevelopment/test/study_test_2/
```

---

## 現在の進捗

- [ ] Phase 1: Docker 基礎と開発環境構築
- [ ] Phase 2: Django プロジェクトの作成
- [ ] Phase 3: 記事投稿アプリの実装

**最後に学習した項目**: (未開始)

---

## Phase 1: Docker 基礎と開発環境構築

### 1.1 Docker とは何か

- [ ] コンテナ技術の概念を理解する
- [ ] Docker、コンテナ、イメージの違いを理解する
- [ ] なぜ Docker を使うのか(環境の再現性)

### 1.2 Docker 環境のセットアップ

- [ ] Dockerfile の作成と理解
- [ ] docker-compose.yml の作成と理解
- [ ] requirements.txt の作成

### 1.3 Python 環境の構築

- [ ] Docker コンテナ内で Python が動くことを確認
- [ ] コンテナの起動・停止方法を理解

---

## Phase 2: Django プロジェクトの作成

### 2.1 Django とは何か

- [ ] Django の特徴(フルスタックフレームワーク)
- [ ] MTV アーキテクチャの理解(Model-Template-View)
- [ ] プロジェクトとアプリの違い

### 2.2 Django プロジェクトの初期設定

- [ ] django-admin startproject でプロジェクト作成
- [ ] settings.py の基本設定
- [ ] 開発サーバーの起動確認

### 2.3 Django アプリの作成

- [ ] python manage.py startapp でアプリ作成
- [ ] アプリの登録(INSTALLED_APPS)
- [ ] URL ルーティングの基礎

---

## Phase 3: 記事投稿アプリの実装

### 3.1 モデル(Model)の作成

- [ ] Article モデルの定義
- [ ] マイグレーションの実行
- [ ] Django Admin での確認

### 3.2 GET 機能の実装(記事一覧・詳細表示)

- [ ] 記事一覧を表示するビュー
- [ ] 記事詳細を表示するビュー
- [ ] テンプレートの作成

### 3.3 POST 機能の実装(記事投稿)

- [ ] 記事投稿フォームの作成
- [ ] POST リクエストの処理
- [ ] バリデーションの基礎

### 3.4 完成・動作確認

- [ ] 全機能の動作確認
- [ ] まとめと振り返り

---

## 目標成果物

```
プロジェクト構成:
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── app/
    ├── manage.py
    ├── config/           # プロジェクト設定
    └── articles/         # 記事アプリ
        ├── models.py     # 記事モデル
        ├── views.py      # GET/POST処理
        ├── urls.py       # URLルーティング
        └── templates/    # HTMLテンプレート
```

---

```

やってみる

全部を試す時間がなかったので、カリキュラムのフェーズ2までを試してみます。

学習カリキュラム2:ログ

感想

  • 学習フェーズごとにユーザーに理解を求めるようになった
  • 段階的に確認を求めるので、学習する概念や、「なぜ必要か」などの疑問の解消がしやすい
  • かなり簡易的に説明が進むので、部分部分の詳しい説明まで質問をすると、何をやっていたかが飛びやすい

丸投げより遥かに良くなりました!より詳細の知識についてはユーザー側で調べる必要がありますが、基本的な部分についてはハンズオン形式で進めてくれています。

3. 学習モードvs説明モード

2をやってみて気づいたんですが、「…これ、学習モード使わなくても一緒じゃない?」

カスタムコマンド作ってそのmdファイルで指示内容を記述する、mdファイルで指定された内容に従って動作する、というのは学習モードに関わらず使用できるツールです。特に変わんないのかな〜と気になったので、/output-styleexplanatoryにして再度やってみます。

やってみる

カリキュラムの進行度を初期状態に戻して、同じく作成したカスタムコマンドの/study を使用して進めてみます。

カリキュラム3:ログ

感想

  • (セッションごとに細かい出力が変わるので、要検証ではあるのですが、)学習モードに比べて説明が細かい反面、全体の方針として「ユーザーによる実装を確認して進める」というよりは「理解について入力してもらってそれを確認する」という雰囲気
  • 学習モードが、「コーディングを行いながらの学習」という要素が強いのに対して、説明モードだと「mdファイルの内容に沿った内容の学習」という要素が強い印象

個人的には実装したものをチェックしてもらう形の方がモチベーション高くもてるので学習モードで進めた方が良さそうですが、正直このあたりは個人差でしょうか。。。

細かく学習サポートについての指示を書くのが面倒というのもあるので、mdファイルによる学習方針の指定+学習モード、というのが私にはあってそうです。

全体を通して

提示される情報の確認について

初学者なのもあり、提示される知識についての是非をその場で判定することができません。かといってひとつひとつ調べていると全然進まなくてモチベーションも下がってしまうし…(私が怠惰だというのは許してください)という部分はもっと改良の余地があるなと思いました。他サービスMCPと結びつけるとか…把握していないClaude Codeの機能を使用すればいいのか…試してみたいです。

自分にあったカリキュラムの作成が難しい

今回はバックエンドの学習でしたが、例えば自分が所属しているチームのプロダクトを考えるともっとこういった設定について突っ込んで理解した方がいい、などといった部分に対応することが難しいなと思いました。「他のリポジトリを読み込ませた上で自分に必要な知識を具体的に説明して」などのプロンプトを打つことはできるかもしれませんが、正直この辺りについては先輩・リーダーに内容を確認してもらった方が確実だなとは思います。

最後に

いろいろ試してみましたが、結論、学習モード+mdファイルによる細かい指定、がハンズオン形式で学習できる方法として私に合ってそうです。学習方法は人それぞれなので好みの形態に近づけることは難しいと思うのですが、こういうパターンもあるよ、という参考になれば幸いです。また、こういったかたちだとさらに効果的だよ!というのをご存知の方は是非教えていただきたいです!

最後まで読んでくださりありがとうございます! 弊社ではエンジニアを募集しております。 ご興味がありましたらカジュアル面談も可能ですので、下記リンクより是非ご応募ください! iimon採用サイト / Wantedly

次はねにーの記事ですね!!是非お楽しみに!✨

参考

Claude Code の学習モードで自分の手でコードを書く練習をしよう

Claudeのメモリを管理する - Claude Code Docs