1.1引き継ぎ文章作成スクリプト

以下の文章またはHTML断片を、「WordPressのカスタムHTMLブロックにそのまま貼れる完成HTML」に変換してください。

【最重要】
余計な装飾は不要。とにかく読みやすさ最優先で。
ブログ記事ではなく、ドキュメントページとして整えてください。

# 必須ルール

■ 全体構造
– 出力は `<section class=”mikyun-doc”>` から開始する
– `<style>` を必ず内包する
– 外部CSSや外部JSは使わない
– そのままWordPressに貼って完成する状態にする

■ デザイン
– 背景はすべて透明
– 白背景は禁止
– 枠線・余白・文字サイズだけで読みやすくする
– ダークテーマでもライトテーマでも読める配色にする
– 本文は 14px 基準、行間はやや広め
– 装飾過多にしない

■ 見出しルール
– h1, h2 は使わない
– 最大でも h3 相当まで
– 見出しは以下のクラスで表現する
– `.title` = ページタイトル
– `.section` = 大見出し
– `.sub` = 小見出し

■ CSSルール
– すべて `.mikyun-doc` 配下で完結させる
– WordPressテーマやGutenbergの影響をできるだけ受けないようにする
– `.wp-block-group`, `.wp-block-columns`, `.wp-block-column`, `.wp-block-preformatted`, `.wp-block-table` などで白背景が入る場合を考慮し、必要に応じて transparent を強制する
– 必要な箇所には `!important` を使ってよい
– ただし過剰指定にはしない

■ レイアウト
– 最大幅は 1000px 以内
– 中央寄せ
– 必要なときだけ 2カラムの grid を使う
– スマホでは必ず 1カラム化する
– 表は横スクロールを許可して崩れにくくする

■ パーツ変換ルール
– 通常文は `<p>`
– 箇条書きは `<ul><li>`
– 表データは `<table>`
– 構成図・CLI出力・設定断片は `<pre>`
– まとまりごとのブロックは `.card` で囲う
– 注意事項や補足は `.note` を使ってよい
– 重要項目は太字で目立たせるが、色に頼りすぎない

■ コード・pre
– 背景透明
– 枠あり
– 等幅フォント
– 長い行は折り返しまたは横スクロールで崩れないようにする

■ 変換方針
– 元の内容は省略しない
– 意味を変えない
– 冗長なだけの重複表現は整理してよい
– 文章が長すぎる場合は、適切に段落・カード・表へ再構成する
– コピペ元に見出しレベルの乱れがあっても、読みやすい構造へ自動補正する
– 「いかにもAIが装飾した感」は出さない

■ 出力形式
– 完成HTMLのみ出力する
– 説明文は不要
– markdownコードフェンスは使わない
– すぐ貼り付けられる最終形だけを出す

コードをだすのではなく内容をよく考えて
見やすいように表示して

絶対に勝手に内容をかえないでください
表示方法を変えるのOK

# 追加指示
– 背景が白く見える原因になりやすい要素はすべて透明化する
– タイトル文字を大きくしすぎない
– もっとも大きい文字でも控えめにする
– 罫線・余白・文字サイズのバランスで見やすくする
– 視認性を保ちながら圧迫感をなくす


以下をそのまま**追記用ルール**として加筆してください。

# 追加ルール(目次・アンカー自動化)

■ 目次について

* 長文ページでは、本文冒頭に目次ブロックを追加する
* 目次はページ内リンクとして機能するようにする
* 目次の見た目は本文になじむよう、装飾を控えめにする
* 目次にも白背景は使わない
* 目次は `.card` または専用のシンプルな枠で表現してよい
* 目次タイトルは大きくしすぎず、本文より少し強い程度にする

■ アンカーについて

* 目次の各項目は、本文内の対応見出しへジャンプできるようにする
* 各 `.section` と必要な `.sub` に `id` を付与する
* `id` 名は英数字とハイフン中心で、短く分かりやすくする
* 日本語見出しをそのまま `id` にせず、壊れにくい名前へ整理する
* 同名見出しがある場合は重複しないよう自動調整する

