Ruby関連のことを調べてみた2022年04月21日

Ruby関連のことを調べてみた2022年04月21日

ruby-build で openssl がインストールされちゃう話

## ruby-build で openssl がインストールされてしまうので調査した

自分でインストールした lib に強制可能か知りたかった

### 向き先を強制するなら RUBY_CONFIGURE_OPTS が良さそう

– ruby-build は定義に share ディレクトリを使ってそう

“`shell
$ ls /usr/local/Cellar/ruby-build/20211109/share/ruby-build | head
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
1.8.6
1.8.6-p36
1.8.6-p110
1.8.6-p111
1.8.6-p114
$ cat /usr/local/Cellar/ruby-build/20211109/share/ruby-build/3.0.2
install_package “openssl-1.1.1l” “https://www.openssl.org/source/openssl-1.1.1l.tar.gz#0b7a3e5e59c3

元記事を表示

デジタルツールを使って仕事の課題を解決したい

便利なデジタルツールが、手軽に手に入るようになりました。
私は、小売業のネット販売の運営を仕事としておりますが、デジタルツールを使って解決できそうな仕事の課題と解決策を挙げ、身近なデジタルの有効活用方法を考えようと思います。

**1. 社内のお問い合わせ自動回答(実現性 50%)**

課題:システム使用方法、お客さまのお問い合わせなど対応方法が分からず、電話やメールで社内の人に問い合わせしたときに、確認を取った相手が取り込み中だと、対応が遅れてしまう。

改善:よくお問い合わせのあるものをLINEbotで入力すると答えが返ってくる。
技術的には可能だと思う。
実施には構想をつくり、ノウハウもつ各部署のメンバーから情報集約し、データベース化するかがポイントであり、この点が難しい。

**2.パソコン、スマートフォンがしゃべって教えてくれるアラーム機能(実現性 90%)**

課題:小売業の現場では、作業に忙殺され、打ち合わせの時間、冷蔵庫の温度チェックなどの固定されている業務開始時間を忘れてしまうことがある。

改善:時間が来たらパソコン、スマートフォンがしゃべって教えてくれると、忘

元記事を表示

whereやorderをモデルのscopeで書く方法

先日レビューで先輩エンジニアに教えてもらったことが勉強になったので備忘兼ねて投稿します。
whereやorderなどを使うときはモデルのscopeとして書くとスッキリするのと、使い回しもできて良いみたいです。

## controllerに書く方法

今回は商品(products)テーブルで開発日(development_date)降順で並べるとします。

“`ruby:products_controller.rb
def index
@products = Product.order(development_date: :desc)
end
“`

## modelのスコープとして書く方法

まずモデルに以下のようにscopeを定義します。

“`ruby:product.rb
scope: :development_order, -> { order(development_date: :desc) }
“`

コントローラで呼び出します。

“`ruby:products_controller.rb
def index
@products = Product.d

元記事を表示

rbenvでRubyのインストールにコケた話

## Ruby

自分はXcode開発においてパッケージマネージャとしてSPMばかり利用しているのでRubyを必要とする機会はあまり多くないのですが、今回たまたまGemfileを利用しているコードがあり、その対応のためにRubyをインストールしようとしてコケた話と解決方法を載せておきます。

## 環境構築

まずはhomebrewをインストールします。

“`zsh
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

その後、ruby-buildとrbenvをインストールします。

“`zsh
brew install ruby-build, rbenv
“`

で、ここまでは問題ありません。

### エラー内容

rbenvでRubyをインストールしようとすると以下のエラーが出てコケる人が対象です。

“`zsh
$ rbenv install 2.7.6
Downloading openssl-1.1.1n.tar.gz.

元記事を表示

Ruby Hashオブジェクト ハッシュの基礎知識

# ハッシュとは
Key(キー)とValue(バリュー)の組み合わせで関連付けを行うことができるオブジェクトです。

“`ruby
user1 = {id: 1, name: ‘Tom’} => { :id => 1, :name => “Tom” }
user2 = {id: 1, name: ‘Bob’} => { :id => 1, :name => “Bob” }

user1[:name] => “Tom”
user2[:name] => “Bob”
“`

`Key`をシンボル`:`で定義した場合・・・`変数 = { key: value, key: value, … }`

