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

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

RubyでSPAを構築してみました

# はじめに
[RubyのWebAssemblyビルド](https://github.com/ruby/ruby.wasm)を使ってSPA(single page application)を構築するためのパッケージ”[Bormaŝino](https://github.com/keyasuda/bormashino)”を開発し、[TodoMVC](https://todomvc.com/)を[移植してみました](https://github.com/keyasuda/bormashino-todomvc)。
本記事ではパッケージの紹介及び移植されたコードを解説します。

# デモ
– TodoMVC 移植版 https://bormashino-todomvc.vercel.app/
– テンプレートアプリケーション https://bormashino-app-template.vercel.app/

# パッケージ”Bormaŝino”について
## コンセプト
> 伝統的な「フォームを表示し」「POSTされる内容でデータストアを更新し」「データストアに保持されている内容を元

元記事を表示

Ruby on Railsをgit cloneする

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。
## git cloneとは
そもそも[git clone]とは?
#### 『Gitに存在するリモートのリポジトリをローカルの環境にコピーする』
学習し初めの頃はなかなか[git clone]をすることがなかったですがAWSで自分のアカウントを作成して環境の構築する際に始めて出てきました。
## git cloneの流れ①〜⑥
##### ① GIt hubを開きローカルにコピーしたいリポジトリを選択しリポジトリの画面へ
##### ② 緑色の[Code]のボタンを押し「git@github.com:[ユーザー名]/[リポジトリ名].git」のSHH keyをコピーする。
##### ③ ローカルの環境を開き以下のコマンドを入力
“`
ec2-user:~/environment $ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
“`
##### ④ 以下のコマンドでローカ

元記事を表示

RubyエンジニアだけどRuby Silver の対策練習問題を解いてみたい

# 問題

http://www.minituku.net/drills/775230600.html

>以下の選択肢のうち、エラーにならずに正常に実行が完了するコードを1つ選択してください。

“`rb
(a) 1..10.to_s
“`

1から10の範囲を文字列にしている。to_sでエラーが起こるのはnilぐらいで、あとは何でも文字列にできそうな気がするが。
やや安直な気もするけどこれを回答として選んだ。

“`rb
(b) 10.*(0xFace)
“`

数字の10に掛け算をして、なにかバイト列のようなものを渡してる。
いかにもエラーが起こりそうな気がするけど、これ何?

“`rb
(c) 10.+(“10”)
“`

数字の10にメソッドチェーンして + メソッドを実行し、引数に文字列を渡している。いかにもエラーが起きそうだが。

ところでRubyでは数値もオブジェクトであり、 + もメソッドとして実行できそうな気もするけれど。

“`rb
(d) Time.now.strftime(1999, 12, 11)
“`

現在時刻に対して

元記事を表示

RailsにFactoryBotを入れるときはfactory_bot_railsを使おう

# 概要

– RailsにFactoryBotを入れる場合、本来は`gem factory_bot_rails`を使うべきですが、`gem factory_bot`を使ってしまったことで発生したエラーに誤った対処をしてしまった話を共有します
– もし私と同じようなルートを辿る方がいらしたら、この記事が役に立つといいなと思って書きました

# やりたかったこと

– RailsアプリでFactoryBotを利用したい

# やったこと

– Gemfileに`gem ‘factoy_bot’`を追加する ?**ここが間違い**
– ファクトリを作成する
– テストファイル(またはスペックファイル)を書く
– この時に私が使ったのはMinitestでしたが、RSpecでも同様の事象が発生することを確認しました
– テスト(またはスペック)を実行する

# 発生したエラー

“`
KeyError: Factory not registered: “(ファクトリで定義した名前)”
“`

# 誤った対処

– テストでファクトリを呼び出す前に`FactoryBot.re

元記事を表示

RVMをシェルスクリプト内で利用する場合の注意

# シェルスクリプト上ではRVMはそのままでは実行できない

“`sh
#!/usr/bin/env bash

set -eu

rvm use 2.7.2
“`

デプロイを自動化しようとして例えばこのようなことをすると、次のようなエラーが起こり、実際にrubyのバージョンが指定できない。

“`
RVM is not a function, selecting rubies with ‘rvm use …’ will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash –login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.
“`

RVMはバイナリそのもの(`/usr/local/rvm/bin/rvm`など)ではなく、同名のs

元記事を表示

Ruby初心者がGitHub上でよくやりがちな誤爆メンションとその解決策

## はじめに:誤爆メンションって何?
Rubyでは`@`で始まる変数がインスタンス変数になります。
これはRuby on Railsなどでも当然同じルールです。

“`ruby
# @で始まる変数はインスタンス変数
@foo = 1

# 何も付かない変数はローカル変数
foo = 1
“`

一方、TwitterやGitHub、そしてこのQiitaなど、昨今のSNSでは`@`がユーザーへのメンションとしても使われています。
たとえば、以下の画像に見える`@jnchito`は、jnchitoというTwitterユーザーに対するメンションです。

![Screen Shot 2022-05-04 at 15.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/bff65b1b-67bb-c4f4-4427-2e349e2b1428.png)

この2点はわざわざ僕が説明しなくても「そんなこたぁ前からわかっとるわい!」と思われそうな話なのですが、TwitterやGitHubで何も考え

元記事を表示

ユーザーごとの学習時間の合計

# はじめに
この記事は筆者がスタディープラスのトレースをする際に、ユーザーの学習時間のランキングを表示するために書いたコードの備忘録になります。
# 実装
deviseの導入と基本となる投稿機能(記事内ではtweets)が完成している前提で進めます。

“`ruby:users_controller
#以下を追記
def index
user = User.all
@arr = []
user.each do |t|
t.sum_time = t.tweets.sum(:time)
@arr.push(t)
end
end
“`
pushメソッドは配列(@arr)の末尾に要素を一つ追加してくれるメソッドです

“`ruby:app/views/users/index.html.erb

Users#index

<% @arr.each do |u| %>
<%= u.email %>
<%= u.sum_time %>

元記事を表示

【RubyGems】インストール可能なgemのバージョンを確認する方法

特定のgemをインストールしたい時に、そのgemのインストール可能なバージョンを確認する方法を紹介します。

## 環境
macOS Monterey:12.3.1
RubyGems 3.3.3

## 方法

“`
gem search -ae
“`
– [gem search](https://guides.rubygems.org/command-reference/#gem-search)

他にも、[gem list](https://guides.rubygems.org/command-reference/#gem-list)や[gem query](https://guides.rubygems.org/command-reference/#gem-query)でも可能。

元記事を表示

PowerAutomateを使ってファイル加工を自動にしてみた

 私は小売業でネット販売の運営を仕事としております。今回はPowerAutomateを使って、週1回作業しているエクセルCSVファイルをシステムにアップロードする前に、登録先の仕様に合わせるために 項目1行目を自動で消して保存するフローを作成してみた。

**【同じ作業を自動化したい】**

 私もしくは同僚のルーティン業務として週1回エクセルCSVファイルをシステムにアップロードする前に、登録先の仕様に合わせるために項目1行目を消して、保存する作業があります。ファイルアップロードは権限上、他部署にお願いしております。作業忘れが発生すると相手先はファイルのアップロードエラーをフィードバックして、修正ファイルを待ち、修正したファイルを再度アップロードして完了したことをフィードバックするというやり直し分の工数が発生します。この課題に対してPowerAutomateを使って解決に近づけたいと思いました。

**【PowerAutomateでの作成】**

【フロー】
 ファイル加工の工程をフローにするとこうなります。
1.加工するエクセル起動→2.エクセルの1行目を削除→3.エクセルを保存し

元記事を表示

<環境構築>M1macでRuby on Rails の環境を構築

こんにちは
未経験でweb系エンジニアに転職を目指すものです。

Railsチュートリアルを学習し終えました。
なので次はブログ機能などのあるホームページを作ってみようかなと思います。
そこでローカル環境に環境構築していこうかなと思います。

### PC情報
* MacBook Air (2020 M1)
* macOS Monterey 12.3.1

## 流れ
1. Command Line Tools
2. Homebrew
3. rbenv
4. Ruby
5. Bundler
6. yarn
7. Ruby on Rails

## 1.Command Line Tools
#### Command Line Tools とは
macOsのターミナル上でコマンドを使用するために必要なツールです。

#### インストール
“`
$ xcode-select –install
“`
もしくは
Xcodeをインストールすることで
Command Line Tools を使用することができます。

#### インストールの確認

“`
$ xcode-sele

元記事を表示

Rails + ransackでセレクトボックスからscopeを選択して検索条件にする方法

## はじめに

ransackでよくある`name_cont`や`articles_title_start`のような条件では表現できず、scopeを使わないと検索できないケースで、なおかつセレクトボックスから任意の検索条件を選択できるようにする検索フォームを作ってみました。

## アプリの仕様

テスト管理アプリケーションです。生徒を表すStudentモデルと、試験の結果を格納するExamモデルがあります。

“`ruby
class Student < ApplicationRecord has_many :exams, dependent: :destroy end ``` ```ruby class Exam < ApplicationRecord belongs_to :student end ``` DBには以下のようにデータが格納されているとします。 **studentsテーブル** | id | name | |----|-------| | 1 | Alice | | 2 | Bob | | 3 | Carol | **exam

元記事を表示

HTSlibのRubyバインディングを作っていて難しかったところ

## はじめに

2年ぐらい前からruby-htslibというものを作っています。

https://qiita.com/kojix2/items/e5704aeb0bbe0f114166

これは、Rubyでゲノム関連のファイルフォーマットを扱うライブラリです。RやPythonのライブラリを活用すればいいのですが、右も左もSAM、VCFもよくわからない状態なので、htslibバインディングを自作しながら勉強しようと考えました。

Rubyは日本語コミュニティが強力で、言語仕様から、コア開発まで、日本語で質問でき、的確な回答が得られるのがいいところです。他の言語では日本語ネイティブのコア開発者が少ないのでなかなかそうはいきません。

## Ruby-FFI

まずはFFIでC言語のネイティブ関数を呼べるようにしていきました。これは、そこまで難しいことではありませんでした。

しかし、問題はこのあとです。htslibは、一般的なライブラリよりもやたら難しいのです。最初のうちは「なぜ難しいのかわからない難しさ」を感じていました。

この記事では、難しく感じたことをリストして記事にしていきま

元記事を表示

Rails7でdevise_token_authをインストールする

## 遭遇したエラー

“`
$ bundle

Fetchings gem metadata from https://rubygems.org/………..
Resolving dependencies….
Bundler could not finde compatible versions from gem “rails”:
In Gemfile:
rails (~> 7.0.1)

devise_token_auth was resolved to 0.1.21.alpha2, which depends on
rails (~> 4.1.4)
“`

rubygemsに上がっているdevise_token_authがRails7をサポートしていないためインストールができない
## 解消法

Gemfileに以下のように`devise_token_auth`を追加する
“`yaml
gem ‘devise_token_auth’, ‘>= 1.2.0’, git: “https://github.com/ly

元記事を表示

Rspec導入で躓いた話

# 概要

既存のRailsプロジェクトにRspecを導入したらつまづいたので解決方法を共有します
1人でも多くの人の役にたてればと思います。

# はじめに

### 使用する環境
– MacOS(M1)
– Rails 6.1.5
– Ruby 3.1.0
– yarn 1.22.17
– Homebrew 3.4.8

### はじめにアプリケーションを作成するディレクトリを作成

“`shell
$ mkdir rails_Rspec_app
$ cd rails_Rspec_app
“`

### railsプロジェクトの作成
“`shell
$ rails new rails_Rspec_app
“`

### プロジェクトへ移動
“`shell
$ cd rails_Rspec_app
“`
### サーバー起動

“`shell
$ rails s
“`
http://localhost:3000 にアクセスしてこの画面が出たら成功です

![スクリーンショット 2022-04-29 16.18.29.png](https://qiita-image-s

元記事を表示

Railsのバージョンを変える方法

# 現状
“`terminal:ターミナル
gem install rails
“`
このコードを実行すると、デフォルトで最新版のRailsがダウンロードされますが、、、
“`terminal:ターミナル
gem install -v 6.1.4.4 rails
“`
このように、**バージョン指定して実行**しても、なぜか最新版のRails(7.0以上)がダウンロードされることがしばしば起こっています。。。(多くは、初心者のバージョン指定忘れですが、稀に起こっています?)
今回は、その解決策を書いておきます!!?

# 解決策
## 手順
1. railsをアンインストールする
1. railtiesをアンインストールする
1. 再度railsのバージョンを指定してインストールする

## 実際の手順
### 1. railsのアンインストール
以下のコマンドを実行し、アンインストールします。
“`terminal:ターミナル
gem uninstall rails
“`
### 2. railtiesのアンインストール
次に、以下のコマンドを実行します。
“`term

元記事を表示

?【初学者用】deviseを使ってユーザー管理機能を実装しよう!【Ruby on Rails】

## はじめに
プログラミング初学者の私がアウトプットとこれから学習される皆様の参考になればと思い投稿しています。
まだ、マークダウン記法も不慣れな初学者ですので、間違い等があれば指摘いただけると幸いです。

## この記事を見てできるようになること
Ruby on Railsのgemであるdeviseを使用して、ユーザー管理機能を実装できるようになります!

## deviseとは?
ユーザー管理機能(例:ログイン、ログアウト、新規登録)を簡単に実装するためのGemです。

## deviseの導入
まずGemfileを編集します。追記する場所はGemfileの最後の行で構いません。
“`:Gemfile
gem ‘devise’
“`
:::note warn
**⚠注意**
**device**としないこと!
私はこれでかなりの時間を消費しました\:cry:
:::

使用するアプリディレクトリを開き以下のコマンドでgemをインストールします。

“`:ターミナル
bundle install
“`
次にローカルサーバーを起動or再起動させます。
サーバーを起動していなか

元記事を表示

Gemネイティブ拡張機能のビルドに失敗

## スペック
– macOS Monterey 12.3.1
– Rails 7.0.2.3
– Bundler version 2.3.7

## 実行したコマンド
`bundle install` のコマンドを実行したら下記のエラー内容が返ってきました。

## エラー内容
“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:

~~~ 省略 ~~~

rake aborted!
Could not find MIME type database in the following locations: [“/usr/local/share/mime/packages/freedesktop.org.xml”,
“/opt/homebrew/share/mime/packages/freedesktop.org.xml”, “/opt/local/share/mime/packages/freedesktop.org.xml”,
“/usr/s

元記事を表示

説明変数(要約変数)のメリット・デメリットと、発展例(メソッドの抽出)

## はじめに
この投稿では説明変数と要約変数は同じものとして扱った上で、
**メリット・デメリットの解説** と、**説明変数を更に発展させた例**を解説していきます。

## **説明変数・要約変数とは何か?**

長くて複雑な処理や、意図が分からない処理を理解しやすくするために
**あえて定義する変数**のことです。

## 説明変数の導入例

* サンプルコードは、「最近公開された記事」を取得する処理を題材にしています。
「最近」の定義は、「3日以内に公開されたかどうか」で判定しています。
* サンプルコードにはRuby及びRuby on Rails, RSpecを使った書き方を採用しています。

**Before**

“`ruby
def hoge
Article.where(publication_start_at: 3.days.ago..Time.current).each do |article|
# 何かの処理を行う
end
end
“`

**After**

“`ruby
def hoge
# (訳: 最近公開された記事)
rec

元記事を表示

Atcoder の「上書き」問題をRubyで解く

“`rb
# https://atcoder.jp/contests/past202012-open/tasks/past202012_b

# 標準入力の1行目に文字列の長さが与えられる
length = gets.chomp

# 標準入力の二行目にテキストが与えられる
text = gets.chomp

# テキストを1文字単位で配列にしてループする
text.chars.each do |alphabet|
# テキストからアルファベットを削除
text.delete! alphabet
# テキスト末尾にアルファベットを追加
text += alphabet
end

puts text

“`

# 問題

“`
英小文字からなる長さ N の文字列 S が与えられます。
また、文字列 T があり、 T ははじめ空文字列です。

あなたは以下の操作を i=1,2,…,N に対して、 i=1 から順に行います。

S の左から i 番目の文字を c とする。 T から c と同じ文字を全て削除した後、 T の末尾に c を追加する。
操作が終わった後の

元記事を表示

cloud9でrailsの環境構築をする

cloud9でrailsの環境開発を行う際にすることをまとめた。まずはターミナルで
“`
$rails new sample app
“`
と打ち込む。ここのsample appは好きなファイル名でOK!
その後
“`
$cd sample app
“`
で移動したのち
“`
$rails s
“`
でサーバー起動します。無事起動できれば終了です。しかし,以下のようなエラーが出てくるかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500127/5b6d06a5-bba6-180b-8ba5-74af78433db2.png)

対処方法としてはGemfileを編集します。
Gemfileに以下を追記します。
“`ruby:Gemfile
gem ‘sqlite3’, ‘~> 1.3.6’
“`
修正前
![スクリーンショット 2022-05-01 23.59.10.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

OTHERカテゴリの最新記事