Ruby関連のことを調べてみた2022年11月28日

Ruby関連のことを調べてみた2022年11月28日

【RUBY】小数点の切り捨てを行える.floorメソッド

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 前提
ECサイトのポイント付与サービスを考えならがら、.floorメソッドの使い方を学びます。

購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作成。
ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てる。
“`ruby
呼び出し方:
calculate_points(amount, is_birthday)

出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイン

元記事を表示

Active Record の transaction を雰囲気で書いて rollback されてなかったということがないようにしたいメモ記事

# ApplicationRecord.transaction do を理解する

大きく分けて2種類書き方がある

“`rb:rollbackされる
ApplicationRecord.transaction do
end # ← 一度 end で閉じると rollback されます
rescue ActiveRecord::RecordInvalid
end
“`

“`rb:rollbackされない
ApplicationRecord.transaction do
rescue ActiveRecord::RecordInvalid
end
“`

詳細な理解はこちらを参考に
https://qiita.com/ytnk531/items/a0db31ee4311425a3933

## 手元でテストできるコード
パスワードの長さが原因で rollback されます
手元で実行して理解しておきましょう

“`rb: rollbackテスト
# ロールバックされない処理
def dont_rollback
ApplicationRecord.transaction d

元記事を表示

【RUBY】if,elseを用いた指定された複数の引数をそれぞれの条件で四則計算するプログラムの実装

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 以下の仕様を満たすメソッドnumを作成
・メソッドの実引数として「1以上の正の整数」を3つ用意し、それぞれを仮引数a,b,c としてnumメソッド内で使用する
・第一引数と第二引数は足し算をし、変数abに代入する
・第三引数が3以下の場合は変数abを第三引数の値で割り、結果を出力する
・第三引数が4以上の場合は変数abを第三引数の値で掛け、結果を出力する

“`ruby
def num(a, b, c)
# ここに条件式を実装する
end

# 呼び出し例
num(1,5,3)
num(1,5,5)

# 出力例
num(1,5,3) → 2
num(1,5,5) → 30
“`
“`ruby
def num(a, b, c)
ab = a + b
“`
まず、「・第一引数と第

元記事を表示

Railsにおける配列への代入とリファクタリング

# 問題のルール

1. lengthとwidthが引数で渡され、最大サイズの正方形を可能な限り求めて、その正方形の一辺の長さを配列にまとめて戻り値にする。
2. lengthとwidthが同じ長さの場合はnilを返す
イメージ図は下記で、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264678/2d63c005-7786-5382-ac9f-a37d958444a2.png)
テストとしては下記のようなものになる

“`ruby
sqInRect(5, 3) should return [3, 2, 1, 1]
sqInRect(3, 5) should return [3, 2, 1, 1]
“`

# 最初に書いたコード
ざっと以下のように書いたが、毎度ながら`空の配列list`の定義が少し見にくい時がある。

“`ruby
def check_smallest_square(line_a, line_b, list)
## sortの代わりにminm

元記事を表示

Railsで効率的に列を捌ける仕組みを考える

# ルール
作業可能レーンに順番にかかる作業時間がバラバラなタスクが流れてきて、最終的に作業可能レーンにタスクがなくなる時間を知りたい

## 具体的に
`times`には、作業にかかる時間が適当な数定義されており、
`till`は作業可能レーン数が定義されている。
最終的に全部の`tills`で作業が終わる時間が知りたい。

“`ruby
times = [3,4,5,6,7,8,9,20,30]
till = 5
tills = Array.new(till, 0)
# => tills
# => [0, 0, 0, 0, 0]
“`

# 求め方
`times`をeachでまわし、`tills`の中で一番作業時間が少ない`列`をindex()の引数に持ち、
その列をtillsから特定して、eachの値を加算していく.

“`ruby
times.each {|time| tills[tills.index(tills.min)] += time}

tills.max
#> tills
#=> [11, 13, 25, 36, 7]
#> tills.max
#=> 36

元記事を表示

RailsでCSVファイルをインポートする方法改

CSVファイルをインポートしてデータベース/テーブルに登録って段取りは結構メジャーで、既に幾つも解説記事が上がってる。その節はお世話になりました。

前はその通りにやって出来たのだけど、今新しいプロジェクトでソースを使い回すと何故か出来ない。確実ではないけど、ひょっとしたらrailsかrubyのバージョンによって出来ないとかあんのか?となったので、今できてるものを以下にメモ的に置いておきます。少なくとも自分はこれで半日潰しました。

