2022年11月にChatGPTがリリースされて、1年と約半年が経過しました。 私はChatGPTが話題になった頃から、継続して利用しています。 ChatGPTを使い続けていると、Webアプリケーションのフロントエンド開発に役立つことがありました。
そこで、本記事では フロントエンド開発でChatGPTを活用して効率よく進める3つのパターン にまとめました。 これらのパターンを紹介し、読者の皆さんの開発に役立ててもらえればと思います。
以下は、本記事で紹介するFigma、ソースコード、デプロイ先URLです。
ChatGPTにフロントエンドのソースコードなどを学習させないために、データコントロールをOFFにしておきましょう。
Data Controls FAQ | OpenAI Help Centerこれから紹介する方法は特定の技術スタックに限定されるものではありません。 皆さんのお好みのものに読み替えていただければと思います。今回は以下の技術スタック・ツールを使用します。
対象となる画面は、Wireframing in FigmaにあるPhotoというサービスの1画面です。

ソースコードは、silverbirder/figma-photo-sample-app-for-ai - GitHub にありますのでご参考にください。
今回紹介するのは、フロントエンド開発における以下の流れです。
① FigmaのデザインからReactコンポーネント作成
② 仕様を満たすビジネスロジックの実装
③ 開発したReactコンポーネントのテストコード作成
新規開発や既存改修のどちらでも、この流れは大きく変わりません。今回は上記の順番で進めます。
FigmaのデザインからReactコードを生成するための方法をご紹介します。
ちなみに、Figmaのデザインからコード生成するプラグインやサービスは、ネットで検索すると沢山見つかりますが、コード生成結果の精度はあまり芳しくありませんでした。
以下の図のように、Figmaから対象のデザインのCSSを抽出します。また、デザインのスクリーンショットも撮っておきます。

以下のようなメッセージをChatGPT(GPT-4o)に送ります。
以下は、Figmaから抽出したCSSです。
---
<コピーしたCSS> (内容は確認しておいてください。)
---
添付画像は、上記CSSのスクリーンショットです。
これらから、ReactとCSS Moduleのコードを生成してください。
コード生成は、以下のコードを参考にしてください。
---
import React from "react";
import styles from "./Hoge.module.css";
const Hoge = () => {
return ();
};
export default Hoge;
---返答されたコードを基にReactコンポーネントを作成します。 Figmaのデザインを忠実に再現しようとするため、適宜「positionを使わずに」や「横幅は固定せず」といった指示を出して調整します。 レスポンシブデザインやアニメーション、ホバーなども適宜調整します。
以下の画像は、実際にコード生成されたものを適用したものです。完璧ではありませんが、 数分程度でFigmaの1画面が構築できました 。(修正は2度ぐらい)

