前回の予告どおり、今回は、hugoのビルドとホスト先のさくらインターネットとのファイル同期をおこなうスクリプトについてです。
今回のスクリプト
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/31)SSHを利用してrsyncでファイル同期する記事を書きました。
次回は、hugo周りのメンテナンスについてです。
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)