Webブラウザだけで動作するシンプルな「Tsui Editor」

Tsui Editorというシンプルなエディタがリリースされました。公開サイトにアクセスするだけで使えます。持ち運びたい場合も、単一のHTMLファイルなのでインストール不要でちょっと編集したい時に便利。Chromium系ブラウザ(Chrome / Edge / Opera / Brave)専用とはなりますが、ちょっとした場面で役立つのでは。

公開サイトアクセスでも使えるし、単一HTMLファイルを持ち運んでも良いので、あえてセルフホストしなくても構わないかもしれませんが。
一応、LXDコンテナ内で、Tailscale ServeによってHTTPS化して公開するスクリプトです。

Tailscale有効なLXDコンテナ内で実行

#!/bin/bash
# ==============================================================
# Tsui Editor インストールスクリプト (Tailscale Serve版)
# tailscale serve で HTTPS公開 → File System Access API が動く
# ==============================================================

set -e

INSTALL_DIR="/opt/tsui-editor"
PORT="${TSUI_PORT:-8080}"
HTML_URL="https://raw.githubusercontent.com/hajimetwi3/misc/main/docs/tools/tsui-editor/tsui-editor.html"
SERVICE_NAME="tsui-editor"

echo "=== Tsui Editor セットアップ (Tailscale Serve) ==="

# ── 1. 依存パッケージ ──────────────────────────────────────────
install_deps() {
    if command -v apt-get &>/dev/null; then
        apt-get update -qq
        apt-get install -y -qq curl python3
    elif command -v dnf &>/dev/null; then
        dnf install -y -q curl python3
    elif command -v apk &>/dev/null; then
        apk add --no-cache curl python3
    else
        echo "[ERROR] 対応パッケージマネージャが見つかりません" >&2
        exit 1
    fi
}

echo "[1/5] 依存パッケージを確認中..."
if ! command -v curl &>/dev/null || ! command -v python3 &>/dev/null; then
    install_deps
fi
echo "      OK"

# ── 2. Tailscale 確認 ──────────────────────────────────────────
echo "[2/5] Tailscale を確認中..."
if ! command -v tailscale &>/dev/null; then
    echo "[ERROR] tailscale コマンドが見つかりません" >&2
    exit 1
fi
if ! tailscale status &>/dev/null; then
    echo "[ERROR] Tailscale が起動していません。'tailscale up' を先に実行してください" >&2
    exit 1
fi
echo "      OK"

# ── 3. HTMLファイル取得 ────────────────────────────────────────
echo "[3/5] tsui-editor.html を取得中..."
mkdir -p "$INSTALL_DIR"
curl -fsSL "$HTML_URL" -o "$INSTALL_DIR/tsui-editor.html"
echo "      保存先: $INSTALL_DIR/tsui-editor.html"

# ── 4. 起動スクリプト生成 & systemd ───────────────────────────
echo "[4/5] HTTPサーバーを設定中..."

cat > "$INSTALL_DIR/start.sh" << STARTSCRIPT
#!/bin/bash
PORT=\${TSUI_PORT:-${PORT}}
echo "Tsui Editor ローカルサーバー起動: http://127.0.0.1:\${PORT}"
cd "$INSTALL_DIR"
exec python3 -m http.server "\$PORT" --bind 127.0.0.1
STARTSCRIPT
chmod +x "$INSTALL_DIR/start.sh"

if [ -d /usr/local/bin ]; then
    ln -sf "$INSTALL_DIR/start.sh" /usr/local/bin/tsui-editor
fi

# systemd サービス登録
if command -v systemctl &>/dev/null && systemctl is-system-running &>/dev/null 2>&1; then
    cat > "/etc/systemd/system/${SERVICE_NAME}.service" << UNIT
[Unit]
Description=Tsui Editor HTTP Server (local)
After=network.target

[Service]
Type=simple
WorkingDirectory=${INSTALL_DIR}
ExecStart=/usr/bin/python3 -m http.server ${PORT} --bind 127.0.0.1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
UNIT

    systemctl daemon-reload
    systemctl enable --now "${SERVICE_NAME}"
    echo "      systemd サービス '${SERVICE_NAME}' 起動済み"
else
    echo "      systemd なし → バックグラウンドで起動します"
    nohup "$INSTALL_DIR/start.sh" > "$INSTALL_DIR/server.log" 2>&1 &
    sleep 1
fi

# ── 5. Tailscale Serve 設定 ────────────────────────────────────
echo "[5/5] tailscale serve を設定中..."

# 既存設定をリセット
tailscale serve reset 2>/dev/null || true

# ローカルHTTPサーバーをHTTPSで公開
tailscale serve --bg "http://127.0.0.1:${PORT}"

# ドメイン取得
TAILSCALE_DOMAIN=$(tailscale status --json | python3 -c "
import sys, json
d = json.load(sys.stdin)
name = d.get('Self', {}).get('DNSName', '').rstrip('.')
print(name)
")

# ── 完了メッセージ ─────────────────────────────────────────────
echo ""
echo "============================================"
echo "  Tsui Editor セットアップ完了!"
echo "============================================"
echo ""
if [ -n "$TAILSCALE_DOMAIN" ]; then
    echo "  アクセスURL (HTTPS / Tailscaleネットワーク内):"
    echo "  https://${TAILSCALE_DOMAIN}/tsui-editor.html"
else
    echo "  アクセスURL: tailscale status で自分のドメインを確認してください"
    echo "  https://<your-device>.ts.net/tsui-editor.html"
fi
echo ""
echo "  ✅ HTTPS配信のためFile System Access APIが動作します"
echo "  ✅ Chromium系ブラウザからアクセスしてください"
echo ""
echo "  serve状態の確認: tailscale serve status"
echo "  serve停止:       tailscale serve reset"
echo ""
タイトルとURLをコピーしました