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

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

curlでアクセスできるのにrubyでアクセスできない、そんな状況でもデバッグがしたい!

# 全く同じパラメータなのにcurlだとアクセスできてrubyだとエラーが返ってくる??
とあるサービスのAPIを利用していたある日、
rubyで利用しているAPIからシステムエラーが返ってくるとの連絡が。
しかも、ログをとってcurlで叩いてみると正常にAPIは動作するとのこと。

さて、環境情報が悪いのかプログラムの仕業か、はたまた太陽風の影響なのか?
半日ほどあれやこれややってみて、原因がわかってみればああなんだそんなことか。というお話です。

#### rubyやcurlの問題ではなかったので、思考の過程をメモ書きとして残しておくものです。

## まずは本当なのか確認する

今回、問題が発生したのはテストサーバーなので、まずはテストサーバーにてリクエストのログを取りました。
コード自体はなんて事のない普通のNet::Httpな奴です。

(※コードはイメージです)

“`ruby
uri = URI.parse(“https://jsonplaceholder.typicode.com/todos”)
http = Net::HTTP.new(uri.host, uri.p

元記事を表示

【個人開発】バチェラーの優勝予想をする放置ゲームを開発しました

> 最初から優勝者を当てていたのに、その証拠がなく誰にも自慢できなかった。

これがバチェラー・ジャパン シーズン2(2018)を見終えたときから
自分の中に残っていたモヤモヤであり、本アプリ開発の背景です。

## サービス概要
[![Image from Gyazo](https://i.gyazo.com/06ced0101bbc63e1f402b3bd7a900bdf.jpg)](https://bachelor-derby4.herokuapp.com/)
文字通り「バチェラー・ジャパン シーズン4」の優勝予想をするシンプルなゲームです。
1分で遊べて人間観察力の自慢ができるサービスです。

https://bachelor-derby4.herokuapp.com/

## 使用技術
– Ruby
– Ruby on Rails(API)
– slim
– sorcery
– jwt
– meta-tags
– JavaScript
– axios
– bootstrap
– Vue.js
– Vuex
– V

元記事を表示

Dockerを使ってRails5の初期環境をサクッと構築する

## はじめに

そうだ、Rails環境、作ろう。
(BGM: 「My Favorite Things / The Sound of Music」)

## この記事の目標

– `docker compose up` したらホスト側からrailsのウェルカムページが表示できるコンテナイメージを作成するDokerfileおよびdocker-compose.ymlを作成する。
– DBは個人的な好みでpostgresqlにする(それほど特にこだわりはないけど)
– DBはホスト側のSQLツールから接続できるようにする。
– ホスト側の環境は極力汚さない。

## 作業環境

– Windows10 Pro(MacOSでも手順は変わらないと思います)
– Docker Desktop version 4.1.1
– Visual Studio Code 1.59.1
– 以下の機能拡張をインストールしておく。
– Remote Development
– Docker

## 作成手順

### docker-compose.ymlの構成

コンテナを2つ作ることとします。

元記事を表示

【ポートフォリオ解説】date-matchの全てがこれで分かる!

#初めに
この記事は、date-matchを詳細に解説した記事です。
この記事とGitHubのREADMEとの違いは次のとおりです。

“`
この記事:date-matchをより詳細に解説して、情報を網羅的に把握ができる。
README:date-matchの概要を把握ができる。
“`
date-matchの辞書的な位置付けとして、この記事を作成しました。
気になる項目だけでもご覧頂けたら、幸いです。
※随時、項目を追加予定です。

#アプリ概要
あなたの行きたい場所やイベントを提案・検索することで、デート相手を効率よく見つけることができるマッチングアプリです。
主に、次の3点ができます。

“`
1. 行きたい日時やプランなどを添えて、提案ができる
2. 住所やキーワードなどで検索、行きたい日時が近い順などで並び替えができる
3. ダイレクトメッセージを通じて、招待ができる
“`

これらが出来ることで、既存のマッチングアプリにはない、このアプリ特有のメリットが3点あります。

“`
1. 自分の行きたい場所に共感してくれている人、行きたい日時が合う人から、お相手を効率よく

元記事を表示

Railsで複雑なSQLを書いた時のお話(複数テーブル結合・相関サブクエリなど)

# 記事について
2021年4月からwebエンジニアとして働いています。まだエンジニア歴1年未満のペーペーです。
月に1~2回、学んだことをアウトプットするために記事を書いていこうと思います。記事内容は実務使う技術だったり、技術書や動画で学んだことだったり、適当に興味あることを書いていきます。

