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

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

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

## 今日はRuby on Railsの基礎を学んでみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/91d54fa3-a858-5378-699a-45ea83e14227.png)

## 今日の学び
### Railsアプリケーションの準備
* Railsで開発を始めるには`rails new アプリケーション名`というコマンドをターミナルで実行する
* 入力したアプリケーション名と同名のフォルダが作成され、その中に開発に必要なフォルダやファイルが用意される

### サーバーの立ち上げ
* 開発中のアプリケーションをブラウザで表示するにはサーバーの起動が必要
* サーバーの起動は`rails server`というコマンドの実行で完了する
* サーバー起動後にブラウザで`locaolhost:3000`というURLにアクセスすると色画面が表示されるようになる

### トップページを自動生成してみる
* トップページを作成するには`rails gen

元記事を表示

Rails RspecのテストをShoulda Matchersで簡単に書く

# はじめに
現場ではRspecを使用してテストコードを書いています。
modelのテストを行うにあたって先輩に要件を確認していたところ、「Shoulda Matchersを使うと簡単だよ。」と教えてもらいました。
そもそもこれなんて読むんだ?そして何が美味しいんだ?
と思いながら調べてみましたので備忘録として残します。
誤り、おかしな点はぜひご指摘いただければと思います。
# 環境(私のPC)
Ruby 2.7.1
Rails 6.0.5

# Shoulda Matchersとは
Shoulda Matchersとは長くて複雑かつつまずきやすいテストコードをワンライナーで記述することができるgemです。ワンライナーなので一行ということです。
え?そんなことができるの?ありえないでしょう。
半信半疑の思いを払拭すべく実際にやってみることにします。
(補足)
調べてみると「シュルダ マッチャーズ」と読むみたいですね。
スウェーデン語のようで日本語に訳すと「一致すべきです」となります。
# 前提条件
※すでにRspecがインストールされているものとします。
### モデルの準備
次のよ

元記事を表示

【Ruby on Rails】gsubで特定の文字列に

## 僕がやろうとしていたこと
実務である特定の文字列が存在した場合に、その文字の色を赤くして表示ということをしたくなった。

その時に使用したので gsubというインスタンスメソッドで実現可能ということを知った。
このgsubを使用して、特定の文字が存在した場合にその文字を“タグを使って囲みstyleを適用する“ことによって実現することができた。

## どうやったか(コード例)

“` ruby
gorira = “僕は大人になったらゴリラになりたい”
gorira.gsub(/ゴリラ/, ‘\&‘)
# => “僕は大人になったらゴリラになりたい”
“`
こんな感じでやりたいことは一応実現することができた。

元記事を表示

AWS SDK Rubyでスタブを行う

## はじめに
AWS SDKを使用したコードに対してテストを記述したい場合、AWSのSDKで用意されているClientStubsを使用して、スタブを行うことが可能です。
ドキュメント自体は公式が出しているものがありますが、この例だけではやりたいこと(`Aws::S3::Client`以外のインスタンスを使うケース)が実現できなかったので、今回調べたことについてまとめました。

## 環境
– Ruby: 2.7.1
– aws-sdk: 3.1.0
– aws-s3-sdk: 1.114.0

## 公式ドキュメントから
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ClientStubs.html

このドキュメントにあるように`Aws::ClientStubs`というモジュールが、各サービスに対応したClientクラスにincludeされています。

今回はS3を使って、その例を紹介します。

このモジュールに定義されているのは`api_requests`, `stub_data`,`stub_respo

元記事を表示

has_oneで追加される関連メソッド

## はじめに
ポートフォリオ作成中、has_one(1対1)の関連付けが必要になりました。
公式ドキュメントなど読んで、「これは頻繁に使いそうだな」と思ったメソッドを紹介します。

## サンプルモデル
ユーザー(User)がプロフィール(Profile)を作成できると考えます。

“`rb:app/models/user.rb
class User < ApplicationRecord has_one :profile end ``` ```rb:app/models/profile.rb class Profile < ApplicationRecord belongs_to :user end ``` ## 関連メソッド ```rb #関連付けされたオブジェクトを返す @user.profile #関連付けされた新しいオブジェクトを返す @user.build_profile(self_introduction: "I am a beginner") #関連付けされたオブジェクトを作成する @user.create_profile(self_introdu

元記事を表示

レビュー指摘メモ

## △△△画面の時にだけ表示する方法(コントローラーを画面名毎に用意して表示させる)

“`:HTML
<% if controller?name == "△△△" %>

表示したい内容

<% end %>
“`

## 更新時、画面の入力をクリアする

“`:コントローラー

if @sample.save

# PARAMSの中身を空に
params[:hoge] = nil

   # 変数を空にする
@sample = Sample.new
end

“`

## 印刷ボタンを押下時にはDB登録をしない。それ以外は登録する

“`:コントローラー
if @params[:commit] == ” 印刷 ”
put_log(rec, ”)
else
# 登録処理
end

“`

## 0か確認する場合、blankを使う

