workspace/docs/index.html を更新してください。技術文書として読みやすい構造に刷新すると同時に、補足情報を新規項目を含めて計 7 項目に拡充します。
対象ファイル
workspace/docs/index.html
レイアウト要件
全体構成
- ヘッダー: 書影(80〜100px のサムネイル)、タイトル、技術評論社書籍ページへのリンク。既存の
.hero グリッドは維持しつつ padding を 28px から 20px に縮小し、h1 のサイズは clamp(1.5rem, 3vw, 2.2rem) に調整する。
- コンテンツ領域: 左サイドバー(目次)と右メイン(補足情報本文)の 2 カラム。widescreen で
grid-template-columns: 240px minmax(0, 1fr)。820px 以下では 1 カラムに折り畳み、サイドバーは上部に配置する。
- フッター: 既存の ISBN 表記、技術評論社リンク、構築者の注釈をそのまま維持する。
サイドバー目次の構造
<aside class="toc">
<h2>補足情報</h2>
<nav>
<h3>第 2 章</h3>
<ul>
<li><a href="#ch02-env-gemini">環境変数 GEMINI_API_KEY</a></li>
</ul>
<h3>第 3 章</h3>
<ul>
<li><a href="#ch03-3-llm-api-error">3.3 節 LLMApiError のコンストラクタ引数</a></li>
</ul>
<h3>第 4 章</h3>
<ul>
<li><a href="#ch04-6-tools-demo-filename">4.6 節 ツール動作確認スクリプトのファイル名</a></li>
</ul>
<h3>第 7 章</h3>
<ul>
<li><a href="#ch07-2-variables">7.2 節 Variables の設定</a></li>
<li><a href="#ch07-4-pr-permission">7.4 節 PR 作成の権限設定</a></li>
<li><a href="#ch07-7-issue-text">7.7 節 ISSUE_TEXT の埋め込み</a></li>
</ul>
<h3>第 8 章</h3>
<ul>
<li><a href="#ch08-3-bubblewrap-sys-admin">8.3 節 bubblewrap と SYS_ADMIN 権限</a></li>
</ul>
</nav>
</aside>
aside.toc には position: sticky; top: 24px; align-self: start; を設定してスクロールに追従させます。
補足項目の構造
各補足項目は次の構造で記述します。
<article id="{anchor-id}">
<header>
<span class="chapter-label">{章節ラベル}</span>
<h3>{タイトル}</h3>
<a class="anchor" href="#{anchor-id}">#</a>
</header>
<dl>
<dt>本書の記載</dt>
<dd>...</dd>
<dt>症状</dt>
<dd>...</dd>
<dt>対処</dt>
<dd>...</dd>
</dl>
</article>
- 各
<article> に一意な id を設定し、アンカーリンクで直接参照できるようにする。
- ファイルパス・関数名・環境変数名・コマンドは
<code> で、複数行のコードは <pre><code> で表示する。
- 章ごとに
<section class="chapter-group"> でまとめ、その先頭に <h2>第 N 章</h2> を置く。
CSS の要件
既存の色パレット(--accent: #0066cc、--accent-soft: #e6f0ff、--surface: #f8fbff 等)と system-ui ベースのフォントはそのまま利用します。以下の CSS を追加してください。
.layout {
display: grid;
grid-template-columns: 240px minmax(0, 1fr);
gap: 40px;
margin-top: 28px;
}
.toc {
position: sticky;
top: 24px;
align-self: start;
}
.toc h2 {
font-size: 1rem;
margin: 0 0 8px;
color: var(--accent);
}
.toc h3 {
margin: 16px 0 4px;
font-size: 0.85rem;
color: var(--muted);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.toc ul {
list-style: none;
padding: 0;
margin: 0;
}
.toc a {
display: block;
padding: 6px 10px;
border-radius: 6px;
color: var(--text);
text-decoration: none;
font-size: 0.9rem;
line-height: 1.5;
}
.toc a:hover {
background: var(--accent-soft);
color: var(--accent);
}
.chapter-group {
margin-bottom: 32px;
}
.chapter-group > h2 {
margin: 0 0 16px;
padding-bottom: 8px;
border-bottom: 2px solid var(--border);
}
article {
padding: 20px 24px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
margin-bottom: 16px;
}
article > header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 12px;
}
article h3 {
margin: 0;
font-size: 1.1rem;
flex: 1;
}
.chapter-label {
display: inline-block;
font-size: 0.75rem;
font-weight: 700;
color: var(--accent);
background: var(--accent-soft);
padding: 2px 10px;
border-radius: 999px;
letter-spacing: 0.04em;
}
.anchor {
opacity: 0;
color: var(--muted);
text-decoration: none;
font-weight: 700;
}
article:hover .anchor {
opacity: 1;
}
dl {
display: grid;
grid-template-columns: 7em 1fr;
gap: 8px 16px;
margin: 0;
}
dt {
color: var(--muted);
font-weight: 600;
font-size: 0.9rem;
padding-top: 2px;
}
dd {
margin: 0;
}
code {
background: #f3f6fb;
padding: 2px 6px;
border-radius: 4px;
font-size: 0.92em;
font-family: ui-monospace, "SFMono-Regular", Consolas, monospace;
}
pre {
background: #0f172a;
color: #e2e8f0;
padding: 14px 16px;
border-radius: 8px;
overflow-x: auto;
margin: 8px 0 0;
}
pre code {
background: transparent;
color: inherit;
padding: 0;
font-size: 0.88em;
}
@media (max-width: 820px) {
.layout {
grid-template-columns: 1fr;
}
.toc {
position: static;
}
}
掲載する補足情報(計 7 項目)
各項目は上記の <article> 構造に沿って記述します。本文の文言は以下をそのまま使用してください。
第 2 章
ch02-env-gemini — 環境変数 GEMINI_API_KEY
- chapter-label: 第 2 章
- h3: 環境変数 GEMINI_API_KEY
本書の記載: 第 2 章の .env 例に GOOGLE_API_KEY=AI... が記載されています。第 6 章の createModelFromEnv の実装でも process.env.GOOGLE_API_KEY を参照する形で説明されています。
症状: @google/genai SDK が参照する標準の環境変数名は GEMINI_API_KEY です。GOOGLE_API_KEY だけを設定した場合、SDK からは空と判定されます。
対処: .env には GEMINI_API_KEY を設定します。本リポジトリの src/providers/google.ts は GEMINI_API_KEY ?? GOOGLE_API_KEY のフォールバックを備えているため両方の環境変数名を受け付けますが、新規設定では GEMINI_API_KEY を使用してください。
第 3 章
ch03-3-llm-api-error — 3.3 節 LLMApiError のコンストラクタ引数
- chapter-label: 3.3 節
- h3: LLMApiError のコンストラクタ引数
本書の記載: OpenAI プロバイダーの例で次の呼び出しが記載されています。
throw new LLMApiError('APIからの応答がありません');
症状: LLMApiError クラスの定義では第 1 引数が status: number、第 2 引数が provider: string で、文字列 1 つだけを渡す呼び出しは型エラーになります。
対処: 多引数形式で呼び出します。
throw new LLMApiError(500, 'openai', undefined, 'APIからの応答がありません');
第 4 章
ch04-6-tools-demo-filename — 4.6 節 ツール動作確認スクリプトのファイル名
- chapter-label: 4.6 節
- h3: ツール動作確認スクリプトのファイル名
本書の記載: コード例のコメントに // chapters/04-tools-demo.ts とあり、実行コマンドの例は bun run chapters/04-demo-tools.ts と記載されています。
症状: 実行コマンドのファイル名がコード例と一致していないため、記載どおりに実行するとファイルが見つからずエラーになります。
対処: 正しいファイル名は 04-tools-demo.ts です。次のコマンドで実行してください。
bun run chapters/04-tools-demo.ts
第 7 章
ch07-2-variables — 7.2 節 Variables の設定
- chapter-label: 7.2 節
- h3: Variables の設定
本書の記載: gh variable set による LLM_PROVIDER と LLM_MODEL の登録手順が記載されています。
症状: Variables が未登録の場合、ワークフロー実行時にこれらの環境変数が空となり、bin/cli.ts 起動時に「LLM設定が不足しています」のエラーで終了します。Secrets の LLM_API_KEY とは別に Variables として登録する必要があります。
対処: 次のコマンドで Variables を登録します。登録状況は gh variable list で確認できます。
gh variable set LLM_PROVIDER --body "openai"
gh variable set LLM_MODEL --body "gpt-5-mini"
ch07-4-pr-permission — 7.4 節 PR 作成の権限設定
- chapter-label: 7.4 節
- h3: PR 作成の権限設定
本書の記載: 7.4 節でワークフロー権限 pull-requests: write の設定手順が記載されています。
症状: ワークフロー権限だけではプルリクエストを作成できず、実行時に次のエラーで失敗します。
GitHub Actions is not permitted to create or approve pull requests
対処: リポジトリの Settings → Actions → General → Workflow permissions を開き、「Allow GitHub Actions to create and approve pull requests」にチェックを入れて Save してください。ワークフロー権限の設定と併用することで、プルリクエストの作成が許可されます。
ch07-7-issue-text — 7.7 節 ISSUE_TEXT の埋め込み
- chapter-label: 7.7 節
- h3: ISSUE_TEXT の埋め込み
本書の記載: ワークフロー YAML で ISSUE_TEXT 環境変数に Issue 本文を渡す設定が記載されています。
症状: bin/cli.ts の issueDrivenInstructions テンプレートが ISSUE_TEXT を参照しない構成の場合、エージェントは Issue タイトルしか認識できず、本文の詳細な指示に従えません。
対処: issueDrivenInstructions のテンプレートリテラル内で process.env.ISSUE_TEXT を取り込み、「## Issue本文(参照用)」の形で本文を埋め込みます。
const issueText = process.env.ISSUE_TEXT || '';
const issueDrivenInstructions = `${baseInstructions}
## Issue本文(参照用)
${issueText}
`;
第 8 章
ch08-3-bubblewrap-sys-admin — 8.3 節 bubblewrap と SYS_ADMIN 権限
- chapter-label: 8.3 節
- h3: bubblewrap と SYS_ADMIN 権限
本書の記載: bubblewrap の実行に --cap-add=SYS_ADMIN が必要と記載されています。
症状: 全ての環境でこのオプションが必須とは限りません。
対処: ホストのカーネル設定 kernel.unprivileged_userns_clone=1 が有効な環境では、--cap-add=SYS_ADMIN なしで bubblewrap を起動できる場合があります。実行環境のカーネル設定を確認のうえ、必要に応じてオプションを付与してください。
ヘッダーとフッター
- ヘッダーは既存の書影・タイトル・技術評論社リンクを維持し、上記のとおりスリム化します。
- フッターは現行どおり、ISBN、技術評論社書籍ページへのリンク、構築者の注釈を掲載します。
作業手順
作業完了後、createBranch でブランチを作成し、commitChanges でコミットし、pushBranch でプッシュし、createPullRequest でプルリクエストを作成してください。
workspace/docs/index.htmlを更新してください。技術文書として読みやすい構造に刷新すると同時に、補足情報を新規項目を含めて計 7 項目に拡充します。対象ファイル
workspace/docs/index.htmlレイアウト要件
全体構成
.heroグリッドは維持しつつ padding を 28px から 20px に縮小し、h1のサイズはclamp(1.5rem, 3vw, 2.2rem)に調整する。grid-template-columns: 240px minmax(0, 1fr)。820px 以下では 1 カラムに折り畳み、サイドバーは上部に配置する。サイドバー目次の構造
aside.tocにはposition: sticky; top: 24px; align-self: start;を設定してスクロールに追従させます。補足項目の構造
各補足項目は次の構造で記述します。
<article>に一意なidを設定し、アンカーリンクで直接参照できるようにする。<code>で、複数行のコードは<pre><code>で表示する。<section class="chapter-group">でまとめ、その先頭に<h2>第 N 章</h2>を置く。CSS の要件
既存の色パレット(
--accent: #0066cc、--accent-soft: #e6f0ff、--surface: #f8fbff等)とsystem-uiベースのフォントはそのまま利用します。以下の CSS を追加してください。掲載する補足情報(計 7 項目)
各項目は上記の
<article>構造に沿って記述します。本文の文言は以下をそのまま使用してください。第 2 章
ch02-env-gemini— 環境変数 GEMINI_API_KEY本書の記載: 第 2 章の
.env例にGOOGLE_API_KEY=AI...が記載されています。第 6 章のcreateModelFromEnvの実装でもprocess.env.GOOGLE_API_KEYを参照する形で説明されています。症状:
@google/genaiSDK が参照する標準の環境変数名はGEMINI_API_KEYです。GOOGLE_API_KEYだけを設定した場合、SDK からは空と判定されます。対処:
.envにはGEMINI_API_KEYを設定します。本リポジトリのsrc/providers/google.tsはGEMINI_API_KEY ?? GOOGLE_API_KEYのフォールバックを備えているため両方の環境変数名を受け付けますが、新規設定ではGEMINI_API_KEYを使用してください。第 3 章
ch03-3-llm-api-error— 3.3 節 LLMApiError のコンストラクタ引数本書の記載: OpenAI プロバイダーの例で次の呼び出しが記載されています。
症状:
LLMApiErrorクラスの定義では第 1 引数がstatus: number、第 2 引数がprovider: stringで、文字列 1 つだけを渡す呼び出しは型エラーになります。対処: 多引数形式で呼び出します。
第 4 章
ch04-6-tools-demo-filename— 4.6 節 ツール動作確認スクリプトのファイル名本書の記載: コード例のコメントに
// chapters/04-tools-demo.tsとあり、実行コマンドの例はbun run chapters/04-demo-tools.tsと記載されています。症状: 実行コマンドのファイル名がコード例と一致していないため、記載どおりに実行するとファイルが見つからずエラーになります。
対処: 正しいファイル名は
04-tools-demo.tsです。次のコマンドで実行してください。第 7 章
ch07-2-variables— 7.2 節 Variables の設定本書の記載:
gh variable setによるLLM_PROVIDERとLLM_MODELの登録手順が記載されています。症状: Variables が未登録の場合、ワークフロー実行時にこれらの環境変数が空となり、
bin/cli.ts起動時に「LLM設定が不足しています」のエラーで終了します。Secrets のLLM_API_KEYとは別に Variables として登録する必要があります。対処: 次のコマンドで Variables を登録します。登録状況は
gh variable listで確認できます。ch07-4-pr-permission— 7.4 節 PR 作成の権限設定本書の記載: 7.4 節でワークフロー権限
pull-requests: writeの設定手順が記載されています。症状: ワークフロー権限だけではプルリクエストを作成できず、実行時に次のエラーで失敗します。
対処: リポジトリの Settings → Actions → General → Workflow permissions を開き、「Allow GitHub Actions to create and approve pull requests」にチェックを入れて Save してください。ワークフロー権限の設定と併用することで、プルリクエストの作成が許可されます。
ch07-7-issue-text— 7.7 節 ISSUE_TEXT の埋め込み本書の記載: ワークフロー YAML で
ISSUE_TEXT環境変数に Issue 本文を渡す設定が記載されています。症状:
bin/cli.tsのissueDrivenInstructionsテンプレートがISSUE_TEXTを参照しない構成の場合、エージェントは Issue タイトルしか認識できず、本文の詳細な指示に従えません。対処:
issueDrivenInstructionsのテンプレートリテラル内でprocess.env.ISSUE_TEXTを取り込み、「## Issue本文(参照用)」の形で本文を埋め込みます。第 8 章
ch08-3-bubblewrap-sys-admin— 8.3 節 bubblewrap と SYS_ADMIN 権限本書の記載: bubblewrap の実行に
--cap-add=SYS_ADMINが必要と記載されています。症状: 全ての環境でこのオプションが必須とは限りません。
対処: ホストのカーネル設定
kernel.unprivileged_userns_clone=1が有効な環境では、--cap-add=SYS_ADMINなしで bubblewrap を起動できる場合があります。実行環境のカーネル設定を確認のうえ、必要に応じてオプションを付与してください。ヘッダーとフッター
作業手順
作業完了後、
createBranchでブランチを作成し、commitChangesでコミットし、pushBranchでプッシュし、createPullRequestでプルリクエストを作成してください。