Notemod-selfhosted ヘルプ(v1.1.0)

📘 Notemod-selfhosted マニュアル(v1.1.0)

Notemod-selfhosted v1.1.0 は、本家 Notemod(静的UI)をベースに 「自分のサーバーに置いて、JSONを単一データソースとして運用する」 ことに特化した自己ホスト版です。
外部サービスに依存せず、Windows PC と iPhone 間のテキストのやり取りを円滑にする目的で開発されています。


1. Notemod-selfhosted とは

主な特徴

  • GitHub / Gist 非依存(サーバー上の notemod-data/data.json に集約)
  • PHPで同期・APIを提供(iPhoneショートカット / 外部ツール連携前提)
  • Windows PC から Notemod にクリップボードを送信する Windowsアプリ(ClipboardSender) と相性が良い
  • アクセスログを ファイル(生ログ)Notemod Logsカテゴリー の両方に記録(ON/OFF可能)
  • notemod-data/ / config/ / logs/自動で .htaccess を作成して直アクセス遮断
  • 読み取りAPIは pretty=2本文だけ(プレーンテキスト) を取得可能
  • Web UI 認証(v1.1.0 追加):Basic認証が使えないサーバーでも、Notemod側のログインで保護
  • PWA対応(v1.1.0 追加):ホーム画面に追加して“アプリっぽく”使える

2. 動作要件(v1.1.0)

  • PHP 8.1 以上が必須(v1.1.0 から)
  • 推奨:HTTPS(PWA運用でも実質必須)
  • 必要になりがちなPHP拡張:json / mbstring(環境によっては標準で有効)

3. ディレクトリ構成(標準)

public_html/
├─ index.php                    # Notemod UI
├─ logger.php                   # access logging (file / Notemod logs)
├─ notemod_sync.php             # sync endpoint (save/load)
├─ setup_auth.php               # Web UI 認証 初期セットアップ/管理(v1.1.0)
├─ login.php                    # ログイン画面(構成により名称が異なる場合あり)
├─ logout.php                   # ログアウト
├─ account.php                  # アカウント画面(パスワード変更等)
├─ auth_common.php              # 認証共通(セッション/権限チェック等)
├─ api/
│  ├─ api.php                   # add note
│  ├─ read_api.php              # read API
│  └─ cleanup_api.php           # admin cleanup(purge_log / purge_bak 対応 v1.1.0)
├─ notemod-data/
│  └─ data.json                 # single data source (runtime)
├─ config/
│  ├─ config.php                # secrets + common settings (DO NOT COMMIT)
│  └─ config.api.php            # API tokens + paths (DO NOT COMMIT)
├─ logs/                        # file logs (enabled only)
├─ robots.txt                   # block crawlers (recommended)
└─ (PWA files)                  # manifest / service worker / icons 等(v1.1.0)

config/api/index.php と同じ階層に置く想定です。
構成を変える場合は、PHP側のパスも合わせて修正が必要です。


4. 初回セットアップ(最短)

4.1 サーバーへ配置

リポジトリ一式を、サーバーの公開フォルダーにアップロードします
例:public_html/

4.2 設定ファイル作成(重要)

v1.1.0 で Web UI での 初期設定の際に自動的に生成されます。
タイムゾーンやログのオン/オフ、バックアップファイル自動作成のオン/オフなどは、下記設定ファイルを編集してください。

  • config/config.sample.phpconfig/config.php にリネームして編集
  • または、config/config.php を編集
  • config/config.api.sample.phpconfig/config.api.php にリネームして編集
  • または、config/config.api.php を編集

注意:config/config.phpconfig/config.api.php は絶対にGitHubへコミットしないでください
.gitignore に入れて “ローカル・本番のみ” で管理します。

4.3 初期化(初回のみ)

ブラウザで公開URLにアクセスして Notemod を開きます。
表示言語を選び、最初のカテゴリを作成してください。

この操作で以下が揃います(環境・設定による)

  • notemod-data/data.json(初期スナップショット)
  • notemod-data/.htaccess(直アクセス防止・自動)
  • config/.htaccess(直アクセス防止・自動)
  • logs/logs/.htaccess(loggerファイルログがONの場合・自動)

