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

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

どうも、ITのんびりです

はじめに

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

  • GitHubのリポジトリ

https://github.com/it31415/book_app

  • Webサイト

https://aqueous-coast-43178.herokuapp.com/

会社で実際に使うサイトと自分用のサイトを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でシェアしてもらえるとうれしいです!


Why do not you register as a user and use Qiita more conveniently?
  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
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