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

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

Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較

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

Python,Ruby,PHP,Java,JavaScript,Perlの数値計算の比較

# Python

https://qiita.com/Sunset_Yuhi/items/fa6e97867ac46a604780

# Ruby

https://qiita.com/u651601f/items/52af880d1569c6c1066f

# PHP

https://qiita.com/mpyw/items/346c535ade9dcf6e1b12

# Java

https://qiita.com/takahirocook/items/748990882f2de7a630a1

# JavaScript

https://qiita.com/daikw/items/663bc0b5a4c025694974

# Perl

https://perlzemi.com/blog/20161

元記事を表示

Rubyの配列で複数要素の位置を得る ( index を複数得たい )

# 例

“`rb
arr = [“A”, “B”, “X”, “A”, “X”, “A”];
arr.each_index.select { |i| arr[i] == “X” } # [2, 4]

“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

元記事を表示

Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)

# Rails & deviseにてメールのテンプレートを変更

カスタムメーラー `app/mailers/user_mailer.rb`を、
“`
class UserMailer < Devise::Mailer default template_path: 'users/mailer' end ``` と定義したが、以下のデフォルトのメールが変更できずでした。![スクリーンショット 2022-09-23 18.23.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1730386/90478abf-c56e-e1ff-f6c6-ddf2d34ae8af.png) ## 対応方法 以下のように、headers_forメソッドをオーバーライドすることで、設定したテンプレートが使用できるようです! ``` class UserMailer < Devise::Mailer # 以下の記述では動作しない # default template_path: 'users/mailer'

元記事を表示

Rubyでダイヤル問題を解く

# 問題

– AからZまでの目盛りを持つダイヤルがあるとする。
– このダイヤルは右に回すことも左に回すことも出来る。
– ダイヤルは丸いのでAとZは隣り合わせだ。

ひとつの目盛りから別の目盛りまで、動かす必要のある最小の目盛り数を求めたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/b21d7d04-6302-6b49-e3ec-2e81a17e660a.png)

# コード

XからBまでの距離を計算すると、移動距離は4であることが分かる。

B -> A -> Z -> Y -> X で4マス移動だ。

“`rb
SCALES = (“A”..”Z”).to_a

current_dial = “X”
next_dial = “B”

current_dial_place = SCALES.index(current_dial) + 1
next_dial_place = SCALES.index(next_dial) + 1

formal_move

元記事を表示

依存性のある複数引数を一時変数無しで設定する

※以下のプログラムはPython 2.7/3.9およびRuby 2.7でそのまま貼り付けて動作することを確認しています。

## 背景

ライブラリの挙動により、このようなことをしたいことがあると思います。

“`py
process(config=json.load(open(fname)),data=get_data(config))
“`

“`rb
process(config: JSON.parse(open(fname).read), data: get_data(config))
“`

しかし、前側のパラメータに与えられる情報を後ろのパラメータで使うことはできません。

## 解決策

※以下、サンプルなのでconfig/dataという名前になっていますが、実際にはこの辺りはちゃんとした名前をつけてください

### 一時変数

こういう場合、通常はkwargs変数を用意して処理するのだと思います。

#### Python

“`py
def process(**kwargs): # actually defined in another module

元記事を表示

Ruby と crystal における clone メソッドの違い

# はじめに
AtCoder さん、ありがとうございます。

# 結論
||clone|
|:–:|:–:|
|Ruby|浅い (shallow) コピー|
|crystal|深い (deep) コピー|

