tuhacci-lp 開発仕様書
tu-hacci LP制作のローカルコーディング環境です。このドキュメントを読めば、コーディング〜FutureShopへの反映まで一通り行えます。
このドキュメントについて
この環境でできること
FutureShop(ショップのCMS)に貼り付けるLPのHTMLを、手元のPCでリアルタイムプレビューしながら制作できます。
- ファイルを保存するたびにブラウザが自動でリロードされる
- SCSSを書くと自動的にCSSに変換される
- ヘッダー・フッターなど共通パーツを含めた状態でプレビューできる
- 本番サイトの画像・CSS・JSを自動でダウンロードして使える
最終的な成果物と提出先
| ファイル | 提出先 | 方法 |
|---|---|---|
lp/プロジェクト名/index.html |
FutureShop → フリーページ | コピー&ペースト |
lp/プロジェクト名/_parts/プロジェクト名_html.html |
FutureShop → パーツ管理 | コピー&ペースト |
css/feature/プロジェクト名/ |
本番サーバー同じパスへ | FTPアップロード |
js/feature/プロジェクト名/ |
本番サーバー同じパスへ | FTPアップロード |
img/feature/プロジェクト名/ |
本番サーバー同じパスへ | FTPアップロード |
LP 一覧
- 2602_flower_lingeriy_collection Flower Lingeriy Collection 2026
- swimstyle_2026 Swim Style Collection 2026
※ 新規LP追加後はこのリストに1行追記してください。
環境セットアップ(初回のみ)
このプロジェクトを初めて使う場合、以下を一度だけ実行してください。
① Node.js がインストールされているか確認
ターミナル(Macの場合は「ターミナル.app」)を開いて以下を実行します。
v18.0.0 のようなバージョン番号が表示されればOKです。表示されない場合は nodejs.org からインストールしてください。
② プロジェクトのインストール
ターミナルでこのプロジェクトフォルダに移動して、依存パッケージをインストールします。
$npm install
完了したら環境セットアップは終わりです。次回からは不要です。
新規LP作成
新しいLPを作るときは以下のコマンドを実行します。必要なフォルダとファイルが自動で生成されます。
コマンド
プロジェクト名の命名規則:年月_LP名称(例:2603_spring_collection)
生成されるもの
コマンド実行後にやること
-
このドキュメント(index.html)の「LP 一覧」に追記する
index.htmlを開いて「LP 一覧」セクションの<ul>に新しい<li>を1行追加してください。 -
本番サイトのアセットをダウンロードする(必要な場合)
$npm run fetch プロジェクト名既存のCSSや画像を参照している場合、本番サイトから自動ダウンロードします。
コーディング
開発サーバーの起動
コーディングを始める前に毎回このコマンドを実行します。ファイルを保存するたびにブラウザが自動更新されます。
ブラウザが自動で開きます。終了するときはターミナルで Ctrl + C を押します。
各ファイルの役割と書く場所
| 何を書くか | ファイル |
|---|---|
| ページ全体の構成(パーツの呼び出し順など) | lp/プロジェクト名/index.html |
| LPのメインHTML(商品紹介・画像・テキストなど) | lp/プロジェクト名/_parts/プロジェクト名_html.html |
| スタイル(デザイン・レイアウト) | lp/プロジェクト名/scss/style.scss |
| JavaScript(アニメーション・インタラクションなど) | lp/プロジェクト名/js/main.js |
| 画像ファイル | img/feature/プロジェクト名/ に直接置く |
Figma + AIコーディング
このプロジェクトでは Figmaでデザインを確認 → AIにコードを生成させる → 自分で微調整 という流れでコーディングを行います。
全体の流れ
-
Figmaからデザイン情報を取得する
デザインファイルを開き、セクションごとにスクリーンショットを撮ります。Dev Modeが使える場合は数値(サイズ・余白・カラーコード)も確認します。
-
AIにコーディングを依頼する
スクリーンショットとデザインの数値をAIに渡し、HTMLとSCSSを生成してもらいます。依頼のポイントは後述。
-
生成されたコードをファイルに貼る
HTMLは
_parts/プロジェクト名_html.htmlの<article>内に、SCSSはscss/style.scssに貼ります。保存するとブラウザが自動更新されます。 -
ブラウザで確認しながら微調整する
Figmaと見比べて、ズレている部分のSCSSを直接編集して調整します。
-
スマホ表示を確認する
ブラウザのDevToolsでスマホサイズに切り替えて確認します(後述)。必要であればAIに再調整を依頼します。
Figma MCP のセットアップ(初回のみ)
Claude Code に Figma MCP を設定すると、FigmaのデザインデータをClaudeが直接読み取れるようになります。スクリーンショットよりはるかに正確なコードが生成されます。
① Figmaのパーソナルアクセストークンを取得する
- Figmaを開き、左上のアイコン →「Help and account」→「Account settings」
- 「Security」セクションの「Personal access tokens」→「Generate new token」
- トークン名を入力(例:
claude-code)して「Generate token」 - 表示されたトークンをコピーして手元に保存する(一度しか表示されません)
② Claude Code に Figma MCP を登録する
ターミナルで以下を実行します(YOUR_TOKEN の部分を①のトークンに置き換えてください)。
コマンドが成功したら設定完了です。次回以降は不要です。
~/.claude/settings.json に自動で設定が追記されます。手動で編集する場合は以下の形式です:
{
"mcpServers": {
"figma-developer-mcp": {
"command": "npx",
"args": ["-y", "figma-developer-mcp"],
"env": { "FIGMA_API_KEY": "YOUR_TOKEN" }
}
}
}
Figma MCP を使ったコーディングの依頼方法
① FigmaのフレームURLをコピーする
- Figmaでコーディングしたいフレーム(またはセクション)を選択
- 右クリック →「Copy link to selection」でURLをコピー
② Claudeに依頼する
コピーしたURLと以下のテンプレートを貼り付けて送るだけです。
以下のFigmaフレームをコーディングしてください。
https://www.figma.com/design/XXXXXX/...?node-id=XX
ルール:
- プロジェクト名は 2603_spring_collection
- HTMLは <article class="2603_spring_collection"> の中身だけ(タグ自体は含めない)
- SCSSは .2603_spring_collection { } で囲む
- 画像パスは /img/feature/2603_spring_collection/ファイル名.jpg
- スマホ対応は @media screen and (max-width: 768px)
- jQuery・Swiper8・GSAP はすでに読み込み済み
③ Claudeがファイルに直接書いてくれる
ClaudeはFigmaのデザインを読み取り、_parts/プロジェクト名_html.html と scss/style.scss に直接コードを書き込みます。自分でコピー&ペーストする必要はありません。ファイルが保存されるとブラウザが自動更新されるので、Figmaと見比べて確認します。
ブラウザで微調整する方法
DevToolsの使い方(Chrome)
- ブラウザ上で右クリック →「検証」(または
F12/Cmd+Option+I) - 左上の矢印アイコンをクリックしてページ上の要素を選択すると、そのHTMLとCSSが右側に表示される
- 右側のCSSを直接クリックして数値を変更すると、リアルタイムで画面に反映される(一時的な確認用)
- 確認できたら
scss/style.scssに反映して保存する
スマホ表示の確認
- DevToolsを開いた状態で、上部の「スマホ+タブレットアイコン」をクリック(または
Cmd+Shift+M) - 上部のドロップダウンで端末を選ぶ(
iPhone 14 Proなど) - 崩れている箇所があればSCSSの
@media screen and (max-width: 768px)ブロック内を調整する
scss/style.scss に書き写してください。
よくあるAIへの追加依頼パターン
| 困ったとき | AIへの依頼例 |
|---|---|
| スマホで崩れている | 「スマホ(768px以下)で〇〇セクションが崩れています。SCSSの修正案を教えてください。」+ スクショ |
| Figmaと余白が違う | 「このセクションの上下の余白をFigmaに合わせて80pxにしてください。」 |
| アニメーションを追加したい | 「スクロールしたら〇〇がフェードインするアニメーションをGSAP ScrollTriggerで実装してください。」 |
| スライダーを実装したい | 「Swiper8を使って自動スクロールするスライダーを実装してください。」 |
ローカルプレビューについて
ローカルで表示されるページは、本番サイトと見た目がほぼ一致するよう設計されていますが、以下の点が異なります。
| 項目 | ローカル | 本番 |
|---|---|---|
| ヘッダー・フッター | _includes/ から読み込む |
FutureShopのテーマが自動出力 |
パーツ() |
_parts/ フォルダのHTMLを展開 |
FutureShopのパーツ管理から取得 |
| 会員情報・カートなど | 表示されない(ゲスト扱い) | ログイン状態に応じて表示 |
ディレクトリ構成(全体)
フォルダは大きく「書く場所」と「自動生成・出力先」に分かれます。
✏️ 書く場所(コーディングするファイル)
⚙️ 自動生成される出力先(直接編集しない)
📁 共通ファイル(ローカル専用・基本触らない)
index.html の書き方
lp/プロジェクト名/index.html はページの骨格です。実際のHTMLは書かず、パーツの呼び出しを並べるだけです。この内容をそのままFutureShopのフリーページに貼ります。
テンプレート(npm run new で自動生成)
<!-- ローカル専用ヘッダー。本番では無視される -->
<!-- @include header.html -->
<!-- パンくずリスト(共通パーツ)-->
{% parts[th-freepage-lp-pankuzu] %}
<!-- LP本体(_parts/プロジェクト名_html.html の中身が展開される)-->
{% parts[プロジェクト名_html] %}
<!-- カテゴリ(共通パーツ)-->
{% parts[renewal2024_top_category] %}
parts: ... はFutureShopのパーツ呼び出し構文です。ローカルでは _parts/ フォルダのHTMLに自動で置き換わります。本番ではFutureShopが処理するのでそのまま貼ってOKです。
パーツHTML の書き方
lp/プロジェクト名/_parts/プロジェクト名_html.html がLPの本体HTMLです。
基本構成(自動生成されるテンプレート)
<!-- 入れない -->
<link rel="stylesheet" href="/css/feature/プロジェクト名/style.css">
<script src="/js/feature/プロジェクト名/main.js" defer></script>
<!-- 入れない -->
<article class="プロジェクト名">
<!-- ここにLPのHTMLを書く -->
</article>
「入れない」ブロックについて
<!-- 入れない --> で囲まれたCSSリンク・JSリンクは、FutureShopのパーツ管理には貼りません。FutureShopのテーマが自動で読み込むため、手動で入れると二重読み込みになります。
ローカルプレビュー用にのみ存在しています。
画像のパスについて
画像は /img/feature/プロジェクト名/ファイル名.jpg のように絶対パスで書きます。
<img src="/img/feature/プロジェクト名/main_visual.jpg" alt="メインビジュアル">
ローカルでは img/feature/プロジェクト名/ フォルダに画像を置けばそのまま表示されます。
SCSS / CSS
SCSSとは
CSSを便利に書けるようにした言語です。変数やネスト(入れ子)が使えます。npm run dev を起動しているあいだ、保存するたびに自動でCSSに変換されます。
書く場所と出力先
| 書く場所 | 自動変換後の出力先 |
|---|---|
lp/プロジェクト名/scss/style.scss |
css/feature/プロジェクト名/style.css |
css/feature/ のファイルは自動生成されるので直接編集しないでください。必ず scss/style.scss を編集してください。
SCSSの書き方(基本)
/* プロジェクト名でクラスを囲うことでスタイルが他ページに影響しません */
.2603_spring_collection {
/* ネスト(入れ子)で書けます */
.section-title {
font-size: 24px;
color: #333;
}
.banner {
width: 100%;
img {
width: 100%;
}
}
/* メディアクエリ(スマホ対応) */
@media screen and (max-width: 768px) {
.section-title {
font-size: 18px;
}
}
}
JavaScript
書く場所と出力先
| 書く場所 | 自動コピー先 |
|---|---|
lp/プロジェクト名/js/main.js |
js/feature/プロジェクト名/main.js |
js/feature/ は直接編集しないでください。
利用できるライブラリ
以下のライブラリはすでにページに読み込まれています(_includes/head.html 経由)。
| ライブラリ | 用途 |
|---|---|
| jQuery 3.6.0 | DOM操作・イベント処理 |
| Swiper 8 | スライダー |
| GSAP + ScrollTrigger | スクロールアニメーション |
画像
画像ファイルの置き場所
LP用の画像は以下のフォルダに置きます。
HTMLでの参照方法
<!-- パスは / から始める絶対パスで書く -->
<img src="/img/feature/プロジェクト名/image.jpg" alt="説明">
画像の推奨仕様
| 用途 | 形式 | 目安 |
|---|---|---|
| 写真・メインビジュアル | JPG | 横幅 1500px 以下、品質 80% |
| 透過が必要なもの | PNG | できるだけ軽量化する |
| アイコン・シンプルな図形 | SVG | - |
検証環境(Vercel)
FutureShopに移植する前に、Vercelの検証環境でチームに共有・確認してもらいます。
| 項目 | 内容 |
|---|---|
| URL | https://tuhacci-lp.vercel.app/ |
| ユーザー名 | tuhacci |
| パスワード | tuhacci |
Vercelへの反映方法
このプロジェクトはGitと連携しています。mainブランチにプッシュすると自動的にVercelへデプロイされます。
-
コーディングが完了したら変更をコミットする
$git add .
$git commit -m "add: 2603_spring_collection LP" -
mainブランチにプッシュする
$git push origin main
数分でVercelに自動デプロイされます。
-
Vercelで表示を確認する
https://tuhacci-lp.vercel.app/ にアクセスして、LPが正しく表示されているか確認します。
-
確認OKならFutureShopへ移植する
次の「FutureShopへの移植手順」を参照してください。
ローカル:
http://localhost:3000/lp/2603_spring_collection/Vercel:
https://tuhacci-lp.vercel.app/lp/2603_spring_collection/
開発フロー全体像
コーディング
チーム確認
移植・FTPアップ
FutureShop への移植手順
-
パーツを登録する
FutureShop管理画面 →「パーツ管理」→「新規追加」
lp/プロジェクト名/_parts/プロジェクト名_html.htmlを開き、<!-- 入れない -->の行とその間のCSS・JSリンク行を除いた部分をコピーして貼り付けます。貼り付けるのはここだけ:
CSS・JSリンク(<article class="プロジェクト名"> ...LP本体のHTML... </article><link>/<script>)は貼りません。パーツコードは
プロジェクト名_htmlで登録してください(例:2603_spring_collection_html)。 -
フリーページを作成する
FutureShop管理画面 →「フリーページ」→「新規追加」
lp/プロジェクト名/index.htmlの内容をそのままコピーして貼り付けます。<!-- @include header.html -->の行はそのまま貼って構いません。FutureShop上ではHTMLコメントとして無視されます。 -
ファイルをFTPでアップロードする
以下のフォルダをまるごとFTPでサーバーにアップします。詳細は次のセクション参照。
-
本番で表示を確認する
フリーページのURLにアクセスして表示を確認します。ローカルプレビューと見た目がほぼ一致していればOKです。
FTPアップロード
アップロードが必要なフォルダ
| ローカルのフォルダ | サーバー上のパス | 内容 |
|---|---|---|
css/feature/プロジェクト名/ |
/css/feature/プロジェクト名/ |
コンパイル済みCSS |
js/feature/プロジェクト名/ |
/js/feature/プロジェクト名/ |
JavaScript |
img/feature/プロジェクト名/ |
/img/feature/プロジェクト名/ |
LP用画像 |
lp/ フォルダ・scss/ フォルダはアップロード不要です。css/feature/・js/feature/・img/feature/ の中身だけをアップしてください。
アップロードのタイミング
コードの修正があるたびにアップロードが必要です。CSSを変更した場合は css/feature/プロジェクト名/style.css だけアップロードすればOKです。
コマンド一覧
| コマンド | 内容 | 使うとき |
|---|---|---|
npm run dev |
開発サーバー起動 | コーディング中は常に起動しておく |
npm run new <名前> |
新規LP雛形を生成 | 新しいLPを作るとき |
npm run build |
全SCSSを圧縮ビルド | 本番アップ前に最終ビルドするとき |
npm run fetch <名前> |
本番サイトからアセットをDL | 本番の画像・CSS・JSをローカルに落としたいとき |
ローカル専用記法リファレンス
LOCAL インクルード構文
<!-- @include ファイル名.html -->
_includes/ 内のHTMLファイルを読み込んでそのまま展開します。本番ではHTMLコメントとして無視されます。
| ファイル名 | 内容 |
|---|---|
head.html | <head>タグの内容(CSS・JS読み込みなど) |
header.html | サイトヘッダー |
footer.html | サイトフッター |
CMS パーツ呼び出し構文
{% parts[パーツコード] %}
FutureShopのパーツ呼び出しです。ローカルでは以下の順でHTMLファイルを探します。
lp/プロジェクト名/_parts/パーツコード.html(プロジェクト固有)_parts/パーツコード.html(全LP共通)- どちらにもない場合 → ピンク色のプレースホルダーを表示