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

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

[Ruby] Array#include?メソッド

##はじめに
今回はinclude?メソッドについて紹介します。同じincludeでも、Rubyの中ではいくつかのincludeがあるのですが、この記事では配列に対して使うinclude?を説明します。

##Array#include?

配列に対して使用します。配列の中にある要素があるのかどうかを調べるためのメソッドです。その調べたい要素はinclude?に引数として渡します。
あったらtrue、なかったらfalseを返します。

“`ruby
array = [1, 2, 3, 4, 5]
array.include?(3)
=> true

array.include?(6)
=> false
““

使用するオブジェクトが配列であれば調べたい要素のデータの型が数値だろうが文字列だろうが問題ありません。

“`ruby
array = [“a”, “b”, “c”, “d”]
array.include?(“c”)
=> true

array.include?(“e”)
=> false
“`

元記事を表示

【JavaScript】画像投稿時のプレビュー機能

画像複数投稿機能以上に詰まっていたプレビュー機能。
ようやく解決できたので備忘録のために投稿します。
jsの記述のルールや基礎的なところ抑えていかなければと思いました。

下記解決後コード
2,14,15,30行目の記述に変更を加えています。

“`js
document.addEventListener(‘DOMContentLoaded’, function() {
if (document.getElementById(‘store-image’)){
const ImageList = document.getElementById(‘image-list’)

const createImageHTML = (blob) => {
const imageElement = document.createElement(‘div’)
imageElement.setAttribute(‘class’, “image-element”)
let imageElementNum = document.querySel

元記事を表示

【Rails】sequenceを使ってテストデータを作成する。

sequenceというものを使ってテストデータを作成すると、テストデータをいい感じに作ることができる。

“`ruby
FactoryBot.define do
factory :user do
sequence(:name) { |n| “ごりら#{n}” }
end
end
“`
このような形でspec/factories/user.rbに記述する。
そして、rails cでuserを作成してみる。

“`
irb(main):001:0> FactoryBot.create(:user)
(2.4ms) SET NAMES utf8mb4 COLLATE utf8mb4_bin, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ‘,STRICT_ALL_TABLES’), ‘,NO_AUTO_VALUE_ON_ZERO’), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
(2.3ms) BEGIN
Use

元記事を表示

[Ruby] ハッシュ

# ハッシュの出力
“`
p ({:coffee => 300, :coffee_latte => 400})
#=> {:coffee=>300, :coffee_latte=>400}

# ハッシュの別の書き方(キーにシンボルを指定したときのみ)
p ({coffee: 300, coffee_latte: 400})
#=> {:coffee=>300, :coffee_latte=>400}
“`

# 変数に代入してハッシュに名前をつける
“`
menu = {coffee: 300, coffee_latte: 400}
p menu #=> {:coffee=>300, :coffee_latte=>400}
“`

# ハッシュから値を取得する
“`
menu = {coffee: 300, coffee_latte: 400}
p menu[:coffee] #=> 300
“`

# ハッシュへキーと値の組を追加する
“`
menu = {coffee: 300, coffee_latte: 400}
menu[:mocha] = 400
p men

元記事を表示

6章 アセンブラ

# はじめに

これは、「コンピュータシステムの理論と実装」(以下「Nand2Tetris」という)の第6章 アセンブラのプロジェクトに対するレポートである。

Qiitaでは、画像の利用に制約があるため、フローチャートなど掲載することは省いている。

# プロジェクトに対するレポート

## 目標
* Hackコンピュータのアセンブラを作成する
* 1章から5章で作成したHackコンピュータを使い変換後の機械語を動作させる

## 材料
* Nand2Tetrisで定義しているアセンブラのAPI(仕様)
* Ruby
* アセンブラ
* CPUエミュレータ
* ハードウェアエミュレータ

## 実装
Nand2Tetrisのアセンブラは文字列の変換のため、スクリプト言語が適していると考え、Rubyにより作成することとする。

### Parserモジュール

* Rubyのクラスにより実装する
* API仕様のルーチンは、メソッドにより実装する

#### コンストラクタ/初期化
引数で入力されたファイルを開く。
コードの煩雑化を防ぐためファイルが存在しないときなどの例外処理は実

元記事を表示

Railでの非同期通信(Ajax)を利用したいいね機能の実装

使用環境
Ruby2.6.8
Rails6.1.4

#完成イメージ
![スクリーンショット (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1193085/f7c1a964-2e29-07b8-d881-1f4b353a6571.png)

非同期通信を用いることで、上の画像の♡を押すと、ページの更新なしに「いいね」をつけたり、消したりすることができます。

##処理の流れを説明する前に・・・

####前提
railsでjQueryを読み込めるようにする必要があります。

https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74

また、非同期通信でいいね機能を実装するためには、javascriptでHTML構造を書き換える必要があります。なので、それぞれの投稿を部分テンプレートで切り出す必要があります。

![スクリーンショット (30)_LI.jpg](https://qiita-image-store.s3.ap-

元記事を表示

[Ruby] 配列のメソッド

# 配列の要素数を取得 size
“`
# 要素の取得
puts [1,2,3].size #=> 3
“`
# 配列の全要素の合計を得る sum
“`
# 要素の合計の取得
puts [1,2,3].sum #=> 6

# 平均値の計算
a = [1,2,3]
puts a.sum/ a.size #=> 2
“`

# 重複しているメソッドを取り除く uniq
“`
# 重複する要素を取り除く
Array1 = [1,2,3,3]
Array2 = Array1.uniq
p Array1 #=> [1, 2, 3, 3]
p Array2 #=> [1, 2, 3]

# uniq!で自分自身の配列オブジェクトを変更する
Array1 = [1,2,3,3]
Array2 = Array1.uniq!
p Array1 #=> [1, 2, 3]
p Array2 #=> [1, 2, 3]
“`

# 要素をランダムに取得 sample

“`
# 配列をランダムに取得
puts [1,2,3].sample #=> 1or2or3(ランダム)

# 要

元記事を表示

[Ruby] all?メソッド

##はじめに
all?というメソッドを見つけました。
私的には少し使い方が変わっていると感じました。とても便利なので記事で残しておきます。

##all?メソッド

配列に対して使用します。(配列でなくてもいいのかも?)
all?の後に{}を用意し、その中にブロック変数と条件式を記述します。
ブロック変数にall?直前の配列の要素を一つずつ放り込み、その配列の全ての要素が条件式で~~true~~ 真だったときに初めてtrueを返します。

一つでも~~false~~ 偽があるとfalseを返します。

“`ruby
array = [1, 2, 3, 4, 5, 6]
array.all?{|x| x > 0 }
=> true

array = [0, 1, 2, 3, 4, 5, 6]
array.all?{|x| x > 0 }
=> false
“`

参考: https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/all=3f.html

元記事を表示

【Ruby】保存されている複数画像のうち1枚だけ表示した場合について

現在作成中のアプリケーションにて、画像表示について表題のような挙動にしたかったのですが、解決まで時間がかかったので備忘録用に。

##状況
1つの店舗に対して複数の画像を投稿できる機能を追加しました。
トップページ、詳細ページどちらも投稿された画像が全て表示されています。
トップページでは店舗の外観画像のみ表示し、詳細ページでは店舗外観とその他画像が確認できるようにしたい。
   
以下解決前コード

“`rb
<% store.images.each do |image| %>

<%= link_to image_tag( image, class: :card__img, size: '300x300'), store_path(store) %>

<% end %>
“`
   
上記コードではstoreモデルが持っている画像を全件表示する、というコードになっていました。
削除後、下記コードに変更したところ解決しました。
とても単純でした。

“`rb
<%= link_to image_tag(

元記事を表示

railsチュートリアルでherokuへのpushができない

# これは何
– ruby on railsのチュートリアルでherokuへアプリケーションをデプロイする場面があるのですが、以下のようなエラーで先に進めませんでした

“`
remote: —–> Installing dependencies using bundler 2.2.21
remote: Running: BUNDLE_WITHOUT=’development:test’ BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
remote: Your bundle only supports platforms [“x86_64-darwin-19”] but your local platform
remote: is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote:

元記事を表示

Windows10 で Ruby3 + pg gem を利用して postgreSQL にアクセスするとエラー `AddDllDirectory failed for x64-mingw32` になる

## 現象

`bundle exec rake db:migrate` したけどエラーが発生する

“`
PS C:\app> bundle exec rake db:migrate
rake aborted!
RubyInstaller::Runtime::DllDirectory::WinApiError: AddDllDirectory failed for C:/app/vendor/bundle/ruby/3.0.0/gems/pg-1.2.3/lib/x64-mingw32
C:/app/vendor/bundle/ruby/3.0.0/gems/pg-1.2.3/lib/pg.rb:15:in `block in
C:/app/vendor/bundle/ruby/3.0.0/gems/pg-1.2.3/lib/pg.rb:26:in `rescue in
(略)

LoadError: 126: 指定されたモジュールが見つかりません。 – C:/app/vendor/bundle/ruby/

元記事を表示

[035] ドキュメントの AND による絞り込み検索(「015」)の全件表示 by Ruby elasticsearch 7.14

|シリーズトップページ|
|:–|
|https://qiita.com/robozushi10/items/2c8b6951ee342b013974|

# 概要

Ruby の Elasticsearch Client を使って Elasticsearch 7.14 で REST API の操作する.
また、比較のために、Kibana DevTool でのクエリも合せて記しておく.

今回はインデックス「shakespeare」から次の「**ドキュメントの検索**」を行う.
・**フィルード「text_entry」の値に「ACT」かつ「V」という “単語” を含むドキュメントを取り出す.**

このとき、scroll_id を使って全件の取り出しを行う.

# 検証環境

下記の要領で検証用データ「Shakespeare」が登録された
・Elasticsearch + Kibana (7.14)
を使用した

[[00] Ruby の elasticsearch client パッケージを使って Elasticsearch 7.14 を操作してみる … 検証環境構築編]

元記事を表示

ピュアなruby環境でsentry-rubyが動作しないときの備忘録

あんまりいないと思うけど、RailsとかSinatoraとかを使っていない純粋なruby環境でSentryを使ったときに沼った。
そのときの備忘録を残す。

# 環境
Gemは単純にsentry-rubyを指定するだけ
バージョンは、最新の4.6.5だったけど、多分関係ない

“`ruby:Gemfile
source “https://rubygems.org”
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

ruby “2.7.4”


gem “sentry-ruby”

“`

コードは[公式のサンプル](https://docs.sentry.io/platforms/ruby/usage/)通り

“`ruby:sample.rb
require “sentry-ruby”

Sentry.init do |config|
config.dsn = ‘__MY_DSN__’
end

begin
1 / 0
rescue ZeroDivisionError => ex

元記事を表示

Kahan と ruby の sum

# これは何?
こんな記事

https://qiita.com/Nabetani/items/59a8ec6160cd409c97f0

を書くに当たり。

Kahan のアルゴリズムを Wikipedia をもとに実装してみたけど、 ruby の `Enumerable#sum` の結果と合わなかった。

何が違うのか調べてみた。

# Wikipedia の Kahan

記事は [こちら](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%8F%E3%83%B3%E3%81%AE%E5%8A%A0%E7%AE%97%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0) 。

ruby で書くとこう。

“`ruby:ruby
def kahan(a)
sum=c=0.0
a.each do |v|
y = v-c
t = sum+y
c = (t-sum) – y
sum = t
end

元記事を表示

Ruby on rails 備忘録1(Ruby・Rails インストール)

##1.Rubyインストール
・公式サイトからRubyをインストールする。

  https://rubyinstaller.org/downloads/

・最新版もしくは、公式おすすめのバージョン(x64)をインストール。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870509/070a3ac0-200f-f6b7-55f9-13fa57a19058.png)

・「I accept the License」を選択し、「Next」
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870509/16b05c38-7540-59b9-8534-0dec6d2b05fd.png)

・そのまま「Install」
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870509/910

元記事を表示

シンボルについて

# シンボルとは何か?
> シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。
文字列の代わりに用いることもできますが、必ずしも文字列と同じ振る舞いをするわけではありません。同じ内容のシンボルはかならず同一のオブジェクトです。
シンボルオブジェクトは以下のようなリテラルで得られます。

引用:公式ドキュメント
https://docs.ruby-lang.org/ja/2.6.0/class/Symbol.html

###シンボルと文字列の違い
シンボルと文字列の違いについて説明します。
シンボルは、Symbolクラスのオブジェクトで、文字列はStringクラスのオブジェクトになります。

“`Ruby
:apple.class #=> Symbol
“apple”.class #=> String
“`

シンボルはRubyの内部で整数として管理されます。そのため、文字列よりも高速に処理を実行出来ます。
また、『同じシンボルであれば同じオブジェクトである』という特徴を持ちます。このため、大量の同じシンボルと文字列を作成した場合、シンボルの方がメモ

元記事を表示

rbenvのバージョン管理

よく使うコマンド

rbenvを使用前
・homebrewのアップデートとアップグレード

homebrewのアップデートとアップグレード

“`
$ brew upgrade && brew update
“`

rbenvだけのアップデートをするのであれば

“`
$ brew upgrade ruby-build && brew update
“`
[brew upgrade]でもupdateは行われますが、updateを入力するのは確認のためです。
ちゃんとアップデートできたら

“`
$ brew update
Already up-to-date.
“`
と出力されます。

さらにhomebrewが正常に動作しているかのテスト

“`
$ brew doctor
“`
も行っておきます。
ちゃんと動作しているなら

“`
$ brew doctor
Your system is ready to brew.
“`
と出力されます。

brewのアップデートとアップグレードを別々にするなら下記
homebrewのアップデート

“`
$

元記事を表示

rubyのsendメソッドってどんなメリットがあるの?

こんにちは、プレイライフの熊﨑です!

rubyのsendメソッドがどんなことをしてくれるメソッドなのかはなんとなく理解していましたが、どんなメリットがあるかまでは恥ずかしながら理解しておりませんでした。
そこで、今回はsendメソッドのメリットについてまとめていきたいと思います!

## sendメソッドとは?
レシーバーの持っているメソッドを文字列やシンボルで指定して呼び出すメソッド
以下のように書きます。

“`sample.rb
# Foo.barと書くのと同じ
Foo.send(“bar”)
“`

## どんなメリットがあるのか?
– 条件分岐を書かなくても、メソッドを使い分けることができる。

### 例: 赤信号の場合stop, 青信号の場合goと表示するプログラム

“`signal.rb
Class Signal

# 今は2つしか条件がないが、この条件が膨らんでくると、コード量が増え、可読性も落ちてくる。
def display_message(signal_color)
if signal_color == “red”
disp

元記事を表示

各種言語におけるINIファイルのエラー扱い

INIファイルを間違って編集したことで、システム障害に至るケースに遭遇したので、これを期に自分が仕事で良く使っている言語におけるINIファイルのエラーの扱い方についてまとめた。
なお、現在INIファイルは https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB によれば、規格化/標準化されていないらしい。

# 調査対象言語

Windows上で以下の言語とWin32 APIについて調査した。

|言語とバージョン |ライブラリや関数 |
|—————————-|———————–|
|PHP 7.4.22 (x64) |parse_ini_file |
|Strawberry Perl 5.32.1 (x64)|Config::Tiny |
|Python 3.7.9 (x86) |ConfigParser |

元記事を表示

rubyのHash#slice メソッドについて

みなさまお久しぶりです!
プレイライフの熊﨑です。
最近整体に行ったら、「君の身体は50代の人なみに凝っている」と言われましたw(私はまだ20代です。)
本日は、業務で使用したsliceメソッドについてまとめようと思います。

## Hash#sliceメソッドとは
rubyのメソッドで、Hashクラスに用意されているメソッド
Ruby 2.5.0から標準メソッドになった。

## どのようなメソッドか?
引数に指定されたキーと、それに対応する値をハッシュで返すメソッド。

“`sample.rb
hash = { id: 1, name: “佐藤太郎”, address: “東京都中央区〇〇…”, sex: “男性” }
hash.slice(:name) # => {:name=>”佐藤太郎”}
“`

## 使用するメリット
– 単純に記述量を減らせる。
– sliceによって、取り出した属性を明示的に示せるため、可読性があがる。

### 例 ユーザーのデータから名前と性別を使用して、別のモデルに活用したい場合

“`sample.rb

user = { id: 1

元記事を表示

OTHERカテゴリの最新記事