- 投稿日:2022-01-19T22:57:56+09:00
【Ruby】インスタンスの生成
※初心者向け ※アウトプット練習の為 開発環境 rails 6.0.4.4 ruby 2.6.5 問題 クラスFruitを以下の仕様で定義してください。 実行結果は以下のようになります。 採れたて新鮮な果実です リンゴは120円です オレンジは200円です イチゴは60円です 雛形 class Fruit def クラスメソッド # 正しくメソッドを定義した上で、ここに処理を記入してください end def initialize # ここに処理を記入してください end def インスタンスメソッド # 正しくメソッドを定義した上で、ここに処理を記入してください end end # 3つのインスタンスを生成してください # クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください # インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください 解答 class Fruit def self.fresh puts "採れたて新鮮な果実です" end def initialize(name, price) @name = name @price = price end def introduce puts "#{@name}は#{@price}円です" end end apple = Fruit.new("リンゴ", 120) orange = Fruit.new("オレンジ", 200) strawberry = Fruit.new("イチゴ", 60) Fruit.fresh apple.introduce orange.introduce strawberry.introduce 解答 まずは、インスタンスの生成と、インスタンス毎のインスタンス変数(@nameと@price)を定義します。 ポイントは、インスタンス生成時の引数と、initializeメソッドです。 initializeメソッドは、newメソッドの引数を受け取ることができます。 インスタンス毎の名前と価格をnewメソッドから受け取り、インスタンス変数(@nameと@price)に代入しましょう。 class Fruit def クラスメソッド # ここに処理を記入してください end def initialize(name, price) @name = name @price = price end def インスタンスメソッド # 正しくメソッドを定義した上で、ここに処理を記入してください end end apple = Fruit.new("リンゴ", 120) orange = Fruit.new("オレンジ", 200) strawberry = Fruit.new("イチゴ", 60) # クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください # インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください 次に、クラスメソッドfreshを定義します。 処理内容通りの文言が出力されるよう、putsメソッドを用いて記述しましょう。 class Fruit def self.fresh puts "採れたて新鮮な果実です" end def initialize(name, price) @name = name @price = price end def インスタンスメソッド # 正しくメソッドを定義した上で、ここに処理を記入してください end end apple = Fruit.new("リンゴ", 120) orange = Fruit.new("オレンジ", 200) strawberry = Fruit.new("イチゴ", 60) # クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください # インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください 続いて、インスタンスメソッドを定義します。 各インスタンスに対して処理内容通りの文言が出力されるよう、putsメソッドを用いて記述をしましょう。 class Fruit def self.fresh puts "採れたて新鮮な果実です" end def initialize(name, price) @name = name @price = price end def introduce puts "#{@name}は#{@price}円です" end end apple = Fruit.new("リンゴ", 120) orange = Fruit.new("オレンジ", 200) strawberry = Fruit.new("イチゴ", 60) # クラスメソッドを呼び出し、「採れたて新鮮な果実です」と表示してください # インスタンス毎にインスタンスメソッドを呼び出し、「【名前】は【価格】円です」と表示してください 最後に、定義したクラスメソッドとインスタンスメソッドを呼び出します。 クラスメソッドは「クラス名.メソッド名」で、インスタンスメソッドは「インスタンス.メソッド名」で呼び出しましょう。 class Fruit def self.fresh puts "採れたて新鮮な果実です" end def initialize(name, price) @name = name @price = price end def introduce puts "#{@name}は#{@price}円です" end end apple = Fruit.new("リンゴ", 120) orange = Fruit.new("オレンジ", 200) strawberry = Fruit.new("イチゴ", 60) Fruit.fresh apple.introduce orange.introduce strawberry.introduce 以上です。
- 投稿日:2022-01-19T22:53:07+09:00
MVCモデルについて
学習した理由 最近ポートフォリオを作成し終えた初学者になりますので、これを機にもう一度基本に戻り、プログラムの基礎を学ぶことを目的としてこの記事を作成しております。 MVCモデルとは MVCモデルとは「モデル(Model)」「ビュー(View)」「コントローラ(Controller)」の三つに分類し、コードを分けて記述する方法になります。 「モデル(Model)」 「モデル(Model)」の役割は表示内容や入力に関係しない処理を担当する部分になります。 もっと詳しく説明すると、処理したデータをデータベースに反映することです。 担当する処理として、データの検索、データの検証、データの変換、データの紐付けなどになります。 「ビュー(View)」 「ビュー(View)」の役割は実際に目に見えるページを表示することになります。 「ビュー(View)」に関してはユーザー側の処理が多く、入力内容の取り込みや、リクエストをコントローラーに渡す役目も果たしています。 「コントローラ(Controller)」 「コントローラ(Controller)」の役割はView(ビュー)からのリクエストを受け取り、Model(モデル)へのメッセージへと変換することです。そのレスポンスとして、画面をビューに渡します。 また、モデルからデータを受け取り、レスポンスとしてビューに返す処理も実行しています。 まとめ 今回はMVCモデルについて自分の学習用に投稿しております。 初歩的な学習記事ですが、私と同じような初学者の役に立てばと思っています。
- 投稿日:2022-01-19T21:50:22+09:00
【RuboCop】特定の「ディレクトリ」をチェック対象外とする
概要 bundle exec rubocopを実行した際、ルール違反のファイルを指摘してくれるが、 その中で特定のディレクトリをルール適用対象外とする方法についてメモ。 環境 ruby 3.0.2 rails 6.1.4 mysql 8.0.26 rubocop 1.23.0 rubocop-rails 2.12.4 ルール違反の検出 前提:多数のカラムを持つSampleモデルをrails generateで作成した直後とする。 terminal # チェックの実行 ❯❯❯ bundle exec rubocop # ルール違反箇所の検出 sample-app/.rubocop.yml: Warning: no department given for MethodLength. Inspecting 63 files .............................................................C. Offenses: db/migrate/20220119115229_create_sample.rb:2:3: C: Metrics/MethodLength: Method has too many lines. [11/10] def change ... ^^^^^^^^^^ 63 files inspected, 1 offense detected 検出した違反:Metrics/MethodLength これはメソッドが11行以上ある場合に違反とするもの。 参考 今後もmigrationでは11行以上のメソッドが必要になる可能性がありそうなので、ディレクトリ単位で除外しておきたい 対象外設定方法 .rubocop.ymlに例外として記述する。 .rubocop.yml # migrationファイルはメソッド行数が11行以上でも許可する MethodLength: Exclude: - 'db/migrate/*' # *でmigrate以下のファイルを全て指定する db/migrate以下のファイルを、デフォルトの10行制限の対象外とすることができた。 ※特定のファイルを対象外にしたい場合は、そのままファイル名まで指定すればOK 参考 最後に より良い方法や間違い等ありましたらご指摘いただけますと幸いです!
- 投稿日:2022-01-19T21:38:58+09:00
【備忘録】rbenvの導入(anyenv経由)
# rbenvのインストール $ anyenv install rbenv # 初期化処理をzshrc記述 $ echo 'eval "$(rbenv init -)"' >> ~/.zshrc # インストールできるRubyの一覧表示 $ rbenv install -l # 3.1.0をインストール $ rbenv install 3.1.0 # ~/.rbenv/versions/*/bin/ 以下のファイルを ~/.rbenv/shims/ 以下にコピー $ rbenv rehash # グローバル指定 $ rbenv global 3.1.0 # バージョンの確認 $ ruby -v 参考記事:https://mogulla3.tech/articles/2020-12-29-01
- 投稿日:2022-01-19T21:26:09+09:00
プログラミング言語を簡単にまとめる
Java JavaとはC言語ベースに開発された汎用性の高いプログラミング言語。求人需要が多い WEBサービスから業務システム、組み込み、など多岐に渡り開発現場で採用されている。 フレームワークはspring Framework Ruby Rubyとはオブジェクト指向のプログラミング言語。コードはシンプルに書きやすく読みやすい。 WEBサービスやWEBアプリケーションができる。 フレームワークのRuby on Rails。クックパッドや食べログに使用されている PHP PHPとは動的なWEBページを生成することができるサーバーサイドのスクリプト語。HTMLは静的WEBページ。 他のプログラミング言語と比べると文法が比較的容易なので取得しやすい。 フレームワークはLaravel C# マイクロソフト社が開発したオブジェクト指向のプログラミング言語。Javaと似ている。 GUIアプリケーション、WEBアプリケーション、ゲーム開発ができる フレームワークはASP.NET
- 投稿日:2022-01-19T20:40:26+09:00
RailsでMissing helper file helpers/〜〜というエラーが出た時の解決策
はじめに プログラミング初学者の@kat_logと申します。 Railsチュートリアル6版の学習中、14章の「14.2.4[Follow]ボタン(基本編)」の $ rails generate controller Relationships を実行後に Missing helper file helpers/relationships_helper.rb (AbstractController::Helpers::MissingHelperError) というエラーが出て戸惑ったのですが、解決したため共有です。 結論 $ spring stop コマンドで解決しました。 springとは 「開発効率を上げるためにバックグラウンドで動いてくれているやつ」らしいです! spring再起動方法 rails c等でspringも(再)起動されます。 その他解決策 bundle update 自分は同様の問題が13章「13.2.3プロフィール画面のマイクロポストをテストする」でも発生したのですが、その時は下記記事をもとに $ bundle updateで解決しました。 tmpデータ削除 $ bin/rails tmp:clearにてエラー解消された方もいらっしゃるようです。 (下記記事コメント欄より) おわりに お読みいただきありがとうございました。 自分と同じ状況で困った方の参考になれば嬉しいです。
- 投稿日:2022-01-19T19:50:43+09:00
Rubyで解く射撃王
問題解決力を鍛える!アルゴリズムとデータ構造を読み進めていく中で、二分探索法でAtCoderの射撃王という問題が出題されていました。 C++で解答が書かれていたがいまいちピンと来なかったので、Rubyで自分なりに解釈しながら書き換えていきました。 実際にACもらったので、コメントで説明してあるRubyコードを載せます。 n = gets.chomp.to_i hs = Array.new(n) {gets.chomp.split(' ').map(&:to_i)} #bsearchメソッドで二分探索開始(ブロックの評価結果が true になる最初の要素を返すか、nil を返す) ans = (1..10**15).bsearch do |v| # v は目標高度のデッドラインとなる timetable = Array.new(n, 0) flug = true hs.each do |h, s| #(v-h)/s で、風船がデッドラインに達するまでの時間 #風船がデッドラインに達するまでの時間と 最低限待てる時間を比べ、小さい方を選ぶ second = [(v-h)/s, n-1].min if second < 0 #風船のデッドラインまでの時間が負(既にデッドラインに達している)ならfalseにする flug = false else ##まだ正(デッドラインに達するまで時間がある)なら割らなきゃいけない時間の配列に+=1 timetable[second] += 1 end end shootable = 0 #shootable = その時間までで割れる風船の数 n.times do |j| shootable += 1 #もしその時間までで割れる風船の数よりも多くの風船をその時間内に割らなきゃいけないなら、flug=false flug = false if shootable < timetable[j] #そうでないなら、割った数だけ引く shootable -= timetable[j] end #flug = true ならvで与えたデッドライン以内で割れるということ flug end #falseとtrueの境目のansが与えられる p ans
- 投稿日:2022-01-19T18:39:28+09:00
【RSpec】変数名を付けながら大量のデータ作成したとき
instance_variable_set テストで変数名を付けながら大量のデータを作成したいときに便利。 (Date.new(2022, 1, 1)..Date.new(2022, 1, 31)).each_with_index do |date, i| instance_variable_set("@date#{i+1}", date) end @date1 #=> Sat, 01 Jan 2022 @date2 #=> Sun, 02 Jan 2022 @date3 #=> Mon, 03 Jan 2022 ... 参考
- 投稿日:2022-01-19T15:40:46+09:00
railsの環境構築
はじめに 備忘録 PCはMac M1チップ 参考記事を読んでから実装するとわかりやすいと思います。 参考にした記事 【Ruby】Rubyのインストール手順と動作確認 Ruby on Rails の環境構築構築 bundlerで非推奨になった --path --binstubs - Qiita bundle exec はもういやだ - Qiita 特質事項 非推奨の--path vendor/bundle --binstubs=vendor/binを使わない方法で実装する rails 環境構築部のbundle execを省略する設定を有効にするために .rbenvに設定を加える必要がある (rbenvをインストールした後実行してください) $ mkdir -p ~/.rbenv/plugins $ cd ~/.rbenv/plugins $ git clone https://github.com/ianheggie/rbenv-binstubs.git railsのインストール時にドキュメントをスキップする際は下記を設定 (Rubyをインストールした後実行してください) echo "gem: --no-document" >> ~/.gemrc Homebrewのインストール Homebrewのバージョン確認と更新 brew -v brew update インストールされていなければ実行. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" コードが途中で切れてしまう場合、、公式からコピペ 1-1. Node環境の確認とインストール homebrewを使用してnodebrewのインストール brew install nodebrew nodeの安定バージョンをインストール nodebrew install stable nodebrewのバージョン一覧を確認 nodebrew ls インストールしたバージョンを指定して切り替える nodebrew use v14.15.3 nodeのパスを通す echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofile' ターミナルの再起動 yarnのインストール npm install -g yarn nodeとnpmのバージョン確認 node -v npm -v バージョンを指定してnodeをインストール nodebrew install-binary <version> インストール可能なバージョンを確認 nodebrew ls-remote rbenvとrbenv-buildのインストール rbenvのインストール brew install rbenv rbenvのバージョン確認と更新 rbenv -v brew upgrade rbenv rbenv-buildのインストール brew install ruby-build rbenvのセットアップ (pathを通す) echo 'eval "$(rbenv init -)"' >> ~/.zshrc echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc 「~/.zshrc」を再読み込み source ~/.zshrc 正しくPATHが通っているか確認する echo $PATH /Users/username/.rbenv/shims:が追加されていればOK Rubyのインストール インストール可能なRubyのバージョンを確認 rbenv install -l 2.最新バージョンをインストール rbenv install version versionを数字に変更してinstall 標準で使うrubyのversionを指定 rbenv global version ディレクトリ毎に使用するversionを変更する方法は別途 標準で使うrubyを設定できたか確かめる ruby -v rubyが使えるかの動作確認 (動作確認は記事下部にて記載) インストール済みversion一覧 rbenv versions ruby on railseの環境構築 gemのインストールには、グローバルインストールとローカルインストールがある。今回は、ローカルにインストールして(ディレクトリ)ごとにgemやgemのバージョンを管理する構築方法 プロジェクトファイルを作成する mkdir sample ファイル内でbundleを初期化 bundle init Gemfileを編集する gemのインストール先をローカルに設定 bundle config set path 'vendor/bundle' bundle execを省略する設定 bundle binstubs --path=vendor/bin gemをインストール $ bundle install 新規Railsアプリケーションの作成 rails new . bundle configで確認 $ bundle config Settings are listed in order of priority. The top value will be used. path Set for the current user (/Users/hoge/.bundle/config): "vendor/bundle" bin Set for your local app (/Users/hoge/fuga/hege/.bundle/config): "vendor/bin" 補足事項 bundle execをつけることでディレクトリにインストールしたgemを利用できる bundle exec rails new sample → ローカルにインストールしたコマンド実行 rails new sample → グローバルインストールされているシステム共通のコマンド 今回紹介したrailsの構築ではbundle execを省略できる設定を付与しているので、bundle execはいらない Rubyの動作確認 ディレクトリを作成 ディレクトリ内でファイルを作成「拡張子はrb」 内容を記述 put "Hello World" ターミナルでrubyを実行 ruby test.rb
- 投稿日:2022-01-19T10:57:22+09:00
[py2rb] 辞書の値が関数
はじめに 移植やってます。 ( from python 3.7 to ruby 2.7 ) 辞書の値が関数 (Python) def a(k, v): print(k, v) def b(k, v): print(k, v) h = {'func a': a, 'func b': b} h['func a']('A', 1) h['func b']('B', 2) # A 1 # B 2 辞書の値に関数を入れておいて、引数を渡します。 動的プログラミングですねえ。 失敗 (Ruby) def a(k, v) p [k, v] end h = {'func a' => a} main.rb:1:in `a': wrong number of arguments (given 0, expected 2) (ArgumentError) ハッシュにメソッドを入れた時点でエラーになります。 成功 lambda (Ruby) a = lambda { |k, v| p [k, v] } b = lambda { |k, v| p [k, v] } h = {'func a' => a, 'func b' => b} h['func a'].call('A', 1) h['func b'].call('B', 2) # ["A", 1] # ["B", 2] lambdaだと成功します。 成功 method (Ruby) def a(k, v) p [k, v] end def b(k, v) p [k, v] end h = {'func a' => 'a', 'func b' => 'b'} method(h['func a']).call('A', 1) method(h['func b']).call('B', 2) # ["A", 1] # ["B", 2] defのままで行いたい場合は、methodを使用します。 メモ Python の 辞書の値が関数 を学習した 百里を行く者は九十里を半ばとす
- 投稿日:2022-01-19T09:44:13+09:00
[py2rb] lambda
はじめに 移植やってます。 ( from python 3.7 to ruby 2.7 ) lambda (Python) _identity = lambda x, **kw: x いわゆる無名関数ですね。 lambda (Ruby) _identity = ->(x, **kw) { x } # or _identity = lambda { |x, **kw| x } lambdaとProcの違いの一つに引数の数が違っている場合があげられますが、可変長引数を使用するとエラーにならない様です。 identity2 = ->(x, **kw) { x } puts identity2.call(2) # 2 identity1 = ->(x, kw) { x } puts identity1.call(1) main.rb:5:in `block in <main>': wrong number of arguments (given 1, expected 2) (ArgumentError) メモ Python の lambda を学習した 道のりは遠そう
- 投稿日:2022-01-19T01:11:28+09:00
音声ファイルを保存、再生、ダウンロード機能を実装。【Ruby】
目的 音声ファイルをアップロードし保存ができ、再生やダウンロードができるように実装します。 以下の画像のようなオーディオプレーヤーが実装されるのがゴールです。 手順 オーディオファイルを保存したいモデルにカラムを追加。 ターミナル. % rails generate migration AddFileToモデル名 file:string ターミナル. % rails db:migrate ストロングパラメータの修正 songs_controller.rb # 省略 private def song_params params.require(:song).permit(:file, :title) # permit()の中に:fileを追加 end gemの追加 Gemfile. gem 'carrierwave' ターミナル. % bundle install アップローダーの作成 ターミナル. % rails generate uploader Audiofile モデルに追加 app/models/song.rb class Song < ApplicationRecord # ここから追記 mount_uploader :file, AudiofileUploader # ここまで追記 end viewに追加 app/views/songs/new.html.erb <%= form_with model: @song, class: 'registration-main', local: true do |f|%> # 省略 # ここから追記 <%= f.file_field :file , :size => 140 %> # ここまで追記 音声ファイルの再生とダウンロード機能のgem追加 Gemfile. gem 'audiojs-rails' ターミナル. % bundle install app/javascript/packs/application.js #省略 #ここから追記 //= require audiojs #ここまで追記 viewに追加 app/views/songs/show.html.erb # 省略 <div class="song_body"> # ここから追記 <audio src= "<%= "#{@song.file}" %>" controls=""> <a src="<%= "#{@song.file}" %>">ダウンロード</a> </audio> # ここまで追記 </div> 以上で完成です。 ぜひ試してみてください。
