印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux シェルスクリプトで CSS ネイキッドデー

去年に引き続き,今年も CSS ネイキッドデーというイベントに参加する。スタイルファイルを移動するシェルスクリプトを書いて対応する。

■ ■ ■

「CSS Naked Day」は,「1年に1度,自分のウェブサイトを CSS なしで表示させてみよう」というイベントである。去年2007年は,4月5日だった (nlog(n): スタイルシートがさっぱり見つかりません)。今年は4月9日に行われる。今年の Naked Day がこの日である理由は次だそうだ (CSS Naked Day)。

  • 火曜日,水曜日,木曜日のいずれか (トラフィックが最も多い曜日)
  • 4月の第1週のあたり
  • 4月1日であってはならない (悪ふざけになってしまうため)
  • 告知してから5日以降であること

CSS Naked Day には,ページにあらかじめ仕掛けておく PHP スクリプトが公開されている。その日になると自動的にスタイルシートの読み込みをしなくするというものである。UTC (GMT) 標準時を使い (協定世界時 - Wikipedia),4月9日の前後12時間を含めた丸2日を対象日としているようだ。つまり,下の図のようになる。

ネイキッドになる時間
ネイキッドになる時間


協定世界時 (UTC) を使っているので,ネイキッドになるのは世界的に同一時刻からとなる。日本時間では4月8日21:00から4月10日21:00までということになる。

全てのテンプレートに仕込んで,全ページを再構築するのは面倒なので,シェルスクリプトを書いて対応することにした。ネイキッドにする期間は上記の通りで,4月9日を含む2日間である。ファイル名は例えば naked.sh とする。

環境は Vine Linux 4.2, sh は GNU bash version 2.05b.0(1), date コマンドは date (GNU coreutils) 5.96 である。

#!/bin/sh
# A Bourne shell script for CSS naked day
# Edit two vars STYLE_FILE_ORG and STYLE_FILE_TMP before use.

STYLE_FILE_ORG="/path/to/styles-site.css"
STYLE_FILE_TMP="/path/to/styles-site.css.tmp"

NAKED_DAY="9"

function is_naked_day () {
  NAKED_DAY=$1
  NAKED_DAY_BEFORE=`expr $NAKED_DAY - 1`
  NAKED_DAY_AFTER=`expr $NAKED_DAY + 1`
  YEAR=`date '+%Y'`
  START=`date -u -d "$YEAR-04-$NAKED_DAY_BEFORE 12:00:00" '+%s'`
  END=`date -u -d "$YEAR-04-$NAKED_DAY_AFTER 12:00:00" '+%s'`
  NOW=`date -u '+%s'`
  if [ $NOW -ge $START -a $NOW -le $END ]; then
    return 0
  else
    return 1
  fi
}

function check_file () {
  if [ ! -e $1 -a ! -e $2 ]; then
    echo $1 or $2 not exists.
  fi
}

function rename_file () {
  if [ $1 -eq 0 ]; then
    if [ -f $2 ]; then
      mv $2 $3
    fi
  else
    if [ -f $3 ]; then
      mv $3 $2
    fi
  fi
}

check_file $STYLE_FILE_ORG $STYLE_FILE_TMP
is_naked_day $NAKED_DAY
rename_file $? $STYLE_FILE_ORG $STYLE_FILE_TMP

仕組みとしては,その時刻が来たらスタイルファイルの名前を変更し,企画が終わる時刻になったら元に戻すというものである。date コマンドには負の時刻を設定できないため,当日の-12時の代わりに前日の12時としている。

スタイルファイルのファイル名とパス名を,サイトにあわせて変更するのを忘れずに。スクリプトに実行許可を与えて,

$ chmod 755 naked.sh

試しに1度実行してみる。もし,スタイルファイルのパス名が正しくなければ,次のようなメッセージが表示される。

$ naked.sh
/path/to/styles.css or /path/to/styles.css.tmp not exists.

何も言わずに終了するのであればOK。

スクリプトを crontab に登録し,1時間毎に実行するようにしておく。

$ crontab -l
5 */1 * * * /path/to/naked.sh

設定して放っておけば,自動的に CSS のリネームが行われる。

日付が変わるだけであれば,このスクリプトは来年もそのまま使える。

Posted by n at 2008-04-08 21:10 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?