なぜNext.jsがAI機能の実装に最適なのか
Server ComponentsとAPI Routeが生む設計の自由度
Next.jsのApp Routerは、Server ComponentsとRoute Handlersを標準搭載しています。AI機能の実装では「APIキーをサーバー側で安全に扱う」「レスポンスをストリーミングで返す」という2つの要件が必須ですが、Next.jsならこの両方をフレームワークレベルで解決できます。
たとえば、AI APIへのリクエストはRoute Handler(app/api/chat/route.ts)に書けば、APIキーがクライアントに漏れる心配がありません。React純粋のSPAでは別途バックエンドサーバーが必要ですが、Next.jsならフロントエンドとバックエンドを1つのプロジェクトで完結できます。
ストリーミングレスポンスのネイティブサポート
ChatGPTやClaudeを使ったことがあれば、回答がリアルタイムに1文字ずつ表示される体験をご存知でしょう。これがストリーミングレスポンスです。
AIの応答は通常2〜15秒かかりますが、ストリーミングなしだとユーザーはその間ずっと白い画面を見ることになります。UX上、これは致命的です。Next.jsはServer-Sent Events(SSE)やWeb Streamsをフレームワークレベルでサポートしているため、ストリーミングの実装が非常に簡単です。
Vercel AI SDKとの統合
Next.jsの開発元であるVercelが提供するAI SDKは、Next.jsとの統合が最も深いAI開発ライブラリです。React用のフック(useChat、useCompletion)が用意されており、チャットUIの状態管理・メッセージ送受信・ストリーミング表示をわずか数行のコードで実装できます。
2026年4月現在、AI SDKはnpmで週間ダウンロード数150万以上を記録しており、事実上のデファクトスタンダードになっています。
他のフレームワークとの比較
| フレームワーク | AI SDK対応 | ストリーミング | サーバーサイドAPI | デプロイの容易さ |
|---|
| Next.js | ◎ 公式最優先 | ◎ ネイティブ | ◎ Route Handler | ◎ Vercel 1クリック |
| Nuxt.js | ○ コミュニティ | ○ 対応 | ○ Server Route | ○ Vercel/Netlify |
| SvelteKit | ○ 公式対応 | ○ 対応 | ○ Server Route | ○ Vercel対応 |
| React SPA | △ 一部のみ | △ 自前実装 | ✕ 別サーバー必要 | △ 追加設定必要 |
| Express + React | ○ Core利用可 | ○ 対応 | ◎ 完全制御 | △ Docker等必要 |
AI SDKの基本 — セットアップから動作原理まで
AI SDKとは何か
Vercel AI SDK(パッケージ名: ai)は、TypeScript製のオープンソースライブラリです。Next.jsの開発元であるVercelが開発しており、以下の3つのレイヤーで構成されています。
- AI SDK Core:
generateText、streamText、generateObjectなど、AIモデルの呼び出しを抽象化する関数群 - AI SDK UI:
useChat、useCompletionなど、React向けのフック。チャットUIの状態管理を自動化 - AI SDK Providers: OpenAI、Anthropic(Claude)、Google(Gemini)、Mistral等の20以上のプロバイダーを統一的なインターフェースで利用可能
つまり、どのAIモデルを使うかに関係なく、同じコードで開発できるのが最大のメリットです。モデルを切り替えたくなった場合も、プロバイダー指定の1行を変えるだけで済みます。
インストールと初期設定(5分)
既存のNext.jsプロジェクト(App Router)にAI SDKを導入する手順は以下の通りです。
# AI SDKのコアパッケージをインストール
npm install ai
# 使いたいプロバイダーをインストール(例: Anthropic Claude)
npm install @ai-sdk/anthropic
# または OpenAI を使う場合
npm install @ai-sdk/openai
# 構造化出力に使う Zod もインストール
npm install zod
次に、環境変数にAPIキーを設定します。
# .env.local
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx
# OpenAI を使う場合
# OPENAI_API_KEY=sk-xxxxxxxxxxxxx
重要: .env.localは必ず.gitignoreに含めてください。APIキーをGitにコミットすると、不正利用され高額請求されるリスクがあります。 ShiftBの受講生でも、APIキーをGitHubに公開してしまい、1日で3万円の請求が来たケースがありました。
プロバイダーの選び方
AI SDKは複数のプロバイダーに対応していますが、「どのモデルを選べばいいのか」は悩むポイントです。 僕が実際に個人開発で使った経験から、用途別のおすすめを紹介します。
| 用途 | おすすめモデル | 理由 | API料金目安(100万トークン) |
|---|
| チャットボット | Claude Sonnet 4.6 | 日本語の自然さ・指示追従性が高い | 入力$3 / 出力$15 |
| テキスト要約 | Claude Haiku 4.5 | 高速・低コストで十分な品質 | 入力$0.80 / 出力$4 |
| コード生成 | Claude Sonnet 4.6 | コーディング性能が高い | 入力$3 / 出力$15 |
| 高度な推論 | Claude Opus 4.6 | 複雑なタスクの精度が最高 | 入力$15 / 出力$75 |
| 大量処理・低コスト | GPT-4o mini | コストパフォーマンスが最高 | 入力$0.15 / 出力$0.60 |
| マルチモーダル | Gemini 2.5 Pro | 画像・動画の理解に優れる | 入力$1.25 / 出力$10 |
個人開発ではコスト管理が重要です。まずはHaikuやGPT-4o miniで開発・テストし、 品質が必要な機能のみSonnetに切り替える「段階的アップグレード」戦略をおすすめします。 ShiftBでは、この戦略で月間APIコストを約70%削減できました。