“`:

# 悪い例

元記事を表示

AWS cloud9でサーバー起動時に”Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.”というエラーで困った

## エラー内容
rails new で新しくアプリを作成し、ブラウザのホストを許可した後、rails sでサーバーを立ち上げた時に以下のエラーが発生!
![スクリーンショット 2022-08-03 15.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759696/9e2668d6-0478-4714-16fd-0a799f5e59a8.png)

## 解消方法
こちらの記事に助けていただきました?
https://mebee.info/2021/01/13/post-27973/ 
https://qiita.com/nosniklim/items/58154b3ba6ab9a26230c

### エラー文からの考察
“`
Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.
“`
SQLiteのバージョンが古い!と怒っているようです。
どのようにバージョンを更新すればい

元記事を表示

【rails】railsアプリケーションにLottieのアニメーションを導入する方法

## この記事でわかること
railsアプリケーションに既存のlottieアニメーションを導入する方法
※本記事ではjson形式のアニメーションファイルの作成方法については記載しておりません。

## Lottieとは
[Lottie](https://airbnb.design/lottie/)とは、Airbnbが開発したアニメーションライブラリであり、これを利用することで
ウェブサイトやアプリ上でアニメーションの実装が手軽にできます。
※以下はスクショですが、モダンなデザインでぬるぬる動くアニメーションが豊富に用意されています。

実際に使ってみたところ、SVGのアニメーションが爆速で実装でき、
ちょっと難しそうだと思っていたアニメーション導入がかなり身近な手段に感じられました!

## 実装方法
Lottie

元記事を表示

Ruby学習アウトプット 

転職活動において、技術試験がいくつか出されており、改めてこちらの本でRubyの勉強をしています。

そのアウトプットとして、よくRailsでみるRubyの記法が解説されていたので、アウトプットさせてください。

## nilガード

“`
number||=10
“`
上と下は同じ意味

“`
number||(number= 10)
“`

もしもnumberがあれば、number なければnumberに10を代入する

### 使うとき
– 変数にnilが入っているかもしれない状況で、nilの代わりになにかデフォルト値を入れておきたい場面で使う
– 認証のcurren

元記事を表示

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

## 今日はWebアプリケーションについて学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/852b13fc-6588-839a-b80b-1fc093ce3cec.png)

## 今日の学び
### Webアプリとは
* HTMLだけで作成されたWebサイトは作成者が更新しない限り毎回同じものが表示される
* Webアプリではメモを追加・閲覧するなど高度な機能をもつことができる
* WebアプリはiOSやAndroidなどのスマホアプリと異なり、ブラウザから使うアプリ

### Webアプリの仕組み
* Webアプリの処理
* ブラウザがサーバーにリクエストを送る
* サーバーはリクエストの内容(URLなど)に応じて処理を実行
* 処理の例
* データベースの操作やデータの取得・追加・更新・削除
* データベースのデータをHTMLへ変換しページ内容を変更
* 処理

元記事を表示

「備忘録」→「Rubyの繰り返し処理について」

Rubyの繰り返し処理についてそうだったんだ知識をしったので備忘録として投稿します。

・Rubyでfor文はほとんど使わない。代わりに配列自身に対して繰り返しの命令を送る。
・ブロックの記法でdo…endの代わりに{}を使うことができる。
・Rangeについて、1..5(1以上5以下)と1…5(1以上5未満)とで範囲の違いがある。

以上
これから備忘録メインになると思いますが、知識をつけるために継続てきに投稿していきます!

元記事を表示

RubyでDSLが書きやすい理由を整理する

## これは何
Rubyは「DSLが書きやすい言語」という説明がされることがあります。
なぜRubyはDSLが書きやすい、と言われるのかを僕なりにまとめてみました。
「こういう要素もあるからだよ」などあればぜひコメントや編集リクエストをいただけると嬉しいです。

## DSLの例
DSLとは直訳するとドメイン固有言語です。
簡単なイメージで言うと、「ユーザーが自由に構文に近い仕組みを実装、提供できる」ようなものです。
詳しい説明はWikipediaにお任せします。

https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%9B%BA%E6%9C%89%E8%A8%80%E8%AA%9E

RubyやRailsで使われているDSLで有名なものはActiveRecord周りの実装などでしょうか。
例を記載します。

“`user.rb
class User < ApplicationRecord validates :name, presence: true has_many :articles

元記事を表示

Ruby – ハッシュの初期値を配列にする

“`rb
example_hash = Hash.new{|hash, key| hash[key] = []}
“`

ハッシュの要素にいきなり配列としてpush出来たりする

“`rb
example_hash[“foo”].push “bar”

example_hash # => {“foo”=>[“bar”]}
“`

# 参考

https://simanman.hatenablog.com/entry/2013/09/24/211044

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# メンター受付

https://menta.work/user/5694

元記事を表示

Rails 画像投稿機能(CarrierWave)を実装する

## 始めに
現在ポートフォリオを作成中で、画像投稿機能を実装したくなった。どうやら`CarrierWave`というgemがあるらしいので実装してみる。

## CarrierWave とは
railsアプリに画像投稿機能を実装するための`gem`

