Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

dockerで一回コンテナから出てから作業して、また入り直す。

# コンテナから出て作業するのってどうすれば?
と思ったので書こうと思いました。結論としては、

*コンテナ内から出る*

まず、現在コンテナ内にいる場合は、exit コマンドを実行してシェルを終了し、ホストマシンに戻ります。
“`
exit
“`
/ここで諸々作業する

*再度コンテナに入る*
その後、以下のコマンドを使って、元の作業していたコンテナに再度入ります。
“`
docker exec -it コンテナ名 /bin/sh
“`
### 流れ
– exit でコンテナ内のシェルから抜ける。
– コンテナが実行中であれば、*docker exec -it コンテナ名 /bin/sh* で再度シェルに接続できる。
これで問題なくコンテナ内に再度入れます!

元記事を表示

【デイトラ】Webアプリ開発コースで作成したRailsアプリをRender.comでデプロイする方法

## はじめに
いま受講しているデイトラのWebアプリ開発コースでは、合計3つのアプリを作成します(ハンズオンで作成するアプリ + 課題として作成するアプリ × 2)

ハンズオン形式でレクチャーされているデプロイ方法はherokuです。
PostgreSQLのアドオンをそれぞれのアプリに使用する必要があるため、
各アプリごとに$5/月かかってしまう計算になります。

気持ち的にそのお金があるなら技術書を買いたいので、Renderを使ったデプロイに挑戦してみました。

### 開発環境
– Ruby 2.7.7 => 3.1.0*
– Rails 6.0.6.1 => 6.1.7.8*
– node.js v14.16.1
– PostgreSQL 14
– Windows11
– WSL2(Ubuntu)

*もともとのバージョンが古く、Renderでのデプロイに対応していなかったため、アップデート作業が必要になりました

### デプロイまでの流れ
1. デプロイ用の設定(S3の設定など)
1. Renderの登録・設定
1. RubyとRailsのバージョンアップ対応
1. R

元記事を表示

Railsでto_paramメソッドが呼び出せない

## 概要
SEO対策の一環として、RailsアプリケーションのURLに含まれる`id`を固有名詞に置き換える実装を行いました。
例えば、以下のようなケースです。

“`ruby
# これを
https://spocale.com/fruit/1
# 以下の形式にしたい。
https://spocale.com/fruit/apple
“`
フルーツに関する一覧ページがあり、そこから「りんご」を選択して詳細ページに飛ぶ場合を想定します。このとき、URLの`id`部分を`apple`という固有の文字列に変えたいとします。

ただし、既存のURLを突然変更すると、ブックマークなどで保存されている従来のURLが使えなくなる可能性があります。そこで、id付きの従来のURLも維持しつつ、新しい形式のURLも利用できるように実装しました。この記事では、その過程で直面した課題と解決方法についてまとめます。

## 対象読者
– Railsアプリケーションでid付きのURLを固有名詞で表示する方法

元記事を表示

ActiveModelSerializerを触ってみた

# はじめに
ActiveModelSerializerを業務で使ったのでざっくりと使い方をまとめようと思います。
誤り等ございましたら、コメントいただけるとありがたいです。

# セットアップ

#### インストール方法
– Gemのインストール手順
“`ruby
gem ‘active_model_serializers’, ‘~> 0.10.0’
“`
出力されるjson構造を変更したい場合(defaultはattributes),
config/initializers/active_model_serializers.ファイルを作成し,
“`ruby
ActiveModelSerializers.config.adapter = :json_api
“`
を記述します。

#### active_model_serializerとは
– ActiveModelSerializerの概要
ActiveModelSerializerはrailsアプリケーションを簡単にjsonシリアライズするためのgemです