バージョンはruby 3.04、rails 6.1.7です。ちゃんとした仕組みとか解説は他を読んだ方がいいよ。

## Gemfile
とりあえず

“`Gemfile
gem ‘roo’
“`
bundle installとかもしておくように。

## application.rb
一応csvのrequireを書いておく
“`config/application.rb
reuire “rails/all”
require ‘csv’
“`

## views
ここが以前と特に違う。
以前は参考にしたサイトはどこも、パスの指定がimpor

元記事を表示

MacにてRubyのアップデート方法

Cocoapodsが上手くインストールが出来ない方など参考にして頂けたらなと思います。新品のMac製品にはRubyはインストールしてありましたが、バージョンが古いままでした。

Swift学習歴2ヶ月。教材を学習中にCocoapodsのインストールが必要になりその際にRubyのアップデートが必要になり、試みました。
この記事が参考になりましたので、共有させて頂きます。https://nomad.office-aship.info/macos-rbenv/

現時点2022,11/27日現在では
rbenv install –listを行った際に下記のように表示されたのでrbenv install 3.1.2 → rbenv install 3.1.3 に変更しました      
2.7.7
3.0.5
3.1.3

あとは手順通りで問題なかったです。無事最後にはバージョンアップできました。
わかりやすい記事ありがとうございました。

$ ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64

元記事を表示

【Rails】Twitterクローンを作ってみた 〜GitHubログイン(OmniAuth)〜

