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

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

[Rails7][Heroku] Active Storage や ActionText で画像が表示されない問題を解決する

# はじめに
`Rails7` で構築したアプリケーションを `Heroku` にデプロイしたが画像が表示されない問題を解決していきます。
`Active Storage`を使用していることを前提としています。
以下、確認・修正すべきことを書いていきます。

# 画像をアップロードしておくストレージの設定
開発環境ではローカルストレージに保存されますが、
本番環境(今回の記事では`Heroku`)では画像を保存するストレージを設定する必要があります。
これは、ググればたくさん情報が出てきます。
`AWS`の`S3`を使用する構成が簡単でしょう。
本記事では`AWS`の`S3`を使用していきます。

https://qiita.com/hmmrjn/items/479c9e9ce82771f1b6d7

# `AWS`の`S3`のバケットに`CORS`の設定を追加
`AMAZON S3` > `バケット` > `sample buket name`
↑ご自身で設定したバケットを開いてください。

「アクセス許可」というタブを選択してください。
![スクリーンショット 2023-01-2

元記事を表示

Ubuntu に Ruby をインストールする(個人メモ)

自作ツール動作環境作成の解説のために、Rubyの動作環境の作成手順が必要なので、個別で作成しました。

# 事前の環境作成

LXD環境で行うことを想定しています。

## コンテナの作成
~~~
LXCNAME=rb01
lxc launch ubuntu:22.04 $LXCNAME
lxc exec $LXCNAME — sh -c “apt update && apt full-upgrade -y && apt autoremove -y”
lxc exec $LXCNAME — sh -c “reboot”
~~~

## 前準備

rootユーザーでログイン。
~~~
lxc exec rb01 — /bin/bash
~~~

Ruby のビルドに必要なパッケージを apt 経由でインストールします。
~~~
apt install build-essential
apt install libssl-dev libreadline-dev zlib1g-dev
apt install libpq-dev
~~~

# Rubyをインストール

rbenv

元記事を表示

【競プロ/AtCoder】Rubyで茶コーダーになるためのロードマップ

このロードマップ/学習記録は[ProadMaps](https://proadmaps.com/1506616851853242371/roadmaps/40)で作成しました。

ロードマップの作成、共有から、作成したロードマップをマークダウンで出力ができるので、Qiita等の外部サイトや、個人ブログへの転記にも便利です。

https://proadmaps.com/1506616851853242371/roadmaps/65

ProadMapsのサービス紹介、作成までの学習記録は別途記事を作成したので、チェックいただけると大変ありがたいです!

https://qiita.com/niboshi_uyudane/items/fa4ec11b13002f0cd3c5

# 【競プロ/AtCoder】Rubyで茶コーダーになるまでにやったこと

**概要**

まだまだ成績のブレはありますが、なんとか茶色コーダーまでなりました…!Rubyの学習を始めて約10ヶ月ほどかかり、その間にRailsの勉強等もしていますが、競プロの役にたっていそうなものは、出来るだけ乗っけるようにしてみ

元記事を表示

データの入れ替え・退避変数・多重代入

# これは何?

https://qiita.com/nodai2h_ITC/items/6c7b7ad029adf17da5f0#%E9%80%80%E9%81%BF%E5%A4%89%E6%95%B0%E3%81%AF%E5%BF%85%E8%A6%81%E3%81%98%E3%82%83%E3%81%AA%E3%81%84

で退避変数が必要だと教科書に書いてあるとか、そのあたりが面白かったので調べた。

# 多重代入での入れ替え

Python, Go, Ruby なんかは多重代入がある。

配列の要素を入れ替えるのであれば

“`python:python,go,ruby
a[i], a[j] = a[j], a[i]
“`

のように書ける。

引用元の記事では

> もちろん、パフォーマンスを考えると多重代入より退避変数を使ったほうがいいでしょう。

となっているが、手元で試したところ、ruby 以外は速度差を観測できなかった。

ruby は多重代入のほうがはっきりと遅かった。さすが。

多重代入で書いたほうが速いケースもありそうだと思っているが、そういうパターンは

元記事を表示

【忘備録】期間内に特定のカラムが複数回登録されているレコードを抽出する(SQL、Rails、Pandas)

簡単だろうと勝手にたかを括っていたら時間が掛かってしまったため、
忘備録としてメモ。

Booksテーブルから次の条件を満たしたレコードを抽出するSQL文を作成する。

・2022年中に3回以上同じcategoryが登録されているbookレコード

(Booksテーブル)

存在するカラム:category,tag1,tag2,created_at,updated_at

created_atが2022年内なら登録されているとする。

## SQL

“`sql:books.sql
SELECT *
FROM books
WHERE category in (
SELECT category
FROM books
WHERE created_at BETWEEN ‘2022-01-01 00:00:00’ AND ‘2022-12-31 23:59:59’
GROUP by category
HAVING count(category) >= 3
);

“`

## Rails
目的は達成したが、気になったのでついでに考えてみる。

“`ruby:books.rb
categ

元記事を表示

Classについて演習問題回答

演習問題回答

演習問題

– 魚(fish)クラスで「マグロは500円です」出力してください

“`ruby:paiza.io
class Fish

def initialize(name, price)
# インスタンス変数には@をつける
@name = name
@price = price
end

def description_of_item
“#{@name}は#{@price}です”
end

end

fish_1 = Fish.new(“マグロ”, “500円”)
puts fish_1.description_of_item
“`

演習問題2

– たい焼きクラスを作成して、attr_accessorを使って200円のカスタード味と300円のあんこ味のを作ってみましょう。

“`ruby:paiza.io

class Taiyaki
attr_accessor :name, :price

def initialize(na

元記事を表示

【Rails】【collection_check_boxes】checked: を使って初期表示をさせる方法

## はじめに
タグ付け機能を実装するためにcollection_check_boxes を使いました。
その際にユーザーがすでにチェックをつけていた場合にはチェックをつけて表示させたかったのですが、その実現に苦労したため、アウトプットも兼ねて記事にしました。
初学者の為、至らない点もあるとは思いますが温かい目で読んでいただけると嬉しいです!

## collection_check_boxes とは?
モデルからチェックボックスを自動生成してくれます。
基本的な使い方については[こちら](https://pote-chil.com/rails_collection_check_boxes/)の記事が分かりやすかったです。

## やりたかったこと
![6670258a385aaca763bd962dc7a73f0d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1374322/79da06bc-4367-f753-a3c3-399418ceebfd.png)

投稿(Episode)を見た閲覧者(Us

元記事を表示

【Ruby】catch/throwについて

catch/throwについて、あまり触れることがないので簡単な使い方をまとめておきます。

# catch/throwとは
ループ処理の時に深くネスとした場合の大脱出の手段。
throwにシンボルまたは文字列のオブジェクトを指定します。
指定したオブジェクトをcatchで指定するのが基本の形になります。

“`ruby
catch :sample_loop do
throw :sample_loop
end
“`
throwを指定すると、ブロックが中断します。
ループ処理が繰り返さずに結果が出力されてるのがわかります。

“`ruby
catch :sample_loop do
loop do
p “a”

loop do
p “b”

loop do
p “c”

throw :sample_loop
end
end
end
end

# => “a” “b” “c”が表示される
“`

途中で`throw`を定義するとブロックが中断し

元記事を表示

ChatGPTにソースコードのリファクタリングをお願いしたら想像以上にレベルが高くて感動した話

最近巷ではChatGPTが話題になっていますね。

どれだけすごいの?と気になったので試しにプログラムのリファクタリングをお願いしてみました!

最初に感想を述べてしまうと、もはや中にベテランエンジニアが入ってるんじゃね!?と思うほどレベルが高く良くできていると感じました。

※ 記事中は英語での会話になっていますが日本語でも可能でした

### ChatGPTとの会話

とりあえず最初のやり取りはこんな感じでリファクタリングをお願いしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309621/355aa32d-8656-5996-c59e-6029c1046da7.png)

自分のシンプルなメッセージに対してすごい熱量で前向きに返信してくれます。この時点ですでに感動。そのまま翻訳を適用すると以下の日本語になります。

> ソース コードのリファクタリングをお手伝いできれば幸いです。コードの機能と、具体的にどのような変更を加えたいかについて、さらに詳しい情報を提供してい

元記事を表示

【随時更新】Railsでの開発時に入れたいgem集

## これはなに
Railsでの開発が捗るよっていうgemをまとめたものです。

みなさんのおすすめのgemがあれば教えていただけると嬉しいです!!

___

#### デバッグ
– [better_erros](https://github.com/BetterErrors/better_errors#installation)
– [binding_of_caller](https://github.com/banister/binding_of_caller)
– [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug#installation)

#### テスト
– [rspec-rails](https://github.com/rspec/rspec-rails#installation)
– [factory_bot_rails](https://github.com/thoughtbot/factory_bot_rails)
– [faker](https://github.com/faker-ruby

元記事を表示

Rails7でdata: { turbo_method: :delete }が効かなかったときの解決法

初歩的な内容かもしれませんが、備忘録として残しておきます。

前提として以下のgemがインストールされていること。
“`
gem “importmap-rails”

gem “turbo-rails”

gem “stimulus-rails”
“`

インストールが済んでいたら
“`
$ rails importmap:install
“`
“`
$ rails turbo:install stimulus:install
“`

以上のコマンドを実行することで無事deleteメソッドが使用できるようになりました。

その際以下のファイルは初期化されるので既に存在&記述してある場合は注意が必要です。
app/javascript/application.js
config/importmap.rb

元記事を表示

fit data and plot

fit data and plot

cc by Shigeto R. Nishitani, 2023

簡単な最小二乗法によるfittingでも計算誤差が出てしまうという例です.0からだいぶ離れたところで,微妙なエネルギー差をfittingしようとして出てきました.

結論はSVD(single value decomposition)を使えというNumRecipeの教えを再確認...やれやれ.

# 初期の結果

– include NumericCalcs
– fit
– plot

## Ruby module for Numerical calculations

“`ruby
require “matrix”
require “rbplotly”

module NumericCalcs
include Math

def fitting(x, d_y, dim = 3)
y = d_y

# make design matrix
n, m = x.size, dim

av =

元記事を表示

【プログラミングに役立つ数学】ド・モルガンの法則を使って条件分岐の可読性をあげよう

### はじめに

プログラムを書く上で可読性は非常に重要です。

「リーダブルコード」が多くのエンジニアに支持されているように、他者と開発する上では「いかに理解しやすいコードを書くか」が求められています。

そこで、プログラミングの基本である条件分岐について高校数学で学習する「ド・モルガンの法則」を使った可読性を向上させるテクニックを紹介します。

可読性の高いプログラムを書きたい方はもちろん、「大人になってから数学なんて役に立たない」と思っている方にもぜひ一読いただけたら幸いです。

### ド・モルガンの法則とは

本題に入る前にド・モルガンの法則を初めて聞く人や忘れてしまった人のために簡単におさらいします。

ド・モルガンの法則とは、2つの集合A,Bに対して以下が成り立つことを言います。イギリスの数学者オーガスタス・ド・モルガンさんが発案したことからその名が付けられています。

“`math
\overline{A \cup B} = \overline{A} \cap \overline{B}
“`

“`math
\overline{A \cap B} = \over

元記事を表示

【Ruby】オブジェクトが空か確認する方法

メソッド 説明
nil? 変数の値がnilまたは値なしの場合に真
empty? 変数の値が空文字や値が空白の場合に真
blank?

【Ruby1.8以前から】Rubyの処理系とJIT【Ruby3.2のYJITまで】

# はじめに

Ruby3.2 で YJIT がついに実用段階になりました!

https://www.ruby-lang.org/ja/news/2022/12/25/ruby-3-2-0-released/

なので YJIT について理解するために、JIT 導入前の Ruby、MJIT、そして YJIT についてそれぞれどんな特徴があるのか簡単に調べてみました。

# Rubyの処理系

最初に Ruby の処理系についてです。**処理系**、特に **言語処理系** と呼ばれるものは、何らかのプログラミング言語を処理して実行可能にするためのソフトウェアです。Rubyの代表的な処理系は **MRI** (Matz’s Ruby Interpreter) です。C言語で書かれた Ruby なので **CRuby** とも呼ばれます。

MRI 以外にも Ruby 処理系はたくさんあります。Ruby Association の以下のページに様々な処理系が紹介されています。

https://www.ruby.or.jp/ja/tech/install/ruby/implementat

ChatGPTに適当に指示してRubyプログラムを書いてもらう

## はじめに

[ChatGPT](https://openai.com/blog/chatgpt/)というAIチャットが昨年暮れから話題ですね。
なにか質問すると、まるで人間のように的確な受け答えをしてくれる有能なAIです。

最近だとGoogle社内で、ChatGPTの台頭にCodeRedを宣言したという記事も出てましたね。

記事: [ChatGPTのリリースでGoogleは「コードレッド」を宣言、AIチャットボットが検索ビジネスにもたらす脅威に対応するためにチームを再割り当て](https://gigazine.net/news/20221223-google-code-red-against-chatgpt/)

一方でChatGPTはプログラムコードも書けるということなので、適当に指示を出してどのていど良い感じのコードを書いてくれるのか、Rubyで試してみました。

## 手始めに簡単なプログラムを
とりあえず簡単なプログラムを書いてみてもらいました。

![スクリーンショット 2023-01-19 10.16.28.png](https://qiita-image-st

【Ruby】Safe Navigation Operator &.

## Safe Navigation Operator &.

`&.`という演算子を使用してメソッドを呼び出すと、レシーバーがnilだった場合でもエラーが発生しなくなります。

“`ruby
class Hoge
def hoge
“hoge”
end
end
“`

“`ruby
> hoge = Hoge.new
=> #
> hoge.hoge
=> “hoge”

> fuga = nil
=> nil
> fuga.hoge
NoMethodError (undefined method ‘hoge’ for nil:NilClass)

irb(main):010:0> fuga&.hoge
=> nil
“`

## if文や条件分岐の書き換え

– if

“`ruby
hoge = if fuga
fuga.hoge
else
nil
end

=> nil
“`

– 三項演算子

“`ruby
hoge = fuga ? fuga.hoge : nil

=> nil
`

RubyonRailsにスクレイピング機能を持たせてみる。

## はじめに
今回は連載企画第2回目ということで、スクレイピングについて書いていこうと思います。
### これまでに書いた記事はこちら
– [【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)
– [Ruby on RailsのアプリにLINEを組み込む。](https://qiita.com/prg_mt/items/b3238ebfae1a3df67cab)

## gemの導入
まずはじめに、gemを導入します。
以下の記述をgemfileに追加してください。
また、seleniumはRSpecで通常使用するものになりますので、`group :test do ~ end`のブロックの中にすでに記載がある場合はブロック外に記載を移すようにしてください。

“`ruby:Gemfile
# selenium
gem ‘selenium-webdriver’
“`

上記を記載しましたら`bundle install`を実行してください。

## ChromeDr

【AWS】自動デプロイ後にアクセスしたら502 Bad Gateway

## 結論
deploy.rbに記載ミスがあった。
なんとこれだけです。

## 経緯
AWSへのデプロイに初挑戦。
手動でのデプロイ時点では上手く行っていたのに自動デプロイを試みると502 Bad Gatewayとエラー。
なんじゃこりゃ、、、?

## 502 Bad Gateway とは
とりあえずググってみた。

“`
502 Bad Gatewayとは、ウェブサイトのサーバーの通信状態に問題があることを示すエラーメッセージです。
以下のようなエラー画像が表示されます。
“`
参考:https://blog.hubspot.jp/502-bad-gateway

通信状態? 
AWS側の不具合やらこっちのWifiが原因ってことかな?
、、、ってそんなわけあるかーーー!

## 原因
以下の記事を参考に原因究明。
https://qiita.com/kana_web/items/638a5d605870558879a4

こちらの記事から、ファイルとディレクトリの位置関係を洗い出すことに。

### currentディレクトリに移動できるか確認してみる
“` :ターミ

[Ruby]利益計算アプリケーション

# 問題
以下の仕様を満たすアプリケーションを作成してください。また、必ず注意書きを読んでから作成に取り掛かってください。

# 仕様
プログラムを実行すると、以下の3つの選択肢が表示され、直後にユーザーに対して値の入力を求めること。
[1] : 商品を登録する
[2] : 商品の一覧を確認する
[3] : アプリを終了する
[1]を選択した場合は、商品名、販売価格、仕入れ値を入力させ、保存する。
[2]を選択した場合は、保存された全ての商品情報(商品名・販売価格・仕入れ値)を商品ごとに一覧表示する。
[3]を選択した場合は、アプリケーションを終了する。
アプリケーションを終了するまで、処理を繰り返すこと。

# 注意
雛形を使用すること
引数は雛形で考慮していないため、必要に応じて引数を設定すること
正しく動作している箇所までが採点対象となるため、必ず動作確認しながら進めること
エラーはインターネットで調べるなどして解決すること
エラーが出たままその先の実装をしないこと

# ヒント
必要な知識
ハッシュオブジェクト
式展開
配列オブジェクト
引数
each文
条件分岐

“`ru