|単語|意味|
|:-:|:-:|
|Carrier|運搬人、郵便配達員、新聞配達人、運送業者|
|Wave|波、波浪、波動、起伏、うねり|

公式ページ

https://github.com/carrierwaveuploader/carrierwave

## 公式ページ(README)を見てみる

>CarrierWave
This gem provides a simple and extremely flexible way to upload files from Ruby applications. It works well with Rack based web applications, such as Ruby on Rails.

この`gem`は提供します、Rubyアプリケーションからファイルをアップロードする

元記事を表示

選択肢が増やせる診断機能

選択肢が増やせる診断機能を紹介します!!

1.まずはコントローラーの作成
“`ruby:ターミナル&コマンドプロント
rails g controller tests # testsという名前のコントローラーを作成する
“`

2.testsコントローラーに記載
“`ruby:tests_controller.rb
class PerfumesController < ApplicationController def index end end ``` 3.tests.index.erbを作成し以下をコピペ ```ruby:tests.index.erb

あなたにあった〇〇が1分でわかる
〇〇診断
元記事を表示

【Rails】rails db:migrateが実行できない / PG::DuplicateTable: ERROR: relation “users” already exists / PG::ObjectInUse: ERROR: database “scaffold_app_development” is being accessed by other users

### 前提
Rails 6.1.6.1
ruby 2.6.6
database postgresql

### 実現したいこと
“`rails db:migrate“`をエラーなく、実行する。

### エラー内容の確認
“`rails db:migrate“`を実行したところ、次のようなエラーが出ました。
“`
rails db:migrate
Running via Spring preloader in process 31813
== 20220802023637 CreateUsers: migrating ======================================
— create_table(:users)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation “users” already exists

Caused by:
A

元記事を表示

初心者学習メモ スネークケースとキャメルケース

## スネークケースとキャメルケース

プログラムを始めた際にスネークケース、キャメルケースという言葉を聞きましたが何のこと?
となったので簡単にまとめました。

スネークケースとは、単語の間を_でつなぐ命名規則です。
キャメルケースとは、単語の先頭を大文字にする命名規則です。

“`
hot_coffee スネークケース
HotCofffee キャメルケース
“`

### 命名規則をなぜ用いる?
命名規則がないと、関数や変数、class名がバラバラになり可読性が低くなります。
その結果バグの原因になったりもします。
仕事となればチームで開発することがほとんどです。
命名規則をしっかり守ることで、他の人が書いたコードでも変数なのか、関数なのか、classなのか判断ができるようになります。

初心者の私は、人によって見やすさが違い使い方は好みで違うのかな〜なんて思ってました…
実際はそれぞれの言語によって命名規則が決まっているみたいです。

### Railsの命名規則
クラス名 : キャメル
それ以外 : スネーク
定数 : 全て大文字

元記事を表示

Railsコールバック、ActiveRecord::Enum

### コールバックによる制御
**コールバックとは**
特定の処理に引っ掛けて別の処理を呼ぶことをコールバックと言います

メリット
* 前処理、後処理などを宣言的に書くことができる
* 必ず保存後に行いたい処理がある時に、実行の漏れを防ぐことができる

**コールバックの基本的な使い方**
(例)
本の名前を保存する前に、名前に”Dog”が含まれていた場合
“Dog Cute”と文字列を置き換える

~~~md:
class Book < ApplicationRecord 略 before_validation do self.name = self.name.gsub(/Dog) do |matched| "Dog Cute #{matched}" end end # メソッドを使って書くこともできます before_validation :add_Cute_to_dog(独自メソッド) def add_Cute_to_dog self.name = self.name.gsub(/Dog/) do |matc

元記事を表示

【個人開発】通勤時にQiitaのトレンド記事が届くLINE Botを開発した

## はじめに

今回は通勤時間を有効活用することができる、通勤時にQiitaのトレンド記事が届くLINE Botを開発しながら**Railsと外部APIの連携**、**LINE Messaging API SDKの使い方**、**LINE Flex Messageの使い方**を学んでいきます。

チュートリアル形式で実際にLINE Botの開発をしながら開発方法を解説していきます。

## この記事の対象者

– LINE Bot開発に入門したい人
– Railsと外部APIの連携手法を学びたい人
– 個人開発でLINE Botを作ってみたい人

## 目標成果物

LINE側から「出勤なう」と送られてきたタイミングでQiitaのトレンド記事上位5つを返すLINE Bot。

![IMG_7062.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2695521/cd79cc33-f523-2bf8-296f-882f7b242c66.jpeg)

## LINE Botについて

### LINE B

元記事を表示

【Rails】Userがいいねした投稿一覧作成

# はじめに
ユーザーがいいねをした投稿の一覧を見れるようにしたい。
しかし、users_path(indexアクション)は別の用途で使用している。
そこで、routesに新しいルーティングを追加し、専用のページを作成する。
**完成図**
![favorited_posts.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/9d49289d-01ee-3f42-cb9b-6ad0d272478d.gif)

# 前提
使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
| 4 | Kaminari | 1.2.2 |
| 5 |

元記事を表示

OTHERカテゴリの最新記事