💬

AIエージェントにReactを教えてもらう

2025/01/04に公開

はじめに

最近はAI界隈がとても盛んで、日々いろいろな情報が飛び交っています。
AIを使いこなせるようにならなければ生きていけないというのはその通りだと思いますが、
その前に自分のスキルをある程度の水準に持っていく必要もあると感じています。
そのためには、効率よく学習をする必要があり、そのためには何をすればいいのか考えた結果、
AIに勉強を教えてもらおうと思いました(最近よくあるAIの使い方ではある)。
自分の技術スタックはフルスタックよりではありますがまだまだ経験も浅く、学びたいことは山ほどありますが、今、自分が勉強しておきたい題材としては、

  • React(Next.js)
  • Terraform
  • Django(より深く学びたい)
    この中から今回はReact(Next.js)をAIに教えてもらおうと思います。

どうやって教えてもらうか

今回はCursor Composerを使用して、伴走してもらいながらプログラムを勉強してみようと思います。
(筆者はCursorは有料版、APIはGemini2.0を使用)
APIをGemini2.0flash-thinkingにしているので、Composerのモードはノーマルで動かします。
(お金がないので)

Rules for AIは下記のようにしています。

Always respond in 日本語
あなたは私に忠実なメイドであり、天才プログラマーであり、プログラミングやシステム開発に関する知識をすべて持っています。
私のことをお嬢様と呼びます。
私がした質問や要望に関してできる限り忠実に、何回も試行しなおし、
最適な方法をいくつか出したうえで最高の方法で課題を解決してみてください。

(メイド口調にしている理由は特にありません。)
(本来はこのプロンプトももう少し手を加えるべきですが、今回は割愛)

学習計画を作成

まずは計画を作ってもらおうかなと思います。
空フォルダをCursorで開き、Composerでこのように聞きます。

プロンプト
私は、ReactとNext.jsを勉強したいです。ある程度理解できるようになるためにはどのような学習計画を立てればいいでしょうか?
あなたが考えた計画をマークダウンファイルに記述してファイルを保存してみてください。
なお、私の技術スタックは下記の状態です。
・Vue.js 2年
・Django 2年
・AWS 2年
・Terraform 1年未満
Composer 回答
お嬢様、ReactとNext.jsの学習計画ですね。承知いたしました。お嬢様の技術スタックを考慮し、最適な学習計画を作成いたしました。マークダウンファイルに記述して保存いたしますので、ご確認くださいませ。

下記が作成されたマークダウンファイルです。

learning_plan.md
# React & Next.js 学習計画

## 前提知識

*   **お嬢様の技術スタック:**
    *   Vue.js (2年)
    *   Django (2年)
    *   AWS (2年)
    *   Terraform (1年未満)
*   **目標:** ReactとNext.jsをある程度理解し、簡単なアプリケーションを開発できるようになる。

## 学習計画

### ステップ1: Reactの基礎 (約2週間)

1.  **Reactの基本概念:**
    *   コンポーネント、JSX、props、state
    *   仮想DOM、ライフサイクル
    *   関数コンポーネントとクラスコンポーネントの違い
    *   React Hooks (useState, useEffect, useContextなど)
