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

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

railsで開発中にAWSから高額請求された件、、、

EC2に750時間/月の無料利用枠、RDSにdb.t2.microという無料のインスタンスサイズが存在しているが、これには大きな落とし穴がある(見事に落ちました。。。)
実は、EC2のインスタンスやRDSのインスタンスサイズ

EC2の考え方は、作成数 X 利用時間 = 合計利用時間 という計算になっており、
無料利用枠 = 合計利用時間なのである。
私の場合EC2を2個走らせていた。
幸い、月の半分程で気づいたので請求はされなかったが、危なかった。
急いで両方の停止を実行し、開発中のみ起動するようにした。

RDSの場合、インスタンスサイズ(CPU、メモリ、ストレージ、ネットワークキャパシティーの組み合わせによって構成されている)を自由に選択でき、db.t2.microが無料利用枠として存在する。これが最低レベルであり、性能に比例して値段が上がる。
私の場合、db.m5.xlargeというインスタンスサイズが選択されており(原因不明。。。)、**1ヶ月で500$近い請求をくらった。。。。。**

すぐさま該当のDBインスタンスをdb.m5.xlarge ➡️ db.t2.micr

元記事を表示

ffi-1.13.1でサーバーが落ちてしまうので応急処置

resoucesの活用やActiveAdminを実装した際にサーバーを立ち上げてアクセスするとサーバーが落ちて悩んでおりました。
その際の応急処置を備忘録として書きます。

PC環境

– macOS Mojave

– Ruby 2.5.1

– Rails 5.2.4

#ターミナル表示

“`console:terminal
dyld: lazy symbol binding failed: Symbol not found: _ffi_prep_closure_loc
Referenced from: /Users/ytanaka/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/ffi-1.13.1/lib/ffi_c.bundle
Expected in: /usr/lib/libffi.dylib

dyld: Symbol not found: _ffi_prep_closure_loc
Referenced from: /Users/ytanaka/.rbenv/versions/2.5.1/lib/rub

元記事を表示

Rubyでアルゴリズムを実装する:Day 3 -二分探索-

最近Ruby書いてて楽しいな。3日目。
2日目はこちら<[Rubyでアルゴリズムを実装する:Day 2 -バブルソート-](https://qiita.com/Atarubift/items/f9f3224dccc3c32c4741)>

# 二分探索とは
ソート済みのデータを半分に絞り込む動作を繰り返して素早く特定のデータを見つけるアルゴリズム。
とても有名で、イメージもしやすい。
というわけで、レッツコーディング

# binarySearch.rb

“`rb
# 二分探索
def binarySearch(num, pat)
start = 0
len = num.length – 1
half = (start + len) / 2
mid = num[half]

while mid != pat
if half < 0 || half > num.length
half = -1
break
elsif pat == mid
break
elsif pat < mid len

元記事を表示

