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

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

【要反省】入社して半年間において先輩からのレビューで指摘されたこと5選

## はじめに

どうも、こんにちは。もきおです。
未経験から自社開発企業に転職し半年が経ちました。あっという間の半年間でしたがその間色々ありがたいことにレビューをいただきました。なので今回は半年前の入社した自分に送る言葉的な感じでレビューで指摘されたことを書き起こしておきたいと思います。

最後に対策的なとこも記載しているので最後までご覧いただけますと幸いです。ちなみに弊社はRuby、Railsメインで使用しているのでちょくちょくRubyのメソッドとか出てきます。他の言語使用されている方は適当にあしらってもらえればと笑

## 指摘1: コードちゃんと読んだ?
これは言われることが最も多かった指摘でしたね。何回かこの指摘を受けた時、コードをちゃんと読むってなん何だろう?と疑問に思ったので具体的なポイントを聞いてみました。

* 分からない箇所を分からないままで読み進めない
* 想像で決めつけて読み進めない
* 一つ一つデバックして確認する

### 分からない箇所を分からないまま読み進めない
企業のコードはポートフォリオと比にならない程のコード量ですよねー。そのためついつい各コードの

元記事を表示

Ruby on Railsの師匠に学んだリファクタ術

# はじめに

この記事の対象はこちら↓
– Ruby on Rails初心者です!な方
– Ruby on Railsを使っているけど、リファクタリングって何してるの?という方
– 良いコードを書きなさいと言われたけど改善方法がわからない!という方
– コードを整理したい!と言う方

#### 環境
– Ruby ver_2.6
– Ruby on Rails ver_5.1.7

