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

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

Ruby で数独

# はじめに
@HMMNRST さんが面白そうな記事を投稿されました。
*[NArrayによる数独の解法(総当たり)の実装/数独を4次元配列と見た場合の様子](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744)*

NArray や numpy に興味はあるものの取り組んだことは無いので、少しずつ学習したいと思います。
# Matrix
まずは、***Ruby*** の標準モジュールの **Matrix** を使用します。

“`require.rb
require ‘matrix’
“`
“`new.rb
a = Matrix.zero(r * c)
“`
`Matrix.zero(dim)`で、初期値`0` `dim`行`dim`列の行列を生成します。

“`row.rb
b = (1..r * c).to_a – a.row(i).to_a
“`
`Matrix.row(index)`で`index`行のベクターを取り出します。
ここでは、配列に変換して使用しています。

“`column.rb
d

元記事を表示

【Rails】バリデーションエラーをそのインプットフィールドの近くに1つだけ表示したかった。

# この記事でやりたいこと
この記事では、Railsのフォームのエラーメッセージをまとめて出すのではなく、各インプットフィールドの近くに出すにはどうすればいいかやってみた結果を残しておきます。(やりたいことのイメージは下の方に結果画像あります。)

# 環境
この記事を書くにあたり、私の環境は以下の通りです。

– Ruby 2.7.1
– Rails 6.0.3

# サンプルアプリの前提
今回は単純に「商品名(name)」と「値段(price)」を属性にもつ商品(Product)を管理するアプリを前提とします。
登録フォームで「商品名」と「値段」を入力できるようにしますが、それぞれのバリデーションに引っかかった場合にそれぞれのインプットフィールドに対してエラーメッセージを表示できるようにします。
また、一つのインプットフィールドに複数のバリデーションエラーメッセージが表示されるのも訳がわからなくなってしまうので、1つのエラーメッセージだけを表示するようにします。

それぞれの属性は以下のバリデーションを持っていることとします。

名前(name)

– 未入力はだめ。

元記事を表示

Gitでコミットの多いファイルを調べてプロジェクトのホットスポットを知る ruby スクリプト

新しいプロジェクトにアサインされたとき、プロジェクトのどこがホットスポットか知ることができるとプロジェクトを早く理解できます。最も Git コミットが多いファイルをホットスポットと仮定して、ファイルごとのコミット数のランキングを調査するスクリプトを ruby で作ってみました。

環境は mac os + ruby 2.6.3 です。

“`
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
“`

プログレスバーを表示するため、 ruby-progressbar gem を使います。事前にインストールしておいてください。

“`
gem install ruby-progressbar
“`

# ソースコード

“`ruby:git-logs-ranking.rb
require ‘ostruct’
require ‘ruby-progressbar’

Dir.chdir(ARGV[0])

RANKING_LENGTH = 20
result = []
paths = `git ls-files`.

元記事を表示

Rubyの配列・ブロックの基礎についてまとめてみた。

#配列の特徴
●インデックス指定で要素を取り出す

“`sample.rb
n = [1, 2, 3]
n[1] #=>2
“`

●どんなオブジェクトも混在して入れる事ができる。

“`
s = [‘osaka’, 1, :hello]
“`

●存在しない要素を指定するとnilが返ってくる

“`sample.rb
n = [10, 20 ,30]
n[3] #=>nil
“`

●<<で配列の最後に要素を追加できる ```sample.rb food = ["apple", "peech"] food << "natto" food #=>[“apple”, “peech”, “natto”]
“`

#ブロックについて
>メソッド呼び出しの際に引数と一緒に渡すことのできる処理のかたまり | たのしいRuby

例えばこんなものです。

“`sample.rb
words = [‘a’,’p’,’p’,’l’,’e’]
food = “” #カラの文字列

words.each do |w|
food += w
end

puts food

#=>app

元記事を表示

【Rails6】Railsチュートリアルを実務形式で始めたい人の為の環境構築【簡単】

## はじめに
初投稿です!何かあればコメントいただけますと嬉しいです!

これを書いた目的としてはrailsチュートリアルを実務寄りに環境構築していこうと思ったからです。
Railsチュートリアルからの変更点としては以下の2点です。

“`
【変更点】
・ 開発環境をAWScloud9からDockerに変更
・ データベースをMySQLに変更

