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

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

[py2rb] basestring

# はじめに
移植やってます
# basestring (Python)
“`python
try:
basestring
PY2 = True
except NameError:
basestring = (str, bytes)
PY2 = False
“`
`basestring`って型というかオブジェクトで、`ver2.7`くらいまで使用されていた様子。
[basestringという抽象クラスが削除 – Qiita](https://qiita.com/cstoku/items/353fd4b0fd9ed17dc152#basestring%E3%81%A8%E3%81%84%E3%81%86%E6%8A%BD%E8%B1%A1%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8C%E5%89%8A%E9%99%A4)

`bytes`型も曲者です。

“`python
data = ‘こんにちは’
>>> encoded = data.encode(‘sjis’)
>>> print(encoded)
b’\x82\xb

元記事を表示

【競プロからの学び】最も近い値を探す→bsearchが高速

# TL;DR

タイトルの通り。
配列内から最も近い値を探す→bsearchが高速に動作する。
二分探索なので。

競技プログラミン初心者による、自分向け備忘の記事。

## 問題
https://atcoder.jp/contests/typical90/tasks/typical90_g
こちらの問題を解いている際のお話。

やりたいことの1つが以下の操作↓

– 「整数によって構成される配列a」と「定数b」を用意。
– 「aの中からbに最も近い値を探す(絶対値が最も小さい値を探す)」

例)
a = [1,5,19,7]
b = 8
=> answer = 7

#### 自分の考え

“`ruby
a.each do |i|
b_arr << (a[i] - b).abs end puts b_arr.min ``` これだと計算が遅い。。。 i個分の差分計算の後にソートをしているので。。。 #### ほかの方の答え ```ruby a.sort idx = a_arr.bsearch_index {|x| x >= b }

if

元記事を表示

[py2rb] set の差異

# はじめに
移植やってます
# set (Python)
“`python
_comments = set(‘>;’)
“`
何気ない`set`ですが、

“`python
>>> print(_comments)
{‘>’, ‘;’}
“`
中は既にスプリットされています。
# set (Ruby)
“`ruby
require ‘set’
_comments = Set.new(‘>;’.split(”))
“`
二つくらいなら最初から分けておいてもいいんですけど。
# intersection (Python)
“`python
x = {‘is_decoy’, ‘remove_decoy’, ‘formula’,
‘ratio’, ‘correction’}.intersection(kwargs)
“`
`intersection`って集合の積なんですけど、この`kwargs`って~~辞書型~~なんですよね。

よくよく見るとSet型でした。
# & (Ruby)
“`ruby
x = Set.new([‘is_deco

元記事を表示

Rubyで点字メーカープログラム作成にチャレンジしました! 〜Qiita Advent Calendar 2021〜

![はてなBlog20211208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1652831/a220bfa4-2a30-838c-41c2-abfec135c5ff.png)
## :cherries:この記事について
この記事は、伊藤 淳一(@jnchito)さんによる[Qiita Advent Calendar 2021「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」](https://qiita.com/advent-calendar/2021/ruby-challenge)の8日目(12/8)の記事です。

## :cherries:自己紹介と参加した理由
はじめまして、[paru](https://twitter.com/Paru871)と申します。今回Qiitaへの初投稿となります。
2021年4月より[フィヨルドブートキャンプ](https://bootcamp.fjord.jp
)というオンラインプログラミングスクールでRubyを初めとするプログラミング

元記事を表示

デプロイ後エラー、その後localhostもエラー

原因は結局のところよくわからないのですが、

調べたところ

localhostでは動いているがデプロイ後エラーが出ている人がいました。

その場合は

・閲覧履歴データの削除・キャッシュ・Cookieを削除する

と良いみたいです。

キャッシュの消し方↓

Chromeの場合
パソコンで Chrome を開きます。
画面右上のその他アイコン  をクリックします。
[その他のツール]  [閲覧履歴を消去] をクリックします。
上部で期間を選択します。すべて削除するには、[全期間] を選択します。
[Cookie と他のサイトデータ] と [キャッシュされた画像とファイル] の横にあるチェックボックスをオンにします。
[データを消去] をクリックします。

ブラウザなどを利用すると、ウェブサイトの情報がキャッシュやCookieに保存される。

キャッシュやCookieなどを消去すると、サイトの読み込みや表示形式に関する問題の一部が解決することがある。

私の場合は、エラーが読み込まれずにテストなどをクリアし、デプロイ時に再度読み込まれエラ

元記事を表示

【Ruby】グローバル変数を使わずにメソッドの外のスコープにあるローカル変数を使う方法

## はじめに
メソッドの外にある変数を利用したいがために、グローバル変数を使っているコードを見かけた。
今回はこういったコードに対してグローバル変数を使わずに済む方法を考える。

## 題材となるコード
題材となるのは以下のコードだ。

“`ruby
def test_Processor_runメソッドのタイムアウトの検証
p = Processor.new

# 重い処理にする
$process_time = 5
def p.process
sleep $process_time
end

start_time = Time.now
p.run(4) # 4秒でタイムアウトする
end_time = Time.now

# タイムアウトになるのは重い処理にかかる時間よりも早いはず
assert((end_time – start_time) < $process_time) end ``` `Processor#run`に指定したタイムアウトの時間で処理が終わるかどうかを確認しているようだ。 `Processor#run`からは

元記事を表示

rails devise サインアウトのリダイレクト先設定時のエラー

### devise サインアウトのリダイレクト先設定時にエラーのが起きてしまう原因について

### 初めに
___
こんにちは。DMM WEBCAMP Advent Calendar 2021 8日目を担当します@Hbk__17です!
普段受講生さんに教えていた際に、よく受講生さんがつまづいていた箇所で「deviseを使用した際のログアウトの条件分岐でエラーが出てしまい直せません」といったような質問をよく頂いていたのですが、しっかり解説をしている記事を見かけなかったので、今回私の記事ではなぜこのようなエラーが出現するのかについてと、どのように直せばいいのかを解説していければと思っております!先に早くエラーを治したいという方は[こちら](#今回のエラーの解決方法)をご参照ください。

### エラーについて
***
今回主に解説を行うエラー文は、deviseを使用した際のログアウトを設定した際に起こるこのエラー↓について解説したいと思います!
![スクリーンショット 2021-11-29 13.35.13.png](https://qiita-image-store.s3.ap-no

元記事を表示

【Ruby のまずいコード】ハッシュのキーのシンボル化

# お題

キーが文字列であるハッシュが与えられたとき,各キーをシンボルにするメソッドを書いてください。

Ruby on Rails には(より詳しく言えば Active Support には)そのためのメソッド `Hash#symbolize_keys` があるのですが,これを使わず自分で実装することとします。

# コード

## コード 1

“`rb
def hash_symbolize_keys(hash)
result = {}
hash.each do |key, value|
result[key.to_sym] = value
end
result
end
“`

## コード 2

“`rb
def hash_synbolize_keys(hash)
hash.map{ |key, value| [key.to_sym, value] }.to_h
end
“`

## コード 3

“`rb
def hash_symbolize_keys(hash)
hash.to_h{ |key, value| [key.to_sym

元記事を表示

【Rails】RSpec、Capybara、FactoryBotの使い方

##テスト用ライブラリ
・RSpec
 RubyにおけるBDD(振舞駆動開発)のためのテスティングフレームワーク。
 Rspecを利用する上で、「テスト」ではなく「spec」という用語を利用する。

・Capybara
 WebアプリケーションのE2E(End-to-End)のテスト用フレームワーク。Rail5.1からRailsに同梱済。
 MinitestやRSpecなどのテスティングライブラリと合わせて使う。

・FactoryBot
 テスト用データの作成をサポートするgem。
 テスト用のデータを簡単に用意し、テストから呼び出して利用することができる。
 一般にデータを作成することを簡単にする仕組みは「ファクトリ」と呼ばれている。

##事前準備
####Rspec
Gemfileにて以下の文を追加し、RSpecのRails用の機能が追加される。

“`
gem ‘rspec-rails’,’~>3.7′

$bundle install
“`

gemのインストールが終われば、以下のgenerateを実行。

“`
$ rails g rspec:install
“`

元記事を表示

RubySilver直前確認をまとめてみた

# ページ概要
RubySilverのテスト直前に確認することをまとめた個人用のメモです。

– 進数
– 0b 2進数を表すプレフィックス

– メソッドと変数に同名のものがある場合
– メソッドと変数の探索順位は変数が先です。

– ERORR
– TypeError
– メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生します。
– 例
– raise [‘error message’]
– raiseは、配列を引数に取らない。
– exception class/object expected(クラスかオブジェクトを渡してください)と帰ってくる。
– raiseメソッドの引数に文字列を渡すと、その文字列がエラーメッセージになる。
– 第1引数に例外クラス、第2引数に文字列を渡すとRuntimeError以外の例外を発生させ

元記事を表示

[Ruby] Rubyのみで、すごろくゲームを作ってみた

Rubyのみで、すごろくゲームを作ってみました。

![画面収録 2021-12-05 17 05 06](https://user-images.githubusercontent.com/78095577/144851808-2e93197d-12db-4560-b699-af073d8c75aa.gif)

今回は大まかに付けた機能ごとに解説していきます。

##開発環境

– ruby 2.7.2

## 使用概要

– エンターキーでプレイヤーがサイコロを振る
– 1~6 のランダムでサイコロの目が表示される
– 出たマス分、駒が移動
– 止まったマスにギミックがあれば表示され、指定されたマスに移動します
– CPU も同じ処理をします
– プレイヤーとCPUの現在のマスの位置を表示
– どちらかが、ゴールのマスに止まったら処理を中断する

##実際に書いてみた

なるべくクラス分けを意識して、同じ処理になるのはまとめております。
まだまだ中途半端なのでアドバイスいただけると嬉しいです。

####diceクラス

diceクラスでサイコロの出た目を表示させます。

“`

元記事を表示

配列に含まれる重複した要素を取得する

# やりたいこと

配列に含まれる重複した要素を取得したい。

“`rb
animals = %w(? ? ? ? ? ? ?)
# animals.???
#=> [“?”, “?”]
“`

# 方法

## 1. [Enumerable#inject](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html) を使う

“`rb
animals.each_with_index.inject([]) do |duplicated_animals, (animal, i)|
# すでに重複していることが分かっている要素であればスキップする。
next duplicated_animals if duplicated_animals.include?(animal)

# animals の現在のインデックスより右側を調べる。
duplicated_animals << animal if animals[i + 1..-1].include?(animal) duplica

元記事を表示

RubyGems で ウエブフレームワーク を検索してみた 2021版

# はじめに
[前回の記事 – Qiita](https://qiita.com/superrino130/items/7a97cb38c6710066bfca) から1年以上が経過しています。
# 検索結果
|gem|2020-10|2021-12|
|:–:|:–:|:–:|
|Roda|3.37.0 – October 16, 2020|3.50.0 – November 12, 2021|
|Ruby on Rails|6.0.3.4 – October 07, 2020|7.0.0.rc1 – December 06, 2021|
|Scorched|1.0.1 – August 28, 2020|1.0.2 – January 27, 2021|
|Cuba|3.9.3 – August 11, 2020|<-| |Sinatra|2.1.0 - September 04, 2020|<-| |Pakyow|1.0.6 - September 03, 2020|<-| |Rack::App|2.2.3 - June 15, 2020|?| |Padrino|0.15.

元記事を表示

【Ruby】map.with_index

##with_index
配列などの要素にindexを添えることができるメソッド

“`ruby
[100, 200, 300].map.with_index do |n, idx|
p [n, idx]
end

#=> [[100, 0], [200, 1], [300, 2]]
“`

##each_with_index

“`ruby
[100, 200, 300].each_with_index do |n, idx|
p [n, idx]
end
# => [100, 0]
# [200, 1]
# [300, 2]
“`

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_with_index.html

元記事を表示

【Ruby】インクリメント++の代わりは+=

##インクリメント
変数の値を1増やす演算。

Rubyではインクリメント“`++“`がないので、代わりに“`+=“` “`succ“` “`next“`を使う。

“`ruby
sum = 0
sum += 1
puts sum

#=> 1
“`

“`ruby
sum = 0
sum = sum.succ
puts sum

#=> 1
“`

##デクリメント
変数の値を1減らす演算

Rubyではデインクリメント“`–“`がないので、代わりに“`-=“`を使う。

“`ruby
sum = 0
sum -= 1
puts sum

#=> -1
“`

元記事を表示

WSLにanyenvを入れてrbenvを使ってrubyを動かすまで

https://qiita.com/nomurasan/items/84674c0581380aa9acc8

のスピンアウト記事です。
軽い気持ちでやってみたら案外ハマったので別記事にしました。

## 前提
1. WSLが動いている
1. linuxbrewが使える
1. anyenvが使える

前提の手順については、上記記事をご参照ください。

## 1. rbenvをインストールする
“`
anyenv install rbenv
“`

超簡単!
うまく行かない場合はanyenvへのパスが通ってない可能性が高いと思います。

## 2. rubyをインストールする
私の環境ではここで問題が発生しました。

#### rbenvまでのパスも通したのに、`rbenv: no such command ‘install’`と怒られる
これは`brew install ruby-build`で解決できます。gccでもbuild-essentialsでもないんですね。ハマりやすいので気をつけて!

#### BUILD FAILEDになる
これはバージョンにもよると思いますが、現行

元記事を表示

四則演算のみを用いて4つの数字で10を作ることはできますか。

電車の広告で見かけたので解いてみた。
逆ポーランド記法を用いた。
簡易な電卓機能を作れるかを試すような問題だった。
例は1,3,3,7の場合。

“`ruby
class Calculator
OPERATORS = %w[+ – * /]

def exec
answer_formulas = []
OPERATORS.each do |l|
first_ope = l
OPERATORS.each do |m|
second_ope = m
OPERATORS.each do |n|
third_ope = n
[1.0, 3.0, 3.0, 7.0, first_ope, second_ope, third_ope].permutation.to_a.each do |formula|
result = _calc(formula.dup)
if result == 10.0
answ

元記事を表示

【Rails】配列をキーでsortしたい

配列をpriceの昇順でsortしたいとき

“`ruby
array = [
{‘id’=> 1, ‘price’=> 300},
{‘id’=> 2, ‘price’=> 100}
]
“`

なんとなくキーを指定したらsortできたようなーと思ったけどできなかった。

“`ruby
array.sort(:price)
#=>ArgumentError (wrong number of arguments (given 1, expected 0))
“`

sort_byでブロックの中でキーを指定する。

“`ruby
array.sort_by { |a| a[‘price’] }
#=> [{“id”=>2, “price”=>100}, {“id”=>1, “price”=>300}]
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html

元記事を表示

【Ruby】nextとreturn

map関数などの繰り返しの処理の中で、
ある条件のときだけ次のループに行きそのまま処理を続けたいときはreturnじゃなくてnextを使う。

##next
nextはもっとも内側のループの次の繰り返しにジャンプします。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#next

“`n + 1“`が偶数のときに“`puts “hello! #{n + 1}回目”“`を実行せずに次のループにいく。

“`ruby
def next_method
5.times do |n|
next if (n + 1).even?
puts “hello! #{n + 1}回目”
end
puts “完了!”
end

next_method

#=>hello! 1回目
#=>hello! 3回目
#=>hello! 5回目
#=>完了!
“`

##return
式の値を戻り値としてメソッドの実行を終了します。

https://docs.ruby-lang.org/ja/lat

元記事を表示

Youtube_v3を使ってプレイリストに動画を自動追加

#目次
– Youtube Data APIの前に
– 環境
– Youtube Data APIについて(本題)
– そもそも何をするのか整理
– 下準備(google cloud platform編)
– 早速書いていく

# Youtube Data APIの前に

[公式ドキュメント](https://developers.google.com/youtube/v3/docs?hl=ja)

主に、公式ドキュメントに沿って書いていく。といっても、最初から公式のドキュメントを読むのは疲れますよね、、、
そこで、[この記事](https://qiita.com/gyu_outputs/items/af4319258b3d67c57d24#videos)がおすすめです。とてもかみ砕かれていてYoutube Data APIがどのようなもので、どんな感じに使っていくのか雰囲気を掴めます!
自分は公式ドキュメントを最初から読むのはしんどいので、とりあえず記事を読んで「こいうメソッドがあるのか」、「こんなクラスがあるのか」と雰囲気を掴みます。そこから、詳しいところは公式ドキュメントを見

元記事を表示

OTHERカテゴリの最新記事