世の中には様々なCMSが存在しますが、最も有名なCMSは「WordPress」ではないでしょうか?
私はサーバーエンジニアの業務の一環として、お客様のWeb環境を頻繁に目にしています。
その中の体感として、約8割強のお客様が「WordPress」を利用しWeb構築を行なっているように感じます。
「WordPress」はOSSとして開発、公開が行われており様々なバージョンが存在します。
今回はAPIを活用し簡易的にバージョンチェックスクリプトを作成する方法を解説致します!!
■使用するAPI
今回使用するAPIは公式より公開されている「WordPress.org API」を使用致します。
「WordPress.org API」の中の「Version Check」APIを使用し最新バージョンを取得します。
その他にも「PHPバージョン」や「mysqlバージョン」「ダウンロードリンク」等もあわせて取得しプログラムに埋め込みます。
- 最新バージョン
- PHPバージョン
- mysqlバージョン
- ダウンロードリンク
その他のAPI詳細については下記サイトよりご確認よろしくお願いいたします。
■シェルの構成
概要
今回作成するシェルの流れは以下のようになっております。
- APIから情報を取得し、変数に格納
- スクリプトにて保持している現在のバージョン情報を変数に格納
- if条件文を使って、新しいバージョンと現在のバージョンを比較
- 差分がある場合、メール処理を行い通知
ディレクトリ
│
├ チェックスクリプト
└─バージョン格納用テキストファイル
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