5. セキュリティ(超重要)

5.1 まず結論(推奨の順)

  1. (可能なら)Basic認証 + トークン(最強)
  2. Basic認証が使えないサーバーWeb UI認証 + トークン(v1.1.0で対応)
  3. 可能なら追加で IP制限(固定IP運用できるなら)

v1.1.0 の「Web UI認証」は、Basic認証が提供されない/使えないサーバー向けの保護手段です。

5.2 .htaccess 自動生成(直アクセス遮断)

Notemod-selfhosted は .htaccess が無い場合、以下内容で自動生成して守る設計です。

<IfModule mod_authz_core.c>
  Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
  Order allow,deny
  Deny from all
</IfModule>

対象(環境・設定による)

  • notemod-data/data.json を守る)
  • config/(秘密情報を守る)
  • logs/(アクセスログを守る)

サーバーによっては .htaccess が効かない/許可されていない場合があります。
その場合は Web UI認証(v1.1.0)Basic認証 が最後の砦になります。

5.3 robots.txt(検索エンジン対策)

robots.txt を同梱しています。

  • 用途:検索エンジンに拾われないようにする(公開運用の安全性UP)
  • 注意:robots は「礼儀」なので、悪意あるアクセスは防げません
    → 認証(Basic or Web UI)とトークンが本命です。

6. Web UI 認証(v1.1.0 追加)

6.1 何ができる?

  • Basic認証なしでも、Notemod を ログイン制 にできる
  • 初回セットアップ時に 初期ユーザー作成
  • 運用中は 未ログインだと認証情報(APIトークン等)は伏字、編集不可
  • ログイン中は アカウント/認証情報の管理 が可能

6.2 使い方(ざっくり)

  1. setup_auth.php にアクセス
  2. 初回(認証データが無い場合)
  • 画面の案内に従って 初期ユーザー を作成
  • 必要な秘密情報の生成・保存(例:config/auth.php など)
  1. 運用中(認証データがある場合)
  • 未ログイン:閲覧はできても管理操作は不可(トークン伏字等)
  • ログイン済み:管理操作が可能

実際の保存先ファイル名は実装に依存します(例:config/auth.php)。
いずれにせよ GitHubにコミット禁止 です。

6.3 Notemod UI の設定アイコン(v1.1.0 追加)

NotemodのUIに 設定アイコン(歯車) を追加しています。
押すとメニューが表示され、以下に遷移します(構成例):

  • ログアウト → ./logout.php
  • アカウント → ./account.php
  • 認証情報 → ./setup_auth.php

7. data.json の構造(重要)

Notemodは data.json 内で、categoriesnotesJSON文字列 になっています。

例:

{
  "categories": "[{...},{...}]",
  "notes": "[{...},{...}]",
  "selectedLanguage": "EN"
}

PHPでは「二重デコード」が必要です。

  • まず data.jsonjson_decode()
  • 次に $data['notes'] / $data['categories']json_decode()

8. 設定ファイル

8.1 config/config.php(共通設定・秘密)