【変更理由】
・ ローカルで環境構築する力が必要
・ Dockerならばコピペで環境構築できてしまう & 他のプロジェクトに転用できる
・ MySQLを使っている企業が多い
“`

今回は環境構築を目的としておりますのでDockerに関しての説明は省略します。

バージョン、内容に関してはRailsチュートリアル(第6版)を参考にしております。
[Railsチュートリアル(第6版)](https://railstutorial.jp/chapters/beginning?version=6.0)

では始めていきましょう〜〜!!

## バージョン
– macOS Catalina 10.15.3
– Ruby 2.6
– Rails

元記事を表示

【Ruby】ヤフーニュースの主要トピックを取得

##当記事の目的
Rubyでヤフーニュースの主要トピックを取得する。

##Rubyがインストールされていることを確認。
“`
> ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]
“`

##最新のchromeドライバーを取得、パスを通す(ブラウザも最新バージョンに更新)
http://chromedriver.storage.googleapis.com/index.html

##モジュールをインストール
ffiとselenium-webdriverとnokogiri

“`
> gem install ffi selenium-webdriver nokogiri
“`

##ニュース取得スクリプトを作成

“`ruby:news.rb
require “nokogiri”
require “selenium-webdriver”

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(‘–head

元記事を表示

本番環境(HEROKU)で Uncaught TypeError・・・

#はじめに
Ruby on Railsで作成中の個人アプリに修正を加え、Herokuにデプロイしたところ、
検証ツールに”Uncaught TypeError:\$(…) is not a function”
というエラー文が・・・
解決方法を書き留めておきたいと思います。

#ローカルでは全く問題なかったのに!
エラーがないかしっかりと確認してからデプロイを行なったのに・・・
と初心者の私はかなり焦りました。

まずは落ち着いて、エラー文をGoogle翻訳してみる。
\$(…) is not a function” → ”\$(…)は関数ではありません。”

・・・よくわからないけど ”\$(…)” はjQueryかな?
という事はjQueryがうまく読み込めてないのかも?

#jQuery&エラー文で色々検索してみる
すると今回の原因が判明しました。
・・・jQueryを読み込む記述を書いていなかった!

htmlのhead部分に
jQueryを読み込む記述を書いていなかった事が原因でした。

“`ruby:application.html.haml(変更前)

元記事を表示

【RSpec】sleepは使うな

## 発生した問題

`Cancel my account`ボタンをクリックすると`Are you sure?`という確認のポップアップが表示され、
「OK」を押すとユーザーが削除される、といった(ごく普通の)ユーザー削除機能のテストを書きました。

“`ruby
describe ‘ユーザー削除’, js: true do
it ‘ユーザーが削除されること’ do
expect(User.count).to eq(1)

click_button ‘Cancel my account’
page.accept_confirm ‘Are you sure?’

expect(User.count).to eq(0)
end
end
“`

結果、失敗(; ・`ω・´)

“`zsh
Failures:

1) Users::RegistrationsController ユーザー削除 ユーザーが削除されること
Failure/Error: expect(User.count).to eq(0)

元記事を表示

異なるdocker-composeのMySQLコンテナのデータをRailsに流し込む

レアケースなのであまり参考にならないかもしれませんが、将来の私に何か役に立つことがあるかもしれないので、念の為残しておく備忘録です。

# 背景

関係のない2つのMySQLコンテナが存在している。
片方は非RailsのMySQLデータベース、片方はRailsのマイグレーションで作られたMySQLデータベース。
いずれも別々のdocker-compose環境で動作している。

今回は非RailsのデータをRailsのデータベースに流し込む需要があって、
割とサクッと実現できたので、環境の設定や手法を以下に記します。

# docker-compose.yml

行頭に `+` がついている行が、今回の作業のために追加した設定です。
別々のdocker-compose環境を同一networkで繋ぐために設定を追加します。

## 非Rails環境

“`diff:docker-compose.yml
version: ‘2’
services:
mysql:
container_name: mysql
image: mysql:5.7.21
po

元記事を表示

【Mac】rbenvがインストールできないときの解決方法

#エラー内容の確認
下記のようなエラー内容になったことでrbenvがインストールできないときのエラーの解消方法についてご紹介します。

“`
$ brew install rbenv
The program ‘brew’ is currently not installed. To run ‘brew’ please ask your administrator to install the package ‘linuxbrew-wrapper’
“`

### Linuxbrewのインストール
エラーの記述内容にLinuxbrewをインストールしてくださいとありますので下記のコマンドを実行します。