ゼロから開発するよりも、ある程度 雛形となるコードを作成してくれる方が時間短縮になります 。 また、 自身では知らない方法でコード作成してくれる場合もあり、勉強になります 。
Webアプリケーションのフロントエンドで、仕様を満たすための実装をします。 例えば、フォームのバリデーションやAPI通信、クリックなどのインタラクションなどがあります。 このような実装方法について、ChatGPTに尋ねることが多いです。
尋ねる内容は、Reactのコードと仕様文書をChatGPTに送って回答をもらいます。 たびたび仕様を満たせない回答もありますが、基本的には自分の設計案を確認するために使います。
以下は、ナビゲーションヘッダーを固定し、透過グラデーションさせたい場合の例です。
以下のReactコードとスタイルから、ヘッダーを固定させて かつ 透過しグラデーションしてほしい。
---
<Reactのコード>
---
<スタイルのコード>
---生成されたCSSと画面の例です。
.navbar {
position: fixed; /* 固定表示にする */
top: 0;
left: 0;
width: 100%;
height: 72px;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 32px;
z-index: 1000; /* 他の要素より前面に表示するためにz-indexを追加 */
backdrop-filter: blur(10px); /* 背景をぼかして通過させる */
}
これは単なる例に過ぎませんが、 生成されたコードから設計方法について参考にしたり、知らない方法を学べる良い機会 になります。
このプロセスは仕様に依存するため、具体的な方法を紹介することは少ないです。
プロダクトのコード(Reactコード)をChatGPTに渡し、単体テストを書いてもらいます。 参考になるテストコードも一緒に渡すと、それに合わせたコードを生成してくれます。 テストが動作しない場合や型の誤りがある場合は、指示を出して修正します。
以下のReactコードに対して、テストコードを書いてください。
---
<Reactコード>
---
テストコードは、以下のコードを参考にしてください。
---
import { expect, it, describe } from "vitest";
import { render } from "@testing-library/react";
import Hoge from "./Hoge";
describe("Hoge", () => {
const setup = () => {
const utils = render(<Hoge />);
return { ...utils };
};
it("should render correctly and match snapshot", () => {
// Act
const { asFragment } = setup();
// Assert
expect(asFragment()).toMatchSnapshot();
});
});
---以下は、生成されたテストコードの例です。
import { expect, it, describe } from "vitest";
import { render } from "@testing-library/react";
import Navbar from "./Navbar";
describe("Navbar Component", () => {
const setup = () => {
const utils = render(<Navbar />);
return { ...utils };
};
it("should render correctly and match snapshot", () => {
// Act
const { asFragment } = setup();
// Assert
expect(asFragment()).toMatchSnapshot();
});
it("should render the logo", () => {
// Act
const
{ getByText } = setup();
// Assert
expect(getByText("photo")).toBeDefined();
});
it("should render all navigation links", () => {
// Act
const { getByText } = setup();
// Assert
const navLinks = ["Features", "Pricing", "Community", "Support"];
navLinks.forEach((linkText) => {
expect(getByText(linkText)).toBeDefined();
});
});
it("should render the login and register buttons", () => {
// Act
const { getByRole } = setup();
// Assert
expect(getByRole("button", { name: "Log in" })).toBeDefined();
expect(getByRole("button", { name: "Register" })).toBeDefined();
});
});仕様が複雑になると、テストケースが増え、ChatGPTの便利さをより実感できます。
個人的に、テストコードが書きやすいプロダクトコードは、設計として見通しの良いものになると考えています。 そのため、テストコードが読みにくい場合は、プロダクトコードを修正するようにしています。
もともと、生成AIが話題になった頃から使っていたツールだからです。 GitHub Copilotも良いツールですが、 デザインなど視覚的な情報が必要な場合 にはChatGPTが役立ちます。
最近、ChatGPTのMacOSアプリがリリースされ、スクリーンショットのしやすさが改善されています。
Using the ChatGPT MacOS App | OpenAI Help Centerこのように、ChatGPTを活用することでフロントエンド開発の効率化を図ることができます。 時間短縮だけでなく、知らないことを学べる機会にもなり一石二鳥です。 ぜひ、皆さんの開発にも取り入れてみてください。
-
タグ「AI」の記事
主にWeb関連の個人開発をしている際に心がけていることを書きます。 月末に近づくにつれ、AIの利用上限に達してしまうことがあります。 その状況になった時、以下のいずれかの選択肢が私の中では残っています。 課金して利用上限を増やす 無料モデル
最近、AI エージェントに Playwright MCP を設定した状態で、CSS の調整作業を行っていました。 デザイン上どうしても原因を特定できず、修正に行き詰まっていたスタイルがあったのですが、Playwright MCP を使って調
なんでやねん!AIに指摘をしたとき、なんかモヤっとする。「するどい指摘です!」とか言われると、褒められてるようでいて、微妙にずれてる感じ。反論しても不毛なので、冷静に淡々と指示を出そう。「いい気づきです!」みたいな返事もあるけれど……ぬぬぬ。
2025年11月11日
タグ「フロントエンド」の記事
最近、iframeを使っています。 クライアントサイドで埋め込む想定で、iframeを使おうとしています。 色々と苦労したことがあったので、書いて残しておこうと思います。 レスポンスヘッダー 前提として、ウェブアプリケーションをプロダクショ
紙を積んだイラストをSVGで書こうとしていました。 (当たり前ですが)図形を表現するためには数学の知識が必要で、学生の頃の記憶を思い出したので疲れました。 所感について、諸々書こうと思います。 成果物 実際に完成したのは、以下の画像ができま
2026年02月17日
以下の記事で書いた CSSをテストする方法について、試してみました。 https://zenn.dev/silverbirder/articles/df6752b230f04c ソースコードは、以下に置いています。 https://gith