Ruby関連のことを調べてみた2021年08月16日

Ruby関連のことを調べてみた2021年08月16日
目次

~part4~【FC版】React + Rails API + axios + react-router-domでCRUDを実装する

こんにちは!スージです。
[こちら](https://qiita.com/suzy1031/items/ab1186dc3ae48be27e5a)の記事の続きです

### やりたい事

– `Userモデル`と`Postモデル`を1対多で関連付け
– ユーザーが登録した投稿を一覧画面に表示
– 新規登録した時に`user_id`を保存
– ログイン中のユーザーは自分が投稿したデータのみ`更新`・`削除`ができる

### 開発環境
Ruby 2.7.2
Rails 6.1.4
MySQL
node.js 16.6.2
React 17.0.2

### 参考
[Rails deviseで使えるようになるヘルパーメソッド一覧](https://qiita.com/tobita0000/items/866de191635e6d74e392)

### Rails側から実装開始

まず、postテーブルに外部キー`user_id`を追加します

“`terminal
backend $ rails g migration AddColumnsToPosts
“`

“`ruby
#

元記事を表示

【Ruby on Rails】Topに戻るボタンの作成方法

#対象者

* 画面にTopに移動するボタンを作成したい方

#目的

* 下にスクロールしてもすぐに画面の一番上に移動できるようにする

#実際の手順と実例
###1.画像の用意

まず画像を準備します。

何でも大丈夫ですが、下記のファイルを使用して頂いて大丈夫です。

![arrow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/ff3906c7-ea0e-e9df-3bcd-ecc9cd0f157e.png)

こちらの画像を
app/assets/imagesに格納します。

###2.Viewの設定

今回はすべてのページで表示したいので
application.html.erbへ記載します。

“`app/views/layout/application.html.erb

<%= yield %>


<%= image_tag asset_path('arrow.png

元記事を表示

Rubyを通してプログラミングの基礎を学ぶ

## コンピュータとは
そもそもコンピュータとは何なのでしょうか?コンピュータは電子回路を利用して計算を行う機械です。コンピュータ内の様々な情報処理は、大元に行きつけば電圧のon offの組み合わせや電流の流れで物理的に実行されています。イメージを持ってもらうためにショートカットキーの例で説明します。

ショートカットキーとは、キーボードのある二つのキーを同時に押したとき、特定の処理が実行される機能です。例えば「Ctrl」 と 「S」を同時に押すと「保存」行われます。Macの場合「Command」+「S」です。この命令は以下のような電気回路で表すことができます。

andkeisanki.JPG

この回路は、2つの入力の両方の電流がonのとき**のみ**出力側に電流を通過させるような回路です。それぞれの入力端子が直列に出力方向につながれているような構造になっていて、ANDゲートと呼ばれます。
「Ctrl」を押している信号と「S」を押している信号、両方の電気信号が回路に入って通過したとき**のみ**出力

元記事を表示

[個人開発]Discordの使用時間を計測するアプリ 「Discord-Log」を作りました

## はじめに
この度、Discordのボイスチャンネルの使用時間を自動で計測するアプリ**「Discord-Log」**をリリースしました。
このアプリは、[RUNTEQ](https://runteq.jp/)というプログラミングスクール内限定でリリースしているアプリになりますので、サービスリンクは載せていません。
ご了承ください。
####Discord-Log####
![top3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625435/51f53738-2397-aa95-258b-c02a3bb8aa11.png)

## このサービスを作った背景
結論からお伝えすると、私がDiscordの**ボイスチャンネルにいる時間=学習時間**であったため、簡単にその時間を計測できるサービスが欲しいなと感じたからです。
私自身、学習時間を計測する習慣はありませんでしたが、学習するときはDiscordを使うようにしていました。
そのため、**Discordのボイスチャンネルを使用した時間を計測できれ

元記事を表示

ActiveRecord(アクティブレコード)について

##ActiveRecordとは##
DBには様々な種類があり、MySQL、PostgreSQL、SQLite、SQL Server、Oracleなどが良く使われています。
DBによって記述のルールが違うため、それに伴って学習コストが高くなる可能性があります。
ActiveRecordを用いるとRuby言語でDBの操作が可能になり、SQL等よりも短いコードでDBを呼び出す(追加)ことが可能です。

##命名規則について##
ActiveRecordはクラス名に関する命名規約があります
例えば、クラス名がBookの場合、booksというテーブルで対応します。
Railsでは、開発者が名付けたモデルクラス名を複数形にしDBのテーブルを探してくれます。

##ActiveRecordメソッド##
Railsアプリ(blog_app)を作成

“`
rails new blog_app -d postgresql
“`
blog_appのDBを作成

“`
rails db:create
“`
blogsテーブルを作成

“`
rails db:migrate
“`

コンソールを

元記事を表示

【Ruby クイズ】スペルミスで SyntaxError が出るか?

Ruby についてのクイズです。
ある正しいプログラムの一箇所をスペルミスして SyntaxError が発生することはあるでしょうか。
ここで「スペルミス」とは,英単語の綴りの中のアルファベットを別のアルファベットに間違えること,とします。

なお,`eval` などの「文字列をスクリプトとして実行する」系のメソッドを使うと簡単に作れてしまうので,その手のメソッドは使わないという制約を設けます。

答えはスクロールで





































こんなコードで SyntaxError が起きます。

“`rb
def refined?(mod, hoge)
# 定義は省略
end

p defined?(String, :gsub)
“`

`refined?` は,あるモジュールのあるメソッドが refinements で置き換えられているかどうかを判定するメソッドのつもりです。そういうメソッドは原理的に可能ですが,中身は略します。

さて,最終行で

元記事を表示

RubyのFiberクラス

# 定義

 Fiber クラスは、他の言語で coroutine や semicoroutine と呼ばれる軽量スレッドであるファイバーを提供するクラスです。明示的に指定しない限りコンテキスが切り替わらないことや親子関係を持つなど、Thread クラスを提供するスレッドとは異なる挙動と持ちます。
 Fiber.new メソッドにブロックを渡すと、Fiber クラスのオブジェクトであるファイバーが生成されます。このファイバーはインスタンスメソッドである resume メソッドでコンテキストがファイバーに切り替わります。また Fiber.yield メソッドで親である呼び出し元へコンテキストが切り替わります。

# 事例

“`ruby:fiber_sample.rb
f = Fiber.new {
print “A ”
Fiber.yield “B ”
print “C ”
}

print “D ”
print f.resume
print “E ”
“`

# 結果

“`
[3] pry(main)> f = Fiber.new {
print “A ”

元記事を表示

Macbook AirにHomebrewをインストールしようとすると「/opt/homebrew/bin is not in your PATH」が発生した場合

#はじめに
初めてMacを購入して、rubyの開発環境を整えようとしている中で遭遇したエラーです。
自分の記事を書く練習として、記録に残します。
[progate:Rubyの開発環境を用意しよう!](https://prog-8.com/docs/ruby-env)

#結論
この方の記事で解決できました。
ありがとうございました。
[Homebrewインストール時に「/opt/homebrew/bin is not in your PATH」が発生した際の解決方法](https://chicog.me/articles/1/)

#内容
rubyの開発環境を整えようと思い、ターミナルで↓を実行すると、

“`
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`

まず、macにログインするときのパスワードを入力を求められるので、入力しました。
![スクリーンショット 2021-08-09 21.40.07.png](https:/

元記事を表示

RSpec内で実装しているAPIリクエストのヘッダーどうする

# RSpec内で実装しているAPIリクエストのヘッダーってどうする
– チーム開発でRSpecでリクエストスペックを書いていたときに人によってRSpec内で定義しているAPIリクエストのヘッダーの書き方がまちまちだったので、ちょっと調べてみた話
– 具体的にはJSONを受け取って、JSONを返すAPIのRSpecの話
– 人によっては `Content-Type: application/json`, `Accept: application/json` を両方つけたり、片方だけ、またはつけていないといったケースがあった

## そもそもRSpecで定義したリクエストでヘッダーつけるか
– 細かい話ですが、下記の理由からつけたほうが良さそうかと思います
– テストコードを書くからにはテストコードからある程度仕様を読み取れたほうが良い
– クライアントがどんな形式のデータを渡すことを期待しているかは仕様としてわかったほうが良い
– 実装を読めばどんなデータを受け取っているかはわかるものかもしれないですが、ヘッダーはクライアントとやりとりするデータ形式を記載する場所なのでそれに従

元記事を表示

更新するべきパッケージ一覧をCSVで出力(ruby, js)

メモ

## Ruby

“`bash=
$ bundle outdated –strict | sed -n “/^Gem /,\$p” | sed -e “s/ \+/,/g”
“`

出力例

“`
i18n-js,3.8.0,3.8.4,~> 3.8.0,default
js-routes,1.4.9,2.0.8,>= 0,default
json,2.3.1,2.5.1
jwt,2.2.2,2.2.3
“`

## JavaScript

jqを利用する

### package-lock.json

“`bash=
$ npm outdated –json | jq -r “to_entries | .[] | [.key, .value.current, .value.wanted, .value.latest] | @csv”
“`

出力例

“`
“i18next”,”19.8.7″,”19.9.2″,”20.4.0″
“jest”,”26.6.3″,”26.6.3″,”27.0.6″

“`

### yarn.lock

“`bas

元記事を表示

【就活】階層分析で最高の就職先を算出するアプリをつくりました【転職】

# はじめに
複数の就職先で悩んでいる就活生・転職希望者の方、たくさんいらっしゃると思います。
そうした方々に向けて、選択肢の中から最高の就職先を算出するアプリをつくりました。

後悔なく意思決定するための少しでも足しになればと。

**JobHunter’s Choice**(ジョブハンターズチョイス)
https://jobhunters-choice.com

# サービス概要
**AHP(階層分析法)**という分析法を用いて複数の就職先の選択肢の中からベストなものを算出する、という手法を採用しました。
## 階層分析とは
複数ある選択肢のうちから最良のものを選択するための意思決定法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/983512/55c1796e-0477-7922-ebb7-2c05e006dd38.png)

### 概要
例えばお部屋探しという目標に対して、**評価基準**(どの条件で選ぶか)と**代替案**(候補物件)があるとします。それらについて、

元記事を表示

満経過月数を計算するロジック(Ruby)

経過月数(満月)を計算するロジックについて解説します。(あまり記事がなかった)
具体的に言うと以下のようなロジック。

start:2021年01月15日
end:2021年02月14日
→経過月数0を返す

start:2021年01月15日
end:2021年02月15日
→経過月数1を返す

start:2021年01月15日
end:2022年03月15日
→経過月数14を返す

## コード

IN:開始日(start),終了日(end) :data型
OUT:満経過月数

“`ruby
def calculation_diff_months(start,end)
(end.year – start.year) * 12 + end.month – start.month – (end.day >= start.day ? 0 : 1)
end
“`

## コードの解説
■年の計算
(end.year – start.year) * 12
→ 年の差分を求めて月変換

■月の計算
end.month – start.month 
→ そのまま月の差分を求める
ここ

元記事を表示

has_one型のデータを表示させたくて

こんにちは!!
ユーザー登録が完了したら、ライブ情報を
投稿できるアプリを作成中です。
今回はhas_one型のデータの表示方法について
自分のメモ用としてアウトプットしていきたいです。

# アソシエーション

作成中のアプリには3つのエンティティが存在します。
deviseを使って実装したユーザー登録をするadmin_usersテーブル、
ユーザーの詳細なプロフィールを保存するadmin_profilesテーブル、
ライブ情報を投稿できるeventsテーブルが存在します。

3つのテーブルのアソシエーションは以下の通りです。
Admin_user has_one admin_profiles.
Admin_user has_many events.
Admin_profile belongs_to admin_user.
Event belongs_to admin_user.

ユーザー登録はウィザード形式で保存する為、
AdminProfileモデルに

“`rb
belongs_to :admin_user, optional: true
has_one_attached

元記事を表示

RubyでPayPayのAPIを呼んでみる

# 目的
PayPayのAPIをRubyで使いたいです。しかし公式のSDKはPython, Node, PHP, JavaしかないのでREST APIを叩くことにします。リファレンスは[こちら](https://www.paypay.ne.jp/opa/doc/jp/v1.0/webcashier)です。APIキーの取得などは[Developerサイト](https://developer.paypay.ne.jp/)で確認してください。

# プログラム
プログラムはNodeのSDKのコードを参考に作りました。リファレンスもかなり詳細に書いてあるので助かります。APIはQRコードの作成だけ実装してあります。

“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

gem ‘httpclient’
“`

“`ruby:paypay.rb
re

元記事を表示

【Ruby on Rails】Time.currentメソッドを使って簡単に時間表示をする方法

#対象者

* 時間の表示方法を知りたい方

#目的

* Time.currentメソッドを使って時間を表示する

#実際の手順と実例
###1.結論

**Time.current**メソッドを使えば簡単に時間が表示できます。
rails cで確認すると

““
$ rails c
Running via Spring preloader in process 6425
Loading development environment (Rails 5.2.6)
[1] pry(main)> Time.current
=> Sat, 14 Aug 2021 23:20:51 UTC +00:00
[2] pry(main)>
““

上記のように今日の時間が取得できます。

###2.応用編

“`
Time.current.all_month #今月
Time.current.all_week #今週
Time.current.all_day #今日
“`

#参照

>[時刻や日付を扱うメソッドの基本情報まとめ【Ruby】【Rails】](https:

元記事を表示

[Rails]redirect_toとrenderの違いについて

# はじめに
本記事では、redirectとrenderの違いについて記述しています。
私自身何気なく、コントローラーなどに記述しておりましたが、
改めて振り返りアウトプットしたいと思います。

# redirectとrenderの違い

“`
redirect_to

ルーティング

コントローラー

ビュー

“`

“`
render

ビュー
“`

随分あっさり書きましたが、このような違いです。

### redirect_to
redirect_toは新しくリクエストが送られてきた時と同じ流れになります。
そのため、同様に`ルーティング→コントローラー→ビュー`の流れになります。

### render
renderは、特にリクエストをされることがなく、そのまま直接ビューにいきます。

`redirect_toはコントローラーへ!` `renderはビューへ!`ということですね。

## 例え

“`ruby
class MessagesController < ApplicationController . . 省略 . . def creat

元記事を表示

◤画像アップロード◢ CarrierWaveとMiniMagickで画像アップロード機能を実装(具体例付き)

![スクリーンショット 2021-08-12 9.38.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89868/fc499218-4bbe-4499-62eb-4c0be00062c2.png)

# 0. はじめに

Railsで画像アップロードといえば`CarrierWave`と`MiniMagick`が鉄板ですね。
数年前、プログラミングスクールに通っていた際にはあまり理解していなかった画像アップロード機能。
超久々に触ったので備忘録として残します?

`ActiveStorage`という選択肢もありますが、あまり優位性がなさそうだったので採用を見送りました。
*参考: [ActiveStorage vs CarrierWave](https://qiita.com/w5966qzh/items/510d4c2a3829524b2e64)*

# 1. 作業環境

“`yaml
OS: macOS Big Sur 11.5.1
Ruby: 3.0.2
Rails: 6.1.4

元記事を表示

【小ネタ】Ruby で new するたびにクラスインスタンス変数をインクリメントして、インスタンス変数にぶち込む

“`Ruby
class BankAccount
@current_account_number = 0

class << self attr_reader :current_account_number end def self.new(name) super(name, @current_account_number += 1) end attr_accessor :name attr_reader :account_number def initialize(name, account_number) @account_number = account_number @name = name end end ```

元記事を表示

[シリーズ] Ruby Elasticsearch 7.x client の使用例

# はじめに

Ruby の Elasticsearch Client を使って Elasticsearch 7.14 で REST API の操作する.
また、比較のために、Kibana DevTool でのクエリも合せて記しておく.

調査状況に応じて都度更新する予定です

|コンテンツ|掲載時期|
|:–|:–|
|[[000] Ruby の elasticsearch client パッケージを使って Elasticsearch 7.14 を操作してみる … 検証環境構築編](https://qiita.com/robozushi10/items/8bd936fe6fbab080149e)|2021/08|
|[[001] クラスタ状態の取得 by Ruby elasticsearch 7.14](https://qiita.com/robozushi10/items/c8ae660cb6ae47317c59)|2021/08|
|[[004] マッピングの取得 by Ruby elasticsearch 7.14](https://qiita.com/robozush

元記事を表示

[030] ドキュメントを全件(11万件超)取得する by Ruby elasticsearch 7.14

|シリーズトップページ|
|:–|
|https://qiita.com/robozushi10/items/2c8b6951ee342b013974|

# 概要

Ruby の Elasticsearch Client を使って Elasticsearch 7.14 で REST API の操作する.
また、比較のために、Kibana DevTool でのクエリも合せて記しておく.

今回はインデックス「shakespeare」から「全件(11万件超)」を取得する.

# 検証環境

下記の要領で検証用データ「Shakespeare」が登録された
・Elasticsearch + Kibana (7.14)
を使用した

[[00] Ruby の elasticsearch client パッケージを使って Elasticsearch 7.14 を操作してみる … 検証環境構築編](https://qiita.com/robozushi10/items/8bd936fe6fbab080149e)

# 参考にした情報

|URL|
|:–|
|https://zen

元記事を表示

OTHERカテゴリの最新記事