+
+ 詳しい使い方は
+
+ こちら
+
+
);
}
diff --git a/app/(app)/app/howToUse.mdx b/app/(home)/(mdx_documents)/help/edit/page.mdx
similarity index 78%
rename from app/(app)/app/howToUse.mdx
rename to app/(home)/(mdx_documents)/help/edit/page.mdx
index 8e9b2d6..29aab97 100644
--- a/app/(app)/app/howToUse.mdx
+++ b/app/(home)/(mdx_documents)/help/edit/page.mdx
@@ -1,12 +1,21 @@
-## 使い方
+export const metadata = {
+ title: "ファイル編集ページの使い方",
+ description:
+ "英文、英単語専用の単語帳アプリvocabPhraseファイル編集ページの使い方",
+ alternates: {
+ canonical: "/help/edit",
+ },
+};
-### 1. ファイルを作成するには新規作成ボタンを押す
+# ファイル編集ページの使い方
+
+## 1. ファイルを作成するには新規作成ボタンを押す
(**連打しないようにしてください。ファイルが大量に作成されます**)
![新規作成ボタン](/img/create-button.webp)
-### 2. ファイルを編集する
+## 2. ファイルを編集する
![空ファイルの編集画面](/img/newfile-edit.webp)
diff --git a/app/(home)/(mdx_documents)/help/keyboard/page.mdx b/app/(home)/(mdx_documents)/help/keyboard/page.mdx
new file mode 100644
index 0000000..3c0cbb8
--- /dev/null
+++ b/app/(home)/(mdx_documents)/help/keyboard/page.mdx
@@ -0,0 +1,29 @@
+export const metadata = {
+ title: "キーボードショートカットに付いて",
+ description:
+ "英文、英単語専用の単語帳アプリvocabPhraseのキーボードショートカットについて",
+ alternates: {
+ canonical: "/help/keyboard",
+ },
+};
+
+# キーボードショートカットについて
+
+## 編集ページ
+
+| キー | 機能 |
+| -------- | ---- |
+| Ctrl + S | 保存 |
+
+## フラッシュカード
+
+### フラッシュカードで暗記中
+
+| キー | 機能 |
+| ---------- | ---------------------------------------- |
+| space | 解答を表示(キーボード解答モードオフ時) |
+| ctrl+enter | 解答する(キーボード解答時) |
+| c | チェックを付ける、はずす(解答表示時のみ) |
+| r,s | 読み上げ |
+| → | 次へ |
+| ← | 前へ |
diff --git a/app/(home)/(mdx_documents)/help/layout.tsx b/app/(home)/(mdx_documents)/help/layout.tsx
new file mode 100644
index 0000000..8b4b314
--- /dev/null
+++ b/app/(home)/(mdx_documents)/help/layout.tsx
@@ -0,0 +1,13 @@
+import Link from "next/link";
+import { ReactNode } from "react";
+
+export default function HelpPageLayout({ children }: { children: ReactNode }) {
+ return (
+ <>
+
+ {children}
+ >
+ );
+}
diff --git a/app/(home)/help/getFileMetadata.ts b/app/(home)/help/getFileMetadata.ts
new file mode 100644
index 0000000..94b9bf3
--- /dev/null
+++ b/app/(home)/help/getFileMetadata.ts
@@ -0,0 +1,20 @@
+import { promises as fsPromises } from "fs";
+import path from "path";
+export async function getFileMetadata(): Promise<
+ { fileName: string; title: string; description: string }[]
+> {
+ const files = (
+ await fsPromises.readdir(
+ path.join(process.cwd(), "app", "(home)", "(mdx_documents)", "help")
+ )
+ ).filter((file) => !file.includes("."));
+ files.sort(); //文字列のみなので比較関数は不要
+ return await Promise.all(
+ files.map(async (file) => {
+ const { metadata } = await import(
+ `@/app/(home)/(mdx_documents)/help/${file}/page.mdx`
+ );
+ return { fileName: file, ...metadata };
+ })
+ );
+}
diff --git a/app/(home)/help/page.tsx b/app/(home)/help/page.tsx
new file mode 100644
index 0000000..bc1ba9b
--- /dev/null
+++ b/app/(home)/help/page.tsx
@@ -0,0 +1,32 @@
+import { promises as fsPromises } from "fs";
+import { Metadata } from "next";
+import Link from "next/link";
+import path from "path";
+import { getFileMetadata } from "./getFileMetadata";
+export default async function HelpTop() {
+ const metadatas = await getFileMetadata();
+ return (
+
+ ヘルプ記事一覧
+
+ {metadatas.map((metadata) => (
+ -
+ {metadata.title}
+
+ ))}
+
+
+ );
+}
+export const metadata: Metadata = {
+ title: "ヘルプページトップ",
+ description:
+ "英文、英単語専用の単語帳アプリVocabPhraseのヘルプページトップです。",
+ alternates: {
+ canonical: "/help",
+ },
+ robots: {
+ index: false,
+ follow: true,
+ },
+};
diff --git a/app/(top)/page.tsx b/app/(top)/page.tsx
index d9d6bf1..e9e8eb8 100644
--- a/app/(top)/page.tsx
+++ b/app/(top)/page.tsx
@@ -89,6 +89,12 @@ export default function Home() {