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

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

Ruby で Translation API を叩く

# ゴール
以下を ruby から叩く。

https://cloud.google.com/translate

[500,000 文字 / 1 ヶ月までは無料](https://cloud.google.com/translate/pricing)なので、とりあえず Translation API Basic

# 事前準備
具体的には、[こちら](https://cloud.google.com/translate/docs/setup)
– GCPのプロジェクト(課金の有効化)を作って
– 翻訳APIを有効にして
– 認証JSONファイル(サービスアカウント経由で作成)を取得する

[Translation API Basic を叩いてみる](https://cloud.google.com/translate/docs/basic/translating-text)(BasicはV2、AdvancedはV3)

# Gem から API を叩く
– [ドキュメント](https://cloud.google.com/translate/docs/reference/libra

元記事を表示

MySQLの外部キー制約(ON DELETE)を指定しているならRailsのdependentは未指定でOK!

今までMySQLの外部キー制約(ON DELETE)とRailsのアソシエーションに設定する`dependent`は、同じ挙動のものを設定しておけばいいだろうと思って特に意識せずに設定していましたが、本当にそうなのか気になったので動作を検証してみました。

# 前提条件

## MySQLの外部キー制約

今回の検証では、外部キー制約のDELETE時の挙動を検証します。
検証するのは下記の3つです。

* RESTRICT
* CASCADE
* SET NULL

外部キー制約についての詳細はMySQLのドキュメントをご覧ください。

https://dev.mysql.com/doc/refman/5.6/ja/create-table-foreign-keys.html

## dependent

dependentはhas_one/has_many/belongs_toに設定できますが、今回の検証ではhas_manyを使います。

検証するのはMySQLの外部キー制約に対応する下記の3つです。
restrict_with_errorはrestrict_with_excepti

元記事を表示

Rails6でScaffoldがエラーになる

### 環境
Rails 6.1.5
テンプレート:slim-rails 3.4.0

### viewのテンプレートをSlimにしている場合Scaffoldでエラーになる

いざScaffoldしようと思って
“`sh:
$ rails g scaffold hoge a:string b:integer
“`

とすると、modelとcontrollerは作成されるが、
“`sh:
in `model_resource_name’: wrong number of arguments (given 1, expected 0) (ArgumentError)

in `template’
“`
変なエラーが出てviewが作成されない。

# 色々調べてたどり着いたのがこちら
[Rails scaffold views throws wrong number of arguments error](https://stackoverflow.com/questions/71735314/rails-scaffold-views-throws-wrong-number-of-

元記事を表示

【Ruby on Rails】railsでスタディープラスっぽいもの作ろうとしてみた(グラフ表示)

# はじめに
自分のスキルアップのために人気アプリ、スタディープラスのトレースをしていてその過程でちょっと悩んだところがあったので備忘録として記事として残します。もし、もっとスマートな書き方があったらご教示ください。

# 実装
実装に際して前提として①基本となる投稿機能(Tweetモデル) ②deviseを用いたユーザー機能 の2つが実装されているという前提で作成を進めていきます。
また、tweetsテーブルにstrig型でtagという名前のカラムを事前に追加しておくようにお願いします。

## カテゴリの選択と追加
### 1.モデルの作成とアソシエーション
勉強した科目などのカテゴリを追加・保存するためのテーブル(tagsテーブル)の作成を行います。
コマンドプロンプトで以下のコマンドを実行してください
“`
rails g model Tag name:string
“`

“`
rails db:migrate
“`

また、アソシエーションの設定もしておきましょう!

“`ruby:tweet.rb
has_many :tags
“`

“`ruby:

元記事を表示

SOLID原則を具体例で説明

# SOLID原則

## S (Single Responsibility) 単一責任の原則

管理者とユーザーの処理を一緒に書いてはいけないという原則です。なぜなら、

・管理者に関するコードだけをいじっているのに、一般ユーザーの機能に影響が出る可能性があると、確認すべき範囲が広がってしまうから。
・管理者、一般ユーザーのコードがごちゃ混ぜになりコードが読みにくくなるから。

「管理者はここ、一般ユーザーはあっち」とすることで機能追加や運用、デバックがしやすくなります。

## O (Open-Closed) オープン・クローズドの原則

何か機能を追加するとき、既存のコードを変更するのではなく新しく追加するのが好ましいという原則です。なぜなら、既存のコードの変更は既存の機能のバグを作ってしまう可能性があるから。

例えば,createDrinkメソッドがあります。1種類のフルーツから飲み物を作ります。

“`ruby
def createDrink(fruit)
~
end
“`
ここで、2種類のフルーツから飲み物を作りたくなった場合。
悪い例。既存のコード

元記事を表示

Rails(API mode) で、passwordを持ったUserの作成

## 手順
“`sh
rails new pwsample -d postgresql –api
cd pwsampple
rails db:create
“`

`./Gemfile`のbcryptが含まれる行のコメントを外す。
“`
gem “bcrypt”, “~> 3.1.7”
“`

Userモデルとコントローラーを作成。
passwordは、`password_digest`というカラム名にする。
“`sh
rails generate model user name:string email:string password_digest:string
rails generate controller users
rails db:migrate
“`

`./config/routes.rb`に`resources :users`を追加
“`ruby:./config/routes.rb
Rails.application.routes.draw do
resources :users
end
“`

`.pwsample/app/models/u

元記事を表示

destroy action実行時にcouldn’t Item find with ‘id’=1のエラー表示

# はじめに
 実装中のフリマアプリにて、「ログイン状態の場合にのみ、自身が出品した商品情報を削除できること」という実装条件に合わせて記述したのち、商品詳細ページから削除ボタンをクリックすると、下記のエラーが発生しました。
結論、エラー内容とは関係なく、destroyアクション処理後の挙動を記述していないことが原因のようでした。
![スクリーンショット 2022-05-05 18.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655610/573f5dda-8eaf-f86c-a72c-578109c6f946.png)
 上記エラー文を確認すると、 「ItemsControllerに記載しているdestoroy actionを実行したがid1が見当たらない」といった指摘がされているようでした。

# 仮説・検証

### 仮説1
 エラー文の通り、idが受け渡されていない事が原因でエラーが発生しているのではという仮説のうえ、MVCの流れに沿って下記の検証作業を行いました。

### 検証

元記事を表示

可変長配列に要素を追加する処理の色々

# これは何?

go の slice や C++ の std::vector のようなものに要素を追加する場合に世の人々がどうするのかを調べた。

# そもそも

いわゆる可変長配列というものの代表的な実装は

* 適当にメモリ確保して、そこに要素を格納する
* 確保した容量に入らなくなったら、別の場所にメモリを確保して、そこに全部移動してから新要素を追加する

というものになっている。
この「別の場所にメモリを確保」の際にどうするのかが悩みどころ。
必要サイズぴったりにメモリ確保すると「1個追加」を1000回行った場合に絶望的に遅くなる。
多めに確保したいところだけど、多すぎるのはやっぱり損。

みんなどうしているのかなと思って調べてみた。

# 各実装

## go の slice

https://github.com/golang/go/blob/go1.18.1/src/runtime/slice.go#L193
辺りに実装がある。

1. 旧キャパシティが 256未満なら、新キャパシティは旧キャパシティの倍。
1. 旧キャパシティが 256以上なら、新キャパシティは旧キャ

元記事を表示

日銀が公開する短期プライムレートをCSV出力してグラフ化してみた

## 背景
最近マンションを購入した。住宅ローンを検討しているのだが、結局変動金利がいいのか、フラット35のような固定金利がよいのか非常に迷っている。[FRBも利上げを決めた](https://www.nikkei.com/article/DGXZQOGN033UA0T00C22A5000000/)のような記事もあり、今後の金利はあがりそうな雰囲気も感じつつとりあえず過去の金利がどのように推移したのかを確認したくなった

一般に(?)、住宅ローンにおける変動金利は短期プライムレートに連動すると言われているため[短期プライムレート](https://www.boj.or.jp/statistics/dl/loan/prime/prime.htm/)を確認したが、見た瞬間「グラフにしてくれよ」と思ってしまったので軽くHTMLパースするスクリプトを書いた

参考: [住宅ローンの金利を左右する「短期プライムレート」とは?](https://finance.recruit.co.jp/article/k083/)

## 成果物
https://github.com/shoutm/conver

元記事を表示

【ポートフォリオ開発】RubyとRailsのバージョン選定で参考にした情報

本稿では、ポートフォリオの作成で使うRubyとRailsのバージョン選びの時に参考にした情報を紹介します。

## Ruby

### リリース情報
– [Ruby公式ページ_ダウンロード](https://www.ruby-lang.org/ja/downloads/)

### バージョニングルール
– [Ruby 2.1.0 以降のセマンティックバージョニングについて](https://www.ruby-lang.org/ja/news/2013/12/21/ruby-version-policy-changes-with-2-1-0/)

## Ruby on Rails

### リリース情報
– [Rails公式ページ](https://rubyonrails.org/)
– [RubyGems railsの全バージョン履歴](https://rubygems.org/gems/rails/versions)
– [rails公式レポジトリ](https://github.com/rails/rails/releases/)

### バージョニングルール
– [Ruby

元記事を表示

rubyのアップデート②

今回も頑張っていきましょう。

今回こそは最新バージョンに。(そのために色々準備したんだから。。。)

1、バージョン確認
“`ruby:qiita.rb
rbenv versions

2.6.5 (set by /Users/teraihiroki/.rbenv/version)
“`

今日(2022/05)の時点最新バージョンが3.1.2なので

“`ruby:qiita.rb
rbenv install 3.1.2
“`

“`ruby:qiita.rb
Installed ruby-3.1.2
“`

!!!やりました。意外とあっけない。

最後にインストールした最新バージョンに変更します。

“`ruby:qiita.rb
rbenv global 3.1.2
“`

変更されたか確認します
“`ruby:qiita.rb
ruby -v

ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]
“`

これでようやく開発に向けて準備完了。かなと思います。

お疲れ様でした。ま

元記事を表示

rubyのアップデート

本日も頑張っていきましょう。

まずは前回の大きな失敗から反省。元々学校に通っていた時はmacを使っていたのに、調子に乗って前回はWindowsでやってしまったことが原因でした。
(開発ツールの環境が全然違うようで、、、macと同じやり方ではできない)

と言うことで今回から改めてmacで開始します。

1、homebrewのアップデート
  
  コマンドは
“`ryby:qiita.rb 
brew update
“`

  homebrewとは??(これがWindowsで使えない)
  
パッケージ管理システムのことで、色んなシステムを全てここで管理できるもの。使用するシステムごとに公式サイトから実行するのはかなり面倒ですし、関連性も重要なので一挙にできるシステムは非常に便利です。
  これがhomebrewと言うシステムで可能になるので、必ずこれを使用して開発を進めていきたいと思います。
  ※詳しくはキータの他の記事に詳しくあるので調べてください。

2、update中のエラー
  
  早速1でエラーが出ました。
“`ruby;qiita.rb
Erro

元記事を表示

【Rails/MySQL】RailsでMySQLを使う方法

## はじめに
Railsではデフォルトのデータベースにsqlite3を使用しています。
今回はRailsアプリケーションのデータベースでMySQLを使用する方法を紹介します。

なお、本稿はRailsの環境構築を終えた段階からの手順になるため、まだの方は以下の記事を参考にしてください。

https://qiita.com/kazunoko1606/items/334ae634af8b30e84db6

## 環境
– macOS Monterey:12.3.1
– Ruby:3.1.0
– Bundler:2.3.12
– Ruby on Rails:6.1.5
– MySQL:8.0.28

## 手順

以下の手順で進めていきます。
1. MySQLのインストールとセキュリティ設定
1. MySQLのユーザー作成
1. Railsアプリケーションの作成
1. dotenv-railsの導入
1. データベースの作成

### 1.MySQLのインストールとセキュリティ設定
まず初めに、MySQLのインストールとセキュリティの設定を行います。

https://qiita.com

元記事を表示

RubyでSPAを構築してみました

# はじめに
[RubyのWebAssemblyビルド](https://github.com/ruby/ruby.wasm)を使ってSPA(single page application)を構築するためのパッケージ”[Bormaŝino](https://github.com/keyasuda/bormashino)”を開発し、[TodoMVC](https://todomvc.com/)を[移植してみました](https://github.com/keyasuda/bormashino-todomvc)。
本記事ではパッケージの紹介及び移植されたコードを解説します。

# デモ
– TodoMVC 移植版 https://bormashino-todomvc.vercel.app/
– テンプレートアプリケーション https://bormashino-app-template.vercel.app/

# パッケージ”Bormaŝino”について
## コンセプト
> 伝統的な「フォームを表示し」「POSTされる内容でデータストアを更新し」「データストアに保持されている内容を元

元記事を表示

Ruby on Railsをgit cloneする

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。
## git cloneとは
そもそも[git clone]とは?
#### 『Gitに存在するリモートのリポジトリをローカルの環境にコピーする』
学習し初めの頃はなかなか[git clone]をすることがなかったですがAWSで自分のアカウントを作成して環境の構築する際に始めて出てきました。
## git cloneの流れ①〜⑥
##### ① GIt hubを開きローカルにコピーしたいリポジトリを選択しリポジトリの画面へ
##### ② 緑色の[Code]のボタンを押し「git@github.com:[ユーザー名]/[リポジトリ名].git」のSHH keyをコピーする。
##### ③ ローカルの環境を開き以下のコマンドを入力
“`
ec2-user:~/environment $ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
“`
##### ④ 以下のコマンドでローカ

元記事を表示

RubyエンジニアだけどRuby Silver の対策練習問題を解いてみたい

# 問題

http://www.minituku.net/drills/775230600.html

>以下の選択肢のうち、エラーにならずに正常に実行が完了するコードを1つ選択してください。

“`rb
(a) 1..10.to_s
“`

1から10の範囲を文字列にしている。to_sでエラーが起こるのはnilぐらいで、あとは何でも文字列にできそうな気がするが。
やや安直な気もするけどこれを回答として選んだ。

“`rb
(b) 10.*(0xFace)
“`

数字の10に掛け算をして、なにかバイト列のようなものを渡してる。
いかにもエラーが起こりそうな気がするけど、これ何?

“`rb
(c) 10.+(“10”)
“`

数字の10にメソッドチェーンして + メソッドを実行し、引数に文字列を渡している。いかにもエラーが起きそうだが。

ところでRubyでは数値もオブジェクトであり、 + もメソッドとして実行できそうな気もするけれど。

“`rb
(d) Time.now.strftime(1999, 12, 11)
“`

現在時刻に対して

元記事を表示

KeyError: Factory not registered:の解決方法

# この記事で伝えたいこと

`KeyError: Factory not registered: …`というFactoryBotのエラーが出てこの記事にたどり着いた方へ。
あなたが作っているアプリはRailsアプリではありませんか?
もしそうなら、Gemfileに以下のように書いていませんか?

“`ruby:Gemfile
# これは間違い!
gem ‘factory_bot’
“`

Railsアプリの場合、以下のように **factory_bot_rails** を使うようにすることで `KeyError: Factory not registered` が起こらなくなると思いますので、お試しください。

“`diff_ruby:Gemfile
– gem ‘factory_bot’
+ gem ‘factory_bot_rails’
“`

# もっとくわしく

## この記事を書いた経緯

RailsにFactoryBotを入れる場合、本来は **factory_bot_rails** を使うべきですが、**factory_bot** を使ってしまったことで `

元記事を表示

RVMをシェルスクリプト内で利用する場合の注意

# シェルスクリプト上ではRVMはそのままでは実行できない

“`sh
#!/usr/bin/env bash

set -eu

rvm use 2.7.2
“`

デプロイを自動化しようとして例えばこのようなことをすると、次のようなエラーが起こり、実際にrubyのバージョンが指定できない。

“`
RVM is not a function, selecting rubies with ‘rvm use …’ will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash –login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.
“`

RVMはバイナリそのもの(`/usr/local/rvm/bin/rvm`など)ではなく、同名のs

元記事を表示

Ruby初心者がGitHub上でよくやりがちな誤爆メンションとその解決策

## はじめに:誤爆メンションって何?
Rubyでは`@`で始まる変数がインスタンス変数になります。
これはRuby on Railsなどでも当然同じルールです。

“`ruby
# @で始まる変数はインスタンス変数
@foo = 1

# 何も付かない変数はローカル変数
foo = 1
“`

一方、TwitterやGitHub、そしてこのQiitaなど、昨今のSNSでは`@`がユーザーへのメンションとしても使われています。
たとえば、以下の画像に見える`@jnchito`は、jnchitoというTwitterユーザーに対するメンションです。

![Screen Shot 2022-05-04 at 15.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/bff65b1b-67bb-c4f4-4427-2e349e2b1428.png)

この2点はわざわざ僕が説明しなくても「そんなこたぁ前からわかっとるわい!」と思われそうな話なのですが、TwitterやGitHubで何も考え

元記事を表示

ユーザーごとの学習時間の合計

# はじめに
この記事は筆者がスタディープラスのトレースをする際に、ユーザーの学習時間のランキングを表示するために書いたコードの備忘録になります。
# 実装
deviseの導入と基本となる投稿機能(記事内ではtweets)が完成している前提で進めます。

“`ruby:users_controller
#以下を追記
def index
user = User.all
@arr = []
user.each do |t|
t.sum_time = t.tweets.sum(:time)
@arr.push(t)
end
end
“`
pushメソッドは配列(@arr)の末尾に要素を一つ追加してくれるメソッドです

“`ruby:app/views/users/index.html.erb

Users#index

<% @arr.each do |u| %>
<%= u.email %>
<%= u.sum_time %>

元記事を表示

OTHERカテゴリの最新記事