【実践1】AIチャットボットを50行で作る
ここからは実際にコードを書いていきます。まずは最も需要の高い「AIチャットボット」を実装しましょう。 完成形は、ChatGPTのようにメッセージをリアルタイムにストリーミング表示するチャットUIです。
Step 1: API Routeの作成(5分)
まず、AIモデルにリクエストを送るバックエンド側のエンドポイントを作ります。
// app/api/chat/route.ts
import { anthropic } from "@ai-sdk/anthropic";
import { streamText } from "ai";
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: anthropic("claude-sonnet-4-6-20250514"),
system: "あなたは親切なAIアシスタントです。日本語で回答してください。",
messages,
maxTokens: 1000,
});
return result.toDataStreamResponse();
}
たったこれだけです。streamTextがAIモデルの呼び出しとストリーミングレスポンスの生成を担い、toDataStreamResponse()がNext.jsのRoute Handlerに適したレスポンス形式に変換してくれます。
Step 2: チャットUIの作成(10分)
次に、フロントエンドのチャットUIを作ります。AI SDKのuseChatフックが 状態管理を全て引き受けてくれます。
// app/chat/page.tsx
"use client";
import { useChat } from "@ai-sdk/react";
export default function ChatPage() {
const { messages, input, handleInputChange, handleSubmit, isLoading } =
useChat();
return (
<div className="mx-auto max-w-2xl p-4">
<h1 className="mb-4 text-2xl font-bold">AIチャット</h1>
<div className="mb-4 space-y-4">
{messages.map((m) => (
<div
key={m.id}
className={
m.role === "user"
? "rounded-lg bg-blue-100 p-3"
: "rounded-lg bg-gray-100 p-3"
}
>
<p className="text-sm font-bold">
{m.role === "user" ? "あなた" : "AI"}
</p>
<p className="whitespace-pre-wrap">{m.content}</p>
</div>
))}
</div>
<form onSubmit={handleSubmit} className="flex gap-2">
<input
value={input}
onChange={handleInputChange}
placeholder="メッセージを入力..."
className="flex-1 rounded-lg border p-2"
disabled={isLoading}
/>
<button
type="submit"
disabled={isLoading}
className="rounded-lg bg-blue-500 px-4 py-2 text-white disabled:opacity-50"
>
送信
</button>
</form>
</div>
);
}
useChatフックが提供する主要な値は以下の通りです。
messages: チャット履歴の配列(自動的に蓄積される)input: 入力フォームの現在値handleInputChange: 入力値の変更ハンドラーhandleSubmit: フォーム送信時の処理(API呼び出し含む)isLoading: AIが回答を生成中かどうか
ここでのポイントは、メッセージの送受信・ストリーミング・履歴管理を全てuseChat が自動で行うことです。自分でfetchやWebSocket、状態管理のコードを書く必要はありません。
ストリーミングの仕組み
「なぜリアルタイムに文字が表示されるのか?」——裏側の仕組みを理解しておくと、デバッグ時に役立ちます。
- クライアントが
/api/chat にPOSTリクエストを送信 - サーバー側の
streamTextがAI APIにリクエストし、Server-Sent Events(SSE)でレスポンスを返す - クライアント側の
useChatがSSEを受け取り、messages配列をリアルタイムに更新 - Reactが差分レンダリングで画面を更新
従来のREST APIでは「リクエスト→全文完成→レスポンス」という流れでしたが、 ストリーミングでは生成途中のテキストを逐次送信するため、 ユーザーは待ち時間をほぼ感じません。体感レスポンス速度が約5〜10倍向上します。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|
401 Unauthorized | APIキーが未設定 or 無効 | .env.localを確認。サーバー再起動が必要 |
429 Rate Limit | API呼び出し頻度の上限超過 | リトライロジックを追加。指数バックオフが有効 |
500 Internal Server Error | サーバー側のコードエラー | Route Handlerのconsole.logでデバッグ |
| レスポンスが途中で切れる | maxTokensの設定が小さい | 用途に応じて2000〜4000に増やす |
| 日本語が文字化けする | レスポンスのContent-Type設定 | AI SDKを使えば自動処理される |
AI時代のアプリ開発コース
ShiftBのAIシフトコースは、Claude Codeで本格的なWebアプリケーションを作りながらAI駆動開発を身につけるコースです。ただ作って終わりではなく、コードを読め、セキュリティに責任を持って提案でき、要件定義などの上流工程まで担えるところまで現役エンジニアがサポートします。
AIシフトコースを見る →【実践2】テキスト生成・要約機能を実装する
チャット以外にも、AI機能の活用方法は多岐にわたります。ここでは、テキスト生成と構造化出力の2つを実装しましょう。
Server Actionsでのテキスト生成(10分)
Next.jsのServer Actionsを使えば、API Routeを別途作らなくても サーバー側のAI処理を呼び出せます。これは、チャットのようなリアルタイム性が不要な場合に便利です。
// app/actions/summarize.ts
"use server";
import { anthropic } from "@ai-sdk/anthropic";
import { generateText } from "ai";
export async function summarizeText(text: string) {
const { text: summary } = await generateText({
model: anthropic("claude-haiku-4-5-20241022"),
prompt: `以下のテキストを200文字以内で要約してください。
テキスト:
${text}`,
maxTokens: 500,
});
return summary;
}
generateTextはstreamTextと異なり、完成したテキストを一括で返す関数です。要約やタイトル生成のように、 結果をまとめて使いたい場面に適しています。
使い方はシンプルです。
// app/summarize/page.tsx
"use client";
import { useState } from "react";
import { summarizeText } from "../actions/summarize";
export default function SummarizePage() {
const [text, setText] = useState("");
const [summary, setSummary] = useState("");
const [loading, setLoading] = useState(false);
const handleSummarize = async () => {
setLoading(true);
const result = await summarizeText(text);
setSummary(result);
setLoading(false);
};
return (
<div className="mx-auto max-w-2xl p-4">
<h1 className="mb-4 text-2xl font-bold">AI要約ツール</h1>
<textarea
value={text}
onChange={(e) => setText(e.target.value)}
placeholder="要約したいテキストを入力..."
rows={8}
className="mb-4 w-full rounded-lg border p-3"
/>
<button
onClick={handleSummarize}
disabled={loading || !text}
className="rounded-lg bg-blue-500 px-6 py-2 text-white disabled:opacity-50"
>
{loading ? "要約中..." : "要約する"}
</button>
{summary && (
<div className="mt-4 rounded-lg bg-gray-50 p-4">
<h2 className="mb-2 font-bold">要約結果</h2>
<p>{summary}</p>
</div>
)}
</div>
);
}
構造化出力でJSONを取得する
AIの出力をJSON形式で受け取りたいケースは非常に多いです。たとえば、レビューテキストから 「評価スコア」「良い点」「改善点」を抽出する場合などです。
AI SDKのgenerateObjectとZodスキーマを組み合わせることで、型安全なJSON出力が得られます。
// app/actions/analyze-review.ts
"use server";
import { anthropic } from "@ai-sdk/anthropic";
import { generateObject } from "ai";
import { z } from "zod";
const reviewSchema = z.object({
score: z.number().min(1).max(5).describe("5段階評価"),
positivePoints: z.array(z.string()).describe("良い点のリスト"),
improvementPoints: z.array(z.string()).describe("改善点のリスト"),
summary: z.string().describe("レビューの要約(100文字以内)"),
});
export async function analyzeReview(reviewText: string) {
const { object } = await generateObject({
model: anthropic("claude-sonnet-4-6-20250514"),
schema: reviewSchema,
prompt: `以下のレビューを分析してください。
レビュー:
${reviewText}`,
});
return object;
}
generateObjectの戻り値は、Zodスキーマで定義した型に100%準拠します。従来のように「AIの出力をJSONパースして、バリデーションして…」 というコードを書く必要がありません。
良い例・悪い例:プロンプト設計
AI機能の品質はプロンプト設計で決まります。同じモデルでも、 プロンプトの書き方次第で出力品質が大きく変わります。
❌ 悪い例
prompt: "このテキストを要約して"
// → 要約の長さ、形式、言語が不安定になる
✅ 良い例
system: "あなたはプロのテクニカルライターです。",
prompt: `以下のテキストを要約してください。
要件:
- 200文字以内
- 箇条書き3〜5項目
- 専門用語は平易に言い換える
- 結論を最初に述べる
テキスト:
${text}`
良いプロンプトのポイントは4つあります。
- 役割(system): AIに「あなたは〇〇です」と専門家の役割を与える
- 出力形式: 文字数・構成・スタイルを明示する
- 制約条件: やってほしくないことを明示する
- 入力データ: 処理対象を明確に区切る(テンプレートリテラルを活用)

