LoginSignup
5
5

More than 1 year has passed since last update.

Railsチュートリアルを1周した後に、図書館サービスを作ってみた

Last updated at Posted at 2019-07-13

はじめに

4月にRailsチュートリアルを始めて、6月の初めに1周しました
まだ理解があいまいなところもあったので、何か作りたいと思いました
そこで、会社では本の貸出を紙で管理していたので、Railsチュートリアルを真似して本の貸出情報を管理するサービスを作ってみることにしました

  • GitHubのリポジトリ

  • Webサイト

会社で実際に使うサイトと自分用のサイトを2つ作りました
ここで公開しているのは自分用のサイトです
「図書館サービスを作りました!」と会社のSlackに書いたら、初日から3人の方に使ってもらえました!

デザイン

Bootstrapを使いました
ほとんどRailsチュートリアルの真似です

  • ホームページ
スクリーンショット 2019-07-13 17.02.07.png - 一覧ページ スクリーンショット 2019-07-13 17.02.22.png - 貸出ページ

返却日(Checkout date)にはデフォルトで今日の日付を入れてあります
スクリーンショット 2019-07-13 17.02.35.png

環境

  • Mac OS Mojave 10.14.5
  • Ruby 2.6.1
  • Rails 5.1.6.2
  • herokuにデプロイ

コード

メインとなるcontrollerのファイルだけ載せます
Railsチュートリアルにある

  • index
  • show
  • new
  • create
  • edit
  • update
  • destroy

に加えて、returnアクションを追加しました
これは、返却リンクを押すと返却日に今日の日付が入る機能です

circulations_controller.rb
class CirculationsController < ApplicationController

  def index
    @circulations = Circulation.order(:checkout_date, :id)
  end

  def show
    @circulation = Circulation.find(params[:id])
  end

  def new
    @circulation = Circulation.new
    @circulation.checkout_date = Date.today
  end

  def create
    @circulation = Circulation.new(circulation_params)
    if @circulation.save
      flash[:success] = "図書館サービスへようこそ!"
      redirect_to @circulation
    else
      render 'new'
    end
  end

  def edit
    @circulation = Circulation.find(params[:id])
  end

  def update
    @circulation = Circulation.find(params[:id])
    if @circulation.update_attributes(circulation_params)
      flash[:success] = "貸出情報が更新されました!"
      redirect_to @circulation
    else
      render 'edit'
    end
  end

  def return
    @circulation = Circulation.find(params[:id])
    if @circulation.update(return_date: Date.today)
      flash[:success] = "本を返却しました!"
      redirect_to circulations_url
    else
      render 'edit'
    end
  end

  def destroy
    Circulation.find(params[:id]).destroy
    flash[:success] = "貸出情報を削除しました"
    redirect_to circulations_url
  end

  private

    def circulation_params
      params.require(:circulation).permit(
        :user_name,
        :book_name,
        :checkout_date,
        :return_date
      )
    end
end

かかった時間

  • リポジトリを作ってherokuにHello Worldを表示させるのに2時間
  • newとcreateで5時間
  • 残りの機能で5時間

かかった日数は3日で、実際の時間は10数時間でした
慣れてる人なら数時間で作れると思います
サービスのプロトタイプを素早く作れるのはRailsの素晴らしいところですね!

意識した点

初めは

  • ユーザの管理機能
  • 本の管理機能
  • 貸出情報の管理機能

を土日で全部作ろうと思っていました
しかし、実際にやっているうちに「全部作ってたら土日に終わんねえ...」状態になってしまいました笑

そこで、とりあえず貸出情報の管理機能だけ作って少しずつ改良していくことにしました

FacebookのCEOのマーク・ザッカーバーグも『完璧を目指すよりまず終わらせろ』と言っていました
完璧を最初から目指していたらいつまで経っても完成せず、結局中途半端で辞めてしまうことも多いと思います
だから、とりあえず動くものを作ってから少しずつ良くする方が速く公開できますし、意見も聞けるのでいいかなと思います

今後追加したい機能

とりあえず紙での管理の代わりになるものを作っただけなので、今後少しずつ機能を追加していきます

  • AWSにデプロイ
  • 会社のネットワークからのみアクセスを許可する
  • 蔵書管理
  • Slackと連携させて、本の返却を促す
  • ログイン機能

など

RSpecでテストも書くつもりです

おわりに

最後まで読んでいただきありがとうございました。
QiitaやTwitterなどにコメントをしてもらったり、SNSでシェアしてもらえるとうれしいです!

5
5
3

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
5
5