Ruby関連のことを調べてみた2019年11月03日

Ruby関連のことを調べてみた2019年11月03日
目次

平方根をとった数字が整数かどうかを判断するのに恐ろしく手間をかけていた話

##はじめに

本日は題名の通り、私がAtcoderの問題を解いていてたまに出てくる、
ある値の平方根が、整数になるかどうか、という判定の為に書いたソースについて
説明していこうと思います。

##失敗例

平方根をどうやって計算しても良いかわからない私は、
とりあえずググって出てきたMath.sqtr(x)を使って平方根を求めることを覚えました。

それをどうやって整数か判断するか、と考えた時、私の頭の中では、
「整数 = 小数点が存在しない数」という式を思いついた為、
そのように書いてみることにしました。

“`sample.rb
x = gets.split(‘ ‘).map(&:to_i)
count = 0
x.times do |n|
a = Math.sqrt(n)
#以下で、小数が存在しないことを判定
if a(-1) == nil
count += 1
end
end

“`
aの-1桁目、小数第一位が存在しない=整数、と言うことを考えていましたが、
見事にこれは不正解となりました。

##何が問題だったのか

上記のソース何が悪かったか、と言いますと

元記事を表示

#Ruby の Faraday で ssh + SOCKS による https proxy 接続ができなかったので faraday_adapter_socks gem で Middleware 指定をした

# SOCKS を起動

“`
ssh -vND 8888 user@host
“`

# gem install

“`
gem install faraday
gem install faraday_adapter_socks
“`

# Ruby or pry

環境変数に socks のURLを指定する

“`
https_proxy=socks://127.0.0.1:8888 ruby some.rb
“`

“`
https_proxy=socks://127.0.0.1:8888 pry
“`

# Ruby Code

adapter を指定して get リクエストしてみる

“`rb
Faraday.new(url: ‘https://httpbin.org/ip’) { |conn| conn.adapter :net_http_socks }.get.body
“`

e.g result

IPアドレスを返してくれるサービスにリクエストを投げてみる
sshサーバーのIPアドレスが返ってきたら成功

“`
[8] pry(main)>

元記事を表示

ボタンを条件に応じて非活性にする

#いきさつ
ボタンを非活性にする方法はいろいろあるものだなぁと思ったのでまとめておきます。

#非活性の条件
今回は非活性の条件を下記のようにします。

“`ruby
CONDITION_DAY = 11
Date.today.day < CONDITION_DAY && hoge.blank? #hogeは配列 ``` 今日の日付が1~10日であり、hogeに要素がない場合はボタンを非活性状態にします。 #html.erb ```erb <%# クラスはbootstrapを使用した場合のもの %>

<%= link_to 'ボタンです', {controller: :hugas, action: :piyo}, class: 'btn btn-primary btn-block', id: 'submit-btn' %>
“`

#css
bootstrapを使えばクラスに’disabled’を指定すれば非活性となりますが、
使用していない場合は次のcssを書くものとします。

“`css

