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

Ruby関連のことを調べてみた2022年01月12日
目次

Ruby on Railsの環境構築【初心者用】

# 動機

シンプルに手順を示した記事が無かったため作成。
できる限りシンプルにまとめました!
とりあえず手元のPCでRailsを動かせるようになることを目的としていますので細かい説明は省略しています。
環境構築が終わってから、コマンドで具体的に何を行っているのか、一つずつ調べていきましょう。

# 環境

macOS Monterey 12.1

# ひたすらインストールしていく

ターミナルを開いてコマンドを入力していってください。
### Command Line Tools

コマンドラインツール

“`
xcode-select –install
“`

### Homebrew

macのパッケージ管理ツール

“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`

### rbenv

Rubyのバージョン管理ツール

“`
brew update
brew install

元記事を表示

Rubocopを使って、Rubyのマジックコメントを coding: utf-8 から frozen_string_literal: true に修正する(一括置換)

Rubyのマジックコメントを、`# -*- coding: utf-8 -*-` から `# frozen_string_literal: true` に一気に書き換えたい場合、以下の2つのコマンドを流せば、そのディレクトリ以下にあるRubyのすべてのファイルで、マジックコメントが encoding: utf-8 から frozen_string_literal: true に書き換えられる

“`shell
rubocop –only Style/Encoding -a
rubocop –only Style/FrozenStringLiteralComment -a
“`
`-a ` オプションを削除して実行すると、ファイルは変更されずに変更箇所のリストアップだけされるので、最初はそれで試してみるのが良いかも

## 参考