# 今回の背景
Railsを使った開発業務で複雑なSQL書く必要があったので、その時調べたことや気をつけたことをまとめてみます。ちなみに使っているDBはMYSQL。

# 目次
1. SQLのみで書いてみる
2. Railsっぽく書き換える
3. セキュリティ対策を考える
4. エラー対策を考える
5. その他SQL書くときに便利な書き方を考える
6. まとめ

## 1. SQLのみで書いてみる
最初からmodelクラスに書いてくとわけわからなくなるので、SequelProなどを使ってSQLを書いてそれを元にRailsを組み立てていくほうが圧倒的に効率がいいことを学んだ。
そして今回業務で書いたSQLはざっと以下の構成。

“`sql
SELECT `取得したい値`
FROM `相関サ

元記事を表示

Rubyにおける : の意味

#はじめに
Rubyでコードを書いていると、`:`や`::`がよく出てきますが、
いまいちはっきりと理解できていなかったためまとめてみます。

##シンボル

シンボルとは、任意の文字列に`1対1`に対応するオブジェクト
`:hoge`のように表す
下記のように、文字列が都度異なるIDになるのに対し、シンボルではすべて同じIDになる

“`ruby
[1] pry(main)> :hoge.object_id
=> 2307228
[2] pry(main)> :hoge.object_id
=> 2307228
[3] pry(main)> “hoge”.object_id
=> 300
[4] pry(main)> “hoge”.object_id
=> 320
“`

##ハッシュのキーにシンボルで使う場合
ハッシュのキーには一般的に文字列ではなく、シンボルを使用する
理由としては、文字列よりも高速で値を取り出すことができるため

“`ruby
[1] pry(main)> hash = { name: ‘太郎’, age: 20 }
=> {:name=>”太郎”, :

元記事を表示

<ゲストログイン機能>ゲストユーザーの検索にidを使用するのは避ける方が良い

# はじめに
この記事はプログラミング学習中に得た知見を備忘録としてまとめたものです。
知っている人にとっては当たり前であったり理解が足りていないと感じられる内容も含むかと思いますので、あらかじめご了承ください。

# この記事で分かること
– Railsにおいてテーブルの主キーにはAUTO INCREMENTが設定されています。
– そのため、値がuniqueになるように自動採番されます
– `$ rails db:reset`でテーブルの再構築をした際、開発環境はAUNO INCREMENTは自動的にリセットされますが、本番環境(Heroku)ではリセットされません
– そのため、ゲストユーザーなど初期データで投入するとしても、テーブルのidカラムに依存した処理はNGです。

# 環境
**ローカル環境**
– Ruby 6.1.4
– Rails 3.0.2
– mysql2 0.5.3

**本番環境**
– Heroku
– ClearDB MySQL

# 背景
####ポートフォリオの作成においてゲストログイン機能を実装
すでにHerokuにデプロイしているアプリ

元記事を表示

rubyでbin2hexとhex2bin

phpの`hex2bin`と`bin2hex`に該当する処理をrubyでぱっと実現。

“`ruby
def hex2bin(value)
[value].pack “H*”
end
“`

“`ruby
def bin2hex(value)
value.unpack “H*”
end
“`

## 参考

– https://stackoverflow.com/questions/5244414/shortest-hex2bin-in-ruby

元記事を表示

最大値を求める関数

##概要
最大値を求める関数をつくってみた

##手順
1.まずは配列でいくつかの数値を取得

“`
arr = [3, 4, 5, 6, 7]
“`

2.メソッドの中身

“`
def saidai(arr)
a = 0
arr.each do |i|
if a < i a = i end end return a end ``` ####解説 ・「a」という変数に0を定義する。 ・先ほど取得した配列を1つずつチェックしていく。 ・一つずつの要素(i)がaよりも大きかったら  新しくa上書きしていく。 ``` return a ``` で返り値は最後に上書きされたaの値になる。

元記事を表示

Rails ruby 2.6.0 のdockerイメージでwebpackが動作しない

###
Ruby 2.6.0でインストールされるyarnのversionが古い可能性がある。

“`
#Dockerfile

RUN set -x && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo ‘deb http://dl.yarnpkg.com/debian/ stable main’ > /etc/apt/sources.list.d/yarn.list

RUN set -x && apt-get update -qq && \
apt-get install -yq build-essential yarn