【実践3】個人開発プロダクトへのAI機能組み込み事例
ここまでの技術を使って、実際の個人開発プロダクトにどうAI機能を組み込むか、 具体例で解説します。
事例1: AI要約付きブックマークアプリ
URLを保存すると、AIが自動で記事を要約してくれるブックマークサービスです。 ShiftBの受講生Aさんが3日で開発し、月間アクティブユーザー200人を獲得しました。
実装の流れ:
- ユーザーがURLを入力
- Server Actionでページ内容をスクレイピング
generateTextで300文字の要約を生成- 要約結果をSupabaseに保存
APIコスト: Haiku使用で1記事あたり約0.1円。月1万記事処理しても約1,000円です。
事例2: AIレビュー分析ダッシュボード
ECサイトのレビューを自動分析し、ポジティブ/ネガティブの傾向を可視化するツールです。 受講生BさんがgenerateObjectを使って、レビューから構造化データを抽出する機能を実装しました。
ポイント: Zodスキーマで出力形式を固定するため、 ダッシュボードの表示ロジックが安定します。AIの出力が「たまに形式が変わる」問題を 根本的に解決できました。
事例3: AIチャット付き学習プラットフォーム
これはShiftBで実際に運用しているシステムです。受講生が技術的な質問を入力すると、 ShiftBのカリキュラムをコンテキストとしてAIが回答します。
実装のポイント:
streamTextのsystemプロンプトにカリキュラム内容を埋め込み- 回答の精度を上げるため、関連する教材ページのテキストをRAG的に注入
- AIが回答できない質問は「メンターに質問」ボタンにフォールバック
導入後、メンターへの質問数が約40%減少し、受講生の学習速度が 向上しました。
AI機能のマネタイズ3パターン
| パターン | 具体例 | 課金モデル | 月間収益目安 |
|---|
| フリーミアム | 無料5回/日、有料で無制限 | 月額980〜1,980円 | ユーザー100人で5〜10万円 |
| 従量課金 | 1回あたり10〜50円 | 利用回数に応じた課金 | 利用量次第で変動 |
| プレミアム機能 | 高精度モデル・長文対応 | 上位プラン月額2,980円〜 | ユーザー50人で10〜15万円 |
個人開発では、フリーミアムモデルが最も始めやすいです。 無料枠でユーザーを獲得し、ヘビーユーザーに有料プランを提供する流れです。 Stripe決済との連携方法は、別記事「Stripe決済導入ガイド」で詳しく解説しています。
AI時代のアプリ開発コース
ShiftBのAIシフトコースは、Claude Codeで本格的なWebアプリケーションを作りながらAI駆動開発を身につけるコースです。ただ作って終わりではなく、コードを読め、セキュリティに責任を持って提案でき、要件定義などの上流工程まで担えるところまで現役エンジニアがサポートします。
AIシフトコースを見る →本番運用で押さえるべき7つのポイント
1. APIキーの安全な管理
APIキーの漏洩は、個人開発者にとって最大のリスクの一つです。以下の3つの鉄則を守ってください。
.env.localに保存し、.gitignoreに必ず追加- Vercelデプロイ時はダッシュボードのEnvironment Variablesで設定
- APIキーにはプロバイダー側で月額利用上限を設定する(Anthropicなら$100/月など)
2. レート制限の実装
API料金の暴発を防ぐため、ユーザーごとのリクエスト制限は必須です。 簡易的にはIPアドレスベースで実装できます。
// app/api/chat/route.ts(レート制限付き)
import { anthropic } from "@ai-sdk/anthropic";
import { streamText } from "ai";
const rateLimit = new Map<string, { count: number; resetAt: number }>();
export async function POST(req: Request) {
// IP取得
const ip = req.headers.get("x-forwarded-for") ?? "unknown";
const now = Date.now();
const limit = rateLimit.get(ip);
// 1時間に20回まで
if (limit && limit.resetAt > now && limit.count >= 20) {
return new Response("利用回数の上限に達しました", { status: 429 });
}
// カウント更新
if (!limit || limit.resetAt <= now) {
rateLimit.set(ip, { count: 1, resetAt: now + 3600000 });
} else {
limit.count++;
}
const { messages } = await req.json();
const result = streamText({
model: anthropic("claude-haiku-4-5-20241022"),
system: "あなたは親切なAIアシスタントです。",
messages,
maxTokens: 1000,
});
return result.toDataStreamResponse();
}
本格的なレート制限には、Upstash Redisを使ったトークンバケット方式がおすすめです。 Vercelとの統合が簡単で、無料枠も十分です。
3. コスト管理とモニタリング
AI APIのコストは「思ったより高くなった」というのが個人開発者の定番の悩みです。 以下の施策で管理しましょう。
- maxTokensを適切に設定: チャットなら1000〜2000、要約なら500で十分
- プロバイダー側で月額上限を設定: Anthropicなら$50/月など
- 用途に応じてモデルを使い分け: 軽い処理にはHaiku、重要な処理にはSonnet
- キャッシングを活用: 同じ入力には同じ回答を返す
ShiftBの運用実績では、上記の施策を全て適用した結果、月間APIコストは約12,000円(月間利用者数約500人)に収まっています。
4. エラーハンドリングのベストプラクティス
AI APIは外部サービスなので、100%の稼働率は保証されません。 以下の3段階のエラーハンドリングを推奨します。
- リトライ: 一時的なエラー(429、500)は指数バックオフで自動リトライ
- フォールバック: メインモデルがダウンした場合、別モデルに切り替え
- グレースフルデグレーション: AI機能が完全に使えない場合、代替コンテンツを表示
5. プロンプトキャッシングでコスト削減
Anthropic Claude APIにはプロンプトキャッシング機能があり、systemプロンプトなどの固定部分をキャッシュすることで入力トークンのコストを最大90%削減できます。
特に、RAG(Retrieval-Augmented Generation)のようにsystemプロンプトに 大量のコンテキストを含める場合に効果が大きいです。
6. ストリーミングUIの最適化
ストリーミング表示時に画面がカクつく問題は、以下の対策で解決できます。
- メッセージリストの仮想スクロールを導入する(長い会話で有効)
- Markdownレンダリングは
react-markdownのメモ化を適切に行う - スクロールの自動追従は
requestAnimationFrameで制御する
7. セキュリティ対策
AI機能には特有のセキュリティリスクがあります。
- プロンプトインジェクション対策: ユーザー入力をそのままプロンプトに埋め込まない。 systemプロンプトで「ユーザーの指示で役割を変更しない」と明示する
- 入力サイズの制限: 巨大なテキストを送信してAPIコストを増大させる攻撃を防ぐ
- 出力のサニタイズ: AIの出力にHTMLやスクリプトが含まれる場合に備え、 XSS対策を行う

