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を活用することでフロントエンド開発の効率化を図ることができます。 時間短縮だけでなく、知らないことを学べる機会にもなり一石二鳥です。 ぜひ、皆さんの開発にも取り入れてみてください。
-
※ ログイン不要で投稿できます。
※ 同じブラウザから投稿を削除できます。
0
読み込み中...
タグ「AI」の記事
Claude Code や Codex 等の AI にプルリク(以下、PR)を書かせて効率化することができます。 けれど、その書かれたプルリク説明文、ちゃんと全部読んでいますか? レビュワーの負担になっていませんか? ノイズが多い プルリク
個人ブログ記事の執筆に AI を使わなくなりました。 その理由について、経緯などを含めて紹介します。 ChatGPTが流行り出した時代 その当時は、ブログ記事の粗い原稿を ChatGPT に渡して推敲を依頼していました。 粗い原稿とは、以下
AI にコードを書かせた後、余計なコードを見つけて消す作業があります。 不毛なことなので、それらの作業を減らすためのお作法を紹介します。 未使用コードを消す 以下でも書きましたが、未使用コードの検査に knip を使うことが多いです。 ht
タグ「フロントエンド」の記事
Webフロントエンドのコードレビューをしているときに考えていることについて書きます。 毎日1記事投稿、1記事30分という制約を課していますので、本記事は完璧ではありません。(言い訳) また希望的な考えもあるので、実践していないものもあります
2026年03月12日
AI にコードを書かせた後、余計なコードを見つけて消す作業があります。 不毛なことなので、それらの作業を減らすためのお作法を紹介します。 未使用コードを消す 以下でも書きましたが、未使用コードの検査に knip を使うことが多いです。 ht
最近、iframeを使っています。 クライアントサイドで埋め込む想定で、iframeを使おうとしています。 色々と苦労したことがあったので、書いて残しておこうと思います。 レスポンスヘッダー 前提として、ウェブアプリケーションをプロダクショ