シリアライズとは、(W

元記事を表示

counter_cacheの導入と使い方

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
この記事ではXのクローンサイトを作成中にBulletで検知したN+1問題を解決するために実装した内容を紹介します。
機能としては投稿に対するいいねとコメントの数を集計して表示させる機能に関する内容です。
実装当初の内容と修正後の内容を掲載したいと思います。

## 実装当初のコード
“`ruby:tweet.rb
class Tweet < ApplicationRecord belongs_to :user validates :content, presence: true, length: { in: 1..140 } has_many_attached :images has_many :favorites, dependent: :destroy has_many :comments, dependent: :destroy has_many :retweets, dependent:

元記事を表示

【初心者向け】Ruby on Rails webサイトへの表示について

現在、デイトラでWeb開発を学んでおり、その学習において、学んだことを共有させていただきます!

現在は、Ruby on RailsでWebサイトを作成中です。

![スクリーンショット 2024-09-25 15.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894345/650a3c5b-d9bd-c4a2-af14-ce07b232e71e.png)

どうやってこれらの文字を表示しているのでしょうか?

“`routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
get ‘/’ => ‘home#index’
end
“`
ブラウザから get ‘/’ リクエストがきたら、routes.rbで処理が開始され、home#indexが実行されます

元記事を表示

Raspberry PiにRailsサーバーを立てて運用する

![P_20240924_172516.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72890/ea5e1765-6b95-a2c9-7e62-19679f63e5c9.jpeg)

# 初めに
家庭内で家族が使えるお小遣いアプリをRuby on Railsで作っているのですが、少しでも維持費を抑えるためにRaspberry Piを自宅サーバーにしてその上で動かすことにしました。
ただし、今回はあくまで自宅内でのサービス限定とし外部には公開しません。

# 前提条件
– Raspberry Pi 5を使用
– OSインストール、初期設定、ネットワークの設定は済んでいる
– 消費電力を抑えるために無線LANはOFFにしている
– sshで接続できるようになっている

# 下準備、環境アップデート
“` bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rsi-update
sudo rpi-upda

元記事を表示

Rspec で特定種類のテストだけを対象に before / after を設定する例

# 例

system test の全てのテストケースを対象に `before(:each)` の処理をさせる場合

`rails_helper.rb` に以下を設定

“`rb
RSpec.configure do |config|
config.before(:each, :type => lambda { |spec_type| spec_type == :system}) do

end
end
“`

# チャットメンバー募集

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

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

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

【Ruby】文字列の長さを調べる方法

文字列の長さを調べるには`length`メソッドを使用します。

## 基本的な使い方

`length`メソッドは、以下のように使用します。

“`ruby
# 文字列の長さを取得
string = “Hello, World!”
puts string.length # 出力: 13

“`

空白や特殊文字もカウントされます。

“`ruby
string_with_spaces = ” Ruby ”
puts string_with_spaces.length # 出力: 8
“`

## 配列の要素を数える

配列に対して`length`メソッドを使用すると、その配列に含まれる要素の数を返します。

“`ruby
empty_array = []
puts empty_array.length # 出力: 0

mixed_array = [1, “two”, :three]
puts mixed_array.length # 出力: 3
“`

## `size`メソッド

`size`メソッドも`length`メソッドと同様に使用できます。

“`r

元記事を表示

heroku run rails db:migrateでdbに接続ができないエラーが出た。

自分用備忘録です。初心者なので、間違っていることや、理解が違っていることがありましたら、教えていただけると幸いです。

## 問題
deviseでメール認証機能をつけたアプリをherokuにデプロイしようとした際、dbが見つからないというエラーが出た。

## 解決方法
database.ymlファイルのproductionに
“`url: <%= ENV['DATABASE_URL'] %>“` を追加する。

#### [解決までの過程(記録用)]
deviseで管理者機能をつけたアプリをherokuにデプロイ。
“`ruby
% git push heroku master
“`

HerokuのダッシュボードのResourcesからadd on設定
postgresqlを選択

データベースの設定が完了したので、
“`ruby
% heroku run rails db:migrate
“`

下記のエラーが発生しました。
“`ruby
Running rails db:migrate on ⬢ hidden-journey-8

元記事を表示

【Rails】Support for calling #default_scope without a block is removed.

## はじめに
Railsのアップデート中にdefault_scopeを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
default_scope order(“created_at DESC”)
“`

エラー文
“`ruby
Support for calling #default_scope without a block is removed. For example instead of `default_scope where(color: ‘red’)`, please use `default_scope { where(color: ‘red’) }`. (Alternatively you can just redefine self.default_scope.)
“`

## 解決方法
以下のように修正します。
“`ruby
default_scope { order(“created_at DESC”) }
“`

## 参考
https://stackoverflow.com/questions/3

元記事を表示

【Rails6】mappingを使用した診断機能

## 1. 導入
### 背景
Railsアプリケーションでユーザー入力に基づく診断機能を実装する方法を説明します。本記事では、ユーザーの名前と選択したシナリオに応じて、最適な花を推薦する機能に焦点を当てています。
### 目的
この機能を通じて、特定の条件に基づいて適切なデータをマッピングし、ユーザーに適した結果を提示する方法を示します。

## 2. 実装手順
### 基本設定
– Railsアプリケーションのセットアップ
– 必要なGemのインストール(例: gem ‘sqlite3’, gem ‘puma’)

モデルの作成
“`ruby:ruby
# app/models/flower.rb
class Flower < ApplicationRecord end ``` ### コントローラの設定 ```ruby:ruby class DiagnosesController < ApplicationController def create @recipient_name = params[:recipient_name].strip.dow

元記事を表示

全てのモデルを列挙する

# やりたいこと

全てのモデルを列挙したい。

# 方法

“`rb
# 開発環境だとクラスが自動読み込みされる。
# このままだと読み込み済みのモデルしか列挙できないので、明示的に一括読み込みしておく。
# 規模が大きい Rails アプリケーションだと時間がかかる。
Rails.application.eager_load!

# 全てのモデルを列挙する。
# ApplicationRecord のような抽象クラスは除外する。
ActiveRecord::Base.descendants.reject(&:abstract_class?)
“`

# バージョン情報

※ 現時点での最新のバージョンではありません。

“`rb
RUBY_VERSION
#=> “3.1.2”

Rails.version
#=> “7.1.4”
“`

元記事を表示

【Ruby】文字列と数値を変換する方法

## 文字列を数値に変換する

文字列を数値に変換するには`.to_i`メソッドを使用します。

“`ruby
value = “123”
integer_value = value.to_i
puts integer_value
# 123
“`

文字列が整数に変換可能な場合にはその整数値が返されます。
変換できない場合には、`0`が返されます。

“`ruby
value = “abc”
integer_value = value.to_i
puts integer_value
# 0
“`

## 数値を文字列に変換する

数値を文字列に変換するには`.to_s`を使用します。

“`ruby
number = 123
string_value = number.to_s
puts string_value
# “123”
“`

すべてのオブジェクトは`.to_s`メソッドを持っており、呼び出すことでそのオブジェクトの文字列表現を取得できます。

“`ruby
array = [1, 2, 3]
string_value = array.to_s
p

元記事を表示

GitHubプルリクエストをローカルにcheckoutする手順

## 背景
背景としては他の開発メンバーのプルリクをこちらで修正するためにローカル環境へ内容を落とす必要があったためRequest(プルリクエスト)をローカルへcheckoutする必要がありました。

この記事では、GitHubのプルリクエストをローカル環境に取り込むための具体的な手順について説明します。

## 1. 対象リポジトリをclone
まず、対象リポジトリをローカルにcloneします。以下のコマンドを使用してください。

“`
git clone git@github.com:GitHubアカウント名/test.git
“`
testリポジトリを例としてcloneしています。

## 2. fetchを実行
次に、プルリクエストのIDと新しく作成するブランチ名を指定して、git fetchコマンドを実行
“`
git fetch origin pull/1/head:develop
“`
ここで、1はプルリクエストのIDで、developは作成するブランチ名です。プルリクエストのIDはGitHubのプルリクエスト画面から確認できます。

## 3. 作成されたbra

元記事を表示

【Ruby】ユーザの入力を受け付ける方法

ユーザーからの入力を受け付けるには`gets`メソッドを使用します。

## 基本的な使い方

`gets`メソッドは、標準入力から1行のデータを読み取ります。
以下は、`gets`メソッドの基本的な使用例です。

“`ruby:example.rb
puts “名前を入力してください”

name = gets

puts “こんにちは” + name + “さん”
“`

このコードを実行すると、ユーザーに名前の入力を促し、入力された文字列を使用してメッセージを出力します。

“`terminal
$ ruby example.rb
名前を入力してください
sample
こんにちはsample
さん
“`

## 改行文字の取り扱い

`gets`メソッドは、入力されたデータの末尾に改行文字を含みます。
この改行文字は`chomp`メソッドを使用することで削除できます。

“`ruby
puts “名前を入力してください”

name = gets.chomp

puts “こんにちは” + name + “さん”
“`

上記のようにすることで末尾の改行文字が削除され

元記事を表示

【Rails】メンション付きコメントがあった際にメールで通知をする方法

## はじめに
Webアプリでよくある、@username でメンション通知をできる機能を実装したので、やり方を残しておきます。

### 学べたこと
– `after_create`などのコールバックを使う際のデータの扱い方
– メールを送りたいときのメソッドの作り方
– 絶対リンクの作り方

## やりたいこと
ポストに対してのコメントで’@username’と記述した際にメンション通知を飛ばしたい。
メール送付は非同期処理で行いたい。

### 前提
– Redisとsidekiqを導入

## やり方
### 方向性
1. メンション通知用のメソッドをMailerを作って実装
1. viewの作成
1. `after_create`を使って、Commentモデル内にメール送付のメソッドを定義
1. 保存したコメントの内容から’@’に反応してusernameを検知
1. もしメンションされていたら、メールを送信

### Mailerの内容
“`ruby
class CommentsMailer < ApplicationMailer def mention

元記事を表示

Ruby基礎①

# 久しぶりに勉強してみる
昔スクールで勉強したことあるが使う機会がなかったので全然使っていなかった。しかし意味働いているベンダーはRubyを使っているみたいだ。

親会社もグループ会社もRuby、最近だとサーバレスなフレームワークを使うみたいだが。TypeScriptをやった方がいいと言いつつRuby on Railsの需要もまだある。

公式は日本語もあるので学習しやすいだろう。
[official](https://docs.ruby-lang.org/ja/3.3/doc/index.html)

https://docs.ruby-lang.org/ja/3.3/doc/spec=2fliteral.html

“`ruby
# 数値の123、文字列などをリテラルという。
# Rubyで使える例

# 数字
puts 123

# 文字列
puts “Hi”

# 配列
puts [1, 2, 3]

# ハッシュ
puts {‘ja’ => ’81’}

# 変数名 = 式や値
num = 123
puts num

greet = “Hi”
puts greet

is

元記事を表示

File.deleteのちょっとしたテクニック

## はじめに

RubyのFile.deleteメソッドを使うときのちょっとしたテクニックを紹介します。

## 環境

Ruby2.6

## 内容

File.deleteはファイルを削除するメソッドです。データベースから読み込んだ内容をテキストファイルに書き込みをするような場合、同じ名前のファイルが既にあれば、このメソッドを利用して事前に削除します。

このメソッドをそのまま実行すると、つぎのような場合にエラーが発生することになります。

#### 削除対象のファイルがないとき

ないファイルに対して削除しようとするとエラーが発生します。そのようなファイルはありませんという内容のエラーです。

Rubyにはなぜか、VBにはあったエラーが発生した行の次の行から処理を再開させる、Resume Nextに該当するメソッドがありません。(これ便利だったんだけどな・・・)

例外に飛んだ後、エラーに該当するerrnoでキャッチして、そこでなんらかの処理をしなくてはいけないことになります。

Rubyには代わりに、エラーが発生した行に戻る、retryといったメソッドがあります。例外の中で何

元記事を表示

View側の繰り返し処理に対応してJavaScriptで動的にidを取得する方法

## はじめに
インスタ風のアプリを作成している中で、Ralis側で繰り返し処理をしている箇所にJavaScriptでcssクラスをつけたり外したりする処理 などの実装に苦戦したので、実装方法を整理してアウトプットします。

## やりたいこと

記事の一覧画面でAjaxを使って、いいねができるようにしたい

### 問題
show.htmlのようなpost_idが一意に決まっているようなページをJavaScriptで操作するのではなく、
index.htmlのようなpostがたくさん表示されているページから各ポストのidを個別に指定して操作していく実装がわからなかったです。

#### viewはこんな感じ
“`ruby
– @posts.each do |post|
.card
= image_tag post.user.profile.avatar
= show_posttime(post)
= post.user.username

– post.images.each do |image|
= image_tag image

元記事を表示

OTHERカテゴリの最新記事