“`

コンテナ内でversionを確認

“`
yarn –version
1.22.15
“`

これで動作した。

元記事を表示

本日のアウトプット1

クラスとは?インスタンスとは何か?についてまとめていきます

クラスとは、一言でまとめると「雛形作るためのもの」です
車を例にして例えると、車にはハンドル、タイヤ、エンジンが付いているなど共通している部分があります。この共通している部分をまとめているものが、クラスです。

インスタンスとは、一言でまとめると「クラスから作ったもの」です
1から車を作るのは大変でも、クラスがあることで短時間で大量生産が可能になります。
しかし共通するもの部分はあっても、タイヤの大きさ形が微妙に違うといったことはあります。
つまり、インスタンスはできたものによって詳細が異なります。

Rubyには初めから使えるクラスがあります。
代表的な例で言うと、stringクラスですね。
興味がある方は是非調べてみましょう

クラスやインスタンスは自分で定義することができます。

クラスの定義方法から説明していきます。
class クラス名
 内容
ned
このようなコードで定義していきます。

インスタンスはnewメソッドで定義していきます。

元記事を表示

Ruby 文字列オブジェクト

“`
#文字列を大文字にする
‘oomoji’.upcase
=>”OOMOJI”

#文字列を小文字にする
‘KOMOJI’.downcase
=>”komoji”

#文字列の一部を切り出す
‘お勉強します’.slice(0,3)
=>”お勉強”

#文字列を連結
‘お勉強’ + ‘します’
=>”お勉強します”

#末尾に文字列を追加
‘お勉強’ << 'します' =>“お勉強します”
“`

元記事を表示

JavascriptとRubyの違いについて

#2つの言語の役割
初学者はRubyは学ぶことが多い言語です。
サーバーサイドの言語でwebアプリの裏側で処理が行われる言語で
“`ロジックが反映される言語“`です。
一方でJavascriptはブラウザなどの操作で使われる
“`見た目が反映される言語“`です。
最近は、***サーバサイドJavaScriptのNode.jsやDeno.jsもあり、
WebサーバをJavaScriptで動かす***ことも増えてます。

#JavascriptとRubyの言語選びの基準
最初にRubyです。
1 初学者でも取り組みやすい (コードがシンプルで教材なども豊富)
2 日本語のドキュメントも充実
3 Ruby on railsというフレームワークで開発スピードが速い

次にJavascriptです。
1 webサイトではほとんどJavascriptで使われる
2 1つ言語を極めればキャッチアップしやすいが、初学者でも取り組みやすい(個人的にはRubyの方が簡単)
3 教材やドキュメントが豊富

次からは具体的にコードの違いを見ていきます。

#JavascriptとRubyのコードの

元記事を表示

Numo::NArray で行列の積(あるいはテンソルの縮約)を計算

Ruby で高速に多次元数値配列を扱いたいときに [Numo::NArray](https://ruby-numo.github.io/narray/) を使っているのだが、この配列は基本的に「要素毎」の演算となっている。では NArray で行列の積などを計算したいときはどうすればいいのか気になったので、調べて整理した。

## TL;DR

* よく使う積はメソッドが用意されていて、行列の積なら `a.dot(b)` でいい
* 自分でやる場合、行列の積 $C_{ij} = \sum_{k} A_{ik} B_{kj}$ は `c = a[false, :new].mulsum(b, -2)` で計算できる( `a`, `b` は2次元配列)
* より一般にテンソルの縮約を計算する場合、掛け合わせるテンソルの添字が揃うように配列の次元を追加し、 `#mulsum` で縮約する次元を指定して積和計算する

## (前提知識)ビューの次元指定について
`a[false, :new, true]` と書かれていても意味がわからないときのためのメモ。

元記事を表示

【Ruby on Rails】rails sして立ち上がらない時の解消方法

#はじめに

久しぶりにrailsのサーバーを立ち上げようとしたら以下のエラーが出たので、解決方法をメモしておきます。

““
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode…
* Version 3.9.1 (ruby 2.4.1-p111), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:8080
Exiting
/usr/local/rvm/gems/ruby-2.4.1/gems/puma-3.9.1/lib/puma/binder.rb:269:in `initialize’: Address already in use – bind(2)

元記事を表示

Ruby のメソッド名は小文字で始めなければならない,わけじゃない

ときどき,Ruby における命名規則として

> メソッド名は小文字で始めなければならない

と書かれた記事を目にしますが,そんなことはありません。

# 大文字で始めることもできる

以下のように大文字始まりのメソッドを定義することもできます。

“`rb
def Ruby
puts “Hello, Ruby!”
end

