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

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

Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第3章】(6.エラーの処理)

## 概要
前回の記事(第2章)の続きです。
[Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第2章】(3.リファクタリング〜5.バリデーションの設定まで](https://qiita.com/web_fumiya/items/c58bbae366d4d813296f)

今回の第3章では、バリデーションエラーが発生した際のエラーの処理を実装していきます。

## 開発環境
– Ruby 2.7.3
– Rails 6.1.6.1
– Postgresql

## 開発手順
1. アプリの作成 (第1章)
2. CRUD処理で簡単なメッセージ投稿アプリを実装 (第1章)
3. リファクタリング (第2章)
4. フラッシュの実装 (第2章)
5. バリデーションの設定 (第2章)
6. エラーの処理 (第3章)
7. Bootstrapでスタイルをつける (第4章)

## エラーの処理
前回の記事でバリデーションを設定したことにより、空文字投稿、文字数制限を超える投稿をしたらクソアプリをMVCからDDDに無理やり直してみた

# 今回作ったWEBサービス
https://ojitalk.com/
![oji.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/fbdaa970-c118-f541-1942-705842af0c52.gif)
こんにちは!ちゃきです!
定期的にクソサービスを個人開発して世の中のドメイン無駄遣いしてます!
そろそろQiita更新しないとヤバいと思い書きました。

転職前も転職後もPHPをほとんど使っています。
しかし社内のサービスはほとんどrailsで作られているため、今後の為にrailsの勉強の一環として
今回のサービスを作りました。
てか社内にlaravelエンジニア全然いない。

## どんなサービスか?
登録してある若者言葉をおじさんでもわかる単語に変換してくれる***チャットアプリ***です。
おじさんの言葉も若者がわかるように変換します。
最初から登録してある単語以外にも追加はできます。

|                                       

Python,Ruby,PHP,Java,JavaScript,Perlの文法・構文の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの文法・構文の比較

# Python

https://qiita.com/Fendo181/items/a934e4f94021115efb2e

# Ruby

https://qiita.com/Fendo181/items/eb2cb17f32d99aa01f59

# PHP

https://qiita.com/7968/items/d739e926189e219273bd

# Java

https://qiita.com/tomonori_hioki/items/cec47a366208d43d7339

# JavaScript

https://qiita.com/Fendo181/items/cca476da99e8f09b6b97

# Perl

https://perlzemi.com/blog/2

Rails7においてページをリロードしないとjavascriptが動かない

# はじめに
現在Rails7でアプリケーションを開発している。
javascriptでタブと画像プレビューを実装したが、ページをリロードしないとjavascriptが動かない問題に直面した。
いろいろ検索しているとturbolinksが原因であるということは分かった。
解決方法はいくつか見つかるがどれを試してもなかなか解決しなかったため、備忘録として投稿。

## Qiitaの記事などでよく見られた解決策
### 1.link_to ごとにturbolinksを無効にする
“`html.erb
<%= link_to "hoge", root_path, data: {"turbolinks" => false} %>
“`

### 2.jsファイルに”turbolinks:load”を記述する
“` .js
document.addEventListener(“turbolinks:load”, function() {
//略
})
“`
この二つの解決方法が多く見つかった。
実際に試してみるがどちらも解決に至らず、2に至ってはリロードしても動作しなくなってしま

Rails6で通知機能を実装(ポリモーフィック)手直し版

前回投稿した通知機能をポリモーフィックを使って実装しましたが、途中からうまく使えていませんでした。
下記記事のenumの設定から分岐してviewまでを修正して書いていきます。
この記事から見られた場合はenumまでは下記記事を見てください

https://qiita.com/ttymryo/items/79dcf9fd83d0c09e8775

## enumの設定

“`ruby:model/activity.rb
enum action_type: {
favorited_the_diary: 0,
followed_you: 1,
commented_on_the_diary: 2
}
“`

通知する内容をなんとなく翻訳にかけて分かるように書いてあります
後で日本語化するので単語一個だと分かりにくくなります

## create時に通知を入れる
通知したい内容がcreateされたときにactivityをcreateするようにします

“`ruby:model / favorite.rb comment

【Rails】フロントから渡ってきたパラメータをバックエンド側で編集できない

以下のような感じのバックエンド側に渡したストロングパラメータをgsubでちょこっと手を加えようとしたらできなかったので備忘録も兼ねてメモ。。。
“`ruby
def permit_params
params.require(:form_params).permit(:param1,
:param2,
:param3)
end
“`

挙動としては以下のような感じ、、、
“`ruby
permit_params[:param1].gsub(“hoge”,”fuga”) #←これをログ出力したらきちんとgsubが効いているが、、、
permit_params[:param1] = permit_params[:param1].gsub(“hoge”,”fuga”) #←こんな感じで値を更新しようとしても書き換えができない。エラーとかも出ない。。。
“`

対応
ストロングパラメータを他の変数に一旦、移してそっちを編集する。

【ruby】文字列から半角空白と全角空白を全て削除する

自分用メモ
“`ruby
str.gsub(/ | /,””)
“`

Google Calendar APIを使うときにサービスアカウントでカレンダーを作る方法

こんにちは。
Google Calendar APIを使うときにサービスアカウントをオーナーにしてカレンダーを作るといい感じだったので共有です。

# よくあるフロー
ネットでよく見るやり方は主にこんな流れかと思います。
ここではカレンダーの更新権限が必要なアプリを想定しています。

1. サービスアカウントを作成
2. 自分のアカウントでカレンダーを作成
3. 2で作ったカレンダーについて、1のサービスアカウントへ必要な権限付与
3. カレンダーのAPIを使ってイベントを自動登録

これで問題ない場合はOKなんですが、会社なんかだとGoogle Workspace(旧 G Suite)の全体設定などでカレンダーの編集権限は社内のユーザーアカウントのみに制限、みたいなセキュリティポリシーにしている時があって、そのときは上記のやり方だとうまくいきません。

かといって、アプリのためにポリシー変える?みたいな話になって困っちゃいますよね。

# もうひとつのフロー
ミソはサービスアカウントがオーナーのカレンダーを作ってしまうことです。

1. サービスアカウントを作成
2. サービスアカウ

戻り値を理解して使い分けるfindとfind_byとwhereと、時々、オトン

過去のコードレビュー時にActiveRecordでのデータ検索の記述でfind, find_by, whereの使い分けが適切ではなく指摘を受けることが何度かあり、今もたまに検索失敗時の戻り値ってどれがどれだっけと曖昧になることがあるため備忘録がてら概要をまとめました。

## 大まかな使い分けの判断基準
結論から先に書くと以下のような条件で用途が変わってくるかと思います。

### find
– 取得したいデータのidが特定されている
– 検索対象が特定できなかった場合に**例外を返したい**

### find_by
– id以外のプロパティでデータを取得したい
– 検索対象が特定できなかった場合に**nil(false)を返したい**

### where
– id以外のプロパティでかつ**複数のデータ**を取得したい

## findメソッドの概要
– 各モデルのidを検索キーとしてデータを取得するメソッド
– id以外の条件で検索不可
– 戻り値は検索対象のクラスのインスタンス
– 取得したいデータのidが特定されている場合に使用

“`ruby
# 単一のIDを指定
C

三項演算子で変数を定義する

## はじめに
三項演算子で変数を扱う機会があったので、記事にしました。
サンプルコードでは、admin権限の有無でメッセージ内容を変更させます。

## 三項演算子とは
三項演算子を使うことで、if文のコード量を減らすことができます。
“`rb:if文
if user.admin?
“Hello”
else
“Hi!”
end
“`

“`rb:三項演算子
user.admin? ? “Hello” : “Hi!”
“`
複雑すぎるif文は三項演算子に向いていません。かえって可読性が低くなります。

## 変数ver

一応、if文も記述しておきます。

“`rb
if user.admin?
message = “Hello”
else
message = “Hi!”
end
“`

最初に試した三項演算子。
“`rb
user.admin? ? message = “Hello” : message = “Hi!”
“`

変数の重複が気になるので以下のように修正しました。
“`rb
message = user.admin?

Railsのクラスメソッドについて考える

# 本題
– Railsで書いてるとクラスメソッドでいろいろやりがちにならない?と思ったので解決策を考える。

### ファーストクラスコレクション 
[良いコード、悪いコードで学ぶ設計入門](https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%8F%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2-%E5%A4%A7%E4%B9

【個人開発】プログラミング初学者がアイデア探しアプリを作りました

はじめに

![スクリーンショット 2022-08-26 3.24.31のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683200/54899e84-2ed3-a5ba-ca08-ff6cb97c5bb5.png)
こんにちは @yunoM と申します
プログラミング学習を始めて4ヶ月が経ち、
先月初めて個人開発したアプリ「myru」が完成したので記録します✏️
このアプリの概要や思いについて書きましたのでよければ最後までお付き合いください!

【Twitter】

【今回作ったアプリ】
https://polar-escarpment-12121.herokuapp.com/
【GitHub】
https://github.com/fynmrtsk1225/myru_app

アプリを作ったきっかけ

家にいる時間が長くなったことで「おうち時間」に注目が集まった近年
何をして過ごすか以外にも「どんな部屋で過ごすか」に

最新のrailsプロジェクトを動かすruby環境構築

久しぶりにrailsやります。
もともと、ruby2.7が入っているパターンが多いので、それのpath書き換えも含めて色々やる。

——————-
### railsプロジェクトの動作条件

| name | version | 備考 |
| — | — | — |
| Ruby Version | 3.1.2 | 最新バージョンを利用すること |
| Ruby On Rails | 6.1.6 | 7系のバージョンアップは未検証 |
| MYSQL | 8系以上 | 8系の機能を利用しているため、5系は利用不可 |

——————-
# 環境構築

“`
コンパイラおよび必要なツールをインストール
sudo apt update -y
sudo apt upgrade -y
sudo apt install build-essential -y
sudo apt install -y libssl-dev libreadline-dev zlib1g-dev
“`

# Rubyをインストール

“`
# r

eachでハッシュの値をグループ化して合計する方法

## 環境
Ruby 2.6
Ubuntu20.4

## はじめに
ハッシュの特定のキーに対して、同一値のグループで、値を合計する処理を行います。この表現だけでは、何のことかよく分からないかと思います。自分も上手く表現することができません。

エンジニア向けに、SQL文を使って、1言で表現すると次のようになります。
“`sql
Select Sum(金額) From HASH Group by コード
“`

ハッシュに対してGroup byのSQL文を発行して、結果を取得するようなことを行います。

## 条件
下記のハッシュを利用します。ハッシュは、キー(cd)で昇順にソートされていることが前提になります。
“`ary.rb
ary = [{:id=>1, :cd=>1, :kei=>100},
{:id=>2, :cd=>1, :kei=>110},
{:id=>3, :cd=>2, :kei=>120},
{:id=>4, :cd=>2, :kei=>130},
{:id=>5, :cd=>3, :kei=>14

Python,Ruby,PHP,Java,JavaScript,Perlの標準関数の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの標準関数の比較

# Python

https://qiita.com/hiroyuki_mrp/items/8bbd9ab6c16601e87a9c

# Ruby

https://qiita.com/sugamaan/items/d7871da28c0160b69609

# PHP

https://qiita.com/SRAUFactory/items/96ecd6d677c26a20b77a

# Java

https://qiita.com/p_shiki37/items/3902f4e3adc3aeb382f1

# JavaScript

https://qiita.com/uhyo/items/acd645744fa61c805097

# Perl

https://perlzemi.com/blog/

RailsアプリでSpotifyAPIのソーシャルログインを実装

# RailsでSpotifyAPIとOmmniAuthのソーシャルログインを実装

## 環境
* Ruby 3.0.3
* Rails 6.1.4

## 前提
`Authorization Code Flow`というエンドユーザーの情報を取得でき長時間実行アプリケーションに適しているものを利用します。
https://developer.spotify.com/documentation/general/guides/authorization/code-flow/

他にも2種類のトークンがあるので目的に合わせてトークンの発行をしてください。

Spotifyでのログインのみなのでdeviseだったりを使わずに実装します。

## 手順
### 1\. SpotifyAPIを利用するための準備
下記のリンクがSpotifyAPIを利用するときの設定等を行うサイトになります。
https://developer.spotify.com/dashboard/
[![Image from Gyazo](https://i.gyazo.com/7a5ac245300bc15826dc1

Railsの非同期いいねの方法

今回はRailsの非同期いいねの方法について紹介します。

参考記事
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/b583e5
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/6d1551

### 同期いいねの作成
参考記事では、postとuserの紐付けになっていますが、自分はrecruitmentとuserの紐付けになります。
最初にmodelを作成して、dbマイグレイトを行います。
“`ruby
rails g model Favorite user_id:integer recruitment_id:integer
rails db:migrate
“`
次にアソーシエーションの設定をします。

“`ruby
#models/user.rb

class User < ApplicationRecord #〜省略〜 has_many :favorites, dependent: :destroy end ``` ```ruby

【個人開発】「ロードバイク乗りのためのお店検索WEBアプリ」制作しました【Cycle Depot】

# 本記事の対象者
– 個人開発アプリ、オリジナルアプリ開発に興味がある方
– ロードバイクが趣味の方
– タイトルに興味を惹かれた方

# WEBアプリURL
https://cycledepot.herokuapp.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668589/7e0520e9-bcd0-f6e0-d481-a06cd54868fe.png)

# オリジナルアプリ概要
– 名称: Cycle Depot(「サイクルデポ」と読みます)
– 開発環境:
– Ruby3.0.1
– Rails6.0.5.1
– PostgreSQL1
– 説明:
ロードバイクに乗っていて気軽に入れるお店が中々見つからないなと感じたことはありませんか?
  ロードバイクは高価であるということに加えて、スタンドが付いておらず自立しないため駐輪場所に困ることが多いと思います。そんな時にサイクルラックを置いてくれているお

Rails6で通知機能を実装(ポリモーフィック)

Railsで通知機能を実装した際にポリモーフィックの存在を初めて知ったのとあまり記事がなかったので参考になればと思い書いていきます

理解が間違っているかもしれません。何かあればコメントお願いします。

また、下記の記事を参考にして実装を行いました。かなり重複する内容があります。この記事はそのままではできなかったところの修正と、実装で疑問に思ったことを書いてあります。考えながら実装したい方は下記の記事から見るといいかもしれません。

https://qiita.com/sazumy/items/479cb14cfea77c7429bd

## 今回作成するサンプル
![通知機能.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821961/af6b81a6-9079-2136-feb8-8bbb1d925f2f.gif)

今回通知用のページを作って実装しました
この記事ではviewは簡単な部分しか書いていません

## バージョン
rails 6.1
ruby 3.1.2

## 前提
下記ができ

Vultr VPSにCentOS9+Rails 7+MySQL8+nginxをインストールしてCapistrano3でデプロイ

# はじめに
CentOS Stream 9が出たのでRails 7環境を構築して既存アプリのRails、Rubyのバージョンアップと移行をやったので、手順を記録した。[CentOS8での記事](https://qiita.com/NYC-Blue/items/691e673862282df6ddbc)のCentOS9版です。

Vultrの一番安い10GB SSDプランだとCentOS9ではディスクが足りなくなるので25G以上をお勧めします。

激安VPSの[Vultr](https://www.vultr.com/?ref=8478497)で[紹介者からのリンク](https://www.vultr.com/?ref=8478497)経由でアカウント登録すると$100のクレジットをもらえるので、CentOS7, 8, MySQL 5.7, 8などの組み合わせをいろいろ試しました。このキャンペーンはいつ終わるか分からないので、興味のある方は以下のリンクからアカウント登録してください。あなたはクレジットをもらえるし、私にも多少のクレジットが入るらしいので、Win-Winです。

###