# E – SNS のログ
https://atcoder.jp/contests/past201912-open/tasks/past201912_e
# Ruby clone(WA)
“`rb
n, m = gets.split.map(&:to_i)
a = Array.new(n + 1){ Array.new(n + 1, “N”) }
m.times do
s = gets.split.map(&:to_i)
case s[0]
when 1
a[s[1]][s[2]] = “Y”
when 2
(1..n).each do |i|
a[s[1]][i] = “Y” if a[i][s[1]] == “Y”
end
when 3
b = a.clone
(1..n).each do |i|

元記事を表示

M1 Mac (macOS Monterey) で therubyracer を運用することはできるのだろうか?

# 結論
`therubyracer` はもう捨てたほうが良い!

いろいろ試しましたが、M1 Mac で `therubyracer` と共存しながら正しくアプリケーションを動作させる方法は、少なくとも筆者の調べでは見つけることができませんでした……。

# 削除して大丈夫?
プロジェクトごとに環境はまちまちでしょうから、絶対に大丈夫とは言い難いですが、以下の記事に記載されているとおり、Node.js を実行できる環境であれば、ほとんどのケースでは `therubyracer` を削除しても問題なく動作します。

* [How to Install (Or Get Rid Of) therubyracer on M1 or M2 Macs](https://www.rubyonmac.dev/how-to-install-therubyracer-on-m1-m2-apple-silicon-mac)

少なくとも筆者の関わっている Rails アプリケーションでは問題ありませんでした。

やることとしてはとてもシンプルで、`Gemfile` から `gem ‘therubyra

元記事を表示

M1 Mac (macOS Monterey) で Ruby のインストールに失敗するときの対処法

# 解決方法
M1 Mac で従来どおりに Ruby をインストールしようとするとビルドエラーが出てしまいます。

筆者の環境では以下のコマンドを実行することにより無事インストールすることができました。

“`shell:Shell
brew install openssl@1.1 readline libyaml

export RUBY_CONFIGURE_OPTS=”–with-openssl-dir=$(brew –prefix openssl@1.1)”
export LDFLAGS=”-L/opt/homebrew/opt/readline/lib”
export CPPFLAGS=”-I/opt/homebrew/opt/readline/include”
export PKG_CONFIG_PATH=”/opt/homebrew/opt/readline/lib/pkgconfig”
export optflags=”-Wno-error=implicit-function-declaration”
export LDFLAGS=”-L/opt/homebrew/

元記事を表示

【Rails】database.ymlにMySQLのパスワードを設定する方法

# はじめに
今回は、Mysqlのパスワードを変更したことにより、発生したエラーの解消方法についてまとめました。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
以下内容のアウトプット
– Mysqlのエラーとその解消方法
– database.ymlにMySQLのパスワードを設定する方法

# 開発環境
– Ruby 2.6.5
– Ruby on Rails 6.0.0
– MySQL 14.14

# この記事の内容
1. Mysqlのエラー
2. Mysqlのパスワードを確認
3. database.ymlにMySQLのパスワードを設定

# 1. Mysqlのエラーの概要
Mysqlのパスワードを設定(変更)したことにより、ローカルでサーバを立ち上げた際にエラーが発生しました。

※エラー解消のプロセスでNOとYESのエラーに遭遇しましたが、最終的にエラー解消できました。
“`
Mysql2::Error::ConnectionError: Access denied for u

元記事を表示

RuboCop Rails (rubocop-rails) のリリース内容で Rails の情報をキャッチアップする

# この記事は?