“`ruby
user1 = {id: 1, name: ‘Tom’} => { :id => 1, :name => “Tom” }
# シンボルで定義した Key を String で指定した場合、値を参照することはできない。
user1[‘name’] => nil

user3 = { ‘id’ => 3, ‘name’ => ‘Jon’ } => {“id”=>3, “name”=

元記事を表示

Ruby Arrayオブジェクト 配列の基礎知識

# `push`, `<<` 配列に要素を追加することができる。 ```ruby arr = [] arr.push('りんご') => [“りんご”]
arr << 'みかん' => [“りんご”, “みかん”]
“`
# %記法(パーセント記法)
`’`や`”`を別の文字に置き換えて書くことができます。

“`ruby
arr = %w[りんご みかん] => [“りんご”, “みかん”]
arr2 = %w! りんご みかん! => [“りんご”, “みかん”]
arr3 = %w(りんご みかん) => [“りんご”, “みかん”]
“`
`%w`の場合、シングルクォート`”`で囲ったのと同じ動作になります。

“`ruby
a = ‘んご’ => “んご”
b = ‘かん’ => “かん”
arr = %W[り#{a} み#{b}] => [“りんご”, “みかん”]
“`
`%W`の場合、ダブルクォート`””`で囲ったのと同じ動作になるため、式展開やバックスラッシュ記法を使用することができます。

# 繰り返し処理

## `eachメソッド`
配列の要素の

元記事を表示

crystal の AtCoder における Deque の使用による速度改善

# はじめに
AtCoder さん、いつもお世話になっております。

私は、下記のトランスパイラを夢見ている者ですが、`Deque`の使用により実行時間の改善が見られましたので、ここに投稿いたします。

https://github.com/superrino130/crystal-on-paiza.cloud
# 003 – Longest Circular Road(★4)
https://atcoder.jp/contests/typical90/tasks/typical90_c

“`diff_crystal
n = read_line.to_i
– ab = Array.new(n + 1){ [] of Int32 }
+ ab = Deque.new(n + 1){ [] of Int32 }
– f = Array.new(n + 1, 0)
+ f = Deque.new(n + 1, 0)
(n – 1).times do
a, b = read_line.split.map(&.to_i)
ab[a] << b ab[b] << a end - q

元記事を表示

プロジェクトへテストコードを導入する(計画編)

## 今回話すこと
– [導入の経緯](https://qiita.com/iyore_eng/items/fdf57b817589383db661#導入の経緯)
– [Webアプリケーションにおけるテストとは](https://qiita.com/iyore_eng/items/fdf57b817589383db661#webアプリケーションにおけるテストとは)
– [何のためにテストをするか](https://qiita.com/iyore_eng/items/fdf57b817589383db661#何のためにテストをするか)
– [どういったものをテストするか?](ttps://qiita.com/iyore_eng/items/fdf57b817589383db661#どういったものをテストするか)
– [デメリットについて考える](https://qiita.com/iyore_eng/items/fdf57b817589383db661#デメリットについて考える)
– [使用する技術](https://qiita.com/iyore_eng/items/fdf57b817

元記事を表示

Rubyの配列に要素を追加するメソッド比較

# 配列に要素を追加するメソッド
配列に要素を追加するメソッドは主にこんな感じ(もっと色々あるかもしれない、またあれば追記する)
“`
<< push concat insert unshift + ``` ## `<<`メソッド, `push`メソッド 引数のオブジェクトを自分の末尾に追加する。 ```ruby ary = [1, 2, 3] # => [1, 2, 3]
ary << 4 # => [1, 2, 3, 4]
ary.push(5)
# => [1, 2, 3, 4, 5]
“`

## `concat`メソッド
引数の配列を自分の末尾に追加する。破壊的メソッド。
“`ruby
ary = [1,2,3]
# => [1, 2, 3]
ary.concat([4, 5])
# => [1, 2, 3, 4, 5]
ary
# => [1, 2, 3, 4, 5]
“`

## `insert`メソッド
第一引数で指定された位置に、第二引数以降のオブジェクトを挿入する。破壊的メソッド。
“`ruby
ary = [1, 2, 3]
# => [1, 2, 3]

元記事を表示

Rubyでソースコードの文字コードを設定する

# マジックコメントについて
Ruby2.0以降ならデフォルトでUTF-8が入っているので、マジックコメントで文字コードを特に指定する必要はない。

# 書き方
大文字・小文字を区別しない、`coding: エンコーディング名` が正しければ、その前後には任意の文字列を並べることができる。

“`
# encoding: 文字コード名
“`
もしくは
“`
# coding: 文字コード名
“`

## 具体的な指定例
US-ASCIIを指定する場合
“`
# coding: us-ascii
# encoding: us-ascii
# CODING: US-ASCII

“`

元記事を表示

FactoryBotでcreate(:client)時にActiveRecord::RecordNotUniqueが発生する

## コード

– spec/models/client_spec.rb
“`ruby
require ‘rails_helper’

RSpec.describe Client, type: :model do
it “is valid with default” do
client = FactoryBot.create(:client)
expect(client).to be_valid
end
end
“`

– spec/models/client_spec.rb
“`ruby
FactoryBot.define do
factory :client do
sequence(:id) { |n| n } # シーケンスを使う
sequence(:name) { |n| “クライアント#{n}” }
created_at { Time.current }
updated_at { Time.current }
end
end
“`

## 概要
タイトルの通りだが、上記のコードでrspecを実行すると以下

元記事を表示

Bootstrap,CSSを使った一覧表示

この記事は学習中に実装した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。

## 実装した内容
ユーザーの詳細画面でユーザーの詳細内容、投稿した記事の一覧を4つ表示して折り返す内容になります。

## 今までの考え
・今までHtml,Css,Ruby,Ruby on Railsの順番で学習を進めてきて、直近で学習していた課題ではCssを使わずにレイアウトをBootstrapだけを行い実装してきました。
そのこともあり、今回もBootstrapだけで行こうと進めていましたが思ったようなレイアウトにならず色々調べているとCssも並行して使えることを書いてある記事を見つけました。(今更何を言っているんだと思う方もいるかもしれませんが、初心者の脳内なのでどうかお許しください、、。)
そのことを踏まえて読んでいただけると嬉しいです。

## 前提条件
・Bootstrap導入済み。(今回はBootstrap4です。)
## 参考ページ
自分のページを曝け出すのは恥ずかしくて大変恐れ多いですが

元記事を表示

100日後くらいに個人開発するぞ!day001

# まずはこれをやってみる!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/280cff78-08ee-40f8-c0c2-f8e062e7eca1.png)

https://prog-8.com/paths/rails

# 今日はHTMLに触れてみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/e1c53435-3698-911c-7fd2-3f8eff89c0d6.png)

“`

* 開始タグと終了タグ
* 開始タグ
*
終了タグ
* 見出しをつける
* 見出し
* hはheadingの頭文字
*

,

,

,,,

,,,と数字が大きくなるについれて見出しは小さくなる
* 段落をつける
*

タイトル

元記事を表示

Enumが定義されたインスタンス変数を更新する

仕事のコードを読んでいたところ次の記述に遭遇しました。

“`ruby:sample.rb
(~)? (モデル).accept! : (モデル).refuse!
“`
(~)が真ならば(モデル).accept!、偽ならば(モデル).refuse!を実行するという記述です。

「ほう、`accept!`なんてメソッドがあるのか」と思い調べましたが、何も出てきません。
そこでコードに戻ったところ次の記述がありました。
“`ruby:models/sample.rb
enum status: { refuse: 0, accept: 1 }
“`
「`enum`は属性に対応する値をDBに保存するんだったよな…」

Railsガイドには次の記述がありました。

https://railsguides.jp/active_record_querying.html#enum

> 以下の!付きインスタンスメソッドは自動で作成されます。最初にstatusの値を更新し、次にstatusがその値に設定されたかどうかをtrue/falseで返します。
“`ruby:railsguide.rb

元記事を表示

【初学者】ログイン機構のまとめ【Webアプリ開発の道~その3~】

# はじめに
こんにちは。しばらく投稿の間が空いてしまいました…。
言い訳をしておきますと、(また後で記事にできたらいいなと思っているのですが…)「要件定義」や「基本設計」について、深掘りして勉強しながら、実際にオリジナルアプリの設計をしていたからです。
暫定的な成果物はできたのですが、おそらく、アプリ開発の中で、見直しされていくと思いますので、最終的にアプリが形になってから、記事にしたいと思います。

今回は、どのWebアプリでも必ず実装するであろう「ログイン機構」について、学んだことをまとめていきたいと思います。

# 何を書いたか
Ruby on rails チュートリアルの第8章、第9章の内容をベースに、自分なりに咀嚼したものを描いていきます。

# なぜ書いたか
学習記録です。特に自分が理解しにくかった部分は、自分なりの解釈を加えています。(間違っている部分はご指摘いただけると幸いです。)

# 本題

## 基本的なログイン機構
### ログインの基本的な仕組み
→ブラウザがログインしている状態を保持し、ユーザーによってブラウザが閉じられたら状態を破棄するといった仕組み

元記事を表示

カラムの合計値を出す方法

カラムの合計値を出す方法

controller↓
@任意の変数名 = テーブル名.all.sum(:合計を出したいカラム名)

元記事を表示

【Rails】画像と動画、どちらかを表示する方法

# content_typeはどうなっているのか?
前提として、今回はcarrierwaveやuploaderを使用していません。今回はactive_storageで画像や動画を保存しているので、今回はactive_storageとcontent_typeを使って画像と動画、どちらかの表示をしていきます。
Sequel Proでは以下のようになっています
[![Image from Gyazo](https://i.gyazo.com/3a1d810fddb0ffbd30b4e929495e8f1f.png)](https://gyazo.com/3a1d810fddb0ffbd30b4e929495e8f1f)
content_typeに注目してください。ファイルの拡張子がjpgにはimage/ 、mp4にはvideo/ と記載されているのがわかるかと思います。
画像を表示するか、または動画を表示するかはこれを使ってコードを記述していきます。

# どうやって分けて表示するのか?
結論としては以下のようなコードになります。
“`ruby:diary/index.html.erb
<

元記事を表示

【Ruby】初心者がRuby on Railsをやる!

# :star:概要:star:

`Ruby`初心者の僕が`Ruby on Rails`までやってみた!

# :star:初期セットアップ的な:star:

“`shell
rails new
cd
bundle install
bundle update
“`

`bundle install`をする場所は1つ下の階層でやらなきゃいけない!
エラーが出た際の対処法は、下に掲載しています。

# :star:サーバーの起動:star:

“`shell
ubuntu@ubuntuv:~/デスクトップ/projectX/sample$ rails s
“`

ブラウザの`127.0.0.1:3000`に行って、これが出ればおっけ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1523062/98f5bfda-d4c1-f09a-a1fa-b5829f09f278.png)

コンソールで`Ctrl + c`を押して、サーバーを終了

元記事を表示

鋸の使い方 ?

# 概要
https://github.com/sparklemotion/nokogiri

> Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for reading, writing, modifying, and querying documents. It is fast and standards-compliant by relying on native parsers like libxml2 (CRuby) and xerces (JRuby).

Ruby で XML とか HTML をいい感じに扱えるライブラリ

# サンプル

こんなHTMLドキュメントがあったとして、

“`html


Lightweight language

元記事を表示

GemfileでグローバルインストールするGemを管理する

普段プロジェクトごとにGemfileを管理していますが、システム全体で使うGemもGemfileで管理したいと思い方法を調べました。

## 環境
Mac OS Big Sur 11.6
Bundler 2.2.32
Ruby 3.0.2
Gem 3.2.22

## 結論

好きな場所にGemfileを作成して

“`ruby
bundle install –system
“`

これだけでシステム全体でGemが使えるようになります。

## 保存場所

自分の場合は[rbenv](https://github.com/rbenv/rbenv)を使いバージョン管理をしています。

そこで、 `Gemfiles` というフォルダを作り、その下でバージョンごとに管理することにしました。

“`ruby: 好きな場所
Gemfiles
├── 2.6.3
│   └── Gemfile
│   └── Gemfile.lock
├── 2.6.6
│   └── Gemfile
│   └── Gemfile.lock
└── 3.0.2
└── Gemfile
 

元記事を表示

OTHERカテゴリの最新記事