:::note info
目次
1. [リファクタリングって何?](https://qiita.com/mattyan_lm/private/2c5fda2d15d2b53e7c33#%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A3%E3%81%A6%E4%BD%95)
2. [リファクタリングでやること、そのメリット](https://qiita.com/mattyan_lm/private/2c5fda2d15d2b53e7c33#%E3%83%AA%E3%83%95%E3%82%A1%E

元記事を表示

CarrierWaveの使い方

## 概要
ファイルアップロード機能を提供するGem。
いろいろなアップロード機能を提供するGemはあるが、その中の一つ。

## 導入手順
まずはGemfileに追加。
“`
gem ‘carrierwave’, ‘~> 2.0’
“`

uploaderクラスを作成。
“`
rails generate uploader Avatar
“`

そうすると以下のファイルが作成される。
app/uploaders/avatar_uploader.rb
“`
class AvatarUploader < CarrierWave::Uploader::Base def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def default_url 'sample.jpg' end def extension_allowlist %w(jpg jpeg gif png) en

元記事を表示

正規表現についてまとめてみた

はじめに

正規表現について学んだが、初学者の自分にとってとっつきにくかったため自分なりにまとめてみた内容になっています。
他の初学者の方で同じように思った方の参考になればと思いまとめていきます。

:::note info
正規表現とは文字列に特定の文字が含まれているか確認したり、特定の文字を取り除いたり、置き換えるときなどに使用する
:::

正規表現

|正規表現の例 |意味 |使用例 |
|:————-:|:—————————–:|:————————–:|
|[] |囲まれた文字のうちいずれかにマッチすること|name.match(/[a-z]/)=>aからzのいずれかに当てはまるか|
|a-z|aからzまでの文字、-で範囲指定できる|上記の例を参照|
|\b|数字が含まれている|age.match(/[\d]/)=>数字が含まれて

元記事を表示

初心者向け devise導入について

# 記事にした経緯
私が作成中のアプリにログイン機能を実装するため、`devise`を実装しようとした時に色々な課題があったため忘備録として記事にしました。

アプリを作成し`devise`をインストールします。

“`:ターミナル
rails new devise_sumple -d postgreSQL (アプリ作成)
      ↓
rails db:create (データベース作成)
“`
“`:Gemfile
gem ‘devise’
# ***** 以上を追加 *****
group :development, :test do
# 略
“`
“`:ターミナル
bundle install    (gemをインストールする)

rails g devise:install (アプリにdeviseをインストール)

rails g devise User (deviseで認証するためのモデルを作成)
“`
以下のファイルやコードが作成される
“`
Running via Spring preloader in process 19712

元記事を表示

ruby returnの返り値が複数の場合

はじめに

メソッド内の処理後、返り値が複数になる場合はどうなるのか気になったので調査し、検証してみました。

returnを使わない場合の返り値

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
end

value = 10

x = return_test(value)

puts x
“`
結果
“`
=> 150
“`
:::note warn
メソッドの最後の処理結果しか返ってこない
:::

returnで返り値を複数指定した場合

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
return sum_a,sum_b,su

元記事を表示

rails ヘルパーメソッドを使ってviewファイルを整える

はじめに

ヘルパーメソッドを自分で定義することについて学んだので学習したことをまとめて記述していきます。

ヘルパーメソッドを使うメリット

railsでビューファイルに対して行われる処理に関して繰り返して使用するようなメソッドはヘルパーメソッド(ビューファイルに対して使用するモジュール)を自分で定義して使用するとビューファイルの可読性を良くすることができ、また保守などの面から見ても修正しやすくなるメリットがある。

___
メッセージの投稿機能があるWEBアプリケーションでそのメッセージを一覧でメッセージテキストと投稿者を表示したい時などを想定してビューファイルを下記のように作成した場合

:::note warn
ヘルパーメソッド使用前
:::
“`app/views/messages/index.html.erb

<%= @messages.each do |message| %>
<%= message.text %>
<% end %>

“`

:::note i

元記事を表示

【Rails】初学者向け_基礎のみを活用しチャット機能を作る方法

## 1.バージョンを確認しましょう!

Rails 5.1.6
ruby 2.7.2p112

## 2.完成イメージ

ログイン済みのユーザーで一つのチャットルームを共有し、交流できる機能です。
同じ名前のグループは作成できないようにしてあります。
ぜひclosedな環境でグループを作成し、お話してみてください(^_^)v

## 3.実装の大きな流れ

>1.グループチャット機能に必要なModel、Controller、Viewの実装
>2.グループ系モデルとUserモデルの紐付け
>3.ちょっとしたフロントエンドデザイン

ちなみにUserモデルは既に作られている前提で記事を書いています。
筆者はdeviseというgemを使ってUser周りを整えております。

ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳​˙ )ᕗ

## 4. 必要ファイルを作成しましょう

“`ターミナル
$ rails g controller groups #groups_controller.rbを作成
$ rails g controller cha

元記事を表示

【Rails】お問合せフォームの実装

こんにちは!
この記事では、railsで **「お問い合せフォーム」** を実装していきます!
これは、お問い合せフォームを送信すると、設定したメールアドレス宛にお問い合せ内容が送信される機能です。

# ゴール
railsで「お問い合せフォーム」を実装し、gmailにお問合せ内容が届くようにすること。

### 完成イメージ1 (お問合せフォーム)
![スクリーンショット 2022-07-17 1.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/7f56cc29-f213-c206-476d-8734af657f77.png)

### 完成イメージ2 (設定したGmailにお問合せが届く)
![スクリーンショット 2022-07-17 1.19.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/189dc51a-1d31-8753-52f8-8de308853cfc.png)

元記事を表示

Method#to_procを利用して、ブロックを省略する方法

以下の`&method`部分の意味が分からなかったので調べてみました。

“`ruby
[‘foo’, ‘bar’, ‘baz’].each(&method(:puts))
“`

今回理解したいコードはこちらです。

“`ruby
class Hoge
def positive_even_list
even_filter(list)
.then(&method(:positive_filter))
end

def list
[10, -5, 0, 21, -30]
end

def even_filter(list)
list.filter(&:even?)
end

def positive_filter(list)
list.filter(&:positive?)
end
end

Hoge.new.positive_even_list
# => [10]
“`

## まとめ

– Procオブジェクトの前に`&`プレフィックスをつけると、ブロックとして扱われる
– Procオブジェクトでは

元記事を表示

初めてのRailsチュートリアルに挑戦!第4・5章

# 第4章の学習内容
1. 組み込みヘルパー
1. カスタムヘルパー
1. 文字列
1. オブジェクトとメッセージ受け渡し
1. メソッドの定義
1. titleヘルパー、再び
1. 配列と範囲演算子
1. ブロック
1. ハッシュとシンボル
1. CSS、再び
1. コンストラクタ
1. クラス継承
1. 組み込みクラスの変更
1. コントローラクラス
1. ユーザークラス

# 第5章の学習内容
1. ナビゲーション
1. BootstrapとカスタムCSS
1. パーシャル(partial)
1. アセットパイプライン
1. 素晴らしい構文を備えたスタイルシート
1. Contactページ
1. RailsのルートURL
1. 名前付きルート
1. リンクのテスト
1. Usersコントローラ
1. ユーザー登録用URL

# 学習を終えて
第4章ではRailsでありながら、以前学習したRubyの基礎を学ぶような内容であった。テキストや動画の通りに進めることで、解決できないエラーも発生しなかったので、学習しやすかった。
第5章ではwebページのレイアウトの学習であったため、HTM

元記事を表示

就活生のAtcoder奮闘記〜学習編〜

初めまして見習い駆け出しエンジニアです。

現在大学三年生です。データエンジニアとして長期インターンをさせていただきながら日々技術を磨いている次第です。これからとにかくアルゴリズムを勉強してatcoderの赤色を!と言いたいところですが、現在灰色の私には遠い未来ですので、まずは緑色を目標に(緑も難易度高い)アルゴリズムを勉強していきたいと思います。普段はc言語とrubyを主に使っているのですが、競プロではc++を使うと勉強がしやすいためまずはc++を軸に勉強していこうと思います。

まずこれから使っていく教材

・問題解決のための「アルゴリズム*数学」が基礎からしっかり身に付く本
・atcoderのc++の基礎文法

この二つを一周するだけでまずどれほど太刀打ちできるのかを試してみようと思います。

8/20までに教材を終わらせてからその次のatcoderの大会に挑戦してみようと思います。

よろしくお願い致す。

元記事を表示

配列内の数字の合計(同じ数字を除く)

# はじめに
2回目の問題だったのに解けなかったので、学習の復習のために投稿します。
回りくどくなるかもしれませんが、できるだけ自分の言葉で説明できるようにするつもりです。

# 環境
ruby 2.6.5

# 問題
3つの数字が格納された配列が与えられています。
この配列に格納された数字の合計値を出したいのですが、条件として、配列内で重複している数字に関しては除くことが求められています。

“` ruby
def lone_sum(ary)
# 処理を記述
end
# 呼び出し例
lone_sum([1, 2, 3])
“`

# 考え方
以下の手順で考える
1. 配列内で重複する数字があるかを確認する
2. 重複数字を除いたユニークな配列を作る
3. ユニークな配列に格納された数字を合計する 

## 1. 配列内で重複する数字があるかを確認する
配列に格納された数字をa, b, cとします。
まずはaの数字に対して、それぞれの配列内の数字を比較して同じかどうかを確かめます。
同じ場合にはカウントが上がるようにします。
例えば、aとa、aとb、aとcの数字を比較してカウン

元記事を表示

【Rails】コメントの編集, 削除機能実装(form_with)

# はじめに
記事投稿アプリの記事に対して、コメントを作れる機能を実装した。
さらに、編集と削除ができるようにしたい。

**完成図**
![完成図.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/617104a7-bfca-fd77-79d2-521bd15ec3a7.gif)

# 前提
下記は作成済み
投稿機能
ユーザーテーブル
コメントテーブル
コメントコントローラー createアクション

下記テーブルは作成済み。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# ポイント

・コメント投稿機能とeditテンプレートを同じパーシャルを適用することで、dryにする。
・post_

元記事を表示

Ruby 練習問題5 ~ if → unlessへの書き換え ~

こんにちは、プログラミング初学者”fujitacoma”です!

今回は、Ruby練習問題シリーズの5回目です。
unless文を使用した条件式の記述問題ですね。

それでは早速始めます!

# 問題
次のif文をunlessというメソッドを用いて書き換えてください。

“`ruby
if a + b > 0
puts “計算結果は0より大きいです”
end
“`
## ヒント
### unless
unlessとはifとは逆で、条件式がfalseの場合に処理が実行されます。

__ifを使用した場合__
“`ruby
if 条件式
条件式がtrueの時に実行する処理
else
条件式がfalseの時に実行する処理
end
“`
__unlessを使用した場合__
“`ruby
unless 条件式
条件式がfalseの時に実行する処理
else
条件式がtrueの時に実行する処理
end
“`

# 解答と解説

### 模範解答
“`ruby
unless a + b <= 0 puts "計算結果は0より大きいです" end ``` ###

元記事を表示

Ruby 二重ハッシュの取り出し

以下のようなuser_dataがあり

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

ターミナルの出力結果が以下のようになるようにコーディング

“`
George
Alice
Taro
“`

# 回答

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

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

ハッシュから値を取得するときは取得したい値のキーを指定するという決まりがあったが、今回取り出したいのはnameなのでnameまで連続して指定する。
配列の中にハ

元記事を表示

google-cloud-firestore v2.7.0 はぶっ壊れている

# 2.7.1が出たみたい

https://rubygems.org/gems/google-cloud-firestore/versions/2.7.1

# 問題

https://github.com/googleapis/google-cloud-ruby/issues/18832

“`rb
firestore = Google::Cloud::Firestore.new
doc = firestore.doc(“test/test”)
doc.set(foo: 123)
doc.get.fields
# => {“foo”=>{:null_value=>:NULL_VALUE, :boolean_value=>false, :integer_value=>123, :double_value=>0.0, :timestamp_value=>nil, :string_value=>””, :bytes_value=>””, :reference_value=>””, :geo_point_value=>nil, :array_value=>nil, :map_value=

元記事を表示

【Rails】フォロー・フォロワー機能

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 前提条件
– devise導入

# 目次
– モデルの作成
– アソシエーション
– メソッドの作成
– コントローラー作成
– ルーティング
– View作成

## モデルの作成

まずはRelationshipモデルを作成します。
RelationshipモデルはUserモデルの中間テーブルにあたります。
なぜなら、フォローするのもフォローされるのもユーザーで、`多 対 多`の状態になるからです。

カラムは、下記の通り定義します。

`follower_id` : フォローしたユーザー
`followed_id` : フォローされたユーザー

ここで`user_id`を使わないということが大切です。
RelationshipモデルはUserモデルの中間テーブルになるため、
どちらもidにはユーザーのidが入ります。
つまり、ここで`user_id`を使用してしまうと
判別がつかなくなってしまうため、`user_id`は使用しません。

それでは、ターミナルでコマンドを実行していきます。

“`ruby:ターミ

元記事を表示

仮想環境VirtualBox(Ubuntu20.04)でRails環境構築

# 概要
テキストを見ながらRails環境を構築しようとしたら
サーバー起動までの所で色々ハマってしまったので自分用に記録しておきます。
windows10 VirtualBox6.1 ubuntu 20.04 で構築しました。
windowsからubuntuへのコピペ機能を使える様にしてから始めると楽です。

# 参考にした書籍
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=217OVEDAHL3SK&keywords=rails&q

元記事を表示

マイグレーションファイルを修正する方法

– アプリ制作途中にマイグレーションファイルの修正が必要になった。なんとか修正することができたので忘備録として記事にします。
## 経緯
– `ログイン機能`を実装するため`devise`をインストール
– 不要な機能をコメントアウトし忘れ`rails db:migrate`を実施。
– 実施後に不要な機能を削るため`マイグレーションファイル`の修正に取り掛かる。

まずは`マイグレーションファイル`の修正について検索し、次のコマンドを実施
“`:ターミナル
rails db:rollback
“`
すると以下の様にエラーが発生
“`
Running via Spring preloader in process 89570
== 20220715104214 AddDeviseToUsers: reverting =================================
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Active

元記事を表示

OTHERカテゴリの最新記事