LoginSignup
6
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-05-15

はじめに

ゆる〜く学ぶ。みんなの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)していこうかな。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2