2023-8-14
お久しぶりです。r.portfolioの中の人「 r 」でございます。
世の中には様々なCMSが存在しますが、最も有名なCMSは「WordPress」ではないでしょうか?
私はサーバーエンジニアの業務の一環として、お客様のWeb環境を頻繁に目にしています。
その中の体感として、約8割強のお客様が「WordPress」を利用しWeb構築を行なっているように感じます。
「WordPress」はOSSとして開発、公開が行われており様々なバージョンが存在します。
最新の公開バージョン取得したいと模索していたところ公式より公開されている便利なAPIを見つけました!!
今回は上記APIを活用し簡易的にバージョンチェックスクリプトを作成する方法を解説致します!!
今回使用するAPIは公式より公開されている「WordPress.org API」を使用致します。
「WordPress.org API」の中の「Version Check」APIを使用し最新バージョンを取得します。
その他にも「PHPバージョン」や「mysqlバージョン」「ダウンロードリンク」等もあわせて取得しプログラムに埋め込みます。
その他のAPI詳細については下記サイトよりご確認よろしくお願いいたします。
<API公式サイト>
今回作成するシェルの流れは以下のようになっております。
ディレクトリ
│
├ チェックスクリプト
└─バージョン格納用テキストファイル
APIからの情報取得はcurlを使用します。またhttpsを使用する為、「-s」オプションを使用します。
下記のコードにて取得したAPIバージョンをnewversionとして変数に格納します。
curlではAPIのすべての情報を取得してしまう為、grepやcut、head等を使用し必要な情報のみを抽出します。
#!/bin/bash
#APIからCMSバージョンを取得し変数に格納
newversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"current":"[^"]+' | cut -d'"' -f4 | head -1)
上記同様に「PHPバージョン」「mysqlバージョン」「ダウンロードリンク」をAPIより取得し変数に格納します。
#!/bin/bash
#APIからPHPバージョンを取得し変数に格納
phpversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"php_version":"[^"]+' | cut -d'"' -f4 | head -1)
##APIからmysqlバージョンを取得し変数に格納
mysqlversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"mysql_version":"[^"]+' | cut -d'"' -f4 | head -1)
#APIからダウンロードリンクを取得し変数に格納
downloadlink=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"download":"[^"]+' | cut -d'"' -f4 | head -1)
次に比較用に情報を保持するためのテキストファイルを作成します。
今回、ファイル名は「setting-version.txt」として作成します。
vi setting-version.txt
初めの一回は手動で情報を入力する必要がある為、下記コマンドを使用して値を入力します。
curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"current":"[^"]+' | cut -d'"' -f4 | head -1 > setting-version.txt
次に先ほどの手順にて作成したファイルより値を取り出し変数に格納します。
変数名は「settingversion」として作成致します。
#!/bin/bash
#現バージョンを読み込み変数に格納
settingversion=$(cat setting-version.txt)
次にバージョンの比較を行なっていきます。
if文を使用しサーバー側にて保持しているバージョンと新たに取得したバージョンの比較を行います。
ここでは自身が保持しているバージョンと新たに取得したバージョンが異なる場合更新ありと判定しております。
#!/bin/bash
if [ $newversion != $settingversion ]; then
#差分がある場合の処理
elif [ $newversion == $settingversion ]; then
#差分がない場合の処理
fi
続いて差分処理の作成を行なっていきます。
差分がある場合は下記の処理を行います。
差分がない場合は処理は不要です。より良い構成を取る場合等はログ出力等などの処理を作成しましょう。
下記が上記機能を組み込んだコードになります。
#!/bin/bash
if [ $newversion != $settingversion ]; then
#差分がある場合の処理
#メール通知処理
{
echo "To:<メールアドレス>"
echo "From: <メールアドレス>"
echo "Content-Type: text/plain;charset="UTF-8""
echo "Subject: [WordPressの公開バージョンが$newversionに変更されました]"
echo "動作要件"
echo "---------------------------------"
echo "PHP $phpversion"
echo "MySQL $mysqlversion"
echo "---------------------------------"
echo "下記よりダウンロード可能です。"
echo "$downloadlink"
} |sendmail -i メールアドレス
#リストの更新
echo $newversion > setting-version.txt
elif [ $newversion == $settingversion ]; then
#差分がない場合の処理
#処理なし
fi
メール送信には「sendmail」を使用しています。上記「メールアドレス」を置き換える事で使用する事が可能です。
最終的なプログラムは以下となっております。
#!/bin/bash
#APIからCMSバージョンを取得し変数に格納
newversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"current":"[^"]+' | cut -d'"' -f4 | head -1)
#APIからPHPバージョンを取得し変数に格納
phpversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"php_version":"[^"]+' | cut -d'"' -f4 | head -1)
##APIからmysqlバージョンを取得し変数に格納
mysqlversion=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"mysql_version":"[^"]+' | cut -d'"' -f4 | head -1)
#APIからダウンロードリンクを取得し変数に格納
downloadlink=$(curl -s https://api.wordpress.org/core/version-check/1.7/ | grep -oE '"download":"[^"]+' | cut -d'"' -f4 | head -1)
#現バージョンを読み込み変数に格納
settingversion=$(cat setting-version.txt)
#差分確認
#差分がある場合→メール配送&リスト更新
if [ $newversion != $settingversion ]; then
#差分あり
#メール通知処理
{
echo "To:<メールアドレス>"
echo "From: <メールアドレス>"
echo "Content-Type: text/plain;charset="UTF-8""
echo "Subject: [WordPressの公開バージョンが$newversionに変更されました]"
echo "動作要件"
echo "---------------------------------"
echo "PHP $phpversion"
echo "MySQL $mysqlversion"
echo "---------------------------------"
echo "下記よりダウンロード可能です。"
echo "$downloadlink"
} |sendmail -i メールアドレス
#リスト更新
echo $newversion > setting-version.txt
elif [ $newversion == $settingversion ]; then
#差分がない場合の処理
#処理なし
fi
いかがでしたでしょうか。
以上で「WordPressバージョンチェックをスクリプト」の完成となります!!
通知メールの宛先指定を「Slack」や「Teams」の外部サービス等にする事でより便利に活用できるかと思います!
最後まで見ていただき誠にありがとうございました!!