RailsアプリケーションでFizzBuzzを実装【AIを使ったメソッド例】

スキル向上

FizzBuzz問題

教材として「FizzBuzz問題」を取り扱います。RailsアプリケーションでFizzBuzzを実装する場合、コントローラーとビューを作成してWebブラウザで結果を確認できる形にするのが一般的です。

以下は、RailsのFizzBuzzControllerを作成し、indexアクションでFizzBuzzの結果を表示する
実装例です。具体的にはOpenAI社のChatGPTを使い

「なるほど。実際の作業としては
作業ディレクトリー内に「fizz_buzz」フォルダーを作成して
VisualSudioCodeで開くイメージですか?」

といった質問をしていくと、AIが「そのイメージですね!」と答えてくれて
会話が進み理解が深まっていきます。

AIを使ったコーディング

ここでまず、全体系の構成を作成します。ターミナルやコマンドプロンプトで、Rails プロジェクトを作成するディレクトリに移動し、以下のコマンドを実行します。

mkdir fizz_buzz # フォルダを作成
cd fizz_buzz # フォルダに移動
rails new . --skip-bundle --database=sqlite3
  • rails new .現在のディレクトリfizz_buzz)に Rails プロジェクトを作成
  • --skip-bundlebundle install をスキップ(後で実行する)
  • --database=sqlite3 → SQLite3 を使用(デフォルト)

コマンドを実行して VS Code を開きます。そしてRails のコントローラーを作成します。

code .
rails generate controller fizz_buzz index
  • app/controllers/fizz_buzz_controller.rb が作成される
  • app/views/fizz_buzz/index.html.erb も自動生成される

その後、各ファイルを以下に従い修正していきます。

1. コントローラーの作成

app/controllers/fizz_buzz_controller.rb に以下のコードを追加します。

class FizzBuzzController < ApplicationController
  def index
    @results = fizz_buzz(1..100) # 1から100までのFizzBuzzを計算
  end
  private
  def fizz_buzz(range)
    range.map do |n|
      if n % 15 == 0
        "FizzBuzz"
      elsif n % 3 == 0
        "Fizz"
      elsif n % 5 == 0
        "Buzz"
      else
        n.to_s
      end
    end
  end
end

ここ

ここで、 range.map do |n| や n.to_s といったメソッドを味わって下さい。

2. ルーティングの設定

config/routes.rb に以下の行を追加します。

Rails.application.routes.draw do
  get 'fizz_buzz', to: 'fizz_buzz#index'
end

3. ビューの作成

app/views/fizz_buzz/index.html.erb に以下のコードを記述します。

<h1>FizzBuzz結果</h1>
<ul>
  <% @results.each do |result| %>
    <li><%= result %></li>
  <% end %>
</ul>

実行結果の検証

4. サーバーを起動して動作確認

以下のコマンドを実行し、Railsサーバーを起動します。

  rails server

やはりRubyは簡便ですね

ブラウザで http://localhost:3000/fizz_buzz にアクセスすると、
FizzBuzzの結果がリスト表示されます。

この方法なら、Railsアプリ内でFizzBuzzを簡単に表示できます!

〆最後に〆

以上、間違い・ご意見は
次のアドレスまでお願いします。
最近は全て返信出来てませんが
適時、返信して改定をします。

nowkouji226@gmail.com

全体の纏め記事へ】

雑記の纏め記事に戻る

Pythonをテックジムで学ぼう

Python学習での諸情報

 

コメント

タイトルとURLをコピーしました