Ruby関連のことを調べてみた2020年01月09日

Ruby関連のことを調べてみた2020年01月09日
目次

【Rails】kaminariを使用して基本的なページネーション機能を実装する

## 前提
bundlerを使用して、Gemfileでgemを管理していることを想定しています。

## 使い方
### 準備(インストール)
1.Gemfile内に`gem kaminari`を記述

“`ruby
# Gemfile
gem ‘kaminari’
“`

2.kaminariをインストール

“`shell
$ bundle install
# 「bundle」だけでもOK
“`

### 設定
#### 設定ファイル作成
1.設定ファイルを作成する

“`shell
$ rails g kaminari:config
“`

2.設定ファイルが作成される

config/initializersディレクトリ配下に「kaminari_config.rb」ファイルが作成されます。
作成されたファイルをいじることで、「kaminari」のデフォルト設定を変えることができます。

以下の記事に詳しく書かれていたので参考にしてみて下さい。
[Railsライブラリ紹介: ページングを行う「kaminari」](https://www.techscore.com/

元記事を表示

`# frozen_string_literal: true` 内でBOM付きCSVファイルを生成する

[UTF-8のCSVファイルでも、BOMをつけておけば、Excelで開ける](https://primarytext.jp/blog/1275)ということを昨日知りました!

Rubyでサンプルを書いてみます。

“`ruby:with_bom_csv.rb
# frozen_string_literal: true

require ‘csv’

File.open(‘with_bom.csv’, ‘w:UTF-8’) do |file|
bom = “\uFEFF”
headers = [‘id’, ‘first name’, ‘last name’, ‘age’]
csv_data = CSV.generate(+bom, headers: headers, write_headers: true) do |csv|
csv << ['1', '太郎', '田中', '20'] csv << ['2', '次郎', '鈴木', '18'] csv << ['3', '亜海', '佐藤', '19'] csv << ['4', '祐実'

元記事を表示

【初心者向け】Rubyで超簡単な本紹介アプリを作ってみる(each.with_index編)

#each.with_indexを使って、配列の要素と要素番号を取り出し、表示させる

今まで作ったアプリケーション(1~3)の続きとなります。
1.Rubyで超簡単な本紹介アプリ
https://qiita.com/pontarou194/items/79d581955757e2589b00

2.Rubyで超簡単な本紹介アプリ(カテゴリ指定ver)
https://qiita.com/pontarou194/items/37a9c63fe617e3244e19

3.Rubyで超簡単な本紹介アプリ(日時指定自動表示)
https://qiita.com/pontarou194/items/4a7db6c7d9036cd0c53e

#each.with_indexを使って表示させたい番号を指定できます。

例えば以下のような例です。

“`
categorys = [“小説”,”ノンフィクション”,”ビジネス書”]
categorys.each.with_index(1) do |category, number|
“`
このように指定すると、
1:小説
2:ノンフィクション

元記事を表示

[Ruby]パッケージ管理について

# Rubyのパッケージ管理について
## gemとは
決まったフォーマットのRubyライブラリのこと。
「gem install ○○」でいうところの、○○の部分がgem。

## Rubygemsとは
gem専用のパッケージ管理システム。
ライブラリであるgemを管理するものなのに、パッケージ管理システムと呼んでいる。
ライブラリ≒パッケージらしい。
gem installのコマンドでライブラリをインストールしてくれるのはこいつ。
こいつのことをgemと言ったりする人がいるのでややこしい。

## Bundlerとは
プロジェクトごとにgemを管理したりするやつ。
「Gemfile」と「Gemfile.lock」と呼ばれるファイルを利用する。
各gemのバージョンなどによる依存関係をまるっと管理してくれる。
Bundler自身もgemの一つ。

## 参考
[ライブラリ? gem? bundler? — Rubyのgem管理に関するあれこれまとめ](https://qiita.com/3no3_tw/items/8c1e3e95c75edae1036d)
[Ruby ライブラリ]

元記事を表示

RubyとSinatraで寿司ネタをレコメンドするAPIサーバーを作った

# 作ったもの
[このデータセット](http://www.kamishima.net/sushi/)を使って寿司ネタの好みをPOSTするとおすすめのすしネタを教えてくれるAPIサーバーを作った.
https://github.com/ItoYo16u/ruby_sushi_recommend

**Request**

“`
curl http://localhost:4567/api/v1/ -X POST -H “Content-Type: application/json”
-d ‘{
“ika”:1,
“tako”:2,
“tarako”:3,
“sanma”:2,
“ankimo”:1,
“fugu”:4,
“okura”:2,
“buri”:3,
“zuke”:1,
“kue”:3
}’
“`
**Response**

“`
{
“best”:[
“ebi”,
0.977910028….
],
“second_best”:[
“maguro”,
0.311296889…

元記事を表示

初心者によるプログラミング学習ログ 207日目

#100日チャレンジの206日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

207日目は

Errno::ENOENT: No such file or directory @ rb_sysopenの対処法

__備忘録__
テスト用のDBを作ろうとして、“rake db:migrate“を実行したら以下のようなエラーが起きた。
原因は、spec配下に“db“のディレクトリーがなく“schema“が無かったために下記のエラーが生じていた。
ちなみに、“migrate“は成功しているので無視しても平気。
でも、エラーを無視するのは気持ち悪いのでschemaファイルを作って再度、“drop“,“create“,“migrate“を実施した。
(僕の場合は、dbディレクトリーを丸ごとコピーしてspec配下にペーストした。)

結論としては、以下のエラーが起きたら“schema“を作成し、再度“rake db:migrate“をしてあげる事により解消できる。

“`console
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen – /Users/kaye/Desktop/work/sample_app/spec/dummy/db/schema.rb
/Users/kaye/.

元記事を表示

webpackerでmp3を使う場合 (audio_tag) Railsで音を鳴らす方法

# 実行環境
– macOS
– Ruby 2.6.5
– Rails 6.0.1
– ts 3.7.3
– es2019

# 使う場合
– `app/assets/audios` にmp3ファイルを置く
– webpackerの設定ファイルを変更する

## サンプルコード
– `app/assets/audios/test.mp3` を配置

“`config/webpacker.yml
static_assets_extensions:
# 以下の項目を追記する
– .mp3
“`
webpackerをdevelopment環境で使う場合に拡張子を追加しておく

“`app/assets/config/manifest.js
//= link_tree ../audios
“`
audiosファイルをmanifestにつなげる

“`app/views/top/index.html.haml
= audio_tag(‘test.mp3’, id: ‘test-audio’)
“`

“`app/javascript/packs/test

元記事を表示

AWSでのデプロイ手順①ネットワーク環境設定

初心者には難関である、AWSを使用したデプロイ手順を書いてみます

AWSはUIもよく変化するので、
現在のもの(2019/10)で書いています

※アカウントがない人はまず新規で申し込みしておいてください

今回内容
[**STEP1 ネットワーク環境設定**](https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step1-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)
1.VPCの作成
2.サブネットの作成
3.インターネットゲートウェイの作成
4.ルートテーブルの作成
5.サブネットとの紐付け
6.セキュリティグループの作成

[**STEP2 EC2の設定**]
(https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step2-ec2%E3%81%AE%E8%A8%AD%E5%AE%9A)
1.EC2にてインスタンスの作成
2.Elastic

元記事を表示

RoR|retry_on で指定した回数でリトライが出来ているかテストする

# はじめに

`retry_on` の `attempts` オプションを使って何回リトライするかを指定することが出来ます。「ほんとうにリトライできている?」と指定した回数でリトライが出来ているかのテストについての記事です。

# やったこと

## パラメータの検証

`retry_on` はクラスメソッドなので呼び出したときに期待する回数が検証できるかな?と思ったんですがクラスの中身がロードされた時点で評価されるので RSpec ではメソッド呼び出しのテストは失敗します :sweat: だってもう呼び出し終わっているもの。

“`ruby
expect(GuestsCleanupJob).to receive(:retry_on).with(wait: 2.hours, attempts:3).exactly(3).times
“`

## `retry_on` のブロックで指定した内容で検証する

`retry_on` のブロックはジョブがリトライする度に実行するのではなく `attempts` オプションで指定した回数が超えたときに評価するので今回の何回できたか?というの

元記事を表示

Rails6 のちょい足しな新機能を試す 115(PostgreSQL データベース存在チェック編)

 # はじめに

Rails 6 に追加された新機能を試す第115段。 今回は、`PostgreSQL データベース存在チェック` 編です。
Rails 6 では、PostgreSQLのデータベースを存在するかどうかをチェックする方法が少し変わりました。
データベースが存在しないときに、 `bin/rails db:migrate` を実行した場合、 PostgreSQLのロケールが英語以外でも、 `ActiveRecord::NoDatabaseError` が発生するようになりました。

Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 PostgreSQL 12.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、PostgreSQL を日本語ロケール (`ja_JP.UTF8`) で、Docker環境で起動し、 `bin/rails db:migrate` コマンドを使って Rails 6.0.2.1 と Rails 5

元記事を表示

seedを使わずにdb:migrateで初期データ投入

# `rails db:seed`はマスターデータ投入でちょっと面倒だった

マスターデータは初回投入後もちょいちょい追加することがある。
`rails db:seed`は差分更新みたいなことはできないらしい。(seed_fuとか使わない限り)
`rails db:migrate:reset`で全削除=>再登録はやりたくない。

# `rails db:migrate`を使えばいい

[Railsの初期データを投入する方法](https://qiita.com/mHadate/items/bc698ce5c126c932487e)を参考にさせてもらった。

`rails db:rollback`でやり直したかったので、`up`と`down`で実装してみた。
`change`だとロールバック時にデータ削除ではなく、もう一度挿入されてしまう。

“`rb:db/migrate/xxxxxxxxx_insert_hoge.rb
class InsertHoge < ActiveRecord::Migration[6.0] def insert_data [ { n

元記事を表示

VSCodeでRubyのデバッグをする際にエンコーディングエラーが発生する

[Visual Studio CodeによるRubyのデバッグ](https://dev.classmethod.jp/tool/visual-studio-code-ruby-debug/)

Mac環境でこちらの記事などを参考にVSCodeでRubyのデバッグをしようとすると以下のエラーが発生しました。

“`
CSV::MalformedCSVError: Invalid byte sequence in US-ASCII in line 1.
/Users/hoge/.rbenv/versions/2.6.5/lib/ruby/2.6.0/csv/parser.rb:313:in `rescue in parse’
/Users/hoge/.rbenv/versions/2.6.5/lib/ruby/2.6.0/csv/parser.rb:296:in `parse’
/Users/hoge/.rbenv/versions/2.6.5/lib/ruby/2.6.0/csv.rb:1236:in `each’
/Users/hoge/.rbenv/version

元記事を表示

rails環境構築 gem install sqlite3 エラー

railsを始めようと思い、下記サイトを参考にrailsのインストールを試みたところ、
rails new app名を実行したところで下記エラーがでました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/f2d97d3e-d470-0dc1-5f24-02c28e392401.png)

sqlite3のgemがないのがエラーの原因だと思ったため、gem listを実行してみると、確かにsqlite3がありませんでした。

なのでgem install sqlite3でsqlite3をインストールしようとしたところ、次のエラーがでました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/9ce97471-072e-a177-858f-3d8cd82e8aef.

元記事を表示

【初心者向け】Rubyで超簡単な本紹介アプリを作ってみる(日付と時間自動付与)

#require “date”を使って、投稿に今現在の日時を自動表示させる

こちらは、昨日の記事を参考に作成しています。
https://qiita.com/pontarou194/items/37a9c63fe617e3244e19

#3行で日時を表示させることができる
“`
require “date”
time = DateTime.now
print(time.hour,”時”,time.min,”分”,time.sec,”秒\n”)
“`

putsではなく、printを使用しています。

【理由】
・putsだと改行される。
・printは改行されない
・\nで改行していますが、あとで理由がわかります。

※\nのバックスラッシュは、Macの方はalt+¥でバックスラッシュができます。違ったらスイマセン。

#実際にコードを書いてみる

“`
puts “本の名前を登録”
title= gets.chomp
puts “著者を登録”
author = gets.chomp
puts “本のカテゴリを入力してください”
categorys = [“小

元記事を表示

Sinatraで接続元IPを表示する

Sinatraで接続元IPを表示する。

get ‘/’ do
“Your IP address is #{request.ip}”
end

元記事を表示

[Rails]本日のエラー

今度作業する時に、あれ?過去にも同じエラーが起こったことあるぞ!!となった時用に記事として保管しておくのが目的です。
なので、個人的に使用する記事なので投稿内容は大雑把にまとめます。

記事の流れ
1.なんの作業中にエラーが起きたのか
2.エラーの内容
3.対処法
4.原因

以上の流れで書いていきます。

#1.dbをリセットしようとした時

“`ターミナル.
rake db:migrate:reset
“`

#2.エラー内容

“`
ActiveRecord::NoEnvironmentInSchemaError:

Environment data not found in the schema. To resolve this issue, run:

bin/rails db:environment:set RAILS_ENV=development

Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by

元記事を表示

文字列とシンボルと双方の違いについて

# はじめに
学習メモです。
今回扱う対象は以下となります。

– 文字列(リテラル)
– シンボル(リテラル)

# 文字列から数値へ変換
最初の文字列が整数に変換できない場合は0を返します。

“`ruby
“100”.to_i #=> 100

“1.5”.to_f #=> 1.5

“7/2”.to_r #=> (7/2) Rationalオブジェクトに変換

“1+2i”.to_c #=> (1+2i) Complexオブジェクトに変換

“123ab45”.to_i #=> 123 aの前までが変換対象

“123ab45”.to_f #=> 123.0 aの前までが変換対象

“2.3”.to_i #=> 2 ピリオドの前までが変換対象

“3.5.6”.to_f #=> 3.5 2番目のピリオドの前までが変換対象

“a123”.to_i #=> 0
“`

# バックスラッシュ記法

| 指定する内容  | 生成される文字 |
|:—————–:|:————

元記事を表示

Lambda+API GatewayのレスポンスをJSONとしてパース出来ない

# はじめに

「[内閣府の祝日CSV](https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html)をLambda上でJSON形式に加工して、API Gateway経由で使えるようにする」というプログラムを考えたのですが、API GatewayのレスポンスがJSONとして正しくパース出来ないことが分かりました。

Lambda上で動いているRubyプログラムは単体のスクリプトとして問題なく動作することを既に確認していましたが、原因が分かるまで少し時間がかかったので、その記録をまとめてみました。

# 使用した環境

* Lambda(Ruby)
* API Gateway

# 正しく動作しなかったコード

* `JSON.pretty_generate`や`JSON.generate`、`JSON.dump`などでシリアライズした結果を返すと、**API Gatewayを通して取得したレスポンスの前後に不要なダブルクォート(”)が付いてしまい、JSONとしてパース出来ませんでした。**
* その後にさらに調べてみると、API Gate

元記事を表示

OTHERカテゴリの最新記事