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

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

Ruby で解く AtCoder ABC177 D UnionFind

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。

# 今回のお題
*[AtCoder Beginner Contest D – Friends](https://atcoder.jp/contests/abc177/tasks/abc177_d)*
Difficulty: 676

今回のテーマ、UnionFind

典型問題の *[B – Union Find – AtCoder](https://atcoder.jp/contests/atc001/tasks/unionfind_a)* の応用です。
# Ruby
“`ruby.rb
class UnionFind
def initialize(n)
@parents = Array.new(n, -1)
end
def fi

元記事を表示

初投稿

どうも :shamrock:

エンジニア就職を目指している20代です

現在はTechCamp82期生として最終課題に取り組んでいます

就職までの学習を記録します

既存の内容も多く投稿することになると思います:airplane:

元記事を表示

if,else問題

#####問題

3つの整数a b cが与えられた場合、bまたはcがaとの差が1で
かつbとcとの数値の差が2以上の場合はTrue。
それ以外はFalse
と出力するメソッドを作りましょう。

#####出力例:
close_far(1, 2, 10) → True
close_far(1, 2, 3) → False
close_far(4, 1, 3) → True

#####ヒント
返り値を整数に変換する際はabsメソッドを使いましょう。

#####abs
対象となる数値に対して「abs」メソッドを実行すると絶対値を取得することができます。すなわち正の数の場合はそのままですが負の数の場合は符号を取って正の数にした数値が取得できます。

実際の使い方は次のようになります。

“`ruby
num = 5.abs
#=> 5

num = (-5).abs
#=> 5
“`

#####模範回答

“`ruby
def close_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs

i

元記事を表示

ActiveRecord::NotNullViolation in Deviseエラー

【概要】
—————————————-
1.結論

2.ActiveRecord::NotNullViolationtとは何か

3.なぜActiveRecord::NotNullViolation in Deviseになるのか

4.どのように解決するか

5.補足

1.結論
—————————————-
db/migrate/””””_devise_create_”””””.rbに
記載してある“t.string password(またはpassword_confirmation)”の記載を削除する!

2.ActiveRecord::NotNullViolationtとは何か
—————————————-
![スクリーンショット 2020-08-29 20.47.37.png](https://qiita-image-store

元記事を表示

クラスの情報を継承したクラスの作り方

##内容
複数のクラスに同じメソッドを定義したい場合、それぞれのクラス全てにそのメソッドを定義すると、同じ記述を何度も繰り返す事になってしまいます。
(例1)
クラス1  クラス2   クラス3
メソッドA メソッドA  メソッドA
メソッドB メソッドC  メソッドD
複数のクラスが同じメソッドを持つときにクラスが増えれば増えるほどコード量が多くなり、管理も難しくなります。これを防ぐためにクラスの継承について学んでいきましょう。
##クラスの継承とは
あるクラスに定義されたメソッドを、別の新規クラスで利用できるようにした上でクラスを定義することを継承と言います。

クラスの継承には、親クラスと子クラスの関係があります。元となるクラスを親クラス、親クラスのメソッドを引き継ぎ新しく作成するクラスを子クラスと呼びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/8c07b3d0-649b-7177-3cbc-cdf6edb74c9a.png)
パトカーやトラックの上

元記事を表示

twitter-omniauthのgemでつくるTwitterログイン機能のあるあるエラー4選とその対処法

Ruby On RailsでTwitterログインによるユーザー管理機能を実装するときのあるあるエラー4選とその対処法です。

# メールアドレス認証
ユーザー管理機能のベースにはdeviseのgemを使います。
Twitterログイン機能の作成にはomniauth-twitterのgemを使います。

“`ruby:Gemfile
gem ‘devise’
gem ‘omniauth’
gem ‘omniauth-twitter’
“`

“`
bundle install
“`

参考:
[deviseで新規登録時にメールを送る](https://qiita.com/nekononeko_53/items/0af968c9617e404c45a1)
[RailsにDevise+OmniAuthでユーザ認証を実装する手順](https://qiita.com/zenizh/items/94aec2d94a2b4e9a1d0b)

# エラー1: サインアップしようとするとエラーが出る
“`
NameError in Devise::RegistrationsCont

元記事を表示

【Ruby】Seleniumでスクレイピングするときに起こりがちなあるあるエラー5選とその対処法

Webスクレイピングに役立つツール「Selenium」を使うときにおこりがちなエラー5選をまとめました。

# はじめに
Seleniumは複雑な操作をするWebスクレイピングするときに役立つgemです。

RubyでWebスクレイピングするときに使えるgem

– Nokogiri (基本)
– Mechanize (かんたん)
– Selenium (ブラウザ操作でいろいろできる)

NokogiriやMechanizeでは、HTMLタグやCSSを指定してページの内容を取得します。
Seleniumではプログラムでブラウザを開いて擬似的に操作できるので、複雑な処理ができます。

– ログインが必要な場合
– JavaScriptでページを描画している場合
– データを入力したい場合

など、HTMLタグやCSSセレクタだけでは必要な情報を取得できないときに使用すると便利です。

# Seleniumの使い方
Seleniumの使い方はいろんな方がまとめてくれているのでそちらを見てください。

[[Ruby] seleniumでChromeを使っ

元記事を表示

【Ruby】なぜrequire ‘json’するとto_jsonできるようになるのか

## TL;DR

– json module読み込み時にC言語の`rb_define_method`を呼び出して組み込みのクラスに後からインスタンスメソッドを追加しているから。

## 疑問

Rubyでjsonに変換する場合`to_json`を使用をする場合が多いと思います。
`Hash`型や`Array`型のオブジェクトから変換する場合は、以下のようなコードを書きますが、`require ‘json’`をしないと`NoMethodError`でエラーが発生します。

– `require ‘json’`しない

“`ruby:エラー起こる
irb(main):002:0> some_hash = {a: 1,b: 2}
irb(main):004:0> some_hash.to_json()
Traceback (most recent call last):
5: from /usr/local/opt/ruby/bin/irb:23:in `


4: from /usr/local/opt/ruby/bin/irb:23:in

元記事を表示

RailsでXSSを回避しつつ改行を維持して出力したい場合の書き方

Scriptタグを含む以下の文字列をいろんな方法で出力して、違いを比較します。

“`html:@hoge

“`

## そのまま出力
“`erb:erb
<%= @hoge %>
“`
“`:出力

“`
### 結果
XSSは回避できるが、改行やスペースが反映されない

## html_safe
“`erb:erb
<%= @hoge.html_safe %>
“`
“`:出力
Scriptが実行される!
“`
### 結果
XSSを誘発します。`html_safe`はその名前に反して全然safeじゃないです。

## simple_format(`@hoge`, sanitize: true)
“`erb:erb
<%= simple_format(@hoge, sanitize: true) %>
“`
“`:出力
alert(‘you are an idiot’);

元記事を表示

【ruby】map, injectを使ってeachを簡略化する

rubyの繰り返し処理として有名なのが、**eachメソッド**ですが、必ずしもeachが最善という訳ではなかったりします。

あるパターンの時は、違うメソッドを使った方が簡略化して、実装できる場合があります。
今回は、パターン別で、簡略化する書き方をご紹介します。

#すでにある配列から、要素を変化させた新たな配列を作成する時

`map`メソッドを使っていきます。

###演算子を使っての変化

“`ruby

# eachの場合

list = (1..5).to_a
list_double = []

list.each do |i|
list_doubule << i * 2 end p list_double # [2, 4, 6, 8, 10] ``` ```ruby # mapの場合 list = (1..5).to_a list_double = list.map{ |i| i* 2 } p list_double # [2, 4, 6, 8, 10] ``` ###インスタンスメソッドを使っての変化 ```ruby # eachの場合

元記事を表示

JavaScriptの関数

“`
前提
プログラミングを始めたて(1~2ヶ月)の自分が学習した内容をまとめています。
実際の現場では通用しないことや間違いなどあるかもしれません。
お気づきの際はコメントにてご報告いただければ幸いです。
“`

## JavaScriptの関数定義
JavaScriptの基本構成の1つで、同じ処理をまとめて定義し、何度も使えるような形にしたものです。
RubyでいうメソッドがJavaScriptでの関数っていうイメージです。
JavaScriptの関数には大きく分けて2つあります。
関数宣言と関数式です。
**注意点**
JavaScriptの関数では戻り値に関してルールがあります。
戻り値はreturnで明示する必要があります。
### 関数宣言
以下で定義されるものを関数宣言といいます。

“`
function 関数名(引数){ 処理 }
“`

### 関数式
関数名の定義なしで定義すること

“`
変数 = function(引数){ 処理 }
“`

#### 関数宣言と関数式の違い
読み込まれるタイミングが異なります。
関数宣言は先に読み込まれ、関数式は先

元記事を表示

【EC2/Vue/Rails】Vue + RailsのEC2デプロイ手順

# 目次
– **Rubyインストール**
– **Node.jsインストール**
– **Vue.jsインストール**
– **エラー&&対処**

# Rubyインストール

####◆ rbenv/ruby-buildインストール
“`
$ git clone git://github.com/rbenv/rbenv.git ~/.rbenv
$ echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bashrc
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bashrc
$ source ~/.bashrc
$ git clone git://github.com/rbenv/ruby-build.git /tmp/ruby-build
$ cd /tmp/ruby-build
$ sudo ./install.sh
“`
####◆ Rubyバージョン指定
“`
$ rbenv install -l
$ sudo yum -y install gcc-c++ glibc-headers

元記事を表示

if else練習

“`
前提
プログラミング初学者(1〜2ヶ月)の私が学習したことをまとめた内容です。
実際の現場では役に立たないことや間違っていることがある可能性があります。
お気づきの際はコメントいただければ幸いです。
“`

Rubyのif,elseを使った条件式の練習問題をしたので、
解説しながら自分の考えをまとめていきます。

“`

①変数numが1以上10以下のときtrueの時
②変数outsideがtrueであった時
①か②のどちらかを満たす時にtrue、それ以外をfalseと返すin1to10メソッドを作成する。
条件
&& ||を使って作ること。
“`

## &&と||について
まずは条件のにある**&&**と**||**とはなにかについて解説します。
&&と||は論理演算子と呼ばれ、前後の記述の真偽によってtrueかfalseを返す演算子です。
### &&はaかつb
まず&はshift+6で入力できます。
&が2つつながって&&となると前後の記述が両方trueの時trueという意味になります。
例えば、

a && b

と書かれていれば、aもbもどちらも満たす時にt

元記事を表示

Railsプロジェクトを作ろうとしたら躓いた人のメモ

(筆者の現環境がMacなので一旦Mac編のみ。Windowsに関しては追々書くかも)

## 0. 結論
– 何はともあれrbenvをインストール。話はそれから。

## 1. プロジェクト作成 ([参考](https://openbook4.me/projects/92/sections/488))
Terminalで
“`$ rails new {プロジェクト名}“`
を実行すると、Railsアプリの型となるファイルが生成されたプロジェクトディレクトリが作成される

## 2. 各種gemをインストール([gemとは](https://techplay.jp/column/529))
1.で作成したプロジェクトディレクトリに入り
“`$ cd ./{プロジェクト名}“`
↓のコマンドを実行
“`$ bundle install –path vendor/bundle“`

私はここでエラーが出た。
エラー文はこちら(エラー部分だけ抜粋)

“`
An error occurred while installing nokogiri (1.10.10), and B

元記事を表示

【enum_help】enum_helpを用いて日本語表示されたセレクトボックスを作る!

# 概要
enum_helpというgemを用いて、日本語で表示されたセレクトボックスを作った過程を備忘録として記録します。

# 環境
・ruby ‘2.5.7’
・rails ‘5.2.3’
・enum_help ‘0.0.17’

# 過程
## 1.準備
Gemfileにenum_helpを追加します。

“`Gemfile
gem ‘enum_help’
“`

ターミナルで「bundle install」します。

“`ターミナル
bundle install
“`

## 2.テーブルにenumのカラムを追加
対象のカラムを追加します。

“`db/migrate/20xxxxxxxxx_add_place_to_datespots.rb
class AddPlaceToDatespots < ActiveRecord::Migration[5.2] def change add_column :datespots, :place, :integer end end ``` ターミナルで「rails db:migrate」します。 ```

元記事を表示

【初学者向け】Ruby 遅延鉄道路線名の入手方法

只今ruby勉強中です。
記録としてここに記載しておこうと思います。

# プログラム概要
1. [鉄道遅延情報のjson](https://rti-giken.jp/fhc/api/train_tetsudo/)から遅延している鉄道情報を入手
2. 遅延しているか確認したい路線名を入力してもらう
3. その文字情報をもとに、ゲットしたjson情報の中に該当する路線があるか検索
4. 該当路線がある場合は、遅延情報アリと出力。ない場合は該当なしと出力

“`getting_delayed_trains_info.rb
require ‘open-uri’
require ‘nokogiri’ #スクレイピングするためのgem
require ‘json’ #jsonを使うための呼び出し

# urlを解析する
url = ‘http://tetsudo.rti-giken.jp/free/delay.json’
html = open(url).read
doc = Nokogiri::HTML(html, url)

#Json形式にパースし、ハッシュへ変換

元記事を表示

【Railways】RubyMineプロジェクトルートがRailsルートディレクトリ以外の時、Railways が動作しない

# 結論

プロジェクトルートディレクトリに`Rakefile`を作成する。

“`ruby
# Rakefile

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

# 以下に、プロジェクトルートディレクトリからRailsルートディレクトリの application.rb への相対パスを指定する
require_relative ‘path_to_your_rails_app_root/config/application’

Rails.application.load_tasks
“`

# 原因
Railswaysプラグインは、内部的に`rake routes`を実行しているが、これはRubyMineのAPIを利用しているらしい。[^1]
(おそらく、RubyMineの`Run Anything`を利用している

元記事を表示

デプロイを自動化する

##はじめに
「AWSのサーバーを利用する」ための手順を5つに分けて書いています。

記事は以下にまとめておりますのでご確認ください。

①[EC2の初期設定](https://qiita.com/maca12vel/items/902dde37a267ceca1c53)
②[本番環境でデータベースを作成する](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d)
③[EC2のRailsを起動する](https://qiita.com/maca12vel/items/2a04d39f958b53d687e2)
④[Webサーバーを設定する](https://qiita.com/maca12vel/items/35f9fb73bb21cb4869fb)
⑤[デプロイを自動化する](https://qiita.com/maca12vel/items/7b33dd6ea1ad556e3fec) ← イマココ

##デプロイの自動化
手動で行っていたデプロイ作業(「unicorn_railsコマンド」を使ってサーバーを立ち上げる手段

元記事を表示

EC2のRailsを起動する

##はじめに
「AWSのサーバーを利用する」ための手順を5つに分けて書いています。

記事は以下にまとめておりますのでご確認ください。

①[EC2の初期設定](https://qiita.com/maca12vel/items/902dde37a267ceca1c53)
②[本番環境でデータベースを作成する](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d)
③[EC2のRailsを起動する](https://qiita.com/maca12vel/items/2a04d39f958b53d687e2) ← イマココ
④[Webサーバーを設定する](https://qiita.com/maca12vel/items/35f9fb73bb21cb4869fb)
⑤[デプロイを自動化する](https://qiita.com/maca12vel/items/7b33dd6ea1ad556e3fec)

##EC2上でRailsを起動するための設定
ターミナル(EC2内)で実行
※ 途中で「passphrase」など3段階

元記事を表示

テストコードを書くときに、ランダムで情報を生成したい

【概要】
—————————————-
1.結論

2.導入方法

3.ニックネーム,email,パスワードの書き方

4.別の書き方

補足:日付/苗字・名前(漢字とカタカナ)の書き方

1.結論
—————————————-
gem”faker”をgemfileに記載し、bundle installする。
そして、specフォルダにfacroiesフォルダを作り記載したいファイルを作ってプログラミングする。

2.導入方法
—————————————-
※ここではgem”rspec-rails”,gem”factory_bot_rails”の導入の話は割愛します!その2つをbundle installしている前提でお話しします。”Rspec”,”FactoryBot”の記事を投稿した場合はこちらにもリンクを貼らせていただきます!

元記事を表示

OTHERカテゴリの最新記事