【Rails】ancestryを用いた多階層カテゴリー機能の実装『seed編』

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[多対多のカテゴリー機能実装](https://qiita.com/matsubishi5/items/a805fbcfd96f768dd622)
・[多階層カテゴリー機能実装(準備編)](https://qiita.com/matsubishi5/items/77aadc97a2e63c98cd91)

# 実装

|id|name|ancestry|
|—|—|—|
|1|**ビジネス**|nil|
|2|**金融**|1|
|3|株|1/2|
|4|為替|1/2|
|5|税金|1/2|
|6|**経済**|2|
|7|日本経済|1/6|
|8|国際経済|1/6|
|9|**経営**|3|
|10|経営学|1/9|
|11|戦略・攻

元記事を表示

Rails 値を正規化する

#値の正規化

ある規則に従うように情報を変換することを正規かと言います。
今回はフリガナとして入力された値が平仮名だった場合に正規化して
カタカナにするという正規化を行ってみます。

まずapp/models/concernsディレクトリにnormalizerを作成していきます。

“`string_normalizer.rb

require “nkf”

module StringNormalizer
def normalize_as_furigana(text)
NKF.nkf(“-W -w -Z1 –katakana”, text).strip if text
end
“`

以下のコードが実際に正規化を行っています。

“`ruby
NKF.nkf(“-W -w -Z1 –katakana”, text).strip if text
“`

指定される引数は以下のような意味です。

**NKF#nkfメソッドの引数**

| フラグ | 意味 |
|:—————–|————-

元記事を表示

【Rails】ancestryを用いた多階層カテゴリー機能の実装『準備編』

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[多対多のカテゴリー機能実装](https://qiita.com/matsubishi5/items/a805fbcfd96f768dd622)

# 実装

### 1.Gemを導入

“`ruby:Gemfile
# 追記
gem ‘ancestry’
“`

“`terminal:ターミナル
$ bundle
“`

### 2.カラムを追加

データ量がかなり多くなるので`index`を張ります。

“`terminal:ターミナル
$ rails g migration AddAncestryToCategory ancestry:string:index
“`

“`terminal:ターミナル
$ rails db:m

元記事を表示

【enum】 rails enumを利用してデータの可読性をあげよう

##【ゴール】
rails においてenumの使用

![画面収録 2020-06-19 19.28.08.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620689/60c48f87-cc70-8c9e-1088-200d92cbcaf5.gif)

##【メリット】
■ dbの可読性向上、管理しやすい
■ 日本語化にも応用が効く

##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

##【実装】
####と言ってもとても簡単!!!!対象のモデルに追記するのみ

※①が一番簡単な書き方
※②だと日本語も可能

“`model/hoge.rb
① enum カラム名:[:任意の単語, :任意の単語, :任意の単語, :任意の単語]
② enum カラム名:{“任意の単語”: 1,”任意の単語”: 2…….}
“`

※number_field をsele

元記事を表示

コードの命名を文系の観点から考察

# はじめに
Rubyで書いている時のコードの規約の経験まとめとして書いてます。

# 読み易いコードの定義
> 読んだ人が変更を加えたりバグを発見することができるようになるレベルで最短でコードを読み終えることができるということを目標にしてコードを書かなければならない

> 変数もメソッドもクラスも何を司っているのかを直訳した時に分かるようなっていること

## 表面上の改善として、任意に書けるものへの理解のしやすさを考える
 変数、メソッド、クラス、凡そ任意で書き、定義することができるこれらのコードの部分はよく考えて書かないと、前述のコード定義をクリアすることは至難である。正直、こちらが意図して書いていたとしても誤解を招くことすらある。誤読される可能性を出来る限り排除しないと、こっちが何も考えてないように思われるから腹立たしいものです。

### 明確な単語を使用する
 簡単な動詞、名詞、形容詞、前置詞を使用する。
 英単語を使用する上で、カチコチの英文法に則って書く必要はなく、むしろそれが混乱させることを招くこともあるので、その辺はプロダクトやチーム内のルールとして納得するような状

元記事を表示

Rubyでトリボナッチ数列の問題を解いてみた(制限時間10分)

# はじめに
低学歴の筆者がトリボナッチ数列の問題を10分以内で解決しなければならない状況に陥り、トリボナッチという言葉を忘れてしまった状態(記憶喪失状態)から10分以内でrubyで解決した体験記でございます。
数学に自信がある人・ない人も力試しに10分以内で実施してみてはどうでしょうか?

# 問題
>問1
1,3,7,11,21,39…
50番個目にある数字は何ですか?

という問題を解決しなければいけない状況になりました…

…(;゚д゚)ゴクリ

10秒くらい意識を失いましたが、とりあえず現状を理解せねば!!と気合を入れ直しました。

## トリボナッチ数列について
トリボナッチ数列とは、項の数字がその前の3つの項の数字の合計となっている数列である…らしいです
中学入試で勉強するらしいが、昨日何食べたっけ?レベルのメモリーしかない私の記憶喪失は治りませんでした(…現在30歳)

検索した結果…

>トリボナッチ数とは、
…中略
a[0]=a[1]=0
a[2]=1
a[n]=a[n-1]+a[n-2]+a[n-3]
と定義された数列
この数列の一般

元記事を表示

vagrant コマンドがなんだか動かない時

vagrant コマンドがよくわからないエラーに悩まされるときがある。

そんな時は、xcodeのバージョンアップが影響している事がしばしば。

一旦以下のコマンドを実行して試してみる事をオススメする。

“`
$ xcode-select –install
“`

元記事を表示

大好きなSCANDALのLINEbotを作りたいの巻1

#作りたいbot
毎日決まった時間にランダムでSCANDALのMVを送るbot
※SCANDALは女性バンドです。

####そのための僕の頭の中の構想(railsで作成)
1. まずはWEB上で動く物を作る
2. それをLINEbotにする
3. そこから機能を追加していく(例えば、ACIDMANとLINEで送るとACIDMANの曲をランダムに返すなど)
※ACIDMANもバンドです。

####ひとまずできたこと

1. まずはWEB上で動く物を作る

####参考にした記事

Qiitaの記事を元にYouTube Data APIのリファレンスを参考にしました。
> Qiita
https://qiita.com/sakakinn/items/46c0d4945e4646f346f6

>YouTube Data API
https://developers.google.com/youtube/v3/docs?hl=ja

####コード
“`index.html.erb
<% number = 0 %>
<% ran = rand(1..11) %>
<% @youtube

元記事を表示

[備忘録] [初心者] Rubyの書き方メモ(リファクタリング) 1

## 概要
[前回の投稿](https://qiita.com/RiSE_blackbird/items/b4c597a87daeed9d414c#%E8%83%8C%E6%99%AF)で掲載していたRubyのコードがRubyらしい書き方になっていないことに気づいたので、修正も兼ねて勉強のメモを残します。

下記記事を拝見したのがきっかけで、勉強のために実際に内容を参考にさせて頂きながら前回投稿分のコードを例にして修正してみました。
**[[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか | Qiita](https://qiita.com/jnchito/items/dedb3b889ab226933ccf)**

## コード

### 修正前
~~~rb:Upcasing.rb
def Upcasing(result_lines)
result_lines[0] = result_lines[0].capitalize
break_flg = false
## ④ Rubyでのハッシュの記法 (修正せず:できなかった理由

元記事を表示

AWS☆☆☆ デプロイまでの道のり3(短いバージョン、全5回)

### 1)背景
第3回目です。自身のポートフォリオをデプロイするために、いよいよunicornを介してrailsを起動します。
AWS関連手順記事はすごく多いので、ここでは備忘録も含めて、非常に端的に手順を記載します。
全5話で進めます。

### 2)環境

| 項目 | 内容 |
|:—————–|:——————:|
| OS.Amazon Linux AMI | release 2018.03 |
| Ruby | v2.5.1 |
| Ruby On Rails | v5.2.4.3 |
| MySQL | v5.6 |
| Unicorn | v5.4.1

元記事を表示

FinderのデフォルトテキストエディタをAtomに変更する方法

システム環境設定からデフォルトテキストエディタを変更出来なかったのでやり方を調べてみました。

#手順

1.Finderから適当なテキストファイルを右クリックし「情報を見る」を選択
2.▼このアプリケーションから設定したいテキストエディタを選択(今回はAtom)
3.その下の「全てを変更」で設定完了

3を飛ばせばファイルごとにエディタを選択できるみたいですね

元記事を表示

Rails アソシエーションでモデル間に1対多の関係性を持たせる

### はじめに ###
Rails初学者の私がアソシエーションによってテーブルを関連付けた後、
アクションメソッドへパラメーターを受け渡せずに非常に苦労したので記事にしてみます。
ゴールはPlace(カフェ)にメニュー(menus)の情報を持たせて画面上に出力することです。

※初投稿のため理解しがたい部分、間違っている部分等あるかもしれません。
なるべく正しい情報を記述したいと努力していますがご了承いただければと思います。
コメントでご意見等いただけましたら嬉しいです!

### ひとまずPlaceとMenuのカラムを確認 ###

“`ruby
irb(main):005:0> Place.column_names
=> [“id”, “name”, “message”, “created_at”, “updated_at”, “user_id”]
irb(main):006:0> Menu.column_names
=> [“id”, “title”, “price”, “message”, “created_at”, “updated_at”, “place_id”]

元記事を表示

Ruby 2.7.1 で解く AtCoder ABC127 D ハッシュ

# はじめに
AtCoder の過去問題の環境がバージョンアップされました。
# 今回のお題
*[AtCoder Beginner Contest D – Integer Cards](https://atcoder.jp/contests/abc127/tasks/abc127_d)*
Difficulty: 891

今回のテーマ、ハッシュ

問題からは優先度付きキューなのですが、制約が緩いようでソートでも解けます。
# 解法1 ハッシュ(2.7.1)
“`ruby.rb
n, m = gets.split.map(&:to_i)
h = gets.split.map(&:to_i).tally
m.times do
b, c = gets.split.map(&:to_i)
if h.key?(c)
h[c] += b
else
h[c] = b
end
end
ans = 0
cnt = 0
h.sort{_2 <=> _1}.each do |k, v|
if cnt + v < n

元記事を表示

【Rails】 gem ancestry カテゴリー機能実装について

# はじめに
草野と申します。
今回の投稿は、プログラミングスクールで学んだことを復習がてらにアウトプットを行います。
自分用のメモのため、文章は拙いですが、少しでも初学者の助けになればと考えています。
内容は、表題にもあるとおり、スクールで行ったチーム開発によるフリマアプリのカテゴリー機能実装についてです。未熟な点も多いと思います。不備等ありましたらご指摘ください。随時改善して行こうと思います。

# 完成品
親カテゴリーが選択されるとイベント発火し、子、孫とセレクトボックスが表示されます。

**商品出品時のカテゴリー登録画面**
[![Image from Gyazo](https://i.gyazo.com/2cdfbf0c9404425a2b4d6d5c2816058e.gif)](https://gyazo.com/2cdfbf0c9404425a2b4d6d5c2816058e)

**商品詳細情報のカテゴリー情報呼び出し画面**
qiita_カテゴリー商品情報.pngProgateのRuby on Railsコースの気になった所【params】

プログラミング未経験の初心者ですが、少し前にProgateのRuby on Railsコースを終わりました。

Railsチュートリアルをしながら復習してみると、Progateをやっていた時はあまりピンと来なかったけど、今なら少し理解できることが増えたので、気づいた点をまとめていきたいと思います。
Progateしているけど、ピンと来ていないな、ここ分からないなと思っている方のお役に立てば幸いです。

# paramsとは何か【コースⅢ】
Railsコースで頻出するparamsですが、正直「わかるような、わからないような…」と思っていました。

平たく言うと、
paramsはURLから送られてきた値やフォームで入力した値を`params[:パラメーター名]`で取得するメソッドです。

2020/6/20 とても参考にしたページのURLを追記します
https://note.com/sakusaku34/n/nc143e418b700

例をあげると投稿内容の詳細ページの場合だとこのような使い方になります。

def show
 @post = Post.f

元記事を表示

楽天ブックス(DVD)APIで検索機能実装する

#はじめに
現在映画検索サービスを開発中でrails,ajaxを使って非同期通信を実装しておりました。
数日間ハマった後、ようやく実装できたので記録を残しておきます。
jqueryはハンバーガーボタン等、動きをつける時など、少し触りましたがAjaxを触るのは初めてで数日はまりました。(サーバー再起動してないためコードが反映されてないとかの関係もありました。)

#環境
-rails (5.2.4.1)
-ruby (2.5.3)

__楽天API__を実装する方は(__Rails__の場合)__gem__をインストールしてください。
実装手順は省きます。
詳しくは[__コチラ__](https://github.com/rakuten-ws/rws-ruby-sdk/blob/master/README.ja.md)

#コントローラー処理指定

まずはじめに、検索欄に記入された内容を処理させるためにposts_contriller内のアクションを指定します。

“`ruby:routes.rb
get ‘search’, to: ‘posts#search’ #キーワードを検索した

元記事を表示

Ruby on Rails のquery attributeを使ってみる

## 結論: blank?とpresent?の代わりにattribute名?が使える(一部気をつける必要あり)

### 背景: integerのarrayを足しあげたかった(nilの可能性があり)

元々の私のコード…

“`ruby
[ここはhogeをkeyにもつObjectの配列].reject(|obj| !obj.hoge.nil?).sum(:hoge)
“`

`reject(|obj| !obj.hoge.nil?)` でhogeがnilのものを取り除き、 `sum(:hoge)` でnilを取り除いたhogeを足しあげるつもりでした。

### 修正版

“`ruby
[ここはhogeをkeyにもつObjectの配列].select(&:hoge?).sum(:hoge)
“`

`reject(|obj| !obj.hoge.nil?)` が `select(&:hoge?)` になりました。
hoge?がtrueに評価されるものをselectするようにしました、ここが今回学んだことです。
attribute名?という表現ができることです。

### 解

元記事を表示

OTHERカテゴリの最新記事