Ruby
練習

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

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

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