Help us understand the problem. What is going on with this article?

Railsで基本情報技術者試験の過去問題サイトを作る(1:構築編)

More than 1 year has passed since last update.

はじめに

ゆる〜く学ぶ。みんなのWeb勉強コミュニティー。 「にゅ〜ぶる会」を運用中です。
https://newburu.github.io/

そこで、何か教育用のコンテンツが欲しいなぁ〜と思い立ち、今回の企画をスタートしました!

Railsで基本情報技術者試験の過去問題サイトを作ります!

最終目標

  • 問題・回答の登録は、Scaffoldで簡易でOK
  • APIを用意して、ランダムに問題を抽出する機能を追加する
  • TwitterBOT、LINEBOT、SlackBOTが出来たら良いな

履歴

1:構築編
  本ページ
2:日本語化(i18n)編
  https://qiita.com/newburu/items/4f12fdb61bf6cd601545
3:親子関係、登録編
  https://qiita.com/newburu/items/f2a20289be5ec1fc1b77
4:親子関係、参照編
  https://qiita.com/newburu/items/51b11bd02691efc2cc0d
5:API編
  https://qiita.com/newburu/items/89f9f847a2648bdd006c
6:SlackBOT編
  https://qiita.com/newburu/items/aeeb9acb453da786bd59
7:Herokuデプロイ〜自動化編
  https://qiita.com/newburu/items/0a8bb02e1e8c8fe737c7

今回やる事

  • DBを作る
  • 問題用のマスタ登録画面を作る
  • 回答用のマスタ登録画面を作る

モデル(DB)を考える

RailsでWebサイトを作るので、最初はまず、モデル(DB)の構成を考えましょう。

問題を表示するサイトなので、必要なモデルは以下の通り。

問題用モデル(Questions)

名前 物理名 備考
カテゴリ1 category1 文字列(string) 何年度か?
カテゴリ2 category2 文字列(string) 春か秋か?
カテゴリ3 category3 文字列(string) 何問目か?
問題文 msg 文字列(text) 問題文を登録

※他試験の過去問も登録出来るように、「カテゴリ」という分類で分けることにします。

カテゴリ1〜3という変な構成になってしまっていますが…
IPAの過去問利用規約に則り、出典を記載する必要があるため、この様な構成になっています。
ご理解ください。
IPA過去問利用規約

回答用モデル(Answers)

名前 物理名 備考
問題ID question_id 参照 どの問題の回答かを紐付ける
回答 msg 文字列(string) 回答を登録
正誤フラグ correct YES/NO(boolean) 正解の場合はtrue(1)

では、作っていきましょう

rails newを使って、アプリケーションを作成します。
※アプリケーション名は、「quiz」とします。

rails-new
rails new quiz -d mysql

※MySQL派なので、DBを指定していますが、自由に変更してください。
 ただし、本稿ではMySQLを使って説明していきます。ご了承下さい。

次に、DBを作成

DBを作成
$ rake db:create
Created database 'quiz_development'
Created database 'quiz_test'

ここまでは、いつも通りですね。

ブラウザで動くか確認

rails-server
$ rails s

ご存知、次の画面が出ればOKです!
Rails起動画面

Slimを適用する

開発を効率よくするために、テンプレートエンジンをerbからslimに変更します。
※erbのままが良い人や、Haml派の方は飛ばして頂ければ構いません。
 ただし、本稿ではslimを使って説明していきます。ご了承下さい。

Gemfileに追記して、bundle install

./Gemfile
gem 'slim-rails'
bundle-install
$ bundle install

デフォルトのテンプレートエンジンをslimに変更します。

config/application.rb
class Application < Rails::Application
  config.generators.template_engine = :slim
end

Scaffoldで骨組みを作ってしまいましょう

Scaffoldを使って、サクッと作ってしまいましょう!

Scaffold
例) rails g[enerate] scaffold モデル名 カラム名1:データ型1 カラム名2:データ型2 …
$ rails g scaffold Question category1:string category2:string category3:string msg:text
$ rails g scaffold Answer question:references msg:text correct:boolean
DB作成
$ rake db:migrate

では、確認します

rails-server
$ rails s

起動させて、http://localhost:3000/questions/ にアクセスします。

問題一覧画面はこんな感じに。
問題一覧画面

新規作成画面は、こんな感じですね。
問題新規作成画面

今回はここまで

ありがとうございました!
次回は、日本語化(i18n)していこうかな。

newburu
座右の銘は「晴笑雨笑」🔸駆け出しエンジニアさんの力になりたい。無料で楽しく!勉強/質問コミュニティを運用中(http://newburu.github.io)🔸自分のペースでゆっくりでも勉強したい方、ご連絡ください。ご協力します!
https://newburu.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした