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

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

【個人開発】コロナ禍で加速するTwitterの荒れを防ぐために、きのこでわかるツイートのネガティブ診断を作ってみた

# はじめに

はじめまして。megと申します。

コロナ禍でストレスが溜まり、荒れるツイートを無意識につぶやく子羊たちに向けて、ツイートのネガティブ度を図る

「きのこネガティブ診断」

[https://kinokoshindan.herokuapp.com/](https://kinokoshindan.herokuapp.com/)

を作成しました。

きっかけは、友人のTwitter。

おそらく無意識で怨嗟の言葉を吐いているのか、コロナ禍に入り、心配になるようなツイートが増えてきました。

個人的にツイートの怖いところは、自分のツイートはなかなか見直さないけれど、他の人は意外と不特定多数の人がチェックしているということ。

特に公開アカウントは注意しなければなりません。

客観的に自分がどれだけストレスを溜めているか、深刻になりすぎずポップに見つめ直せるように、どのくらいネガティブなツイートを世に出しているのかを診断できるアプリを作成しました。

[![Image from Gyazo](https://i.gyazo.com/6bba1f04012b84c909a5b5

元記事を表示

【Ruby on Rails】指定した日の記録(投稿数)を非同期で検索する方法

#対象者

* 検索機能をransackなしで実装したい方
* 検索を非同期通信で行いたい方

#目的

* 非同期で検索結果を作成する

#実際の手順と実例
###1.前提

* Rails 5.2.5
* userコントローラーにsearchアクション加えることで実装
* 本(bookモデル)とUserモデルを実装済
* アソシエーション設定(ユーザー:本 = 1:N)
* 本の一覧ページに検索結果を表示

イメージこんな感じ

![スクリーンショット 2021-07-27 16.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/64d932b6-5f25-15ee-830f-af46a15c4e31.png)

###2.Controllerとルーティングの設定

Userコントローラーに下記を追記します

““Users_controller.rb
#一部抜粋
def search
@user = User.find(params[:user_id]

元記事を表示

read big-endian 32bit float data using ruby numo/narray

# TL;DR
big-endian 32bit floatのデータをファイルから読み込み、Narrayオブジェクト化する。

# Version
– Ruby: 3.0.2p107
– numo-narray: 0.9.2.0

# Install

“`
gem install numo-narray
“`

# Code

“`ruby
require “numo/narray”
include Numo

file_name = “PSEA.f32”
io = open(file_name, “rb”)

grid = {:x => 481, :y => 505}

#読み込み
data = SFloat.from_string(io.read(grid[:x] * grid[:y] * 4))

#エンディアン変換
data = data.swap_byte

#整形
data.reshape!(grid[:x], grid[:y])

p data

io.close
“`

# 参考

– https://qiita.com/kojix2/items/0bc5ef

元記事を表示

Rubyの環境構築

*Vscodeを使う前提

#Rubyのバージョン

macOsには、はじめからRubyが導入されている。

“`
$ ruby -v
“`

*PCには基本的に1つのバージョンしか入らない
プロジェクトによってRubyのバージョンを切り替える。
これを簡単に行いたい

#バージョン管理ツール rbenv
⚫︎rbenv
Rubyのバージョン管理ツール
使用するRubyのバージョンを簡単にきりかえられるもの

#公式ドキュメントを確認し導入する
rbenvはGithubで公開されている。公式ドキュメントをもとに
導入を進めていく。

*公式ドキュメントは基本英語なので英語に慣れていくのがいい。

https://github.com/rbenv/rbenv

⚫︎インストール 2021年8月12日現在
macOsでHomebrewを使ったインストール

1 rbenvをインストール

“`
$ brew install rbenv

#rubyーbuildも入れると
$ brew install rbenv  ruby-build

“`

2 rbenvをシェルの中にセット

元記事を表示

ヘルパーメソッドのパスを知る!

# はじめに
本記事では、`form_with`についてまとめました。
本日、深掘りした内容になりますので、アウトプットいたします。

# ヘルパーメソッド
Railsにおける、主にビューでHTMLタグを出現させたり、
テキストを加工するために使用されるメソッドの総称です。
以下のようなものがあります。

|ヘルパーメソッド|使用用途|
|——|——|
|form_with|投稿ページなど、情報を送るためのフォームの実装|
|link_to|リンクの実装|

他にもたくさんのヘルパーメソッドがありますが、初めに学習するものは上の2つです。

## パスについて
パスの指定方法は、大きく分けて2種類あります。
①URL(URIやPrefixを記述する方法)
②modelオプション

### URL(URIやPrefixを記述する方法)
例えば、

“`erb
<%= link_to "編集する", edit_prototype_path(@prototype), class: :prototype__btn %>
“`

`edit_prototype_path(@p

元記事を表示

【Rails】多数のテーブルが存在する場合においてアソシエーションの一覧を取得する

## 概要

本記事は数百個のテーブルが存在するアプリケーションの開発をしている中で、あるモデルがどのモデルに対してアソシエーションの関係があるかを一覧で把握したいことがあった際に、アソシエーションの情報を一覧で取得できるコマンドを考えた際のメモになります。

## コマンド

Railsコンソールで実行

### has_many

“`ruby
hash = {}
tables = ActiveRecord::Base.connection.tables
tables.each do |table|
value = table.classify.constantize.reflect_on_all_associations(:has_many).map(&:name) rescue false
hash.store(table, value)
end
“`

### has_one

“`ruby
hash = {}
tables = ActiveRecord::Base.connection.tables
tables.each do |table|
value =

元記事を表示

Heroku 「 ▸ Couldn’t find that app.」というエラーが出てきた時の解決方法

今日は人に読ませるレベルではないかもです。
メモメモ。

VSChordにてherokuのデプロイを行っていたら、、、

“`perl:
$ Couldn’t find that app.
“`

というエラーがでてきた。
再度チャレンジしていると、どうも格闘しているアプリ名が違い。。。

は!と気づいた
先ほどheroku createで一度違う、アプリを作成してしまっていた。
そして、herokuのwebサイトから削除した間違えたアプリ名だ!

色々調べていくと

“`perl:
$ heroku git:remote -a [app name]
“`

でherokuの対象を変更して解決。

以上

元記事を表示

Ruby on Rails5 学習メモ

##最初に##
今まで、WebフレームワークとしてDjangoやSpringBoot、Bubble(ノーコード)などを経験していることを前提でRuby on Rails5を学んだ際の率直な感想は、シンプルでわかりやすいということです。DB操作などもRailsからとても簡単にできたり、文法はシンプルですが、独自のルールがあったり慣れればとても省エネでコードを書き進められます。
Railsの超入門を触っただけなので、まだRailsのことをそんなに知らないですが書いていて楽しいのは間違いないです。どんどん触って慣れようと思います。

学習メモとして以下を記します。(※説明がおかしい点あるかもです…)

##学習メモ

####コンソール系

**アプリ作成**

“`
rails new アプリ名
“`

rails new (アプリ名)でアプリ名のフォルダ作成が作成され、そのフォルダ内に開発に必要なフォルダやファイルなどが作成される。

:::note info
.gitも自動で作成される
:::

**サーバー起動**

“`
rails server
“`

Railsサーバ

元記事を表示

Herokuで月一回のバッチ処理を実装する方法

はじめに

月1回バッチ処理で、テーブルの特定カラムを更新したいと思い、gem「whenever」を使用して、バッチ処理を実装しようとしたものの、Herokuでは使用できなかったため、Heroku Schedulerを使用して、月一回のバッチ処理を実装しました。実装するにあたり、情報が少なかったため、同様の悩みをお持ちの方のお役に立てばと思い、記載いたします。

開発環境

– Mac
– Ruby 2.7.2
– Rails 6.1.3.1
– PostgreSQL 13.2

タスクの定義

Schedulerで実行したいタスクを定義します。`rails g task タスク名`コマンドでタスクを定義します。今回はタスク名を「reset_eat_day_month」としました。

“`:ターミナル
rails g task reset_eat_day_month
“`

成功すると、`lib/tasks`下にタスクが作成されます。私の場合、usersテーブルのeat_day_monthというカラムを0に更新したかったため、以下のタスクを定義致しました。

元記事を表示

JavaScriptの関数をRubyっぽくする

##したいこと
– 引数をオブジェクトで渡す
– 引数のデフォルト値を定める
– 関数側でキーを変数として定める

##Ruby
関数を定義するときrubyだと

““ruby
def func(a: 1, b: 2)
p a, b
end

func(a: 2) #=> [2, 2]
““
みたいにできて便利

##JavaScript
これと同じことをJSでやろうとすると

““js
let func = (options) => {
let a = options.a === undefined ? 1 : options.a;
let b = options.b === undefined ? 2 : options.b;
console.log(a, b);
}

func({a: 2}) //> 2, 2
““
のようになり冗長。

##結論
これをDRYにすると

@shiracamusさんからコメントいただきました。普通に同じキーを後に付け加えれば上書きできるんですね。その発想はなかったです。ありがとうございます。

““js
let

元記事を表示

【Ruby】単体テストコードのためのgem導入について

今回はテストコードを書くための3つのgemの導入について書いていきます。

RSpec,Faker,FactoryBotです。
RSpecはRuby on Railsのテストコードを書くために用いられるGemです。
Fakerはテストの際に用いるユーザー名やメールアドレスなどを、一定のルールに則り生成するGemです。
FactoryBotはインスタンスをまとめることができるGemです。Fakerと組み合わせて使うことができます。

最初は「コードは動けばそれでいいのでは?」みたいなことを考えていましたが、
今は品質を担保するためには必要な作業だと思っています。

さて導入の方法ですが、まず今作業しているアプリケーションのGemfileに移動し、

“`Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64

元記事を表示

M1 Mac でRailsコマンドが使えなくなった時のメモ

M1 Mac で rbenv 経由で Ruby3.0.2 を入れたらrailsコマンドが以下のエラーで打てなくなった

“`terminal:terminal
$ rails s
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory

$ rails -v
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory
“`

“`
$ which rails
/usr/local/bin/rails

# 現状の環境確認
$ which ruby
/Users/takuya/.rbenv/shims/ruby
$ which gem
/Users/

元記事を表示

【Rails】LINEのように送ったメッセージがチャット画面の一番下に表示される方法

# はじめに
今回はLINEのように最新アイテムが一番下に追加されていくチャットのような画面で、
メッセージが追加されたら画面を自動で下までスクロールする方法について記述します。

記事をコピペしても使えるかと思います!

※前提でjQueryを使用しますので、そちらの導入をお願いいたします。
jQueryの導入:https://qiita.com/shunichfukui/items/d79f38a3af2715ffd218

# 開発環境
Ruby on Rails バージョン2.6.5

#実装方法
①メッセージを表示させたいビューにidとCSSにoverflow: scroll;(スクロールさせるCSS)を記述
(※私の場合はBootstrapを導入しているので、classでスクロール指定)

“` HTML:

  メッセージが表示されるエリア

“`

②jQueryを使用し、自動スクロールを設定(jsファイルに下記を記述)

“`JavaScrip

元記事を表示

RailsでYoutubeLiveからリアルタイムでコメントを取得してみた

#内容
RailsでYoutubeの生放送からコメントを一定時間ごとに取得→フロントにレンダーする機能を実装

#google-api-clientについて
RailsにはGoogleの各種API用のGemが存在していますが、配信のコメントを取得しようとするとエラーが発生します。調べてみた所、どうも2021/08/11時点でYoutubeについてはアルファ版で([ソース](https://developers.google.cn/youtube/v3/libraries?hl=ja))、かなり開発の初期段階にあるようです。もしかしたらこれが原因かもしれませんので、代替として今回はリクエスト用のURIをRails標準ライブラリのnet/httpに渡して送信→リターンを得るという形を取ります。

[google-api-client公式リファレンス](https://developers.google.cn/youtube/v3/docs?hl=ja)
[net/httpリポジトリ](https://github.com/ruby/net-http)

##環境
– ruby 2.6.3

元記事を表示

【Ruby on Rails】AWSの本番環境で起きたエラーをtailを使って確認する方法

#対象者

* 本番環境(デプロイ後)でエラーが発生している方
* Cloud9を使用して開発を進めている方

#目的

* cloud9から本番環境で起きたエラーの原因を突き止める

#実際の手順と実例
###1.logディレクトリに遷移する

まず、EC2からSSHでログインを実施します。
cloud9のターミナルから下記コマンド実行

““
$ ssh -i ~/.ssh/[pemファイル名] ec2-user@[IPアドレス]
““
[]の中身はそれぞれの状況によって変わると思います。
pemファイル名はキーペアの作成時にできたやつです!(うろ覚え)

その後、下記の順でlogでディレクトリまで移動します。

“`
$ cd アプリケーション名
$ cd log
“`

###2.エラー内容確認

lsコマンドで下記のファイルを見てみます

““
[ec2-user@ip-xxxxxxxx log]$ ls
development.log migrate:reset.log production.log puma-error.log puma.l

元記事を表示

久々に気持ちいいオブジェクト指向っぽいコードが書けたから共有したい

皆さんはオブジェクト指向でコード書けてる実感ありますか?
クラスだのインターフェースだの、継承だのis-a、has-aだの難しそうな単語ばっかりで…
普通のWebアプリケーションを書き書きしているとあんまり勉強したことを実感したことありませんでした。
ただ、最近ちょうどオブジェクト指向っぽいコードが書けたので、そこだけ切り出して、ライブラリ化して、コードの解説をしようかなってのが話しの内容です。

# コードを書くことになったきっかけ
[Sentry](https://sentry.io/welcome/)というエラーがあったときに、エラーの詳細を記録してくれるサービスがありまして。
↓な感じにエラーがあったときに、リクエストパラメータをSentryに送信するようなロジックを書いてました。
[あんまり話の本筋じゃないけど、該当のコードのドキュメント](https://docs.sentry.io/platforms/ruby/enriching-events/breadcrumbs/
)

“`ruby
puts params
#> {id: 99999, hoge: “hoge”,

元記事を表示

Ruby 基礎

## 目次
1. [基礎文法](#1基礎文法)
1. [演算子](#2演算子)
1. [データ型](#3データ型)
1. [制御文](#4制御文)
1. [クラスとモジュール](#5クラスとモジュール)
1. [ライブラリ](#6ライブラリ)

## 1.基礎文法

### 基本的なルール
* すべてオブジェクト(文字列や配列、数値やnilなど)
* 改行が文の区切り、セミコロンで明示的に文の区切りをすることも可能
* バックスラッシュ(\\)を使うと、文がまだ続くことを明示できる

### 変数

* 「変数名 = 値」の形式で変数宣言ができる
* 変数名だけ宣言するとエラーになるため、何かしらの値を代入する必要がある

“`ruby
# ローカル変数
# 先頭を英子文字か「_」にする
hoge = “hoge”

# インスタンス変数
# 先頭を「@」にする
@fuga = “fuga”

# クラス変数
# 先頭を「@@」にする
class Foo
@@foo = 1
end

# グローバル変数
# 先頭を「$」にする
$bar = 999
“`

### 定数

元記事を表示

[Rails]予約語一覧[h~m]

# はじめに
本記事では、Railsの予約語一覧を記述しています。
以下の記事の続きになります。

https://qiita.com/mkato1013/items/07194f6a799fa9acedac

# 予約語一覧(注意すべき単語を記述しています)
|頭文字|単語||||
|-|-|-|-|-|
|h|having|hold|host|hour|
||*「hour~」も多いです||||
|i|if|ignore|ilike|import|
||in|index|indexerror|infile||
||initialize|insert|int|int1|
||int2|int3|int4|int8||
||integer|into|io|is|
||isolation||||
|j|join||||
|k|key|keys|kill|||
|l|lag|language|large|last|
||layout|lead|leading|leave|
||left|less|level|like|
||limit|lines|link|ln|
||load|loader

元記事を表示

環境を揃える為にrubyのインストールで出たエラー(M1Mac)

課題で環境指定があるため
指定された環境構築を行なっていた中でrubyのverをインストールした時に
起きたエラー

>普段の環境:Mac M1 rails6.1.4 ruby3.0.1
>指定環境: rails5.2.5 ruby 2.6.3

“`sh
Downloading openssl-1.1.1k.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5
Installing openssl-1.1.1k…
Installed openssl-1.1.1k to /Users/uk./.rbenv/versions/2.6.3

Downloading ruby-2.6.3.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.bz2
Installing ruby-2.6.3…
ruby-build: us

元記事を表示

【Ruby】newした先のclassにinitializeが存在しない場合に考えること

## 背景
Railsのコードを読んでいて`<モジュール名>::<クラス名>.new`といったインスタンスが存在しており、該当するモジュールのファイルにジャンプした後、そのファイルのクラスに`initialize`メソッドが存在しなかったので疑問になり調べてみることにしました。

## 結論
結論としてはクラス内部で`include ActiveModel::Model`が呼ばれており、Ruby本体の`rails/activemodel/lib/active_model/model.rb`の`initialize`が呼ばれていることがわかりました。

“`ruby:rails/activemodel/lib/active_model/model.rb
# Initializes a new model with the given +params+.
#
# class Person
# include ActiveModel::Model
# attr_accessor :name, :age
# end

元記事を表示

OTHERカテゴリの最新記事