■ 対象範囲

* 目次化する対象は、原則として `.section` と、必要に応じて `.sub`
* 細かすぎる項目は目次に入れすぎない
* 目次は長くなりすぎないよう整理する
* ただし元内容は省略せず、表示構造だけ整理する

■ スクロール配慮

* 固定ヘッダー等で見出しが隠れにくいよう、アンカー位置に配慮する
* 必要なら `scroll-margin-top` を使って調整してよい

■ JavaScriptについて

* 必要な場合のみ、`<script>` をHTML内に内包してよい
* 外部JSは禁止
* PHPやfunctions.php編集が不要な形を優先する
* WordPressのカスタムHTMLブロックに貼るだけで動作する構成を優先する
* 既存本文を大幅に手修正しなくても使える方法を優先する

■ 自動判定について

* 元文に番号付き見出し(例: `1.`, `2.`, `10.1` など)がある場合、それを見出し候補として活用してよい
* ただし本文と通常文の区別を崩さないこと
* 誤検出しそうなものは無理に目次へ入れないこと
* 目次の精度よりも、本文の可読性と安全な表示を優先すること

■ 出力優先順位

* 最優先は「そのまま貼って崩れにくいこと」
* 次に「見やすいこと」
* 次に「目次リンクが自然に使えること」
* 凝った演出や過剰な自動化は不要

■ 禁止事項

* 白背景の目次ボックスにしない
* 目立ちすぎる色付き装飾をしない
* 大きすぎる見出しを使わない
* WordPressテーマ依存のクラスや外部ライブラリ前提にしない
* 内容を勝手に要約・削除・改変しない

みーきゅんクラウド 引き継ぎメモ WG最前段アーキテクチャ + Nextcloud / Portal / 将来Webサイト統合設計

目的

  • 顧客アクセスを WireGuard 経由に限定 する。
  • R640 を外部へ直接公開しない。
  • VPS を唯一の公開入口として使う。
  • Nextcloud / Portal / 将来のWebサイトを、顧客が迷わない導線で提供する。
  • WebDAV、OnlyOffice iPhone、FE File Explorer での利用を成立させる。
1. 最終方針

今回の結論は、「VPS の前に WireGuard を置く」 ことです。

つまり、顧客が最初に触る入口は公開 443 ではなく、WireGuard 接続後の内部経路 とします。

これにより、顧客はグローバルIPで直接 443 に入るのではなく、まず WireGuard で認証され、その後に Portal や Nextcloud へ進む構造になります。

1.1 この方針にした理由
  • VPS の 443 をそのまま公開すると、顧客は WireGuard を通らなくても入口に到達できてしまう。
  • その場合、VPS と R640 の間で WireGuard を使っていても、それは裏側の配送路でしかなく、顧客の入場制御 としての WireGuard の意味が弱くなる。
  • R640 を直接さらす構成は、攻撃面・障害面・思想面のどれを見ても避けたい。
  • 将来サービスが増えても、入口を統一しておくほうが運用しやすい。
2. 全体構成
[ 顧客端末 ]
      ↓
  WireGuard
      ↓
[ VPS ]
  ├ WG終端
  ├ nginx / 443終端
  ├ 内部DNS
  └ R640へ転送
      ↓
  WireGuard / 閉域経路
      ↓
[ R640 ]
  ├ Nextcloud
  ├ 顧客ポータル
  ├ API
  └ その他内部サービス
2.1 公開面と非公開面の整理
対象公開 / 非公開役割
VPS公開唯一の入口、WG終端、443終端、防御、転送
R640非公開Nextcloud、Portal、API の実体
顧客アクセスWG必須認証後に内部サービスへ到達
将来の一般向けWeb公開可案内ページ、サービス紹介、広報用
3. この構成での導線

顧客は IP やポート番号を意識しません。役割ごとのドメインだけを案内します。

顧客が使う想定ドメイン
  • portal.k2-o.net = 顧客ポータル
  • cloud.k2-o.net = Nextcloud
  • www.k2-o.net = 将来の公開Webサイト
  • api.k2-o.net = 将来のAPI系