## はじめに
[【Rails】Twitterクローンを作ってみた 〜画像アップロード(ActiveRecord)〜](https://qiita.com/bloom__fu/items/761d53d644b6a016ed0d)の続きです。こちらを前提に進めていきますので、まだご覧になっていない方はそちらからご覧ください!※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS

## OmniAuth
#### 条件
– Git Hubアカウントでログインできる
DeviseのモジュールOmniauthableを使用しGit Hubログインをできるようにしてください。
#### 実装流れ(簡略)
1. https://fuga-ch85.hatenablog.com/entry/2021/04/04/164302
こちらを参考にGitHubのClient IDとClient secretsを取得してください。
2. Client IDとClien

元記事を表示

インスタンス生成

# 初めに
※自分が超初心者なので超初心者向けです。
※半分は自分が振り返るために作成しています。。

# 問題
クラスFruitを以下の仕様で定義してください。![スクリーンショット 2022-11-27 14.41.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/c5b16172-8cce-c6a8-40c5-5ce76093057a.png)
実行結果は以下のようになります。

採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です

# 自身の解答
![スクリーンショット 2022-11-27 14.43.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/62b66def-db32-9347-6171-f1d7729c0929.png)

# 模範解答
![スクリーンショット 2022-11-27 14.45.13.png](https:/

元記事を表示

Google トレンドをスクレイピングする

# 前提
– [対象サイト](https://trends.google.co.jp/trends/trendingsearches/daily?geo=JP)(2022/11/26 時点)
– macOS 12.3.1
– ruby 2.7.4p191
– capybara (3.35.3)
– selenium-webdriver (3.142.7)
– chromedriver 107.0.5304.62
– nokogiri (1.12.3)

# [毎日の検索トレンド](https://trends.google.co.jp/trends/trendingsearches/daily?geo=JP)
– [RSS](https://trends.google.co.jp/trends/trendingsearches/daily/rss?geo=JP)があるのでそれを使う
– タイトルくらいしか取れないので、それ以上のものが欲しい場合はブラウザ経由で取得する

“`ruby
require ‘rss’

url = “https://trends.google.co.jp/

元記事を表示

Alma Linux9にRailsアプリケーションの最低限の動作環境を構築する際の個人的備忘録

# はじめに
本記事はAlma Linux9で最低限のRailsアプリケーションを動作させるための手順を記したものです。
前提は以下となります。
* RailsアプリケーションはGitクローンしてくる
* Rubyのバージョンは3.1.2とする
* gemはvendor配下にbundle installする

# 手順

1. アップデートを行う
“`bash
$ dnf update -y
“`
1. `git` をインストールする
“`bash
$ dnf install git -y
“`
1. `vim` をインストールする
“`bash
$ dnf install vim-enhanced -y
“`
1. 開発者用ツールをインストールする(Todo: Cコンパイラだけでいいかもしれない)
“`bash
$ dnf group install “Development Tools” -y
“`
1. `mysql` or `postgresql` に必要なパッケージ

元記事を表示

たのしいRubyを勉強してみた

# たのしいRubyを勉強してみた 第一部
*Green_helmet@bethlehem4099 2022年6月18日*

Rubyの本、買ってきた
たのしいRuby
勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。

## はじめに

ここのところPythonでプログラムを書いていた。
でも、Pythonは計算は得意だがまとまったプログラムを作るのには向いてない気がしてRubyを勉強することにした。
そう、PythonはmacOSのプリインストールソフトから削除されてしまったがRubyは残っている。そしてGitHubとHomebrew最高。
## Rubyの実行環境とインストール

### パソコン環境
Ruby勉強の環境。二画面で実行環境と本や検索画面を表示出来て快適。でもM1 MacBook Airは接続できる外部モニターがデフォルトで1台なんだよな。だからIntel MacBook Proの出番がまだある。ただし動作は圧倒的にM1が快適。この構成に至るまでかなり試行錯誤した。

:::note
Intel MacBook Pro 2017,
M1 M

元記事を表示

rbenvでRubyのバージョン管理

# 環境

– macOS Monterey 12.1
– Homebrew 3.6.12

# rbenv

rbenvを使用してRubyのバージョン管理をする。

https://github.com/rbenv/rbenv

# rbenvの準備

Homebrewをアップデートして、rbenvのインストール

“`shell
$ brew update
$ brew install rbenv
$ rbenv -v
rbenv 1.2.0
“`

デフォルトのRubyのバージョン参照先がrbenvの参照先に変えるためPATHの追記。
また、PC起動時にrbenvが自動で使用できるようにするための設定も記述。

“`shell
$ vi ~/.zshrc

eval “$(rbenv init -)”
PATH=”$HOME/.rbenv/bin:$PATH”

$ source ~/.zshrc
“`

# Rubyのインストール

インストール可能なRubyのバージョンを確認

“`shell
// 下記どちらでもOK
$ rbenv install –list

元記事を表示

Renderによるデプロイ

# はじめに
Ruby on Railsを用いて開発したWebアプリケーションをRenderを用いて無料でデプロイする方法を記載します。

# Renderを用いる際の注意点
Renderには無料枠と有料枠の2種類が存在します。
有料枠に比べ無料枠はできることに制限があるので、まずはそれを知ることから。

## ①Webアプリケーションに関する制限
– 無料プランでは、非アクティブ状態が 15 分間続くと自動的にアプリがスリープします。
新しいリクエストが来るとスリープが解除されますが、最大30秒の応答遅延が発生する可能性があります。

– 無料プランで使用できるのは、 1か月あたり750時間の実行時間と、100GBまでのデータ転送です。100GBを超える場合、0.10 USD/GBが課金されます。

– 無料枠を超えると、サービスは自動的に中断され、有料プランにアップグレードされるか、無料枠がリセットされるまで、トラフィックを処理できなくなります。無料利用は毎月1日にリセットされます。

– 通常、無料の Web サービスのビルドは、有料サービスのビルドよりも遅くなります。ビルドとデ

元記事を表示

Railsでポートフォリオ制作②【環境構築】

Web系企業でのバックエンドエンジニアとしての就職を目指して、ポートフォリオを制作しています。
ポートフォリオ制作のすべての記録を残していきます。

## この記事は
Rails環境構築でエラーに出合いまくり七転八倒した私が、どうにか`rails new`までこぎつけた軌跡を記しています。
エラー解消のためにひとつひとつの操作・コマンドを理解しようと、それぞれ意味を調べて書いています。
Railsでこれから環境構築する方の参考になれば幸いです!

## マシンスペック
– macOS Monterey
– MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
– Intel Core i7
– メモリ 32GB

## Ruby, Railのバージョン
– Ruby: 3.1.2
– Rails: 7.0.4
### どうやってRuby, Railsのバージョンを決める?
– 基本最新のものを使うべき
– 理由:古いものだと脆弱性があったりセキュリティ的に問題がある可能性があるから
– メジャーバージョンが上がってすぐのタイ

元記事を表示

【初心者向け】Rubyのハッシュの書き方一覧

Rubyのハッシュにはキーの値を`シンボルと文字列`で書く方法がある。
要素を取得する際に書き方が異なってくるので、ここでまとめようと思う。
“`ruby:qiita.rb
# キーが文字列の場合
user = {“name” => “kenji”, “id” => 1}
puts user[“name”]
# キーがシンボルの場合
user = {:name => “kenji”, :id => 1}
puts user[:name]
# キーがシンボルの場合(省略記法)
user = {name: “kenji”, id: 1}
puts user[:name]
“`
一番下の省略記法に関してはJavaScriptのオブジェクトの書き方と同じなので注意したい。

元記事を表示

【Rails,ゲストログイン】削除される度に,同一ゲストユーザーを生成する

## はじめに
ゲストユーザーが削除された際に,「ゲストログイン」ボタン押下で,削除前と同一のゲストユーザーを再生成する方法をまとめました.
Rails初心者の記事です.
不足,間違い等ありましたらご指摘いただけますと幸いです.

## 環境
Ruby 3.0.4
Rails 6.1.7

## ゲストログイン機能の仕様
ゲストログインボタンを押下すると,ゲストユーザーのユーザー情報に合致するユーザーが存在するか照合する.
存在すれば,当該ユーザーでログインする.
存在しなければ,指定したデータを持つゲストユーザーを生成しログインする.

## 実装
### sessionsコントローラでguest_loginアクションを実装
ゲストユーザーの照合,生成を実装します.
また,ゲストユーザーをログインユーザーとして扱うため,セッションに`user.id`を格納します.
ログイン判定は,後述のApplicationControllerで実装しています.
“`ruby:app/controllers/sessions_controller.rb
class SessionsControl

元記事を表示

Railsで判定機能を作って遊ぶ[Find the missing letter]

# ルール
“`
アルファベットが順番に定義された配列が存在する.
だが、順番の中で1つ抜けているものがあるからそれを特定する。
大文字・小文字のパターンがあるので注意する。
“`

# テストコード

“`
Test.assert_equals(find_missing_letter([“a”,”b”,”c”,”d”,”f”]), “e”)
Test.assert_equals(find_missing_letter([“O”,”Q”,”R”,”S”]), “P”)
Test.assert_equals(find_missing_letter([“b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“a”,”b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“b”,”d”,”e”]), “c”)
“`

# リファクタリング前の判定メソッド
次のアルファベットを判別するために、ハッシュで次のアルファベットを取れるように定義した。
この時に、小文字のパターンしか

元記事を表示

Railsのcase文で色々遊ぶ

# 遊ぶ
暇だったので色々rubyの問題を解いていたのだが、こういう簡単なお題でも色々書き方があって面白い。

“`
#### ルール
下記4つの文字列をもとに計算するメソッドを作る。

iは値を+1
dは値を-1
sは値を二乗
oは値を配列に出力

#### 条件
1. メソッド名はparseで、ランダムなStringの値が引数としてくる。
2. idso以外の文字列も引数として与えられるため、紛れ込んでても対応する
“`

テストの値

“`ruby
expect(parse(“ooo”)).to eq([0, 0, 0])
expect(parse(“iiisdoso”)).to eq([8, 64])
expect(parse(“ioioio”)).to eq([1, 2, 3])
expect(parse(“idoiido”)).to eq([0, 1])
expect(parse(“isoisoiso”)).to eq([1, 4, 25])
expect(parse(“codewars”)).to eq([0])
`

元記事を表示

巡回セールスマン問題の bit DP を Ruby で速く計算する書き方を調査

競技プログラミングを Ruby でやっているのですが、適切なアルゴリズムを選んでも実装次第で時間制限超過 (TLE) になってしまうことがあります。最近 **bit DP を用いた Held–Karp algorithm** を書く際にハマったので、どのように書くと良いのか色々試してみました。

※ Held–Karp algorithm は、巡回セールスマン問題などを時間計算量 O(N2·2N) で解くアルゴリズムです。動的計画法の一種で、グラフの「通過した頂点の集合」と「最後に通過した頂点」の組を部分問題として計算・記録します。

## TL;DR
基本的には多重ループの内側の処理をなるべく減らします。(当たり前?)

* 計算量の N2 にあたる二重ループの回数自体を減らすため、集合をビット列で表した整数のビットが立っている桁と立っていない桁を事前に列挙します
* ビット列が変わる度にリストを求め直すよりも、前回からの差分だけ更新するほうが速いです
* DPのテーブルの各セルへは**1回のみ書き込む

元記事を表示

OTHERカテゴリの最新記事