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

Ruby関連のことを調べてみた2022年06月15日
目次

クラスメソッドとインスタンスメソッドの違い

# メソッドとは
Rubyではdefを使ってメソッドを定義します。
“`
def メソッド名(引数)
# 必要な処理
end
“`
“`ruby
def add(a, b)
puts a + b
end
add(1, 1)
#=>2
“`

# クラスとは
Rubyではクラスを次のように定義します。クラス名(例:Addition)は必ず大文字で始めます。
“`Ruby
class Addition
end
“`

# インスタンスとは
Rubyでは以下のようにクラス名.newと書くことでインスタンスを生成することができます。
“`ruby
Addition.new
“`

# インスタンス変数とは
インスタンス作成時に実行されるinitializeメソッドを利用して「@がついたインスタンス変数」に代入します。インスタンス変数はインスタンス内であればどこでも呼び出すことができます。
“`ruby
class Addition
def initialize(a, b)
# インスタンス変数の先頭に@をつける
@a = a
@b = b
end

元記事を表示

【RubyでLINEbotまとめ】ボタンとか日付選択とか応答メッセージとか使いたい!

# はじめに
RubyでLINEbotを制作した際、「RubyでLINEbotを作る」という記事やサイトが少なく非常に困りました。そこで、これからRubyでLINEbotを動かしたいという人に少しでも参考になればと思い、この記事を書くことにしました。
その中で「もっと簡単に書けるよ」というのがあるかもしれません。
そのときは教えていただけると嬉しいです。

# 前提
LINEbotのサンプルコード(Ruby)を動かせることが前提です。
以前の記事で詳しく書いているので[こちら](https://qiita.com/Yuzu_Ginger/items/18edc58bd039fc19ad53)をご覧ください。

https://qiita.com/Yuzu_Ginger/items/18edc58bd039fc19ad53

# 目次
[応答メッセージについて](#応答メッセージについて)
[サンプルコード](#サンプルコード)

[メッセージタイプの種類](#メッセージタイプの種類)
  [1. テキストメッセージ](#1-テキストメッセージ)
  [2. スタンプメッセージ](#2-

元記事を表示

「超初心者向け」MacにRubyを最速でインストール(更新)

# Mac Ruby インストール備忘録

いらないこと書く記事が嫌いなので、最小の内容だけ書きます。自分が手順を正確に踏めている自信がない場合は、調べてください。すいません。

## rbenv インストール

`brew install rbenv`

`rbenv -v`で確認可能。

## 次に、rbenv で目標の Ruby バージョンをインストール

`rbenv install -l`で、最近のバージョンを表示。`rbenv install -L`で全てのバージョンを表示。
ここで確認した`3.1.2`や、`truffleruby+graalvm-22.1.0`などを次のコマンドで使用します。

`rbenv install 3.1.2`を実行。この時、`3.1.2`をインストールします。

## rbenv で、最新版 Ruby を有効化

次に、`.zshrc`を編集します。
`code .zshrc`などで開き、

“`
[[ -d ~/.rbenv ]] && \ export PATH=${HOME}/.rbenv/bin:${PATH} && \ eval

元記事を表示

Rubyを3.1系から2.7系にバージョン変更した際に起きたエラー

初めに

バージョン変更をする必要があった理由はロリポップマネージドクラウドを使い、自作アプリのデプロイを考えたからです。

バージョン変更前はRuby 3.1.1を使用し開発していましたが、ロリポップマネージドクラウドでは2.7系の開発環境が必要なようです。(念の為問い合わせました)

バージョン変更

バージョン変更方法に関しての詳細は省略しますが、参考にしたサイトとしてこちらを挙げさせていただきます。

