ホーム自己紹介ブログ
NO.120
DATE2024. 05. 22

生成AI時代のフロントエンド開発術

2022年11月にChatGPTがリリースされて、1年と約半年が経過しました。 私はChatGPTが話題になった頃から、継続して利用しています。 ChatGPTを使い続けていると、Webアプリケーションのフロントエンド開発に役立つことがありました。

そこで、本記事では フロントエンド開発でChatGPTを活用して効率よく進める3つのパターン にまとめました。 これらのパターンを紹介し、読者の皆さんの開発に役立ててもらえればと思います。

以下は、本記事で紹介するFigma、ソースコード、デプロイ先URLです。

  • Wireframing photo - Figma
  • silverbirder/figma-photo-sample-app-for-ai - GitHub
  • https://figma-photo-sample-app-for-ai.vercel.app

ChatGPTを使う前に

ChatGPTにフロントエンドのソースコードなどを学習させないために、データコントロールをOFFにしておきましょう。

Data Controls FAQ | OpenAI Help Center

前提

これから紹介する方法は特定の技術スタックに限定されるものではありません。 皆さんのお好みのものに読み替えていただければと思います。今回は以下の技術スタック・ツールを使用します。

  • デザインツール: Figma
  • Webアプリフレームワーク: Next.js
  • スタイル: CSS Module
  • テスト: Vitest

デモ対象

対象となる画面は、Wireframing in FigmaにあるPhotoというサービスの1画面です。

Photo - Wireframing in Figma

ソースコードは、silverbirder/figma-photo-sample-app-for-ai - GitHub にありますのでご参考にください。

紹介する内容

今回紹介するのは、フロントエンド開発における以下の流れです。

① FigmaのデザインからReactコンポーネント作成
② 仕様を満たすビジネスロジックの実装
③ 開発したReactコンポーネントのテストコード作成

新規開発や既存改修のどちらでも、この流れは大きく変わりません。今回は上記の順番で進めます。

FigmaのデザインからReactコンポーネント作成

FigmaのデザインからReactコードを生成するための方法をご紹介します。

ちなみに、Figmaのデザインからコード生成するプラグインやサービスは、ネットで検索すると沢山見つかりますが、コード生成結果の精度はあまり芳しくありませんでした。

FigmaからCSSをエクスポート

以下の図のように、Figmaから対象のデザインのCSSを抽出します。また、デザインのスクリーンショットも撮っておきます。

Figma > Copy as code > CSS (all layers)

エクスポートしたCSSをChatGPTに渡し、ReactとStyleのコードを生成してもらう

以下のようなメッセージを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度ぐらい)

React Photo - Wireframing in Figma

ゼロから開発するよりも、ある程度 雛形となるコードを作成してくれる方が時間短縮になります 。 また、 自身では知らない方法でコード作成してくれる場合もあり、勉強になります 。

仕様を満たすビジネスロジックの実装

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); /* 背景をぼかして通過させる */
}
Photo Navbar

これは単なる例に過ぎませんが、 生成されたコードから設計方法について参考にしたり、知らない方法を学べる良い機会 になります。

このプロセスは仕様に依存するため、具体的な方法を紹介することは少ないです。

開発したReactコンポーネントのテストコード作成

プロダクトのコード(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の便利さをより実感できます。

個人的に、テストコードが書きやすいプロダクトコードは、設計として見通しの良いものになると考えています。 そのため、テストコードが読みにくい場合は、プロダクトコードを修正するようにしています。

なぜChatGPTを選んだのか

もともと、生成AIが話題になった頃から使っていたツールだからです。 GitHub Copilotも良いツールですが、 デザインなど視覚的な情報が必要な場合 にはChatGPTが役立ちます。

最近、ChatGPTのMacOSアプリがリリースされ、スクリーンショットのしやすさが改善されています。

Using the ChatGPT MacOS App | OpenAI Help Center

終わりに

このように、ChatGPTを活用することでフロントエンド開発の効率化を図ることができます。 時間短縮だけでなく、知らないことを学べる機会にもなり一石二鳥です。 ぜひ、皆さんの開発にも取り入れてみてください。

AI
フロントエンド

-

読者になる

|

シェアする

|

silverbirders

silverbirder

Webソフトウェアエンジニア

ブログを応援する

この記事がよかったら、お布施という形で応援してもらえるとうれしいです。

おふせぼたん

※ ログイン不要で投稿できます。

※ 同じブラウザから投稿を削除できます。

0

読み込み中...

次の記事へ前の記事へ

関連する記事

タグ「AI」の記事

AIエージェント、マルチよりシングルの方が効率良いのでは

私は、AI エージェントのマルチタスクをしたことがない人です。 そのため、この記事はただの偏見です。 定量的なデータも示さないため、ふわふわとしたポエムです。 マルチタスク 複数のタスクを並列で進めるとします。 Web開発者であれば、AI

2026年03月19日

AI
雑談
仕事
AIが書いた重厚なプルリク説明文、読んでますか?

Claude Code や Codex 等の AI にプルリク(以下、PR)を書かせて効率化することができます。 けれど、その書かれたプルリク説明文、ちゃんと全部読んでいますか? レビュワーの負担になっていませんか? ノイズが多い プルリク

2026年03月06日

AI
仕事
個人ブログ記事の執筆にAIを使わない理由

個人ブログ記事の執筆に AI を使わなくなりました。 その理由について、経緯などを含めて紹介します。 ChatGPTが流行り出した時代 その当時は、ブログ記事の粗い原稿を ChatGPT に渡して推敲を依頼していました。 粗い原稿とは、以下

2026年03月05日

AI
仕事

タグ「フロントエンド」の記事

Webフロントエンドのコードレビューメモ2

また、以下の記事の続きを書こうと思います。 https://silverbirder.github.io/blog/contents/20260312/ ビジネスロジック アプリケーションのビジネスロジックに関することについて書きます。 複

2026年03月18日

フロントエンド
Webフロントエンドのコードレビューメモ

Webフロントエンドのコードレビューをしているときに考えていることについて書きます。 毎日1記事投稿、1記事30分という制約を課していますので、本記事は完璧ではありません。(言い訳) また希望的な考えもあるので、実践していないものもあります

2026年03月12日

フロントエンド
AIの書いたコードの手直しを減らすお作法

AI にコードを書かせた後、余計なコードを見つけて消す作業があります。 不毛なことなので、それらの作業を減らすためのお作法を紹介します。 未使用コードを消す 以下でも書きましたが、未使用コードの検査に knip を使うことが多いです。 ht

2026年02月25日

AI
フロントエンド
← ブログ一覧へ