fluo10's blog

雑記

  • Home
    • 日本語
    • English
  • Blog
  • カテゴリ
    • お知らせ
    • ゲーム・映画
    • コンピュータ
    • ドール
    • 料理
    • 生活
    • 自動二輪
    • 雑記
  • タグ
  • Privacy policy
  • Links
    • Github
    • qiita

© 2022. All rights reserved.

  • サイトのリニューアルとそれに伴うプライバシーポリシーの更新について

    投稿日:
    2021年11月21日日曜日 18:00
    カテゴリ:
    • お知らせ
    タグ:
    • hugo
    • ssg
    • blog
    • zola
    • theme
    サイトをリニューアルしたのと、そのついでにサイトの情報についても変更を行いました。 具体的な更新内容は以下になります。 デザインのリニューアル 静
    Read More…
  • Wordpressの記事を静的サイトジェネレータZoraへ移行する

    投稿日:
    2020年8月13日木曜日 0:00
    カテゴリ:
    • コンピュータ
    タグ:
    • Server
    • Bash
    • Zola

    こちらの記事はQiitaに投降した記事と同一の内容になります

    ブログをWordpressからZola(Rust製の静的サイトジェネレータ)へ移行して数か月、自作テーマはテーマは依然として作成途中であるが、とりあえず今のところ問題もなさそうなので、重い腰を上げて旧ブログの記事を移行することにした。

    具体的な工程としては以下

    1. Wordpressの記事をSSG用のテキストファイルへ出力
    2. 記事ファイルの整理
    3. フロントマターをZola用のものに修正
    4. リンクなど記事内の情報の修正(これは今回の記事では扱わない)

    前提

    移行前の環境

    ブログプラットフォームでおなじみのWordpress ブログから大規模サイトまで作れる CMS | WordPress.org 日本語

    多言語用にサブディレクトリ型のマルチサイトを使用

    本記事の工程でも多言語、マルチサイト用の余計な工程ががかかってる。シングルサイトならもっと楽。

    移行先の環境

    静的サイトジェネレーターZolaで生成 Zola

    今回はZolaだが、移行の手順の流れや考え方自体は他でも使えるのではないかと思う。

    手順1: WordpressからSSG向けの形式への出力

    Zola用のツールがあるとは思えなかったので、ほかにメジャーなSSGであるところのHUGO用のツールを探す。

    見つかったのがこちら SchumacherFM/wordpress-to-hugo-exporter: Hugo is static site generator written in golang. Wordpress is a tool for remote access to your server ;-) ❗️Contributions welcome!

    puluginのインストール

    SSHでサーバーに入り、以下のようにプラグインを入れる

    $ cd /path/to/wordpress/wp-content/plugins/
    $ sudo wget https://github.com/SchumacherFM/wordpress-to-hugo-exporter/archive/2.0.0.zip
    $ sudo unzip 2.0.0.zip
    

    自分のケースではsudoが必要だったが共有してるタイプのレンタルサーバーならHOMEディレクトリ以下にあると思うので、sudoしなくてもいい。

    次にWordpress上の画面で対応

    プラグインを有効化し… {{image(src=“activate.png”, alt=“有効化!”)}}

    エクスポート {{image(src=“export.png”, alt=“エクスポート!”)}}

    中身の確認

    なぜか一部のマークダウンがAtomにディレクトリ扱いされて読めないというイレギュラーがあったが、VSCodeでは開けたのでそのまま続行する。 Atom最近使ってなかったから更新されてなくてバグってたのかもしれない。

    Hugoならこれで終わりかもしれないが、今回は別のSSGなので、ここからが本番。

    手順2: フォーマットの修正

    正直今回のケースでは記事が少ないので手動修正のほうが早かったのだけれど、せっかく記事にするなら役に立つ記事にしたいというのと、bashを学ぶちょうどいい機会ということもあって、極力bashで一括でやれるようにした

    ファイルの移動

    出力時のディレクトリの構造としてはこんなかんじ

    • hugo-export
      • about
        • index.md
      • posts
        • yyyy-mm-dd-slug1.md
        • yyyy-mm-dd-slug2.md
        • etc
      • wp-content
      • config.yaml

    posts内のファイル名は投稿日-スラッグ.mdという形式だった

    aboutが固定ページで、ほかの投稿はpost配下に日付-スラッグという形式で入っている模様。

    補足: config.yamlと固定ページについて

    config.yamlはサイトの設定だが今回は移行先のブログはすでにあるので使わない また、固定ページは1件しかなかったのと内容を更新するつもりだったので後述の自動処理では扱っていない。

    これが日本語と英語と2組ある(英語は英語勉強したい気分の時にしか にある

    まずはこれを移行先の構造に合わせ以下のようなレイアウトに移動したい

    • content
      • post
        • slug1
          • index.md
          • index.en.md
        • slug2
          • index.md
          • index.en.md
        • 略

    一括処理用にBashを書く

    最終的に出来たのがこれ

    ROOT=${PWD} # hugo-exportの親ディレクトリで実行することを想定。
    SRC="$ROOT/hugo-export/posts" # 移動元のディレクトリ
    DST="$ROOT/content/posts" # 移動先のディレクトリ
    
    cd $SRC
    for $FILE in *.md
    do 
        LEN=$((${#FILE} - 14)) # スラッグ未設定の場合は日付だけだったので、判別する。
        if [[ $LEN -eq 0 ]]; then
            AFTER="$DST/${FILE:0:-3}" # 日付だけの場合は仕方がないのでとりあえずそのまま移行する。
        else 
            AFTER="$DST/${FILE:11:-3}" # スラッグがある記事については日付を取り除く。
        fi
        mkdir $AFTER
        
        echo "$FILE to $AFTER"
    
        cp "$FILE" "$AFTER/index.md" # 英語記事を移動するときはここだけ変える
    done
    

    これでだいたい移動ができた。

    誤算だったのは下書きで、slugがファイル名にもフロントマターにも反映されていなかった。原因が下書きだからかスラッグが未入力だったからか? とはいえブログを移行して数か月という状況で、旧ブログに残っていた下書きの必要はなさそうなので、気にせず続行する。

    フロントマターの修正

    Hugo-exporterはその名の通りHUGO用なので、Zolaとはフロントマター(ワードプレスで言うところの記事名とかスラッグとか、要は本文以外の情報が書いてるとこ)の書式が違う。 具体的に言うとHugo exporterの出力形式だとフロントマターはYAMLだが、ZolaはTOMLというのを使っているらしい。

    出力時が以下

    Read More…