– [Class: RuboCop::Cop::Style::Encoding — Documentation for rubocop (1.24.1)](https://www.rubydoc.info/gems/rubocop/RuboCop/C

元記事を表示

行単位、列単位の合計値算出プログラムを実装する

# はじめに

[Ruby初心者向けのプログラミング問題を集めてみた](https://blog.jnito.com/entry/2019/05/03/121235)の問題を解いてみました。
今回は、Excelのように、行・列の格子状になるランダムな数値を出力し、行・列単位で合計値を算出し、出力するプログラムにチャレンジしました。

最終的には、以下のような形式にフォーマットしたいです。

“`
9| 75| 83| 74| 241
1| 27| 32| 48| 108
51| 66| 76| 3| 196
2| 37| 69| 85| 193
55| 40| 25| 88| 208
118| 245| 285| 298| 945
“`

## 要求仕様

– 計算のベースとなる配列を作成する
– フォーマットし出力した際に、5 × 4 となるような配列であること
– 配列の値は`1〜99`のランダムな値であること
– ベースとなる配列を元に、行・列で合計値を算出し、例の通りフォーマットされた表を出力する

元記事を表示

[Ruby] 丸め誤差というバグについて簡単に説明

# 丸め誤差とは
コンピューターの内部で10進数ではなく、2進数で計算すると発生するのが**丸め誤差**です。

###Rubyに備わっているirbを使って確認してみましょう
“`apex
irb(main):001:0> 0.1*3.0
=> 0.30000000000000004
“`
上記のように0.3になりません。

このような誤差のバグで正しく処理できないことがあります
以下が例です。

###数値の大小を比較したりする際にバグになる

“`apex
irb(main):002:0> 0.1*3.0 == 0.3
=> false
irb(main):003:0> 0.1*3.0 <= 0.3 => false
“`
**trueではなくfalseが返っています。**
こうなると正しく計算ができませんよね

# 対処法
### Rationalクラスを使う

先ほどの計算に**Rationalクラス**を使ってみましょう
数字に後に’r’を付けます。

“`apex
irb(main):004:0> 0.1r*3.0r == 0.3
=> true
irb(mai

元記事を表示

active_hashを使って都道府県モデルを作る方法

#はじめに
 
 **今回は都道府県を選択する時に使う「active_hash」について新たに学んだので備忘録としてまとめます。**active_hash住所などを選択する時に都道府県を選択するプルダウンを作るために必要です。ユーザー登録をする時にはよく使いますが、47個の都道府県を毎回実装するのは大変です。そんな時に、active_hashを使うと簡単に効率よく実装する事ができます。

#active_hashの実装方法
active_hashの実装方法は以下の手順です。

1gemfile
2疑似モデルを作る
3対応するカラムを作る
4アソシエーションを定義する
です。
**今回はuserモデルに都道府県を保持させたい場合を想定します**

それでは順番に説明していきます。

# gemfileの導入
 まずはgemfileを導入します。

“`
## Gemfileに以下を記述
gem ‘active_hash’
“`

その後bundle installを忘れずします。

# 都道府県の擬似モデルを作る
 次に都道府県を入れた擬似モデルを作ります
まずは実施のコードを

元記事を表示

【CircleCI】bundle installされない場合の対処方法

railsでポートフォリオ作成時にCircleCIを導入したところ、
`bundle exec rails db:migrate`実行時にエラーが発生しました。
ログ上では`bundle install`してたが`bundle install`しろとのこと。。。

ググっても解決策が見つからず、かなりハマってしまったので記録しておきます。

#エラー内容
![スクリーンショット 2022-01-11 14.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/fa92a9e5-30e2-7fc6-a557-12b83231c0c7.png)

“`:エラーメッセージ
Could not find rake-13.0.6 in any of the sources
Run `bundle install` to install missing gems.
“`

#解決策

>プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止

元記事を表示

crontab×ruby 備忘録

##### 経緯
crontab で ruby のスクリプトを動かすことに苦戦したので、
忘れないようにメモ。

##### 参考記事
https://qiita.com/xxl/items/88108f9ef70eafab395c

##### 実行環境
・cent os (ヴァージョン追記予定)

##### シェルスクリプトの作成
参考記事に倣って作成する。

##### crontabの設定
crontabは環境変数が通っていないため、crontabで使いたい環境変数は自分で通す必要がある。
crontab -e の編集画面で、
PATH, HOME, RBENV_ROOT,RBENV_SHELL,SHELLなど通すことで、
crontab で ruby のスクリプトが動かせるようになった。

(LANG も通しておかないと、実行ログが文字化けしてました)

元記事を表示

[Ruby] シングルクオートとダブルクオートに違いがあるって知らなかった。

# はじめに
初学者ですが、いくつかアプリを制作し慣れてきていたと自覚していた私ですが、まだまだ奥が深く面白いのがプログラミングであるなと更に思わされました。
Rubyに関する本を読み、「そんな理由があるんだ!」と思わされた事を紹介させてください。
#シングルクオート、ダブルクオートとは
### どちらも文字列を作る為にある
Rubyでは文字列を作る方法として、シングルクオート、ダブルクオートで囲む方法があります。

“`apex
‘シングルクオート’
“ダブルクオート”
“`
私の知識ではどちらでもよく、好みにより使い分けたり見やすくするために使い分けることがあるのだと思っていました。
#どんな時に違いがあるのか?
## バックスラッシュ記法を使用する時
###\nは””で囲まれている文字列を改行させる
ちなみに\←はmacだとoptionを押しながら¥を押すと表示させることができます。

“`apex
//シングルクオートの場合
‘おはよう\nおやすみ’
=> おはよう\nおやすみ
//ダブルクオートの場合
“おはよう\nおやすみ”
=> おはよう
おやすみ
“`

###

元記事を表示

Ruby on Rails 日時データを年月日の形式で表示する

#日時データを年月日で表示したい

scheduleというテーブルの中から、startという日時データのカラムの値を表示したい時、

“`
<%= schedule.start %>
“`
↑こんな感じで書くと

![スクリーンショット 2022-01-11 21.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/3882c94a-c11c-901d-f20d-bc0d54a3ebb2.png)
↑こんな感じで表示される。
これを、年月日だけで表示していきたい。

#対処法

“`
<%= schedule.start&.strftime("%Y年 %m月 %d日") %>
“`
↑このように書くと、
![スクリーンショット 2022-01-11 21.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/ffa4b769-8cf1-736a-c061-18749bac

元記事を表示

【Rails】ActionController::RoutingError (uninitialized constant HogeControllerの対処法

症状

railsで新たにアクションを追加したときに下記エラーメッセージが表示されました。
翻訳すると「初期化されていない定数hogeController」でした。

“`terminal:error
ActionController::RoutingError (uninitialized constant HogeController
“`

routeファイルとhoges_contollerファイルは以下です。

“`ruby:routes.rb
post ‘hoge’, to: ‘hoge#update’
“`

“`ruby:hoges_contoller
class HogesController < ApplicationController end ```

解決方法

routeファイルのhogeをhogesに変更することで解決しました。

“`ruby:route.rb
post ‘hoge’, to: ‘hoges#update’
“`

下記の記事ではファイル名が間違っていたため同様のエラーが出ていたようです。
この

元記事を表示

【Rails】dynamic constant assignmentの対処法【Ruby】

症状

railsで以下エラーが発生しました。
翻訳すると、「動的定数の割り当て」でした。

“`terminal:error
SyntaxError (C:/app/controllers/api/v1/users_controller.rb:21: dynamic constant assignment
YOUR_DOMAIN = ‘http://localhost:3000’
^~~~~~~~~~~
“`

“`ruby:users_controller.rb
def update
user = User.find_by(id: params[:userId])

DOMAIN = ‘http://localhost:3000’

if(user.save!(user_params)
redirect_to DOMAIN + ‘?success=true’,
else
redirect_to DOMAIN + ‘?canceled=true’,
end

end
“`

解決方法

Appli

元記事を表示

【Ruby】クラスとインスタンスの概念を用いたコードの作成

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
“`ruby
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

end
“`
上記のコードに追加を行い、以下の出力結果を得られるようにしてください。ただし、クラスとインスタンスを使用するものとします。

“`csharp
著者: 阿部
タイトル: Rubyの素晴らしさについて
本文: Awesome Ruby!
“`
##解答##
“`ruby
class Article

def initialize(author, title, content)
@author = author
@title = title
@content = content
end

def author
@author
end

元記事を表示

Ruby3.1.0のbundle installでpuma5.5.2がダウンロードできなかった時

# 環境

– macOS 12.1 (Monteray)
– ruby 3.1.0p0 (2021-12-25 revision fb4df44d16)[arm64-darwin21]
– Rails 7.0.1
– Apple clang version 13.0.0 (clang-1300.0.29.30)

# 要約

“`
bundle config build.puma CC=”clang -fdeclspec”
“`

でbundle installの実行時にオプションを渡して

“`
bundle install
“`

を実行。

# 出ていたエラーメッセージなど

Rails7.0.1でrails newした後Gemを入れようとしてbundle installを実行するとこんな感じのエラーが発生しました。(一部省略)

“`
current directory:
/rails/rails7-try/vendor/bundle/ruby/3.1.0/gems/puma-5.5.2/ext/puma_http11
/.anyenv/envs/rbenv/ve

元記事を表示

【Rails】同じscopeはmoduleに共通化しよう

複数のクラスに共通するscopeがあるとき、moduleとして共通化する。

##before

“`author.rb
class Author < ApplicationRecord scope :active, -> { where(state: ‘active’) }
end
“`

“`book.rb
class Book < ApplicationRecord scope :active, -> { where(state: ‘active’) }
end
“`

##after

“`models/concerns/active_scope.rb
module ActiveScope
extend ActiveSupport::Concern

included do
scope :active, -> { where(state: ‘active’) }
end
end
“`

“`author.rb
class Author < ApplicationRecord include ActiveScope end `

元記事を表示

ログインしていない人がアクセスできるページを制限する

authenticate_user!で書くアレと、move_to_index(じゃなくてもいいけどこの名前でよく作ってる)アレの使い途がごっちゃになっていたので整理してみたくなり。
まずは、authenticate_user!について書いてみる。

##authenticate_user!
deviseを導入していると使えるメソッド。
処理が呼ばれた段階で、そのユーザーがログインしていなければ、ログイン画面に強制的に飛ばせます(っ’-‘)╮=͟͟͞͞ポイッ

書く場所はApplicationController。
どのコントローラーで処理するにも共通した処理を書ける場所。
便利だなと思う反面、影響力強い×触る頻度少ないのでいつもどきどきしながら書く。

“`ruby:application_controller.rb
class ApplicationController < ActionController::Base before_action :basic_auth before_action :configure_permitted_parameters, if:

元記事を表示

intee プログラミングゼミを経ての感想

2022.01.11

2021年12月2日〜12月24日まで参加したゼミについての感想、今後の展望について
[感想]
・とにかく学びが多い!
今回はRuby/Githubを使って開発したが、前回はPHP/htmlを使ってパスワード付きの掲示板を作った。
同じようなサービスを作る過程でも違う箇所が多く勉強になった
特に今回はRubyを立ち上げるところからのスタートだったので、より実践的に感じた
command+Sでセーブなどショートカットも覚えた!
ただカリキュラムに甘え、分からない専門用語が多いのでそこは勉強が必須

・自走力がついた
初回の授業でパソコンが動かず、大きな遅れを取ったのでゼミ外で自主開発をしていた
カリキュラムに記載されていない予想外のエラーが出ることが多かった
最初は絶望し先生方に相談するしかなかった
→次第にエラー内容の見方も分かり、自分で解決を試みるようになった
ありがちなエラー:if/end/{}の書き忘れなど
また時間を見つけて一人でも取り組むようになった

・まだ完走出来ていない
最後でエラーが続き、あともう少しのところで止まっている
今週は時間があるので

元記事を表示

任意の文字列から特定の連続する文字列を探し、その直前の値により「True」または「False」を出力するプログラムを実装

任意の文字列から特定の連続する文字列を探し、その直前の値により「True」または「False」を出力するプログラムを実装します。

以下の要件を満たすxyz_thereメソッドを実装します。
——

– 任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がない場合はTrueを出力する
– 任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がある場合はFalseを出力する
– 上記2つの条件に当てはまらない場合はFalseを出力する

出力例
—-

xyz_there(‘abcxyz’) → True
xyz_there(‘abc.xyz’) → False
xyz_there(‘xyz.abc’) → True
xyz_there(‘azbycx’) → False
xyz_there(‘a.zbycx’) → False

include?メソッドを使いましょう。
————
include?メソッドは、指定した要素が配列または文字列に含まれているかを判定するメソッドです。

“`Ruby
str = “

元記事を表示

【Rails】routesのエラー「“’: No such file or directory 」の対処法

症状

railsで新たにアクションを追加しようと、routeファイルにルートを追加してサーバーを起動したところ下記のエラーが発生しました。
翻訳すると、「そのようなファイル、又はディレクトリはありません」でした

“`ruby:error
rails s
=> Booting Puma
=> Rails 6.0.4.1 application starting in development
=> Run `rails server –help` for more startup options
Exiting
D:/app/config/routes.rb:28:in “’: No such file or directory – checkout (Errno::ENOENT)
from C:/appu/config/routes.rb:28:in `block (3 levels) in


from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/actionpack-6.0.4.

元記事を表示

変数の後ろにカンマがついている

##変数の後ろにカンマがついている問題があったので備忘録として記しておきます

“`Ruby:main.rb
#変数の後ろにカンマを付ける
a, = (1..5).partition(&:odd?)
p a => [1, 3, 5]

#カンマを付けない
b = (1..5).partition(&:odd?)
p b => [[1, 3, 5], [2, 4]]
“`
カンマを後ろに付けることで多重代入になる。今回の問題でいうとカンマを付けることで2個目の変数の枠が用意されるが2個目の変数を宣言していないことによって[2, 4]の配列がなくなり、[1, 3, 5]が表示される。

:::note info
partitionメソッドは指定した条件に一致するか否かで配列を分割します。

元記事を表示

【Ruby】二重ハッシュ

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。

“`ruby
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`

user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
ただし、出力結果は次のようになるものとします。

“`
George
Alice
Taro
“`

##解答##

“`ruby
user_data.each do |u|
puts u[:user][:profile][:name]
end

あるいは
user_data.each{ |u| puts u.dig(:user, :profile, :name) }
“`
##解説#

元記事を表示

OTHERカテゴリの最新記事