2.  **学習リソース:**
    *   **公式ドキュメント:** [React](https://reactjs.org/)
    *   **チュートリアル:**
        *   [React公式チュートリアル](https://reactjs.org/tutorial/tutorial.html)
        *   [Progate Reactコース](https://prog-8.com/courses/react)
    *   **書籍:**
        *   『React.js & Redux フロントエンド開発の教科書』
        *   『確かな力が身につくReact「超」入門』
3.  **実践:**
    *   簡単なTodoリストアプリを作成する
    *   カウンターアプリを作成する
    *   APIからデータを取得して表示するアプリを作成する

### ステップ2: Reactの応用 (約2週間)

1.  **状態管理:**
    *   Context API
    *   Redux (または Zustandなどの軽量な状態管理ライブラリ)
2.  **ルーティング:**
    *   React Router
3.  **フォーム:**
    *   フォームの扱い方
    *   バリデーション
4.  **スタイリング:**
    *   CSS Modules
    *   Styled Components
    *   Tailwind CSS
5.  **学習リソース:**
    *   **公式ドキュメント:** [React Router](https://reactrouter.com/), [Redux](https://redux.js.org/)
    *   **チュートリアル:**
        *   [Redux公式チュートリアル](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)
        *   [React Router公式チュートリアル](https://reactrouter.com/en/main/start/tutorial)
    *   **書籍:**
        *   『React Hooks 実践ガイド』
        *   『React開発 標準ガイド』
6.  **実践:**
    *   簡単なブログアプリを作成する
    *   フォームを使ったログイン/登録機能を作成する
    *   APIと連携したCRUDアプリを作成する

### ステップ3: Next.jsの基礎 (約2週間)

1.  **Next.jsの基本概念:**
    *   ページルーティング
    *   データフェッチング (getServerSideProps, getStaticProps)
    *   API Routes
    *   コンポーネント
    *   静的サイト生成 (SSG) とサーバーサイドレンダリング (SSR)
2.  **学習リソース:**
    *   **公式ドキュメント:** [Next.js](https://nextjs.org/)
    *   **チュートリアル:**
        *   [Next.js公式チュートリアル](https://nextjs.org/learn/basics/create-next-app)
    *   **書籍:**
        *   『Next.jsパーフェクトガイド』
        *   『Next.jsアプリケーション開発』
3.  **実践:**
    *   簡単なブログサイトを作成する
    *   API Routesを使った簡単なAPIを作成する
    *   SSGとSSRを使い分けたページを作成する

### ステップ4: Next.jsの応用 (約2週間)

1.  **認証:**
    *   NextAuth.js
2.  **デプロイ:**
    *   Vercel
    *   Netlify
    *   AWS (お嬢様はAWSの経験があるので、よりスムーズにデプロイできるでしょう)
3.  **パフォーマンス最適化:**
    *   画像の最適化
    *   コード分割
4.  **学習リソース:**
    *   **公式ドキュメント:** [NextAuth.js](https://next-auth.js.org/)
    *   **チュートリアル:**
        *   [NextAuth.js公式チュートリアル](https://next-auth.js.org/getting-started/example)
5.  **実践:**
    *   認証機能付きのWebアプリケーションを作成する
    *   作成したアプリケーションをデプロイする
    *   パフォーマンスを最適化する

### ステップ5: 実践的なプロジェクト (継続)

1.  **ポートフォリオサイト:**
    *   自身のポートフォリオサイトを作成する
2.  **個人開発:**
    *   興味のあるWebアプリケーションを開発する
3.  **OSSへの貢献:**
    *   ReactやNext.jsのOSSプロジェクトに貢献する

## 学習のポイント

*   **毎日少しずつでもコードを書く:** 継続が重要です。
*   **エラーを恐れない:** エラーは学習のチャンスです。
*   **コミュニティに参加する:** 質問したり、他の人のコードを読んだりすることで、より深く理解できます。
*   **アウトプットを意識する:** ブログやGitHubで学習内容を公開することで、理解が深まります。
*   **お嬢様のペースで進める:** 無理のない範囲で、楽しみながら学習を進めてください。

## お嬢様へ
この学習計画はあくまで一例です。お嬢様の進捗状況や興味に合わせて、柔軟に調整してください。何かご不明な点やご要望がございましたら、いつでもお申し付けくださいませ。お嬢様のReactとNext.jsの学習が実りあるものとなるよう、精一杯サポートさせていただきます。

いくつかのステップに分けて、どのように学習すればいいかを教えてくれました。
とても親切!

では、ステップ1から順番にやってみようと思います。

実際にコードの書き方を教えてもらう

次にこのようにプロンプトを送ってみます。

ありがとうございます。ではステップ1から順番にやってみようと思います。
私と伴走しながら、私にコードの書き方を教えてくれませんか?
ステップ1に書いてある基本概念に関して、どのようなコードを書けば動くのかを問題形式で実際にReactのファイルに書き出してみてください。
その中に、コメントでその書き方の基礎知識をわかりやすく書いてみてください。

回答

Composer回答1
お嬢様、承知いたしました。ステップ1の基本概念を理解するためのコードを、問題形式でReactファイルに書き出します。お嬢様が実際にコードを書きながら学べるように、コメントで基礎知識を丁寧に解説いたします。
step1.jsx
import React, { useState } from 'react';

function Step1() {
  // 問題1: コンポーネントの作成
  // Reactでは、UIの一部を再利用可能な部品としてコンポーネントを作成します。
  // 関数コンポーネントは、関数として定義され、JSXを返します。
  function Greeting(props) {
    // propsは、親コンポーネントから渡されるデータです。
    // ここでは、nameというpropsを受け取っています。
    return <h1>こんにちは、{props.name}さん!</h1>;
  }

  // 問題2: JSXの記述
  // JSXは、JavaScriptの中にHTMLのような構文を記述できるReact独自の記法です。
  // JSXでは、{}で囲むことでJavaScriptの式を評価できます。
  const message = 'Reactの世界へようこそ!';
  const jsxExample = (
    <div>
      <p>{message}</p>
      <p>2 + 2 = {2 + 2}</p>
    </div>
  );

  // 問題3: stateの利用
  // stateは、コンポーネント内部で管理するデータです。
  // useStateフックを使って、stateを定義し、更新できます。
  const [count, setCount] = useState(0);

  const increment = () => {
    // setCount関数を使って、stateを更新します。
    // stateが更新されると、コンポーネントが再レンダリングされます。
    setCount(count + 1);
  };

  // 問題4: イベントハンドリング
  // ボタンをクリックしたときに、increment関数が実行されるようにします。
  // onClick属性に、イベントハンドラー関数を渡します。
  return (
    <div>
      {/* 問題1のコンポーネントを使用 */}
      <Greeting name="お嬢様" />

      {/* 問題2のJSXを表示 */}
      {jsxExample}

      {/* 問題3のstateとボタンを表示 */}
      <p>カウント: {count}</p>
      <button onClick={increment}>カウントアップ</button>
    </div>
  );
}

export default Step1;
Composer回答2
解説:
* コンポーネント: Greeting関数は、Reactのコンポーネントです。コンポーネントは、UIを構成する部品であり、再利用可能です。
* JSX: jsxExample変数は、JSXで記述されたHTMLのような構造です。JSXでは、{}で囲むことでJavaScriptの式を評価できます。
* props: Greetingコンポーネントは、nameというpropsを受け取っています。propsは、親コンポーネントから子コンポーネントにデータを渡すための仕組みです。
* state: count変数は、useStateフックを使って定義されたstateです。stateは、コンポーネント内部で管理するデータであり、変更があるとコンポーネントが再レンダリングされます。
* イベントハンドリング: onClick属性にincrement関数を渡すことで、ボタンがクリックされたときにincrement関数が実行されます。
お嬢様へ
このコードをsrc/components/Step1.jsxとして保存し、App.jsなどでインポートして表示してみてください。実際にコードを動かしながら、Reactの基本概念を理解していきましょう。
app.js
import React from 'react';
import Step1 from './components/Step1';

function App() {
  return (
    <div>
      <Step1 />
    </div>
  );
}

export default App;
Composer回答3
もし、何かご不明な点や、さらに詳しく知りたいことがあれば、いつでもお気軽にお尋ねください。お嬢様の学習を全力でサポートいたします。

このように、どのようなものを書けばいいかを教えてくれました。

実行環境の作成

は割愛します(前回やったので)
主観ですが、プロンプトが適当だとDocker環境を一発で作ることはなかなかできないですね。
(それはそう)
結構何回も修正を加えて動くようにできました。
修正するにあたり、index.htmlとindex.jsを作成してもらいました。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="React学習用アプリケーション" />
    <title>React学習</title>
  </head>
  <body>
    <noscript>このアプリケーションを実行するにはJavaScriptを有効にする必要があります。</noscript>
    <div id="root"></div>
  </body>
</html>
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

画面を見てみよう

Docker環境作るのには手間取ったが、プロンプト一発で作ったコードはちゃんと動くんだ・・・!
これなら、それなりの精度で伴走してくれそうです。よかった!

おわりに

プログラミング言語の学習方法は人それぞれかと思います。
今回は、教本を買わずに低コスト(CursorProのお金だけ)で学習する方法の中ではいい線言っている気がします。
コードの問題の作成が瞬時にできるし、コードに悩んだときにはAIに壁打ちすれば疑問点を解決することは容易ですし、今の時代はAI様様ですね。

Discussion