Ruby の静的コード解析の定番 Gem の [RuboCop](https://github.com/rubocop/rubocop)。そのひとつひとつのルールのことを Cop と呼びます。そして、[RuboCop Rails](https://github.com/rubocop/rubocop-rails) は Rails 向けのルールを RuboCop に追加するための Gem です。

ふと、RuboCop Rails で追加された Cop (ルール) を確認することで、Rails の知らない機能を知るいい機会になるのではと思いました。そこで、試しに 2022/09/09 (金) にリリースされたバージョン 2.16.0 の内容を見てみました :eyes:

https://github.com/rubocop/rubocop-rails/releases/tag/v2.16.0

そうすると、案の定知らないことばかりで非常に勉強になりました!そこで、実際にどんな学びがあったかこの記事で共有したいと思います ?

# 例: RuboCop Rails 2

元記事を表示

【初個人開発】K P T管理アプリ「Animal KPT」を作りました。

# はじめに
こんにちは [@Taiga_aniK](https://twitter.com/home)と申します。

みなさんKPTはされたことはありますか。
KPT(ケプト) :Keep(できた/継続すること) Problem(改善するべき問題点) Try(挑戦したいこと)の3要素を掘り下げ、学習や仕事を改善できるアクションを導き出すツールです。

Animal KPT では、達成度を色で別け、「振り返り」をより確実にします。ツイッターと一緒に使えます。

【Twitter】

【今回作ったアプリ】
https://obscure-chamber-30165.herokuapp.com/tops/index
【GitHub】
https://github.com/tai9174/animal_kpt

# 使用環境

• Ruby 3.0.1
• Rails 6.0.3

# アプリの主な機能
### トップ画面
トップ画面のホワイトタイガーは丹精を込めて描きました。
Animal KPTという名前は、デザインに動物を

元記事を表示

Rails nil?とempty?とblank?メソッドの違い?・・・わかってます・・・

# はじめに
実務でコードを書いているときに次の3つの違いを先輩に問われたことがありました。
– nil?
– empty?
– blank?

どれもレシーバに値ががない状態?であることを確認するときに使っていました。
私自身よく考えずに使っていたので詳しく調べてみることにしましたので備忘録として残します。
間違いや補足がありましたら教えてください。

# 環境
Ruby 2.7.1
Rails 6.0.5

# 3つの違いとは
### nil?
Rubyのドキュメントによると次の通りです。
>レシーバが nil であれば真を返します。

~~レシーバ自体が存在しない場合~~、つまりnilであればtrueを返します。

※追記
>nil は何かが存在しないことを表すために用いられるオブジェクトです。

レシーバが存在しないということはあり得ないというご指摘をいただきましたので追記です。

https://qiita.com/scivola/items/da2480ca4597a7dcf73d

### empty?
Rubyのドキュメントによると次の通りです。
>文字列が空 (

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのスコープの比較

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

Python,Ruby,PHP,Java,JavaScript,Perlのスコープの比較

# Python

https://qiita.com/msssgur/items/12992fc816e6adf32cff

# Ruby

https://qiita.com/EZ_Denta/items/6489039212e21d4fc49f

# PHP

https://qiita.com/hikaru_/items/4cc7b616aa61868cdcdd

# Java

https://qiita.com/gatchan03/items/e8eecf468b7dab960198

# JavaScript

https://qiita.com/higa02/items/a7a0a1d96d1d67a7c88b

# Perl

https://perlzemi.com/blog/2011012

元記事を表示

tsunagi-functionsでSymbolブロックチェーンのトランザクションを自由自在に作ろう!(Ruby編)

この記事は、以下に紹介したtsunagi-functionsのRuby実装版です。

https://qiita.com/nem_takanobu/items/4b5d67fe9eb80ae35433

トランザクション構築の内部処理やノードへの通知方法については以下の記事もご参考ください。

https://qiita.com/nem_takanobu/items/2cff7bd2722aa86fec84

Symbolブロックチェーンをよく知らないという方はこちらで速習することができます。

https://github.com/xembook/quick_learning_symbol

# リポジトリ

##### tsunagi-functions for Ruby
https://github.com/xembook/tsunagi-sdk/tree/main/ruby

関数群の提供のため、sdkという名称は今後functionsに変更予定です。

# テスト

テストスクリプトを以下に置いています。実行することができればそのロジックをそのまま実装に利用することができます

元記事を表示

【Rails】【Ruby】find_by_sql でも preload したいとき

# はじめに
`find_by_sql` を使って複雑なSQL文を書いたが、N+1を避けるために `preload`したい時がある。

# 結論
下記のように書けばOK
“`ruby
records = User.find_by_sql(…)
ActiveRecord::Associations::Preloader.new.preload(records, :like)
“`

下記は`preload`が無視されるのでダメ
“`ruby
User.preload(:like).find_by_sql(…)
“`

# 注意点
**Rails7 で記法が下記のように変わる**
“`ruby
records = User.find_by_sql(…)
ActiveRecord::Associations::Preloader.new(records: records, associations: :like).call
“`

# 参考
https://www.natsuneko.blog/entry/2017/04/18/find_by_sql-preload

元記事を表示

[Rails] 複数の小モデルを跨いだor検索

バージョンの問題で5.1.以下の複数の小モデルを使ったor検索の実装方法があまり載っていなく少しでも役に立つかもと思ったので投稿します。
もっと良い書き方があれば教えていただきたいです。

## 学んだこと
・includeを使うと小モデルのオブジェクトを親クラス内から使えるということを学びました。
“`
Child.include(:parent).is_summer_vacation
“`
・idを使ってor検索を実装すること(rails5.2からは.[or()](https://qiita.com/YumaInaura/items/c4ea8271f5793962a26d)を使っていけるかも)
## 環境
Rails 5.1.6.2
Ruby 2.5.0

### DB
“`book.rb
has_one: business #ビジネス書
has_one: novel #小説
has_one: comic #漫画
“`

### 複数の小モデルを跨いだor検索
本の検索サービスにおいてアメトークで紹介された本を絞り出すという状況を想定して実装コードを紹介します。
“`

元記事を表示

Rails 7 + ImportmapでFont Awesomeを実装する

# FontAwesome
アイコンを使うのに[FontAwesome](https://fontawesome.com/)というライブラリーはすごくいいだけど、インストールするには公式サイトにこれしか書いてなかったからインストールに詰まりました。
“`shell
# npm
npm install –save @fortawesome/fontawesome-free

# yarn
yarn add @fortawesome/fontawesome-free
“`

これだけだとアイコンは表示されないし、フレームワークごとのインストール方法は書いてなかったからちょっと調べてみたら、YouTubeの[この動画](https://www.youtube.com/watch?v=c-EbQDB0RsQ)を見つけてFontAwesomeをけっこう簡単に実装できたのでやり方をこちらにも書いときます。

そもそもImportmapの使い方は知らなかったのが詰まる原因だったと思うんで反省していますが、とにかく実装できたのですっきりしました。

# パッケージマネジャーでインストールした後に

元記事を表示

Ruby3.1を触ってみる(IRB のオートコンプリートとドキュメント表示)

# 0. はじめに
[前回](https://qiita.com/Satoooon/items/2412e9ba6de1f3afefb1) に引き続きRuby 3.1の新機能について動かしながら紹介しようと思います。

今回は IRB のオートコンプリートとドキュメント表示 になります。
irb自体はRubyを触っていれば簡単な動作確認したりと誰しもが使ったことがあるものだと思います。
それの拡張された機能になります。早速みていきましょう!

# 1. リリースノートを見てみる
> IRB にオートコンプリート機能が実装され、コードを入力するだけで補完候補ダイアログが表示されるようになりました。Tab と Shift+Tab で上下に移動できます。
また、補完候補を選択している時に、ドキュメントがインストールされている場合、補完候補ダイアログの横にドキュメントダイアログが表示され、内容が一部表示されます。Alt+d を押すことでドキュメント全文を読むことができます。

引用: https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0

元記事を表示

【Rails】countメソッドにカラムを指定してエラーを回避

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 状況

relationでjoinしている“`posts“`に“`count“`したら下記のエラーが発生し“`count“`できない。
“`ruby
posts = Post.joins(:users)
=>Post::ActiveRecord_Relation

posts.count
=>ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near “AS”
“`

## 解決法

ActiveRecordのcountメソッドは引数にカラムを指定できるのでそれを使うとcountできる。

“`ruby
posts = Post.joins(:users)
posts.count(:posts)
=> 4
“`

## 参考

https://railsdoc.com/page/count

元記事を表示

using Module.new ってなに?

## はじめに

調べ物をしている際に、`using Module.new {}`というコードを見たのでどういう処理をするんだろうと思い調べてみた備忘録です。

## そもそも無名モジュールってなに?
無名モジュールは、その名の通り名前のついていないモジュールのことです。`Module.new`で作成したモジュールは無名モジュールとなるらしいです。
~~もちろん無名なので、includeなどで指定することが出来ませんので他のファイルから呼び出すこともできません、多分…~~。Mix-inすることできますね…(@scivolaありがとうございます)

“`ruby
mod = Module.new {
def self.anonymous
puts “anonymous module”
end
}

mod.name
# => nil

mod.anonymous
# => anonymous module

MyClass = Class.new do
include mod
end

MyClass.ancestors
# => [MyClass,

元記事を表示

OTHERカテゴリの最新記事