代表例(実際は sample を元に)

  • SECRET:sync用トークン(16文字以上推奨)
  • TIMEZONE:例 Asia/Tokyo
  • DEBUG:trueで _sync_debug.log 等へログ
  • INITIAL_SNAPSHOT:初回データ
  • logger設定
  • LOGGER_FILE_ENABLED(ファイルログ ON/OFF)
  • LOGGER_NOTEMOD_ENABLED(Logsカテゴリー記録 ON/OFF)
  • LOGGER_LOGS_DIRNAME(例:logs / logs1

8.2 config/config.api.php(API設定・秘密)

代表例

  • EXPECTED_TOKEN:通常APIトークン
  • ADMIN_TOKEN:cleanup用(強い値推奨)
  • DATA_JSONnotemod-data/data.json へのパス
  • DEFAULT_COLOR:作成カテゴリ/ノートの色
  • CLEANUP_BACKUP_ENABLED:cleanup時バックアップ ON/OFF

9. logger.php(アクセスログ統合)

logger は 2系統で記録できます(configでON/OFF)

  1. ファイル生ログ:/logs/access-YYYY-MM.log
  2. Notemod Logsカテゴリー:Logs カテゴリー内の access-YYYY-MM ノート

Logsカテゴリの仕様

  • カテゴリ名:Logs
  • 月別ノート:access-YYYY-MM
  • 追記方式:先頭に追記(最新が上)
  • read_api.php?action=latest_note では Logsカテゴリは常に除外
    (通常メモの最新だけ取りたい用途のため)

10. notemod_sync.php(サーバー同期用 save/load)

10.1 役割

  • action=save:クライアントから受け取った JSON文字列 を保存
  • action=load:サーバーの JSON文字列 を返す
  • 初回:data.json が無ければ INITIAL_SNAPSHOT で作成
  • notemod-data/.htaccessconfig/.htaccess が無ければ作成(直アクセス遮断)

10.2 必須パラメータ

  • tokenconfig.phpSECRET
  • actionsave / load

11. api.php(ノート追加API)

エンドポイント:/api/api.php

パラメータ必須説明
tokenEXPECTED_TOKEN
textノート本文(改行可)
title任意無ければ日時
category任意無ければ INBOX

仕様

  • category が無ければ INBOX を自動作成
  • text は HTML保存(改行→<br>、XSS対策で htmlspecialchars
  • JSONレスポンス

例(GET)

https://YOUR_SITE/api/api.php?token=EXPECTED_TOKEN&category=メモ&text=AAA

12. read_api.php(読み取りAPI)

エンドポイント:/api/read_api.php

12.1 action 一覧

  • action=list_categories
  • action=list_notes
  • action=latest_note(Logsカテゴリは常に除外)
  • action=get_notecategory + title で1件)

12.2 pretty

  • pretty=1:JSONを整形
  • pretty=2latest_note / get_note のとき 本文だけ(プレーンテキスト) で返す
  • <br> → 改行
  • HTMLタグ除去
  • HTMLエンティティ復号
  • 改行コード統一

https://YOUR_SITE/api/read_api.php?token=EXPECTED_TOKEN&action=get_note&category=マニュアル&title=v1.0.0&pretty=2

13. cleanup_api.php(危険操作:削除系)

エンドポイント:/api/cleanup_api.php

13.1 共通仕様

  • POST専用
  • confirm=YES がないと実行しない(ただし dry_run=1 はOK)
  • トークンは ADMIN_TOKEN(または EXPECTED_TOKEN fallback)
  • CLEANUP_BACKUP_ENABLED がONなら、実行前にバックアップを作成
  • data.json.bak-YYYYmmdd-HHMMSS

13.2 カテゴリ内ノート全削除(従来機能)

  • category=... 等(実装のパラメータに合わせて使用)
  • 実行は confirm=YES が必要

13.3 バックアップファイル全削除(v1.1.0 対応)

  • purge_bak=1(または purge_bak=true
  • dry_run=1:削除せずに対象一覧だけ返す
  • dry_run なしで実行する場合:confirm=YES が必要

13.4 ログファイル全削除(v1.1.0 対応)

  • purge_log=1(または purge_log=true
  • 対象:logs/ 配下の .log ファイル(実装により拡張子条件は異なる場合あり)
  • dry_run=1:削除せずに対象一覧だけ返す
  • dry_run なしで実行する場合:confirm=YES が必要

14. Basic認証とAPIの叩き方(補足)

14.1 ブラウザでのアクセス

Basic認証に遭遇すると、通常はID/パス入力ダイアログが出ます。
そこで入力すればOKです。

https://user:pass@host/... 形式は古い方法で、ブラウザによっては拒否されます。

14.2 iPhoneショートカットで叩く(推奨)

ショートカットの「URLの内容を取得」で

  • ヘッダ:Authorization: Basic base64(user:pass)
  • 本文/クエリ:token / action など

が確実です。


15. ClipboardSender(Windowsアプリ)連携

目的:Windowsのクリップボード内容を Notemodへ即送信して “Windows → iPhone” のテキスト移動を軽くする

典型パターン

  • ClipboardSender がクリップボード取得
  • /api/api.phptext=...&category=INBOX などで送信
  • iPhone側は read_api.php?action=latest_note&pretty=2 で最新を読む

おすすめ運用

  • Windows送信用カテゴリ:INBOX
  • iPhone側ショートカットで “PC → iPhone” を作る
  • 認証(Basic or Web UI)+トークンの二重ガード

16. PWA対応(v1.1.0 追加)

16.1 できること

  • iPhone / Android で「ホーム画面に追加」して、アプリのように起動
  • 表示がフルスクリーン寄りになり、URLバーの存在感が減る

16.2 条件・注意

  • 原則 HTTPS が必要です(PWAの仕組み上、HTTPだと制限されます)
  • 会社/共有サーバーの制限で Service Worker が動かない場合があります

16.3 iPhoneでの追加(例)

  1. Safari で Notemod を開く
  2. 共有ボタン → 「ホーム画面に追加」
  3. アイコンから起動

17. パーミッション(目安)

共用サーバーの典型値

  • フォルダ:755
  • PHPファイル:644
  • data.json / ログ:600〜644(サーバーが書ける範囲で)
  • .htaccess644

注意

  • 書き込みが必要:notemod-data/、(loggerファイルログONなら)logs/
  • “書けない” 場合は logger や sync が失敗します

18. GitHub公開時の注意(必読)

公開してよいもの

  • PHP/HTML/JS(index.php / api/ / logger.php / notemod_sync.php / 認証UI関連)
  • config/*.sample.php
  • README / LICENSE / .gitignore / robots.txt
  • PWAの公開用ファイル(manifest / icons / service worker 等)

公開してはいけないもの(絶対)

  • config/config.php
  • config/config.api.php
  • (認証導入後)認証情報ファイル(例:config/auth.php 等)
  • notemod-data/data.json
  • logs/*.log
  • *.bak-*(backup)

19. 参考 API 例(v1.1.0)

19.1 ノートを追加

GET/POST /api/api.php?token=EXPECTED_TOKEN&category=メモ&text=AAA

19.2 最新ノートを取得(本文のみ)

GET /api/read_api.php?token=EXPECTED_TOKEN&action=latest_note&pretty=2

19.3 ノート一覧を取得

GET /api/read_api.php?token=EXPECTED_TOKEN&action=list_notes&pretty=1

19.4 category + title で本文のみ

GET /api/read_api.php?token=EXPECTED_TOKEN&action=get_note&category=aaa&title=i&pretty=2

19.5 Basic認証つき(古いURL埋め込み方式)

https://USER:PASS@YOUR_SITE/api/api.php?token=EXPECTED_TOKEN&category=メモ&text=AAA

19.6 ログファイル一括削除(POST)【v1.1.0 追加】

curl -X POST "https://USER:PASS@YOUR_SITE/api/cleanup_api.php"   -H "Content-Type: application/x-www-form-urlencoded"   --data-urlencode "token=ADMIN_TOKEN"   --data-urlencode "purge_log=1"   --data-urlencode "confirm=YES"

19.7 バックアップファイル一括削除(POST)【v1.1.0 追加】

curl -X POST "https://USER:PASS@YOUR_SITE/api/cleanup_api.php"   -H "Content-Type: application/x-www-form-urlencoded"   --data-urlencode "token=ADMIN_TOKEN"   --data-urlencode "purge_bak=1"   --data-urlencode "confirm=YES"

20. v1.0.2 → v1.1.0 アップデート手順(おすすめ)

  1. 既存環境をバックアップ
  • notemod-data/data.json
  • config/config.php / config/config.api.php /(認証導入済みなら認証情報ファイル)
  1. リポジトリのファイルを上書きアップロード
  • configやdataは上書きしない
  1. サーバーのPHPバージョンを 8.1以上 に設定
  2. ブラウザで Notemod を開いて動作確認
  3. (Basic認証が使えない環境の場合)setup_auth.php で Web UI認証を初期化・有効化
  4. PWAで使う場合は HTTPS と配信パス(manifest / service worker)が正しいか確認

Language
PAGE TOP