Open3

WordPressの記事をMarkDown化してAstroでGithub Pagesに公開

mimimimi

Astro -> GithuPages
https://tanggd.github.io/en/guides/deploy/github/

直下に作成する場合、base の指定は無しでよし。
xxx.github.io という名前のリポジトリにするとたぶん勝手に作られる公開Action pages build and deployment が走る。
そのため、最初アップロードした時点でページは生成されるが、それだとまだちゃんとbuildされていない模様。(README.mdの内容がトップページとして生成される。)

記事にあるように一度ファイルをPushしたら、

記事にあるdeply.yml

name: Github Pages Astro CI

on:
  # Trigger the workflow every time you push to the `main` branch
  # Using a different branch name? Replace `main` with your branch’s name
  push:
    branches: [ main ]
  # Allows you to run this workflow manually from the Actions tab on GitHub.
  workflow_dispatch:
  
# Allow this job to clone the repo and create a page deployment
permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout your repository using git
        uses: actions/checkout@v2          
      - name: Install, build, and upload your site
        uses: withastro/action@v0
        # with:
            # path: . # The root location of your Astro project inside the repository. (optional)
            # node-version: 16 # The specific version of Node that should be used to build your site. Defaults to 16. (optional)
            # package-manager: yarn # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional)


  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v1

が走ってちゃんとbuildしたものが公開される。

TODO

pages build and deployment はたぶん不要なので、Actionが走らないようにしたい。

mimimimi

wordpress-export-to-markdown

https://github.com/lonekorean/wordpress-export-to-markdown

npx wordpress-export-to-markdown

でかなりきれいにMarkDown化される。まああんまり複雑な記事書いてないからかな。

が、画像の読み込みがそのままではAstroではできなくてエラーがでる。

https://docs.astro.build/ja/guides/images/#markdownファイル内の画像

https://ebisu.com/note/astro-responsive-image/

https://scottwillsey.com/astro-markdown-image-story/

このあたりを読んで、

https://github.com/ChrisOh431/astro-remark-eleventy-image

を試してみる。

npx astro add astro-remark-eleventy-image

したらいいだけぽかったけど駄目で、一旦publicに移動する。

mv src/**/images/* public/images/

して

!\[([^\]]*)\]\((images\/[^\)]+)\)
![$1](/public/$2)

で置換。取り敢えずエラーはなくなったが、ファイル名が日本語のままのものが日本語対応していないので表示されない。

mimimimi

copilotに日本語のファイル名のものをリネームするJSを書いてもらって変換

renameJaFile.js

import fs from "fs";
import path from "path";

function isJapanese(text) {
  return /[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u.test(text);
}

function renameFilesInDir(dir) {
  const files = fs.readdirSync(dir, { withFileTypes: true });

  for (const file of files) {
    const filePath = path.join(dir, file.name);

    if (file.isDirectory()) {
      renameFilesInDir(filePath); // Recursively process subdirectories
    } else {
      const fileNameWithoutExt = path.parse(file.name).name;

      if (isJapanese(fileNameWithoutExt)) {
        const newFileName =
          Math.random().toString(36).substring(2, 15) + path.extname(file.name);
        const newPath = path.join(dir, newFileName);

        fs.renameSync(filePath, newPath);
        console.log(`Renamed file ${filePath} to ${newPath}`);
      }
    }
  }
}

renameFilesInDir("/YOURPATHTOREPOGITORY/src/pages/");
node renameJaFile.js

で、取り敢えず全表示された。