Ruby() # => Hello, Ruby!
“`

メソッド名をアルファベット小文字で始めるのは,文法上のルールではなく慣習なのです。

しかし,大文字始まりのメソッド名を使うとき,注意しなければならない点があります。
上のコードで,`Ruby` というメソッドを呼び出すときに `Ruby()` のようにして `()` を付けました。
あれれ? `( )` は省略できるんじゃなかったっけ?
はい,そうなんですが,今の場合,`()` が無いと「定数の参照」なのか「メソッド呼び出し」なのか区別がつきません。こういう場合,Ruby の処理系は定数の参照と解釈するようになっています(そういう仕様)。
それゆえ,単に `Ruby` と書いたのでは

“`
u

元記事を表示

to_s は数値を文字列化するメソッド,なのか?

Ruby の初心者がお書きになった記事で,

> `to_s` は数値を文字列にするメソッドです

と書かれているものを非常によく目にします。
確かに

“`rb
3.to_s # => “3”
0.1.to_s # => “0.1”
“`

ですから,このメソッドは数値を文字列に変換しています。
にも関わらず引用した表現に引っかかりを感じるのは,数値以外のオブジェクトにも `to_s` メソッドが使えるからです。

“`rb:例
{朝: 3, 暮: 4}.to_s
# => “{:朝=>3, :暮=>4}”
“`

Ruby に入門したての方は,

* 同名のメソッドが複数のクラスやモジュールに定義されていることがある
* そのうちのどのメソッドが呼び出されるかはレシーバーによって決まる

ということを早いうちに知っておかれるとよいと思います。

(メソッド呼び出しの)レシーバーというのは,上記のコードで言えばメソッド呼び出しの `.` の前に書かれているオブジェクトのことです。
一般には,メソッド呼び出しの `.` の前には式を書くことができ,その式を評価した結果として

元記事を表示

1日1投稿の制限を実装する方法(メモ)

##環境
– Ruby 2.6.5
– Rails 6.1.4.1

##背景・目的
– ポートフォリオで習慣化を可視化するアプリを開発中。
– 現状、ユーザに対して1対多の菅家なので、実施内容を繰り返し何回でも投稿できるようになっている。
– Model側ではなくView側で投稿制限を実装する。

##実装

“`rb:app/views/task/index.html.haml
###

– if @taskes.last != nil
– if @taskes.last.created_at.day < Date.today.day = link_to '追加', new_article_task_path, class: 'btn-mini-confirm' -else - if @taskes.last.created_at.month < Date.today.month = link_to '追加', new_article_task_path, class: 'btn-mini-confirm' - else

元記事を表示

Ruby で Sass るには

Ruby スクリプトで Sass を CSS に変換するにはどうするのがよいのか。
Sass の歴史にも最新動向にも詳しくはないので,間違ったことを書いてたらツッコミを入れてほしい。

# 従来

これまではどうだったのか。

## sass gem 時代

かつてその名もズバリ [sass](https://rubygems.org/gems/sass) という gem があった(今も存在している)。
これは Ruby で書かれた Sass の処理系であった。
そもそも Sass は Ruby が発祥なのだ。

今でも使うことはできる。Gemfile に

“`rb
gem “sass”
“`

と書いておき[^pn],

[^pn]: pathname gem に関する警告がドバーッと出るようなら,`gem “pathname”` も書いておこう。以下同じ。

“`rb
require “bundler”
Bundler.require

sass_text = <<~SASS .foo color: darken(red, 10%) margin-to

元記事を表示

Rubyのsuperはメソッドチェインできる

# 概要

> super は現在のメソッドがオーバーライドしているメソッドを呼び出します。括弧と引数が省略された場合には現在のメソッドの引数がそのまま引き渡されます。引数を渡さずにオーバーライドしたメソッドを呼び出すには super() と括弧を明示します。

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

この`super`ですが、以下のようにメソッドチェーンすることで続きの処理を書くことができます。

“`ruby
def some_method
super.to_s
end
“`

# 詳細

例えば次のような受け取った引数を使って文字列を返すメソッドを持ったクラス`Klass`があるとします。

“`sample.rb
class Klass
def hello(arg: nil)
“Hello #{arg}!”
end
end

klass = Klass.new
result = klass.hello(arg: “World”)

puts result
“`

元記事を表示

OTHERカテゴリの最新記事