顧客の認識
  • 契約や端末管理は portal
  • ファイルやOfficeは cloud
  • 案内ページは www

重要

「どのサーバにあるか」「どのIPか」「VPSの裏かR640の裏か」は顧客に考えさせないこと。名前で導線を固定することが最重要です。

4. DNS 方針
4.1 外部DNS

公開DNSでは、各ドメインの表向きの向き先を管理します。

ただし、WG 必須のサービスについては、顧客が最終的に使う経路を 内部DNS 側で上書き する前提で設計します。

4.2 内部DNS

WireGuard 接続後に使う名前解決は、内部DNSで統一します。

基本思想は、顧客は WG 接続後だけ正しい内部向きの名前解決結果を受け取る ことです。

例
cloud.k2-o.net  → VPS の WG内IP
portal.k2-o.net → VPS の WG内IP
4.3 R640 に DNS を置くか、VPS に置くか

今回の方針では、顧客の入口が VPS 側にあるため、顧客向け内部DNSは VPS 側に寄せる のが筋です。

R640 側に内部DNSを持たせる案もあるが、顧客がまず到達する場所は VPS なので、顧客向け名前解決も VPS 側に寄せたほうが構造が自然です。

R640 側の DNS は、内部運用用途や将来の補助用途として持つのは可です。

5. HTTPS / 証明書方針

現在、R640 と VPS の双方に各ドメインの証明書が入っているとのことだが、顧客が実際に見る証明書は VPS 側 に統一して考えるのがよいです。

最初の安定化段階では、VPS で 443 終端 し、VPS から R640 へは HTTP 転送にするのが切り分けしやすいです。

将来的に必要であれば、VPS から R640 への区間も HTTPS 化します。

5.1 この方針にする理由
  • OnlyOffice や WebDAV は、ホスト名認識やヘッダ不足で壊れやすい。
  • 多段TLSにすると、切り分け対象が増える。
  • まずは 顧客から見えるURLと証明書を VPS 側で一本化 するほうが安定する。
6. Nextcloud / WebDAV / OnlyOffice 成立条件
6.1 結論

この構成でも、Nextcloud WebWebDAVOnlyOffice iPhoneFE File Explorer は成立可能です。

ただし、成立条件を満たさないと不安定になります。

6.2 必須条件
項目必要条件
接続URLhttps://cloud.k2-o.net を使う。IP直打ちは使わない。
証明書正規証明書であること。顧客が見るのは VPS 側の証明書。
Nextcloud自己認識Nextcloud が自分を https://cloud.k2-o.net で公開されていると認識していること。
リバプロヘッダHost / X-Forwarded-For / X-Forwarded-Proto が適切に渡ること。
DAV動作buffering や body size 制限で WebDAV を壊さないこと。
6.3 DAV の接続イメージ

FE File Explorer 等では、基本的に次のような考え方になります。

接続先ホスト: cloud.k2-o.net
プロトコル: HTTPS
ポート: 443
DAVパス: /remote.php/dav/files/ユーザー名/
6.4 OnlyOffice iPhone で特に注意する点
  • IPアクセスを使わないこと。
  • 自己署名や内部だけの証明書に頼らないこと。
  • Nextcloud の外部URL認識がズレないこと。
  • リバプロ経由でも https://cloud.k2-o.net として一貫して見えること。
7. Nextcloud 側の設定思想

Nextcloud は、公開URLを cloud.k2-o.net と認識している必要があります。

設定の考え方としては、Trusted Domains、overwritehost、overwriteprotocol、overwrite.cli.url、trusted_proxies を VPS 経由前提でそろえる必要があります。

7.1 設定の方向性
'trusted_domains' => [
  'cloud.k2-o.net',
],

'overwritehost' => 'cloud.k2-o.net',
'overwriteprotocol' => 'https',
'overwrite.cli.url' => '[https://cloud.k2-o.net](https://cloud.k2-o.net)',

'trusted_proxies' => [
'VPSの転送元IP',
],

実際の値は本番のネットワーク設計に合わせて調整するが、思想としてはこの方向で統一すること。

