0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPTを使用したアプリ開発記【利用規約・プライバシーポリシーの追加】

Posted at

Terms.js、Privacy.jsの作成

Terms.js
import React from "react";

const Terms = () => {
  return (
    <div className="max-w-3xl mx-auto px-4 py-10">
      <h1 className="text-2xl font-bold mb-6">利用規約</h1>
      <p className="mb-4">この利用規約以下,「本規約といいます。)本サービスの利用条件を定めるものです</p>
      <h2 className="text-xl font-semibold mt-6 mb-2">第1条適用</h2>
      <p className="mb-4">本規約はユーザーと当社との間の本サービスの利用に関わる一切の関係に適用されるものとします</p>
      {/* 以下、項目を必要に応じて追加 */}
    </div>
  );
};

export default Terms;
Privacy.js
import React from "react";

const Privacy = () => {
  return (
    <div className="max-w-3xl mx-auto px-4 py-10">
      <h1 className="text-2xl font-bold mb-6">プライバシーポリシー</h1>
      <p className="mb-4">当社はユーザーのプライバシーを尊重し個人情報の保護に努めています</p>
      <h2 className="text-xl font-semibold mt-6 mb-2">1. 個人情報の取得</h2>
      <p className="mb-4">当社は適正な手段によって必要な範囲で個人情報を取得します</p>
      {/* 以下、項目を必要に応じて追加 */}
    </div>
  );
};

export default Privacy;

Footerの作成

Footer.js
import React from "react";
import { Link } from "react-router-dom";

const Footer = () => {
  return (
    <footer className="text-center text-sm text-gray-500 mt-10 py-4">
      <div className="space-x-4">
        <Link to="/terms" className="hover:underline">
          利用規約
        </Link>
        <Link to="/privacy" className="hover:underline">
          プライバシーポリシー
        </Link>
      </div>
      <div className="mt-2">© {new Date().getFullYear()} YourAppName</div>
    </footer>
  );
};

export default Footer;

Layout.jsの作成

Layout.js
// src/Layout.jsx

//React:Reactコンポーネントを作るために必要です。
import React from "react";
//Outlet:react-router-dom の機能で、「ここにルーティングで切り替わるページコンポーネントを差し込む」という意味です。
import { Outlet } from "react-router-dom";
import Header from "./Header";
import Footer from "./Footer";

const Layout = () => {
  return (
    <div className="flex flex-col min-h-screen">
      <Header />
      <main className="flex-grow pt-20 px-4">
        <Outlet /> {/* 各ページがここに表示される */}
      </main>
      <Footer />
    </div>
  );
};

export default Layout;

AppRouter.jsにLayout.jsの仕様を追加

AppRouter.js
<Route path="/" element={<Layout user={user} setUser={setUser} />}>
  {/* ここにネストされるルートは全て Layout の中で表示される */}
</Route>

• path="/":/(つまり全体のルート)に対して、
• element={}:Layout コンポーネントを表示するようにしています。
• そしてこの の 内側にネストされている Route たち は、すべて の中の の位置に差し込まれます。

Login だけ Layout に含めない理由

React アプリでは、以下のように「どのページでも共通して表示したい要素」があります:

要素 Layout の中で表示する理由
ヘッダー ロゴ・ナビゲーションバー どのページでも共通表示したい
フッター コピーライト・利用リンク 同上
レイアウト構造 min-h-screen など 全ページ共通の画面設計

これを毎ページ個別に書くと重複が多く、保守性が悪いですが、Layout で一括管理すれば 一度の定義で全ページに適用できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?