Mono Works

チラシのすきま

Gemini PDAにhugoの環境構築(その3)

1ヶ月以上、間が空いてしまったが、第1回第2回に引き続き、Termux上に構築したhugo環境に関するお話の最終回である。今回は、hugo用に作成したスクリプトをTermux上で使うためにおこなった主な変更点をご紹介する。

シェル変数の変更

スクリプトをTermux上で実行するために、以下を変更。

  • 作業ディレクトリとして、Termuxのローカルリポジトリフォルダを指定。
  • 最近のhugoだとローカル環境での確認用URLとして、デフォルトのlocalhost:1313を指定しても、サイト内リンクなど破綻せず使えるようになっていたので、これに関するシェル変数を削除。というか、Termux以外の環境もローカル環境のURLは指定しないように変更した。

ngrokをTermux上で使う(1. Webサーバ起動 関連)

ngrok経由でWebサーバ公開をおこなうスクリプト部分については、ngrokの起動を自動から手動へ変更しただけ。ngrokをTermaxにインストール方法は、以下のとおり。

Gemini PDAで、ngrokにログインし、**Linux(ARM)**版のzipファイルをダウンロード。unzipしたら、バイナリファイル(ngrok)を/usr/binに移動して、実行権限を与える。

unzip ngrok-stable-linux-arm.zip

mv ngrok $PREFIX/bin/ngrok

chmod +x ngrok

その他ngrokの基本的な使い方は、以前の記事を参照して下さい。

記事生成周り(2. ブログを書く、3. 会社のお知らせを書く 関連)

記事ファイル生成後に開くエディタをvimに変更。

SSHの設定( 5. シンク、6. シンク(.htaccess) 関連)

ホストにファイルをアップするrsync用にSSH鍵を設定して、スクリプトに記述した鍵のディレクトリをTermux用に変更。SSH鍵の設定については、こちらの記事を、公開鍵の追加については、こちらの記事を参照して下さい。

hugoバージョン更新(7. メンテナンスメニュー 関連)

hugoのバージョン更新方法をngrok同様のインストール手順に変更。

Termux上でのスクリプト実行

hugo用のスクリプト(例:hogehoge.sh)をTermux上にGitでPullして、実行権限を付与。./を付けなくてもスクリプトを実行可能にする場合は、スクリプトを/usr/binにコピーするなり、スクリプトをまとめたディレクトリ等にコピーして、~/.bash_profileにPATHを追加するなり、お好みで。

chmod +x hogehoge.sh

# ./を付けるとスクリプトを実行可能
./hogehoge.sh
--> hogehoge.shの内容が実行される

# スクリプトを/usr/binにコピー
cp hogehoge.sh $PREFIX/bin

# ./を付けなくてもスクリプトを実行可能
hogehoge.sh
--> hogehoge.shの内容が実行される

スクリプト全体

現在、Gemini PDAのTermux上で使用するhugoスクリプトは、こんな感じになっている。

#!/bin/bash

# シェル変数:hugoの作業ディレクトリ
readonly HUGO_DIR="/data/data/com.termux/files/home/{自分なりのPath}"
# シェル変数:同期に使用する.htaccessファイル
readonly HTACCESS_NAME="20180612.htaccess"

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

echo -n "hugoを始める
  1. Webサーバ起動
  2. ブログを書く
  3. 会社のお知らせを書く
  4. ビルド
  5. シンク
  6. シンク(.htaccess)
  7. メンテナンスメニュー
  8. キャンセル
選択(1-8):"
read -r choice_to_do