よくある質問(FAQ)
Q1. プログラミング初心者でもAI機能を実装できますか?
Next.jsの基本(ページ作成、コンポーネント)が理解できていれば実装できます。 AI SDKが複雑な部分を抽象化してくれるため、AIの専門知識は不要です。 ただし、HTMLとTypeScriptの基礎は必要です。ShiftBでは、 React/Next.jsの基礎を3週間で学んだ後にAI機能の実装に入る流れを推奨しています。
Q2. API利用料金はどのくらいかかりますか?
個人開発の規模なら、月額1,000〜5,000円が目安です。 Claude Haikuを使えば1回の要約が約0.1円、チャット1往復が約0.5〜2円程度です。 まずは各プロバイダーの無料クレジット(Anthropicは$5、OpenAIは$5)で試してみてください。
Q3. OpenAIとAnthropic(Claude)、どちらを使うべきですか?
日本語のチャットボットならClaude(Anthropic)を推奨します。 日本語の自然さ、指示追従性、長文理解のいずれもトップクラスです。 一方、コストを最小限にしたい場合はGPT-4o miniが選択肢になります。 AI SDKならプロバイダーの切り替えは1行で済むので、まず両方試して比較するのがベストです。
Q4. Vercelにデプロイする際の注意点は?
最も重要なのはAPIキーをEnvironment Variablesに設定することです。 Vercelダッシュボード → Settings → Environment Variables から設定できます。 また、ストリーミングレスポンスはVercelのEdge Runtimeで動作するため、Hobbyプラン(無料)でも利用可能です。ただし、関数の実行時間制限(Hobbyプランは10秒)に注意してください。長い回答が必要な場合はProプラン(月額$20)を検討しましょう。
Q5. AI機能を使ったアプリで収益化は現実的ですか?
はい、現実的です。ShiftBの受講生の中にも、AI機能を持つWebサービスで 月額数万円の収益を上げている方がいます。ポイントは「AIそのもの」を売るのではなく、特定の課題を解決するプロダクトにAIを組み込むことです。 たとえば「AI翻訳ツール」ではなく「AI翻訳付き海外論文リーダー」のように、 ターゲットと価値提案を絞ることで差別化できます。
Q6. セキュリティ面で気をつけることは?
主に3点です。①APIキーをクライアント側に露出させない(Route Handlerを必ず使う)、 ②ユーザー入力のサイズを制限する(大量テキストでコスト爆発を防ぐ)、 ③プロンプトインジェクション対策(systemプロンプトで役割の固定を明示する)。 詳しくは本記事の「本番運用で押さえるべき7つのポイント」セクションを参照してください。
Q7. AI SDKを使わずに直接APIを叩くのとの違いは?
直接APIを叩くことも可能ですが、ストリーミングの処理、 エラーハンドリング、チャットの状態管理、プロバイダーごとのAPI差異の吸収など、本番に必要なコードが3〜5倍に膨れ上がります。 AI SDKはこれらを全て抽象化してくれるため、アプリケーションのロジックに集中できます。 特に個人開発では時間が限られるため、AI SDKの利用を強くおすすめします。
まとめ — AI機能で個人開発を次のレベルへ
この記事では、Next.jsにAI機能を実装する方法を実践的に解説しました。
要点を振り返ります。
- Next.js + AI SDKの組み合わせで、50行程度のコードからAIチャットボットが作れる
streamText + useChatでリアルタイムストリーミング、generateTextで一括テキスト生成、generateObjectで構造化出力が実現できる- プロバイダーを自由に切り替えられるため、コストと品質のバランスを最適化しやすい
- 本番運用では、APIキー管理・レート制限・コストモニタリングの3つが必須
- AI機能はフリーミアムモデルで月5〜15万円の収益が現実的に狙える
2026年現在、AI機能を持つWebアプリケーションの開発コストは劇的に下がっています。 1年前なら専門のMLエンジニアが必要だった実装が、いまや個人開発者でも 週末の数時間で実現できます。
ぜひこの記事のコードを参考に、まずはシンプルなAIチャット機能から始めてみてください。 作り始めれば「もっとこうしたい」というアイデアが次々と浮かんでくるはずです。
ShiftBでは、AI駆動開発と個人開発を体系的に学べるカリキュラムを提供しています。 記事で紹介した機能の実装でつまずいた場合も、メンターに質問できる環境があります。 興味のある方は、まず無料相談会でお話ししましょう。