8. nginx 側の設計思想

VPS 側 nginx は、顧客が見る唯一の 443 終端 です。

役割は次のとおりです。

  • WG 接続後の顧客からの 443 を受ける。
  • 正規証明書を提示する。
  • Host ヘッダを維持したまま R640 の Nextcloud や Portal に転送する。
  • 必要な X-Forwarded 系ヘッダを渡す。
  • WebDAV や OnlyOffice を壊さないように、必要に応じて buffering や request body 制限を調整する。
8.1 旧構成との違い

以前は VPS 側で 403 を返す構成になっていたため、WG 接続済みでも検証できない状態になっていました。

今後は、一般の外部アクセスは遮断しつつ、WG 内からの内部向けアクセスは通す という設計に切り替える必要があります。

9. Portal コードについての整理

提示された client_ui.py は、顧客ポータルUI、QR表示、conf配布、端末状態表示、親端末昇格、停止・復帰・削除などを担うコードです。

これは 顧客ポータル機能として重要 ですが、OnlyOffice や WebDAV が通るかどうかの本質は、このコードではなく、ネットワーク経路 / DNS / リバプロ / Nextcloud自己認識 側にあります。

9.1 このコードの役割
  • 契約IDとパスフレーズによるログイン
  • 契約情報と端末情報の表示
  • WireGuard 接続状態表示
  • QR 表示
  • conf ダウンロード
  • 端末追加・停止・復帰・昇格・削除
9.2 注意

重要

貼られた内容には認証情報や接続情報が含まれていたため、実運用ではパスワードや秘密情報の再発行・変更を前提で考えること。

10. 顧客が迷わない設計

今回の構成の大きな利点は、将来サービスが増えても、顧客導線を名前で固定できることです。

10.1 迷わない理由
  • 入口が WireGuard に統一される。
  • 役割ごとにドメインを固定できる。
  • VPS / R640 / ポート番号 / 内部IP を顧客に意識させない。
  • 将来サービス実体を別サーバへ移しても、ドメインは維持できる。
10.2 将来を見据えたドメイン設計案
ドメイン役割公開 / 非公開
portal.k2-o.net顧客ポータルWG必須
cloud.k2-o.netNextcloud / WebDAV / OnlyOfficeWG必須
api.k2-o.netAPI 系WG必須または内部限定
www.k2-o.net将来の一般向けWebサイト公開可
11. 現時点での結論
  • VPS は必須
  • R640 は外部へ直接見せない
  • 顧客の最前段は WireGuard にする。
  • VPS が WG終端 + DNS + 443終端 + 転送 を担う。
  • R640 は Nextcloud / Portal / API の実体 に集中させる。
  • cloud.k2-o.net を Nextcloud の正規公開名として扱う。
  • WebDAV、OnlyOffice iPhone、FE File Explorer はこの構成で成立可能。
  • 顧客導線は、サービスごとのドメイン名で固定する。
12. 次回作業の優先順
  1. VPS を顧客用 WireGuard の最前段として整理する。
  2. 顧客が使う内部DNSの返答先を VPS 側の内部向きに統一する。
  3. VPS nginx を 403 固定構成から、WG内アクセスを受けて R640 へ転送する構成へ修正する。
  4. Nextcloud の公開URL認識を https://cloud.k2-o.net で統一する。
  5. FE File Explorer で WebDAV 接続確認を行う。
  6. OnlyOffice iPhone の動作確認を行う。
  7. 安定後、必要に応じて VPS→R640 の HTTPS 化を検討する。
  8. 将来の portal / cloud / www のドメイン整理を本番運用前提で固定する。
13. カツオくん向け引き継ぎ要点

次回以降の作業では、絶対に「公開443が入口」の発想に戻さないこと。

今回の本質は、WG が最前段 であり、その後ろに VPS の 443 終端があり、さらにその後ろに R640 の実サービス群がある、という順序です。

Portal、Nextcloud、将来Web のどれも、顧客にとっては「役割ごとの名前」で見えるようにし、サーバ配置や内部経路を意識させないこと。