[Ruby 3.0.0 から 2.7.2 にダウングレードさせる。](https://qiita.com/wonderglot/items/93cbfc7cb961c5ceb7a7)

私はこのサイトを参考にし、3.1.1から2.7.0にバージョン変更を行いました。

発生したエラー

バージョン変更後に発生したエラーのログはこちらです。

`/Users/tamio/.rbenv/versions/2.7.0/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initial

元記事を表示

【Rails】AppleMusicを投稿して埋め込む方法

# 1:概要

**apple musicのリンクを投稿し、サイトに埋め込む方法**を2つを紹介していきたいと思います。
サイト上で試聴も可能なため、音楽投稿系サイトを作りたい方々にはおすすめ:relieved:
使いたい方法に応じて選んでいただけたら幸いです。spotifyでも応用できるかと思います。

方法はこの二つです!
①埋め込みリンクを投稿する方法
②普通の共有リンクを投稿して埋め込む方法

使い分け方法は以下を参考に!
①`曲・アルバム・プレイリストのカラムを分けずに投稿できる`
②`携帯のMusicアプリからリンクをコピーして投稿できる`

### 完成図イメージ

![GIF 2022-06-14 5-15-46.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373315/c87bbb5c-6c0a-7e66-f0d6-1b8fc459ffcf.gif)

### 前提
基本的なCRUD機能に関してはすでに実装出来ているものとします。コントローラー名はpostsで記述しています。

元記事を表示

Rails6 Heroku デプロイで発生したエラーとその対処法

RubyとRailsの最新の安定版(2022年6月14日現在での最新の安定版)でherokuへのデプロイを行なった。
その際に発生したエラーをまとめてみました。

## 環境
– mac OS
– ruby 3.1.2 (2022年6月14日現在での最新の安定版)
– rails 6.1.6 (2022年6月14日現在での最新の安定版)
– node 16.13.0 (12以上にしといたほうがいいらしい)
– yarn 1.22.19 (1以上にしといたほうがいいらしい)
## 発生したエラー

### ****Failed to install gems via Bundler****

このエラーは`git push heroku main`コマンドを実行したときに発生。
下記記事の通りでうまくいく。
(https://qiita.com/m6mmsf/items/fb8a8672df98bdb59c9c)

### you don’t have net-smtp installed in your application. please add it to your gemfil

元記事を表示

has_manyとbelongs_toを完全に理解した。

最近railsチュートリアルを完走した22卒エンジニア(男)です。railsのアソシエーションについてです。

railsチュートリアルでhas_many、belongs_toを理解した(つもりだった)のですが実務で全く使いこなせませんでした。で、改めて勉強して**初学者が理解しやすいような表現**がなんとなく分かった気がしたので記事に残します。

※ 私の表現が間違っていたりすることもあるかもしれませんのでその際はご指摘いただければ幸いです。

# 対象者
– has_many、belongs_toが既存の記事であまり理解できない。
– 私のようにhas_many、belongs_toを完全に理解した(つもりの)人

# has_many、belongs_toの正体
## 公式リファレンス
まずrailsガイドの[has_many](https://railsguides.jp/association_basics.html#has-many%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91:~:text=%E3%81%AB%E3%81%AA%E3%82%8A

元記事を表示

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

## 今日は総合問題を解いてみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/beea3a45-205a-d32c-9bda-79e0771f72a3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/53f05493-88f2-9be4-7541-7599ba1bdd16.png)

## 今日の備忘録

### ハッシュが値の配列でeachを使う場合
* ハッシュが値の配列でeachを使うと指定した変数にハッシュ要素が順番に代入される
* 例:usersをuserに代入してnameキーのみ出力したい場合
* `users=[`
* `[name:”Yamada”,age:21]`
* `[name:”Tanaka”,age:24]`
* `]`
* `u

元記事を表示

アンカーとエイリアスを使っているYAMLの処理がfedora 36で失敗

備忘

# 発生事象

以前は動いていた vagrant up が失敗。

“`
$ vagrant up
Vagrant failed to initialize at a very early stage:

There was an error loading a Vagrantfile. The file being loaded
and the error message are shown below. This is usually caused by
a syntax error.

Path: /foo/bar/molecule/default/Vagrantfile
Line number: 0
Message: Psych::BadAlias: Unknown alias: platform
“`

# PD

PDの結果、YAMLファイルから情報を読み取って使用していたVagrantfileが失敗するようになっていた。

具体的には以下の樣なYAML.load_file箇所が失敗。

“`ruby
require ‘yaml’
foo = YAML.lo

元記事を表示

対象となる文字列からn番目の文字を削除するメソッド

任意の文字列の先頭からn番目の文字を削除するメソッドを紹介します。

例えば下記のように郵便番号111-1111を入力するが間のハイフンを削除して出力したいときなど削除したい文字が何番目にあるかわかっている時などを想定した時

“`
def address(number)
number.slice!(3)
puts number                 #1111111が出力されて”-“が削除されている
end

number = “111-1111”
address(number)
“`

slice!の後ろの()内は配列と同じように0から始まる数字を入れます!

:::note info
slice!メソッドは配列や文字列から指定した要素を削除して返します
:::

元記事を表示

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

## 今日はnilとハッシュの配列を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/f74c101b-4ae7-bcd9-c489-dea43ffe6351.png)

## 今日の学び
### nil
* nil:「何もない」という意味の値で「ニル」と読む

### nilを利用したif文
* ifの条件文で指定した値がない場合はnilになるため、else側の処理が実行される
* 例:userの年齢情報がない場合に「〜さんの年齢は秘密です」と出力したい場合
* `user=[name:”Yamada”]`
* `if user[:age]`
* ` puts “#[user[:name]さんは#[user[:age]]歳です”`
* `else`
* `puts “#[user[:name]さんの年齢は秘密です”`

### 要素がハッシュである配列の作り方・使い

元記事を表示

【2022年版】 Windows10/11 への Jekyll (4.2.2) インストールにおけるトラブルシューティング

Windows11 にて、2022年4月5日現在の最新版である Jekyll 4.2.2 をインストールし、ローカルで
Jekyll の [Edition](https://cloudcannon.com/community/themes/edition/) テーマを用いたサイトをビルドしようとしたところ、エラーが出てビルドできませんでした。

Google で検索しながら、トラブルシューティングを行いましたが、最終的に修正できるまで時間がかかったため、この記事で対処方法をまとめておきます。

この記事でエラーの詳細を記述しているのは、同じエラーに遭遇しているにもかかわらず、問題の解決方法が分からずに、
[teratail](https://teratail.com/) で質問しても正解が得られなかったり、暫定的な処置をしていたりするので、エラーメッセージで検索して、この記事に辿りつくようにするためです。

また、同じ Ruby 製の静的サイトジェネレーターである [Middleman](https://middlemanapp.com/jp/) でも同じエラーが出ているようなので、

元記事を表示

requireとは?permitとは?ストロングパラメータとは?

# はじめに
WebからPostリクエストやPatchリクエストによって送られきた情報は**paramsの中のモデルの中の値**のように入れ子構造になって格納され、サーバーに渡される。
“` 言語名:app/controllers/posts_controller.rb
def post_params
# params[:post][:content]のように階層構造になっている
params.require(:post).permit(:content)
end
“`
これだけのコードだが、一つずつ読み解いていく。

使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# 目次
[1.requireとは](#1-requireとは)
[

元記事を表示

新米エンジニアによるリファクタリングのすすめ-前編-

## はじめに

「先輩からリファクタリングしろって言われたけどどこを直したらいいか分からない…」
とか
「自分の書いたコード全てがクソコードに見える…」

といった悩みを、誰しも一度は感じたことがあると思います。
自分もその1人で、1年間エンジニアとして働く中で、たくさんのコード修正と格闘してきました。
今回は、先輩から聞いたり、本で勉強したりして、自分なりに身につけた「**こういうコードはやばい!**」や「**このタイプのコードはこう直せ!**」といった感覚をまとめてみました。

誰かがリファクタリングする際に少しでも参考になると嬉しいです。拙い記事ですがよろしくお願いします。
1記事にまとめて書くと長過ぎるので、前編・後編に分けます。

前編では
– 破滅的な命名
– 汎用的すぎる命名
– 複雑な条件分岐
– 長すぎるメソッド

後編では
– 再代入を繰り返す変数
– 重複したコード
– 統一化されてないコード
– 不要なコード
– 不要なコメント

について説明します。

## 注意事項

以下のソースコードは全てRubyで記述しています。
また今回のリファクタリング

元記事を表示

【binding.pry】エラーは出ないけど、画像投稿出来ない時の対処法

#前提
この記事のVS codeにインストールしたrails6.0.0を使用しています。
私のオリジナルアプリケーション(躓いたこと)を用いて、誰かの役に立つ記事になればと思います。

#結論
binding.pryで一時停止をして、パラーメータをチェックする。
※Gemfileに「gem ‘pry-rails’」を記入し、「bundle install」を行う必要あり。
MVCを理解し、間違いを探す方法を習得する方法を習得する。

#アプリケーション概要
私は写真記録のオリジナルアプリを作成しました。
ユーザー登録をしているメンバーで日本一周の写真を記録するためのアプリケーションになります。

#内容
投稿しようと思ったが、情報が投稿されない。
“`
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render :new
end
end
“`
どうしてもelseに入っ

元記事を表示

RspecでActiveRecord::RecordInvalid: バリデーションに失敗しました

#環境

初めて記事を書かせて頂きます?‍♂️
間違っていたら指摘お願いします
M1
ruby3.1.0
rails 6~

—-

#経緯
—-
一度通ったテストが
RspecでActiveRecord::RecordInvalid:バリデーションに失敗しました
に阻まれて沼ったお話

テスト対象はuserなのに何故か違うテーブルのバリデーションがかかってしまう

#結論
—-
アソシエーションをしていたから

今回作っていたテーブルの関係性を説明します

userテーブル, postテーブル, categoryテーブル

user 1対多 post
user 1対多 category

post 多対1 user
post 多対1 category

category 多対1 user
category 1対多 post

アソシエーションを組む事によって
postを作るにはuser, categoryが必要
categoryを作るのはuserが必要
という風になっていました

#Rspec
—-
“`
spec/requests/posts_spec.

元記事を表示

[Ruby]warning: already initialized constant Digest::REQUIRE_MUTEXの解決法

## 概要
ある日自分の開発しているPFでこのような警告表示が出たので解決法を備忘録として残します。

rails routesを実行後
“`
~省略/.rbenv/versions/3.0.2/lib/ruby/3.0.0/digest.rb:6: warning: already initialized constant Digest::REQUIRE_MUTEX
〜省略/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/digest-3.1.0/lib/digest.rb:20: warning: previous definition of REQUIRE_MUTEX was here
“`

## 解決法
[こちら](https://geniusium.hatenablog.com/entry/2021/06/15/133317)の記事を参考に
概要gemをアンインストールした後、updateした
“`
$ gem uninstall digest
“`
“`
$ gem update –default
“`

##

元記事を表示

Ruby on Railsの環境を構築する際のNginx設定ファイルのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Nginx 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## default.confのコマンド説明
default.conf
“`
upstream puma {
server app:3000;
}

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

root /app/public;

location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass

元記事を表示

? Crystal言語でも `eval` できる! Anyolite ?? がすごい

## はじめに

Crystal言語では `eval` を使うことができません。

もしもCrystal言語で `eval` を使わなければならないとしたら、そのためにはCrystalそのものを実行ファイルの中に組み込まなければならないからです。

Evalはバッドプラクティスとされることが多く、なるべく利用しない方がよいと言われています。しかし、Crystal言語を使っていると、Rubyのevalが恋しくなることがありますね。そんなときに、なんとmruby(やCRuby)をCrystalの実行ファイルに組み込むことによって、Crystal言語でもevalを実行できるようにしてしまう[^1]、というスゴいプロジェクトを見つけたので紹介します。

## Anyolite

https://github.com/Anyolite/anyolite

アニョライトって知っていますか? 私は知りませんでした。これはゾイサイトという結晶の中にルビーの結晶が含まれた宝石だそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

ruby open-uri について

たまに、URLを開こうとしても、このようなエラーが出るのではないだろうか?

“`
~/lesson_ruby % rb nokogiri2.rb
/Users/hoge/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/open-uri-0.2.0/lib/open-uri.rb:364:in `open_http’: 503 Service Unavailable (OpenURI::HTTPError)
“`

この対策に、このようなコードを書く

“`rb
require ‘nokogiri’
require ‘open-uri’

url = ‘https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%

元記事を表示

OTHERカテゴリの最新記事