“`
$ sh -c “$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)”
“`
するとまたエラー内容が表示されてしまいました!

“`
Warning: /home/linuxbrew/.linuxbrew/bin is not in your PATH.

元記事を表示

Railsチュートリアル 返信機能を実装

ゴールデンウイーク中もずっとRailsチュートリアルをこなして、約1か月程かかってようやく完走しました。大変だった・・・。

完走後に拡張機能を自身で実装する章があり、5つほどある内の1つ
返信機能を実装してRailsチュートリアルは区切りをつけることにしました。

[14.4.1 サンプルアプリケーションの機能を拡張する](https://railstutorial.jp/chapters/following_users?version=6.0#sec-guide_to_extensions)

#返信機能
実装にあたり以下をパクらせてもらいました。

■参考サイト
https://stackoverflow.com/questions/57555708/rails-6-how-to-add-jquery-ui-through-webpacker
https://blog.office-aship.info/rails6-webpacker-jquery-ui/

##仕様
– 自分と返信相手と自分をフォローしている人にのみ見える
– 「@XXXスペース」が入力されたら、返信と判

元記事を表示

Rubyにおけるクラス・インスタンス

# イメージ

![blog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533191/f625954f-5814-a5d1-9625-d54836ba5b13.png)

クラスとインスタンスを車で説明するならば、

クラス = 車の設計図  ・インスタンス = 設計図を元に作られたそれぞれの車

になります。

クラスは共通の処理、すなわちどの車にも共通している部分が記されています。車体やハンドルを持っていることや、ブレーキで減速する、アクセルで加速するなどです。実際に共通しているデータをプロパティやメソッドと呼ばれるデータで定義しています。

“`
class クラス名 ←先頭は大文字
# 変数やメソッドの定義
end
“`

インスタンスはクラスの特徴を引き継いでいますが、車ごとに詳細は違います。車体やハンドルの見た目や種類などは車ごとに異なるはずです。インスタンスはクラスメソッドのnewメソッドによって生成できます

“`
変数名 = クラス名.new
“`

#まとめ

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder ABC 065 C 階乗

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder beginner Contets C – Reconciled?](https://atcoder.jp/contests/abc065/tasks/arc076_a)*
Difficulty: 647

今回のテーマ、階乗
# Ruby
犬`N匹`の階乗と猿`M匹`の階乗の掛け算になります。
階乗を関数化しておけば後々のコンテストに使用できます。

“`ruby.rb
n, m = gets.split.map(&:to_i)
MOD = 1_000_000_007
def nPk(n, k)
r = 1
while k > 0
r *= n
r %= MOD
n -= 1
k

元記事を表示

Amazon Rekognitionでローカルファイルの画像からテキストを検出してみた

# やったこと
– Amazon Rekognitionでローカルファイルの画像からテキストを検出
– rubyで叩いた

# ここで書かないこと
– rubyで叩くようにするまでの準備(アカウント作る〜SDKインストール)

# ソースと画像を用意
## 画像
こんなのを用意

text.png
![text.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97052/6799234a-f1b1-d2fe-3f34-956a31b33d65.png)

## ソース
基本的に公式ドキュメントに叩き方の例はのっているのでそこを参考にした
(リージョンは~/.aws/configに設定)

get_text.rb

“`ruby:
require ‘aws-sdk-rekognition’

credentials = Aws::Credentials.new(
‘xxxxxxxxxxxxx’,
‘xxxxxxxxxxxxxx’
)
client = Aws::Rekognition::C

元記事を表示

Day8 #Railsデバッグ #TweetApp 新規作成

###デバッグのツールについて
– binding.pryを追記することで、エラー内容のヒントになる。

“`ruby:app/controllers/posts_controller.rb
def create
binding.pry
Post.create(post_params)
redirect_to root_path
end
“`

“`terminal

[2] pry(#)> post_params
Unpermitted parameter: :titles
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/controllers/posts_controller.rb:38
=> “牙通牙”, “user_id”=>2} permi

元記事を表示

NArrayによる数独の解法(総当たり)の実装/数独を4次元配列と見た場合の様子

『[AtCoderでRubyの数値配列 Numo::NArray を利用…する前の基礎勉強](/HMMNRST/items/81d58c21de7bf477d29e)』の続きみたいなもの。**NArrayにもっと慣れる**ため、数独(ナンバープレース、ナンプレ)の単純な解法に使ってみる。

※数独を効率よく解きたいわけではないので注意

