夜間しか見られないサイトを作る

最近、夜しか見ることができないサイトというのを見つけたので、自分でも作ってみる。

参考にするのは、夜サンデーです。
18 時から翌 6 時までしか見られないサイトというだけあって、少しオトナ向けのタイトルが多いみたい。

目次

実装

準備

今回は、「夜サンデー」に倣い、本の books テーブルを用意します。
6 時から 18 時までは、特定のページを表示するようにします。

1
2
3
4
5
6
7
8
9
10
# Yay! You’re on Rails!の画面が確認できる前提で進めます

# scaffold でbooksを用意します
bundle exec rails g scaffold book title:string

# 6 時から 18 時までのページのコントローラ
bundle exec rails g controller let_go index

# DBに展開
bundle exec rails db:migrate

ルーティング設定

config/routes.rbを以下のように設定します。

config/routes.rb
1
2
3
4
5
Rails.application.routes.draw do
resources :books
get 'let_go',to: 'let_go#index'
root 'books#index'
end

コントローラーを設定

app/controllers/application_controller.rbを以下のように記述します。
現在時刻を取得して、6 時から 18 時までの間はlet_go/indexを表示する。

app/controllers/application_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class ApplicationController < ActionController::Base
before_action :check_show_time
def check_show_time
@now = Time.now
if 6 <= @now.hour && @now.hour <18
limit = Time.new(@now.year, @now.month, @now.day, 18, 00, 00)
# 現在時刻と18:00までの時間差(秒数)を取得
tmp = (limit - @now)

## 秒数から時と分を計算
@wait_hour = (tmp/60/60).floor
@wait_min = ((tmp-@wait_hour*60*60)/60).ceil
render 'let_go/index'
end
end
end

ビューを編集

app/views/let_go/index.html.slimを以下のように記述します。

app/views/let_go/index.html.slim
1
2
3
4
5
6
h1="現在時刻#{@now.strftime('%H:%M')}"
.
p 現在は閉鎖時間です
p="次の解放まで残り#{@wait_hour}:#{@wait_min}です"
p また来てくださいね。

確認

これまでのファイルを作成したなら、ブラウザでlocalhost:3000/にアクセスします。

現在時刻が 6:00 から 18:00 ならば、以下のような画面が表示されます。
(記事は夜中に書いてるので、時刻をいじってみました。)

もし、18:00 以降なら、最初に用意した books の一覧が開くでしょう。


今回は、夜サンデーを参考に、表示時間制限のあるサイトを作ってみました。
時間ごとの表示を変えられるなら、朝昼夕方夜で使用する CSS や背景を変えることもできます。
時間帯でそれらを変える理由に意味づけをできるなら、導入してみたいです。

「時間帯でアクセスできる内容が変わる」ということで、「地獄通信」のことを思い出したんですが、検索すると結構あるんですね。
いやー怖い。

ではでは。