ウェブページ「ひがしのてらこや。」にログイン機

 おひさしぶりの更新です。
 こっちのブログは技術ブログにしちゃおうと思います。

ひがしのてらこや。とは

 このウェブサイトです。http://higashinoterakoya.herokuapp.com/
 僕が友達といっしょに作った、ゲーム制作サークルです。

 今までは、更新のたびにHTMLを書き直して、Windows7にデフォルトで入ってるFTP接続機能でfc2のウェブサイトサービスにアップロードしてたのですが、編集も転送もけっこうめんどくさくて、更新ペースはかなり遅かったです。月に1回、あるかどうか、というくらいでした。

 そこで、リニューアルを機会に更新を楽にしようと思って、ブラウザ上で記事を編集できるシステムを作りました。ふつうのユーザーにとっては関係ないけれど、管理者(僕と友人)にとっては便利になりました。

 コードはGitHubに上げてあります。こちら。 https://github.com/katryo/higashinoterakoya

実現したこと

  • IDをパスワードでログイン・ログアウトできる
  • ログインすると、記事を編集できる
  • 記事はデータベース(PostgreSQL)で管理
  • 「過去の記事」ページで、これまでの記事を最新10件まで一覧にして表示できる
  • 記事は新しい順に自動的に並べられる
  • 記事にはすべて投稿日時が併記される
  • 最新の記事は、トップページに自動的に表示される

……ということを実現しました。

どういう風に作ったか

 RailsによるアジャイルWebアプリケーション開発 第4版

 の第14章「タスクI:ログイン」通りに作りました。

 ……。
 ほとんどこの本の言うとおりそのままです。この本を読んで、書いてある通りに写経して作るとよいと思います。
 でもまあ、工夫したところがないわけでもなくて、

工夫したところ

 RailsによるアジャイルWebアプリケーション開発 第4版を手元に、ここからは読んでほしいです。

投稿時刻通りに記事が並ぶようにした

 記事を作成するページは、RailsによるアジャイルWebアプリケーション開発 第4版でいうところのProductページと同じ作り方をしています。63ページに書いてある、

Rails generate scaffold Product title:string description:text image_url:string price:decimal

のかわりに

Rails generate scaffold Article title:string description:text

として、Articleコントローラとビューをscaffoldします。image_urlやpriceはいらないです。
このあとは本通りにArticleを作ってくのですが、記事の並ぶ順番を日時通りにソートするために、ちょっと手を加えます。

Articleコントローラのindexメソッドが、http://higashinoterakoya.herokuapp.com/articlesページを開いたときの動向を指示しているのですけど、ここで、

  def index
    @articles = Article.order("created_at DESC")

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @articles }
    end
  end

 と、("created_at DESC")を書き加えて、投稿日時が新しい順番に並べています。
 /articlesページの編集できないバージョンであり、非管理者ユーザーが見るページである/archivesのコントローラでも、同様の処理をして、投稿日時で並べています。
 created_atというヘルパーメソッドは、Rails3に標準で入ってるので新たに設定する必要はないです。

 @articlesには記事全体が順序正しく並び、@articleには1つ1つの記事が入ります。1文字違いで別のものなので気をつけましょう。

投稿日時を表示させた
  <h4>
      投稿日時:
      <%= article.created_at %>
      </h4>


 とapp/view/articles/index.html.erbとapp/view/archives/index.html.erbに書き入れただけです。ただ、初期設定のままだと世界標準時になってしまうので、config/application.rbに

config.time_zone = 'Tokyo'

 と書き込みます。これで日本時間で表示される!

markdown記法を導入

 RailsによるアジャイルWebアプリケーション開発 第4版のProductページのように作り終えても、トップページ(本ではstore#indexにrootを通しているのでapp/views/store/index.html.erb)でdescriptionを表示するタグはsanitizeされているので、記事を書くときにHTMLのタグを書いたり、改行したりしても無視されます。
 これだと不便なので、書いた記事をmarkdown記法で解釈してくれるように機能を加えました。


 使ったのは、redcarpetです。
 Railscastにあるチュートリアル通りに導入しました。これです。 http://railscasts.com/episodes/272-markdown-with-redcarpet?language=ja&view=asciicast
 このRailscast通りにすれば導入はできるので、ここでは詳しくは書きません。

 ただし、ここで注意すべきところがあります。
 redcarpet、ver2以降だと動きません。このRailscastチュートリアルはver1系列のredcarpetが対象のようで、うっかりGemfileにgem 'redcarpet'とだけ書くと、動きません。
 なので、今回はredcarpetのバージョンを1.17.2に指定して、Gemfilesには

gem 'redcarpet', '1.17.2'

と書きましょう。


 コードはGitHubに上げてあります。こちら。 https://github.com/katryo/higashinoterakoya

次回予告

 生まれて初めて作ったウェブサービス「にせほボタン( http://nisehobutton.heroku.com/ )」の作り方メモを次回は書きます。
 見直してみたら、いらないコードとか試しに書いてみたメソッドとかが多かったので、リファクタリングし直してから投稿します。