Mono Works

チラシのすきま

hugoのビルドとホストとの同期(hugo関連スクリプト 第3回)

前回の予告どおり、今回は、hugoのビルドとホスト先のさくらインターネットとのファイル同期をおこなうスクリプトについてです。

201807isogiyoshi03

今回のスクリプト

hugoのおススメは、GitHub Pagesをホストにして、ローカルで作成した記事をリモート(GitHub)にプッシュすることで、ブログの公開がおこなわれるというものですが、うちのホームページは、さくらにホスティングしているため、その後のビルドやファイルアップロードは手動でおこなってます。

手動といっても、今回のスクリプトのようなものを用意しておけば、実質自動みたいなもんです。

#!/bin/bash

# 環境変数:hugoの作業ディレクトリ
readonly HUGO_DIR="/mnt/c/《自分なりのPath》"
# 環境変数:本番環境用のテーマファイル
readonly HUGO_RELEASE_THEME="release"

if cd "$HUGO_DIR"; then
  :
else
  echo "存在しないディレクトリがhugoの作業ディレクトリに指定されています。"
  exit
fi

echo-n "hugoの作業
  1. ビルド
  2. シンク
  3. キャンセル
選択(1-3):"
read-r choice_to_do

case $choice_to_do in
  [1]* )
    rm -r public/*
    hugo -t $HUGO_RELEASE_THEME
  ;;

  [2]* )
    rsync -avz --update --delete --exclude='.htaccess' --chmod=D0755,F0644 ${HUGO_DIR}/public/ {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}
  ;;

  [3]* )
    echo "終了します...."
    exit
  ;;

  * )
    echo "1 から 3 の半角数字を入力して下さい。"
  ;;
esac

ビルド

ビルドに関しては、とくにややこしいことはなくて、本番用のテーマファイルを指定するくらいです。本番用にビルドしたファイルは、publicフォルダに生成されます。自分の場合、ここを毎回削除してからビルドするようにしてます。

同期

ホスト先のさくらインターネットとの同期には、rsyncを使用しています。rsync の基本的な使い方は、こんな感じ。

rsync [オプション] {ローカルディレクトリ} {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}

{ローカルディレクトリ} は、hugoがビルドしたファイルを生成する publicフォルダを ${HUGO_DIR}/public/のように指定します。{ローカルディレクトリ} の指定で気を付けないといけない点があります。最後にスラッシュを付けるか付けないかで、同期されるものが変わってきます。${HUGO_DIR}/public/とした場合、publicフォルダ内にあるファイルやフォルダを同期します。${HUGO_DIR}/publicとした場合、publicフォルダごと同期します。

{ユーザ名} には FTPアカウントを指定、{サーバアドレス} には FTPサーバを指定、{ホストのディレクトリ} には wwwを公開するフォルダを指定します。

今回利用した rsync[オプション] は、以下のとおり。

  • -a:アーカイブモード(コピー元のディレクトリを再帰的にコピー)
  • -v:コピーしているファイル名やバイト数などの情報を表示
  • -z:転送中のデータを圧縮する
  • --update:target-dirのものがsrc-dirより新しければコピーされない
  • --delete:target-dirにあってsrc-dirに無いものは削除される
  • --exclude=:マッチするファイルを除外する
  • --chmod=:D(ディレクトリ)とF(ファイル)に指定のパーミッションを付与

あと、直接使ってはないですが、実際の同期をおこなわないオプション -n:dry-runは、ちょっと試してみる時に使います。

今回の方法では、同期の度にサーバのパスワードを入力する必要があります。SSHキー生成とかすれば、サーバのパスワードを使わずに同期できたりしますが、それはまた今度。

追記:2018/07/31SSHを利用してrsyncでファイル同期する記事を書きました。

次回は、hugo周りのメンテナンスについてです。

コメント

コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)
執筆者
"ぽぽろんち" @pporoch
pporoch120
Mono Worksの中の人。好きなことをつらつらと書き留めてます。
ギターを始めてから 練習動画をYouTubeにアップしてます。ご笑納ください。
"DQX@ぬここ(UD487-754)、コツメ(NO078-818)"
採用案内