元々はNArrayを使うだけの予定だったが、2次元配列より4次元配列のほうが数学的に面白そうだったため、その話も追加している。

## 問題の入力形式
AtCoder的な形にしておく。

* 1行目はブロック内の行数 R と列数 C
* 2 ≦ R, C ≦ 5
* 数独全体の大きさは、 N = R×C として **N×N**
* (※本記事の解法は、標準的な N = 3×3 でも膨大な時間がかかる場合がある)
* 以降の N = R×C 行は各マスの値 Ai,j
* 1 ≦ i, j ≦ N
* 0 ≦ Ai,j ≦ N 、ただし 0 は空白マスを表す
* 数独の解が1個であることを保証する

元記事を表示

Bootstrapとfont-awesomeをRailsにインストールするやり方 Githubを参考に

# はじめに
Railsにデザインを整えるBootstrapとアイコンを使えるようになるfont-awesomeのgemを導入する方法を紹介します。それぞれのgemのGithabのページを参考にしました。
#Bootstrapの導入方法
まずGemfileにgemを追加します。

“`ruby:
gem ‘bootstrap’, ‘~> 4.4.1’
“`
`sprockets-rails gem` がv2.3.2以上であることを確認しておいてください。
次に、`bundle insall`を実行して、サーバーを再起動します。

次はマニフェストファイルである`app/assets/stylesheets/application.scss`に読み込ませます。拡張子が.scssになっているか確認しとく。

“`application.scss
@import “bootstrap”;
“`

Bootstrap JavaScriptはJQueryに依存しているので、Rails 5.1以上を利用している場合は、`jquery-rails` gem をGemfileに加える必要があり

元記事を表示

[Ruby]繰り返し処理のやり直し redo

Rubyで便利な繰り返し処理について、やり直したい時に使える”redo”の使用方法について、まとめてみました。

***

“`
friends = [‘キム’,’リー’,’アルフォンソ’]
friends.each do |friend|
print “#{friend}は一番の親友ですか? => ”
rank = [‘ベストフレンド’,’中の上’,’よっ友’].sample
puts rank

#ベストフレンドでなければ、もう一度聞き直し無理やりベストフレンドと言わせる
redo unless rank == ‘ベストフレンド’
end
“`

“`
キムは一番の親友ですか? => 中の上
キムは一番の親友ですか? => よっ友
キムは一番の親友ですか? => 中の上
キムは一番の親友ですか? => ベストフレンド
リーは一番の親友ですか? => 中の上
リーは一番の親友ですか? => ベストフレンド
アルフォンソは一番の親友ですか? => ベストフレンド
“`

上記のように、ベストフレンドというまで、何度も同じ質問が続きます。

##無限にやり直しを避け

元記事を表示

Railsで別名の外部キーを設定する方法

#Railsで別名の外部キーを設定する方法

1対多のリレーションで別名の外部キーのカラム名を設定した記録です。

##背景
通常、1対多のリレーションではTeamモデルにはuserと書くことが多いが、
Teamの所有者であることを強調したいので別名カラム__owner__を設定する必要がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526570/659d672e-297c-e067-cd65-c34ee1873056.png)

## 目次
* [動作環境](#動作環境)
* [結論](#結論)
* [ポイント](#ポイント)
* [おわりに](#おわりに)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

## 結論
以下のステップで実現できました。
### STEP1.別名カラムをTeamsモデ

元記事を表示

現場に入ってよく見かけるRubyイディオムさん

4月より医療業界からエンジニアへと転職しました。駆け出しエンジニアです。
 
独学時はPHPをメインに勉強していたため、Ruby経験は2ヶ月弱となります。
現場に入って初見で意味が分からなかったイディオムさん達を簡単にまとめました。
## ぼっち演算子 &.
“safe navigation operator”と言う名前が付けられているそうですが、&.の形がひとりぼっちで膝を抱えている姿に見えること(僕には見えません)から”lonely operator”、つまりぼっち演算子と呼ばれている。

“`ruby:fruits.rb
# 色に応じて当てはまる果物を返す(該当しなければnil)
def find_fruit(color)
fruits = { red: ‘strawberry’, yellow: ‘banana’, green: ‘melon’ }
fruits[color]
end

# 色に該当する果物を大文字にして返す
def upcase_fruit(color)
fruit = find_fruit(color)
# nilでないことを確認してから大

元記事を表示

OTHERカテゴリの最新記事