LoginSignup
18

More than 5 years have passed since last update.

30分以内でつくれるアプリでRubyの練習をする

Posted at

Rubyの練習のため、毎日簡単なアプリケーションをつくってますが、
レベルアップにとてもよかったので、記事にしてみます。

この記事はこんな人に向いてます

  • Ruby初心者
  • 毎日コードを書く練習をしたいが、何をしたらよいかわからず困っている人
  • Rubyを書くことを頭で理解するだけでなく、体で覚えたい人

練習の方針

  • 30分以内でつくれるアプリケーションを題材にする
  • 最初から最後まで通しでできるものをつくる
  • 毎日の練習で使えるくらいの小規模なものをつくる

毎日続けることなので、あまり大きなものを作る必要はないですね。

仕様

  • ぱっと作って確認できるコンソールアプリとする
  • 本のレビューとして以下の3つを入力できる
    • タイトルを入力できる
    • 本の評価を5段階で入力できる
    • 本の感想を入力できる
  • 入力したレビューを参照できる

アプリケーションの開発

1. メイン処理をつくる

まずはアプリケーションの骨組みをつくります

LINE = "---------------"
class BookApp
  WRITE_REVIEW = 0
  DISPLAY_REVIEW = 1
  END_PROGRAM = 2
end

while true do
  puts "実行したい処理の番号を入力してください"
  puts "[#{BookApp::WRITE_REVIEW}] 本のレビューを書く"
  puts "[#{BookApp::DISPLAY_REVIEW}] 本のレビューを見る"
  puts "[#{BookApp::END_PROGRAM}] プログラムを終了する\n#{LINE}"

  operation = gets.chomp.to_i

  case operation
  when BookApp::WRITE_REVIEW
    # reviewを書く
  when BookApp::DISPLAY_REVIEW
    # reviewを表示する
  when BookApp::END_PROGRAM
    exit
  else
    puts "入力値が正しくありません"
  end
end

ユーザーの入力を受け付け、実行する処理を決定します。

2. レビューの投稿処理をつくる

続いて、本のレビューの投稿処理をつくります。

def write_review(posts)
  post = {}
  puts "本のタイトルを入力してください"
  post[:title] = gets.chomp

  puts "本の評価(1 ~ 5)を入力してください"
  post[:point] = gets.chomp.to_i

  if post[:point] < 1 || post[:point] > 5
    puts "評価は1 ~ 5で入力してください"
    return
  end

  puts "本の感想を一言入力してください"
  post[:review] = gets.chomp

  posts << post
end

posts = []

レビューに必要な3つの要素(タイトル、評価、感想)をユーザーに入力させて、
投稿を扱う配列postsを返します。

メイン処理につくった関数を埋め込みます。

case operation
  when BookApp::WRITE_REVIEW
    write_review(posts) # reviewを書く
  when BookApp::DISPLAY_REVIEW
    # reviewを表示する
  when BookApp::END_PROGRAM

3. レビューの表示処理をつくる

最後に、投稿したレビューを表示する処理をつくります。

def display_review(posts)
  index = 0
  posts.each do |post|
    puts "[#{index}] #{post[:title]}"
    index += 1
  end

  puts "見たいレビューの番号を入力してください"
  input = gets.chomp.to_i
  item = posts[input]

  puts LINE
  puts "タイトル: #{item[:title]}"
  puts "評価: #{item[:point]}"
  puts "感想: #{item[:review]}"
  puts LINE
end

投稿したレビューのタイトルを一覧表示して、見たいレビューの番号をユーザに入力させます。
指定された投稿について、3つの要素(タイトル、評価、感想)を画面に表示します。

忘れずにメイン処理も更新しましょう。

while true do
  when BookApp::WRITE_REVIEW
    write_review(posts)
  when BookApp::DISPLAY_REVIEW
    display_review(posts)  # reviewを表示する
  when BookApp::END_PROGRAM
    exit
  else

コード全体

LINE = "---------------"
class BookApp
  WRITE_REVIEW = 0
  DISPLAY_REVIEW = 1
  END_PROGRAM = 2
end

def write_review(posts)
  post = {}
  puts "本のタイトルを入力してください"
  post[:title] = gets.chomp
  puts "本の評価(1 ~ 5)を入力してください"
  post[:point] = gets.chomp.to_i

  if post[:point] < 1 || post[:point] > 5
    puts "評価は1 ~ 5で入力してください"
    return
  end

  puts "本の感想を一言入力してください"
  post[:review] = gets.chomp

  posts << post
end

def display_review(posts)
  index = 0
  posts.each do |post|
    puts "[#{index}] #{post[:title]}"
    index += 1
  end

  puts "見たいレビューの番号を入力してください"
  input = gets.chomp.to_i
  item = posts[input]

  puts LINE
  puts "タイトル: #{item[:title]}"
  puts "評価: #{item[:point]}"
  puts "感想: #{item[:review]}"
  puts LINE
end

posts = []

while true do
  puts "実行したい処理の番号を入力してください"
  puts "投稿レビュー数: #{posts.length}"
  puts "[#{BookApp::WRITE_REVIEW}] 本のレビューを書く"
  puts "[#{BookApp::DISPLAY_REVIEW}] 本のレビューを見る"
  puts "[#{BookApp::END_PROGRAM}] プログラムを終了する\n#{LINE}"

  operation = gets.chomp.to_i

  case operation
  when BookApp::WRITE_REVIEW
    write_review(posts)
  when BookApp::DISPLAY_REVIEW
    display_review(posts)
  when BookApp::END_PROGRAM
    exit
  else
    puts "入力値が正しくありません"
  end
end

毎日練習することで感じた効果

  • Rubyってどう書けばいいんだっけ、って思わなくなった
  • 以前より人の書いたコードがわかるようになった
  • 開発するスピードがあがった

ちょっとした空き時間でもできるので、試してみてください。
タイムアタックなんかやってみると面白いかも知れませんね。

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
18