> ## Documentation Index
> Fetch the complete documentation index at: https://basecamp.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Modifications for Frames

> フレームの細かい部分の修正をしてみよう

<iframe className="w-full aspect-video" src="https://www.loom.com/embed/7f04e401c6c147f3bac2df06938cdd40?sid=37f3220e-382a-4435-943f-a13c5be1c056&hide_share=true&hideEmbedTopBar=true&hide_title=true&hide_owner=true" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen />

## 1. フレームタイトルの修正

<Frame caption="デバッガーの画面">
  <img src="https://mintcdn.com/basecamp/jsHWBeRk47BalcSk/images/frame-title.png?fit=max&auto=format&n=jsHWBeRk47BalcSk&q=85&s=d084a1ce4f97b93f2f65c9ca2760f8e4" width="2732" height="1640" data-path="images/frame-title.png" />
</Frame>

デバッガーの **Preview** に表示されている（主にフレームが折りたたまれている時に表示される）タイトルを変更する場合、`/app/page.tsx` の `title` の値を任意の文字列に書き換えます。

```typescript /app/page.tsx {6} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Frames Next.js Example",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
      )),
    },
  };
}

export default async function Home() {
  return <div>GM user data example.</div>;
}
```

### タイトル修正の一例

```typescript /app/page.tsx {6} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Multi Image Frame",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
      )),
    },
  };
}

export default async function Home() {
  return <div>GM user data example.</div>;
}
```

## 2. ブラウザアクセス時のテキストの修正

<Frame caption="ブラウザアクセス時の画面">
  <img src="https://mintcdn.com/basecamp/jsHWBeRk47BalcSk/images/browser-access.png?fit=max&auto=format&n=jsHWBeRk47BalcSk&q=85&s=1f9679f5de7a426d60e633ffa710e713" width="2732" height="1640" data-path="images/browser-access.png" />
</Frame>

タイムライン上にあるフレームをタップするとブラウザが起動してページが表示される場合があると思いますが、その際にブラウザ上に表示される文字列がソースコードの以下の部分となっており、任意の内容に書き換えることができます。

```typescript /app/page.tsx {16} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Frames Next.js Example",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
      )),
    },
  };
}

export default async function Home() {
  return <div>GM user data example.</div>;
}
```

### コンテンツ修正の一例

```typescript /app/page.tsx {16} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Frames Next.js Example",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
      )),
    },
  };
}

export default async function Home() {
  return null; // nullは何も返さないため真っ白なページが表示される
}
```

## 3. その他の修正

`generateMetadata` 関数内にある `fetchMetadata` の `new URL` の部分ですが、フレームのプログラミングの際に使用した `appURL` 関数を用いてより見やすく管理しやすいコードに **リファクタリング** することが可能です。

```typescript /app/page.tsx {9} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Frames Next.js Example",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
      )),
    },
  };
}

export default async function Home() {
  return <div>GM user data example.</div>;
}
```

### リファクタリング後

```typescript /app/page.tsx {3,10} theme={null}
import { fetchMetadata } from "frames.js/next";
import { Metadata } from "next";
import { appURL } from "app/utils"

export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "Frames Next.js Example",
    other: {
      ...(await fetchMetadata(
        new URL("/frames", appURL())
      )),
    },
  };
}

export default async function Home() {
  return <div>GM user data example.</div>;
}
```

> ### リファクタリングとは
>
> ソフトウェア開発において、プログラムの動作を保ったままソースコードを改善する作業です。<br />
> プログラムの内部構造をブラッシュアップすることで、コードの可読性やメンテナンス性を向上させ、将来的な変更を容易にします。
>
> リファクタリングの具体例としては、次のようなものがあります。
>
> * 冗長なコードの削除
> * 変数名や関数名の適切化
> * コードの再構成
> * 似た処理が複数カ所に実装されたソースコードを関数化やクラス化して1つにまとめる
>
> リファクタリングのメリットとしては、次のようなものがあります。
>
> * コードの複雑性が下がる
> * コードの再利用性が上がる
> * バグが減少する
> * ソースコードが整理されているためバグの修正やトラブルでも迅速に対応できる