a.disabled{
pointer-events: none;

元記事を表示

VScodeでRubyを書くときに設定したこと【初心者】

## はじめに
自分への備忘録こめて書きます。
ただ手伝ってもらったりしたこと多くかなり記憶が曖昧…。
思い出したらその都度追記予定。

## 設定

##### – VSCodeのインデントのスペース数を4→2へ変更

デフォルトだと4になっていてRubyコーディング規約にそぐわないため変更。
これ変更しないと新規ファイル開くたびに設定し直さなきゃいけなくて地味にめんどい。

### 拡張機能編
##### – 日本語にする
`Japanese Language Pack for Visual Studio Code`を追加。
初心者には英語じゃちんぷんかんぷんすぎるので。

##### – RuboCopを追加
Rubyにふさわしい書き方でないところやエラーが出てしまう箇所を波線で示して、カーソルを合わせるとその内容を教えてくれます。
設定など詳しくは他記事をどぞ。

[RuboCop is 何?](https://qiita.com/tomohiii/items/1a17018b5a48b8284a8b)

元記事を表示

#Ruby や #Rails で 西暦 年月日を 自前でバリデーションする的な処理 ( Date.parse )

日付のstringに対して Date.paras する

# Ruby では require が必要

“`rb
require ‘date’
“`

# 成功ケース

8桁の数字でも ハイフン区切りでも スラッシュ区切りでも

なんとドット区切りもできた

“`rb
[21] pry(main)> Date.parse(‘20200229’)
=> #

[34] pry(main)> Date.parse(‘2020.02.29’)
=> #
[35] pry(main)> Date.parse(‘2020/02/29’)
=> #
[36] pry(main)> Date.parse(‘2020-02-29’)
=> #

元記事を表示

#Ruby で local に SOCKS proxy を立てて ssh サーバーを踏み台に https 接続をする例 ( faraday + faraday_adapter_socks gem )

# コンソールで SOCSK proxy を起動しておく

“`
ssh -vND 8888 user@host
“`

# gem Install

“`rb
gem install faraday
gem install faraday_adapter_socks
“`

# Code

“`rb
require ‘faraday_adapter_socks’

options = { proxy: { uri: URI.parse(“socks://127.0.0.1:8888”) } }

url = ‘https://httpbin.org/ip’

conn = Faraday.new(url, options) do |faraday|
faraday.request :url_encoded
faraday.adapter :net_http_socks # please assign “:net_http_socks” adapter
end

response = JSON.parse(conn.get.body)
# => {“origin”=

元記事を表示

簡易的なウォッチドッグタイマーをRubyで表現できるのか

ryoです。好きなアーティストは「神様、僕は気づいてしまった」です。略称 神僕
神僕の曲で、「ウォッチドッグス」が特に好きです。
そこで今日はウォッチドッグタイマーについてRubyで表現できるか挑戦しようと思います。

**自分の読解力に自信がなくて、ウォッチドッグタイマーの解釈を間違えているかもしれません。
間違えていたらご指摘いただけたらありがたいです。**

## この記事を読んで身につくこと
– ウォッチドッグタイマーが何かがわかる。
– Rubyでウォッチドッグタイマーを表現できるようになる

## 目次
– ウォッチドッグタイマーとは何か
– 作る内容
– 事前準備
– 完成コード
– 各コードの解説
– 終わりに

##ウォッチドッグタイマーとは

システムを定期的に監視して、異常があった場合リセットするためのタイマーのことです。
ウォッチドッグ(watchdog)は番犬という意味だそうです。

[ここで大まかなイメージを説明しています。wikiとかもありますが、リンクは俺の好みで選びました。](https://wa3.i-3-i.info/word16698.html)

元記事を表示

#Ruby の Faraday とは? get リクエストで https 接続してみる例

# Faraday って何よ

Ralsで使われているけど、ほとんど何してるか知らなかった。

ネットワーク接続まわりの何かだという漠然としたイメージだった。

HTTP クライアントだということさえ知らなかった。生きててごめんなさい。

>Simple, but flexible HTTP client library, with support for multiple backends.

[lostisland/faraday: Simple, but flexible HTTP client library, with support for multiple backends.](https://github.com/lostisland/faraday)

# インストール

“`
gem install faraday
“`

# get リクエストを送ってみる

https アクセスするにも1行で書ける。

“`
Faraday.get(‘https://example.com’)
“`

これだけ。

あー、あの Rails でもよく見るやつだ!

(と思っ

元記事を表示

URL Patternが「users/:user_id/profiles/:id/edit」とややこしくなってしまった話

# はじめに
長かった某フリマアプリのコピーページ作成もいよいよ最終段階になりました。
まだ、ページからページへのリンクができていなかったのでそこに取り掛かりました。
そこでユーザー編集ページに飛ばすpathを設定したが、以下の画面に
[![Image from Gyazo](https://i.gyazo.com/18e93dc573b656771cbaae757328d7f4.png)](https://gyazo.com/18e93dc573b656771cbaae757328d7f4)
ほほぅ、めんどくさいことになってますな。

注目して欲しいのはこの部分

“`
No route matches {:action=> “edit”, :contoroller=> “profile”, :user_id=>1},missing required keys[:id]
“`

翻訳すると、アクション、コントローラ、user_idは参照できたけど、[:id]ってどこですか?と聞かれています。

# rake routesで確認してみよう
では、パスとそのURLはどうなっているの

元記事を表示

[Ruby on rails]1ヶ月目の学習まとめ

##執筆の経緯
RailsでAPIを開発し、それを用いてReact Nativeでネイティブアプリを開発するという目的で学習を開始しました。
具体的には「**物忘れ防止アプリ**」を作成します。
場所と通知をリンクさせるもので例えば以下のような挙動を実現させます。

ex
スーパーに行く前に買い物リストをメモして、スーパーの位置座標を指定する。
買い物に行きスーパーに到着すると、登録した位置情報より通知が来て買い物リストを表示する。

こんなアプリあったらめちゃくちゃ便利だと思いませんか?
僕自身、「切れてしまったマヨネーズを購入しなきゃ!」と買い物に行く前は考えていても
スーパーに着く頃には頭になくて、買い物終えた帰宅途中に「あっ!、マヨネーズ!!!」
とうっかりすることがあるんですよ。。。
「俺ってにわとりなのかよ、、、」って自己嫌悪したくないし、
仕方なく近くのコンビニで割高のマヨネーズを買いたくもない!
そんなこんなで「物忘れ防止アプリ」の作成を志したのです。

記事を書くことでアウトプットすることが主な目的で、1月おきくらいに学習の進捗を綴っていきます。
しかし、同じよ

元記事を表示

railsでサジェスト機能を実装してみた

railsでサジェスト機能を実装した時のメモ?

autocomplete系のgemが軒並みメンテされていなかったので、jquery-uiで実装していきます。

## 動作環境
rails 5.2.2.1
jquery-ui-rails 6.0.1

# やること
`company`属性を持つ`User`というモデルを想定し、
User作成画面で`company`のテキストフィールドに入力した際、
既にDBに存在するデータをもとに候補をサジェストする機能を実装します?

こういうやつ↓
![サジェスト.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258211/04b39003-1109-eefa-1fd4-a6c55ca3b318.gif)
## Gemfile

Gemfileに下記を追加し`bundle install`

“`ruby:Gemfile
gem ‘jquery-ui-rails’
“`

“`bash
bundle install
“`

## applicat

元記事を表示

Ansibleの変数を利用してserverspecで自動テストする実装例

# はじめに

Ansibleで設定したLinuxサーバ群に対して、serverspecでテストする際に抱えていた以下のような問題を解決するために、Ansibleとserverspecを魔改造(?)してみました。

* Ansibleとserverspecそれぞれで変数ファイルを用意するのが面倒
* Ansibleとserverspecそれぞれで対象ノードを記述したインベントリファイルを用意するのが面倒
* `serverspec-init` で提供される初期設定では、テストコードをテスト対象サーバ名のついたディレクトリ毎に用意する必要があり面倒

Ansibleとserverspecを併用する際の実装例として参考になさってください。

# 実装例

## 環境
### Ansible Control Node
* CentOS 7.6
* ansible 2.9.0
* serverspec 2.41.5
* ruby 2.6.3p62
* Python 2.7.5

### Ansible Managed Node
* CentOS 7.6 × 2 Node

## ディレクトリ構

元記事を表示

RSpec+capybara+selenium+chromedriverでブラウザ自動テスト!!

#はじめに
仕事でブラウザテストやったので自作アプリにも入れておきますううううう。

#環境

– ruby 2.5.0
– Rails 5.0.7.2
– rspec-rails 3.9.0
– capybara 3.29.0
– selenium-webdriver 3.4.4

#Gem

“`ruby:Gemfile
group :test do
gem ‘rspec-rails’
gem ‘capybara’
gem ‘selenium-webdriver’
end
“`
“`ruby:ターミナル
$ bundle install
“`
“`ruby:ターミナル
$ rails g rspec:install
“`
“`ruby:ターミナル

create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`
こんな感じでファイルできます。

#chromedriverの導入

###Homeb

元記事を表示

【みんな大好きカレーパン】Rubyでe-Statから東京のカレーパンの時系列売価を引っ張るプログラム

## はじめに
e-StatのAPIを使って、外部からデータを引っ張るプログラムの紹介です。
外部データを引っ張れるようになるとかなり楽しいです!

今回はみんな大好き**カレーパン**の時系列売価を引っ張ってみました!

まだ触ったことのない方に向けて記載してみました!

## この記事が役立つ方
– WebAPI初心者で
– 外部からデータを引っ張ってみたい
– Ruby初心者

## この記事のメリット
– 外部データを引っ張る具体的な手順が分かるようになる

## 環境
– OS: macOS Mojave version 10.14.6
* シェル: zsh
* 使用言語: Ruby 2.6.3
* HTTPクライアントライブラリ: HTTPClient
* 使用するWeb API: [e-Stat−API](https://www.e-stat.go.jp/api/)
* 取得するデータ:JSON形式

## ディレクトリ構成
今回のディレクトリ構成は以下の通りです。

price_check_app/
├ conf/ ─ config.yml
├ src/ ─ Pric

元記事を表示

RubyでWebフレームワークを自作する

# RubyでWebフレームワークを自作する
## 動機
Webフレームワークを使ってアプリケーションを作成することは良くあるが、実際にその中身やどういった動きをするのか知りたい。
今回は、RailsライクなMVCフレームワークを自作します。

## Rackで作成していく
ディレクトリを作成して、 `bundle init` でGemfileを作成します。

“`zsh
❯ mkdir my_framework
❯ bundle init
“`

`rack`をインストールします。
また、デバッグしやすくするために `pry` もインストールします。

“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|/repo_name/| “https://github.com/#{/repo_name/}” }

gem ‘rack’
gem ‘pry’
“`

“`zsh
❯ bundle install
“`

## Rackとは

元記事を表示

学習記録#3

#今日やったこと

– progate:RubyⅠ復習
– progate:RubyⅡ-1-2 まで

#####課題点
– スケジューリング:大学の課題との兼ね合い→もう少し調整用の遊びを持たせる
– 時間割つくってみる?

##progate:RubyⅠ復習
スライド流して復習した上で最終課題をした。
UnityでやるC#と気をつけないと混ざる。並行してやってる悪い点。比較して共通点見つけたりできるのは楽しいけど。

##progate:RubyⅡ-1-2 まで
できればⅡを終わらせるまでいきたかったけど〆切近い課題を優先。週末で調整したい。

元記事を表示

【はじめてのWebAPI】RubyでのHTTPClientの基本構文

## はじめに
RubyでHTTPClientを使うときの基本構文について記載しました。
Web APIを使って外部データを引っ張るための第一歩!

## この記事が役立つ方
– Web APIを触ったことがなくて
– HTTPクライアントを使ったことのない
– Ruby初心者

## この記事のメリット
– 外部からデータを引っ張る第一障壁をクリア出来る

## 環境
– OS: macOS Mojave version 10.14.6
* ターミナルのシェル: zsh
* Ruby 2.6.3

## HTTPClientとは?
Rubyで標準で入っているnet/httpよりも機能面が充実しているHTTPクライアントライブラリ。

これを使うことにより、プログラムで外部へHTTPリクエストを送ることが出来るようになります。

## 導入
まずは以下のようにgemをインストールして下さい。

“`zsh
gem install httpclient
“`

## 基本コード
以下が基本のコードです。
ここからは活用したいデータによって書き方が異なります。

“`zsh
# H

元記事を表示

【脳のリソース不足のあなたに】生Rubyのエラー(例外クラス)と良くある原因

## はじめに
**元気なときは大丈夫!**ちゃんとエラー文を読み解いて自己解決出来る!

でも、頭が疲れて**脳がリソース不足**になっているとき、ついテキトーにググって**時間を浪費**してしまっていませんか?

そんな疲れたあなたのために、「原因はこれじゃない?」と**あたりをつけられる**よう良くある原因を問いかけ形式でまとめました。

※Rails ではなく、**生Ruby**でのエラーを記載しています。

## この記事が役立つ方
– エラー発生時にあたりをつけず
– 手当り次第にググってしまう
– Ruby初心者

## この記事のメリット
– Rubyのデバッグ効率UP!

## よく発生する例外クラス一覧
– SyntaxError
– NameError
– NoMethodError
– TypeError
– ArgumentError
– SystemStackError
– LoadError

## それぞれの良くある原因
### SyntaxError
– `end`の過不足はありませんか?
– `,`の過不足はありませんか?
– `()`や`{}`

元記事を表示

ruby(1.9.3)+rspec(2.11)カスタムフォーマッター作ってみた

# | まえおき

本記事はRspecのカスタムフォーマッタークラスの作成に関する記事です。

# | きっかけ

むかしむかしrubyのバージョンを1.8.7から1.9.2へアップしたいおじいさんがおりました。

おじいさんはGemfileやらDockerやらをこねくりまわして、どうにか新しいバージョンでrspecが動くところまでこぎつけましたが、その時点でrspecのエラー数は1000件を超えておったそうな。。。

これは長丁場になると見込んだおじいさんはグーグルスプレッドシートを使ってエラーの一覧を管理しようと考えましたが、1000件を越えるエラーの内容をスプレッドシートに記帳するのは大変な作業です。

おじいさんは、だめもとで飼犬のポチオウにこのことを相談してみました。

するとポチオウは言いました。「おじいさんおじいさん、RspecのエラーをTSVファイルに書き出しするRspecのカスタムフォーマッタークラスを作ればいいんじゃない?」

# | バージョン

– ruby 1.9.3
– rails 3.0.1
– rspec 2.11.0

# | rspecはこんな感じで

元記事を表示

video_tagで横幅いっぱいに動画を挿入する方法

#はじめに
video_tagで横幅いっぱいに自動再生で動画を流す。
備忘録として残します。

#つまずいたところ
– 動画のファイルの置所
– 自動再生
– 横幅を画面いっぱい、縦幅は指定

#実装手順
app/assetsの直下にvideosフォルダを作成。
videosフォルダ内に背面で流したい動画を入れる。
(ここでは、test_video.mp4という動画ファイルを入れました。)

次にvideo_tagを使って動画を表示

“`index.html.haml
.video-content
= video_tag “test_video.mp4”, loop: true, autoplay: true, muted: true
“`

object-fit: cover;をつけることで、動画の横と縦の比率を変更できた。
動画も崩れないで再生されている。

“`index.scss
.image-content{
height: 80vh;
z-index: 1;
video{
width: 100%;
height: 100%;

元記事を表示

OTHERカテゴリの最新記事