case $choice_to_do in
  [1]* )
    echo -n "Webサーバの起動方法を選択
      a. サイドメニュー付きで起動(ファイル生成しない)
      b. サイドメニュー付きで起動(_localフォルダにファイル生成)
      c. ngrok経由で外部にローカルWebサーバを公開(ファイル生成しない)
      d. キャンセル
    選択(a-d):"
    read -r select_method

    case $select_method in
      [aA]* )
        hugo server -D -w
      ;;

      [bB]* )
        rm -r _local/*
        hugo server -d _local -D -w
      ;;

      [cC]* )
        echo -n "別セッションで ngrok http 1313 を実行し
        https://《8桁の英数字》.ngrok.io 部分の
        8桁の英数字を入力:"
        read -r ngrok_adress
          hugo server -D -b="https://${ngrok_adress}.ngrok.io" --bind="0.0.0.0" --appendPort=false --liveReloadPort=443 --navigateToChanged
      ;;

      [dD]* )
        exit
      ;;

      * )
        echo "a から d の半角英字を入力して下さい。"
      ;;
    esac
  ;;

  [2]* )
    echo -n "ブログ slug(日付以外の部分)
    ※ 半角英数とハイフンのみ使用可、スペースを入れない
    (入力):"
    read -r headline
    echo -n "ブログ 日付
    ※ 半角数字とハイフンのみ使用可、スペースを入れない
    yyyy-mm-dd(空白なら当日の日付)形式で
    (入力):"
    read -r date
    echo -n "ブログ タイトル(フリー入力、32文字以内)
    ※ クォーテーション「\"」は、HTMLエンティティ化して「"」と記述
    (入力):"
    read -r title
    if [ -z "$date" ]; then
      date="$(date +"%Y-%m-%d")"
    fi
    slug="$date-$headline"
    file_name="post/${slug}.md"
    file_path="content/$file_name"
    if [ ! -e "$file_path" ]; then
      hugo new "$file_name"
      sed -i -e "s/title = \".*\"/title = \"${title}\"/g" "$file_path"
      sed -i -e "s/slug = \".*\"/slug = \"${slug}\"/g" "$file_path"
      sed -i -e "s/description = \".*\"/description = \"${title}\"/g" "$file_path"
      sed -i -e "s/# タイトルをここに/# ${title}/g" "$file_path"
      sed -i -e "s/original#01/${slug}-01/g" "$file_path"
    else
      echo "$file_name はすでに存在します。"
    fi
    vim "$file_path"
  ;;

  [3]* )
    echo -n "お知らせ slug(日付以外の部分)
    ※ 半角英数とハイフンのみ使用可、スペースを入れない
    (入力):"
    read -r headline
    echo -n "お知らせ 日付
    ※ 半角数字とハイフンのみ使用可、スペースを入れない
    yyyy-mm-dd(空白なら当日の日付)形式で
    (入力):"
    read -r date
    echo -n "お知らせ タイトル(フリー入力、32文字以内)
    (入力):"
    read -r title
    if [ -z "$date" ]; then
      date="$(date +"%Y-%m-%d")"
    fi
    slug="$date-$headline"
    file_name="announcement/${slug}.md"
    file_path="content/$file_name"
    if [ ! -e "$file_path" ]; then
      hugo new "$file_name"
      sed -i -e "s/date = \".*\"/date = \"${date}T00:00:01+09:00\"/g" "$file_path"
      sed -i -e "s/title = \".*\"/title = \"${title}\"/g" "$file_path"
      sed -i -e "s/slug = \".*\"/slug = \"${slug}\"/g" "$file_path"
      sed -i -e "s/description = \".*\"/description = \"${title}\"/g" "$file_path"
      sed -i -e "s/# タイトルをここに/# ${title}/g" "$file_path"
      sed -i -e "s/original#01/${slug}-01/g" "$file_path"
    else
      echo "${file_name} はすでに存在します。"
    fi
    vim "$file_path"
  ;;

  [4]* )
    rm -r public/*
    hugo
  ;;

  [5]* )
    rsync -av --update --delete --exclude='.htaccess' --chmod=D0755,F0644 -e "ssh -i /data/data/com.termux/files/home/.ssh/id_ecdsa" ${HUGO_DIR}/public/ {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}
  ;;

  [6]* )
    rsync -avz --update --chmod=0604 ${HUGO_DIR}/htaccess/${HTACCESS_NAME} {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}/.htaccess
  ;;

  [7]* )
  echo -n "
  メンテナンスメニュー
    a. hugoのバージョン更新
    b. キャンセル
  選択(a-c):"
  read -r select_method

  case $select_method in
    [aA]* )
      echo -n "ダウンロードするhugoのバージョンを入力
      参考URL:https://github.com/gohugoio/hugo/releases
      0.xx.x 形式で入力:"
      read -r hugo_version
      cd ~
      wget "https://github.com/gohugoio/hugo/releases/download/v${hugo_version}/hugo_${hugo_version}_Linux-ARM.tar.gz"
      tar xvzf hugo_${hugo_version}_Linux-ARM.tar.gz
      mv hugo ../usr/bin/
      rm hugo_${hugo_version}_Linux-ARM.tar.gz
      cd "$HUGO_DIR"
      hugo version
    ;;

    [bB]* )
      exit
    ;;

    * )
      echo "a または b の半角英字を入力して下さい。"
    ;;
  esac
  ;;

  [8]* )
    exit
  ;;

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

おしまい。

コメント

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