Ruby関連のことを調べてみた2023年09月30日

Ruby関連のことを調べてみた2023年09月30日

【Rails】renderで独自ドメインを公開する手順

# はじめに
お疲れさまです。
おおくまです。

以前にRailsで実装したアプリをrenderでデプロイしました。
以下は、独自ドメインを公開した手順になります。
備忘録として残したいと思います。

# 環境
Ruby 3.2.2
Rails 7.0.8
Webアプリケーションサーバ render
データベース PostgreSQL
**renderにてデプロイ済み**
**お名前.comにて独自ドメイン取得済み**

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 手順

まず、renderにログインします。
ダッシュボードからデプロイしたアプリを選択します。
左のタブから「Settings」をクリックします。
下の方にスクロールすると「Custom Domains」という項目があります。
そこの「Add Custom Domain」というボタンをクリックします。
![スクリーンショット 2023-09-30 9.03.24(2).jpeg](https://q

元記事を表示

初めてのチーム開発…

# チーム開発必要項目(Ruby on Rails)

– MVCモデルの再確認
– ER図
– GitHubの大まかな流れの確認
– 統合ブランチってなに?
– トピックブランチってなに?
– add commit push
– プルリク
– merge
– その他
– マークダウン記法など

【所感】
 おそらく、苦労するのがGitHub。個人で開発するのと違い、トピックブランチやマージ、checkoutの部分で混乱を起こす可能性あり。そこらへんがイメージできていれば、なんとなく行けるかもしれない。まー、他にも難しいと感じる部分はたくさんあると思うけど。

元記事を表示

【Ruby on Rails】FactoryBot,Fakerの導入

### 各Gemの説明
① factory_bot_rails
model のデータに紐づいたテストデータを簡単に作るための gem です。
② faker
faker は、ダミーデータを作るのに便利な gem です。

### Gemの導入方法
“`ruby: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_mingw]
gem ‘pry-byebug’
gem ‘pry-rails’
gem ‘rspec-rails’
+ gem ‘factory_bot_rails’
+ gem ‘faker’
end

# 中略
“`
追加したら、`bundle install`を実行します。

### 各ファイルの修正
**factory_bot_rails**
“`ruby:s

元記事を表示

【Ruby on Rails】rspec-railsの導入

### RSpecとは
RubyやRuby on Railsでテストを書く際に最も使われているフレームワークです。
作成したクラスやメソッドをテストすることができます。

### rspec-railsの導入方法
rspec-railsというGemを用いて導入します。
Gemfileに下記のように記述します。

“`ruby:Gemfile
# (中略)

group :development, :test do
# (中略)
gem ‘rspec-rails’
end

# (中略)
“`

上記のように記述できたら、`bundle install`を行います。

次に下記のコマンドを実行します。
“`
$ bundle exec rails generate rspec:install
“`

“`ruby
Running via Spring preloader in process 64223
create .rspec
create spec
create spec/spec_helper.rb
crea

元記事を表示

Qiita記事初投稿

# Ruby on Rrails
マークダウン記法

## マークダウン記法の書き方
基本的にタイトルに関しては「#」をつけること!

### 箇条書きの書き方
– 以下のように記述する

「-」でスタートさせて記述する。

– 箇条書きのレベルを下げるには?
– Eneter or returnキーを押してから「tab」を押すと一個レベルを下げることができる

### コードを書くためには?
“`ruby
(1..30).each do |numbers|
if numbers % 15 == 0
p “FizzBuzz”
elsif numbers % 3 == 0
p “Fizz”
elsif numbers % 5 == 0
p “Buzz”
else
p numbers
end
“`

– 上記は開始と終了を「“`」のようにバックスラッシュでくくった状態で間にコードを記述するとよい!

### 参照動画

元記事を表示

git commitとgit pushの違いなど、今日gitについて学んだこと

スクールの課題の合格要件に、機能を新しく作成する毎に、commmitすること、と言うのがあった。

メンターさんによると、実際の現場ではとっても長ーいコードにエラー等が発生した際、過去の状況に戻って見返したりすることがあるため頻繁にcommitする必要があるとのこと。

なるほど〜!!

ってことで、私も、
現在開発中のアプリをcommitする準備を始めた。

その前に、まずは、
“`
git init
“`
して、gitを使用する準備をしようと思った!
その前に念の為、ls -a で、gitのファイルが既に無いか確認してみた。
init してないから無いはず…

なのに、
あれ??
ある!!

なんでだろう…

![スクリーンショット 2023-09-29 16.38.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566175/38f46ddd-dcc3-8ba9-a062-0bd56abcdae4.png)

メンターさんに聞いてみると、rails new でアプリのディレクトリ

元記事を表示

form_withメソッドにおける、URLの違いによる遷移先や起動するアクションの違いについて

スクールのテキストでツイッターのようなアプリを作成中、投稿新規作成画面で「保存」ボタン、を押した場合と、投稿新規作成画面から一度「戻る」ボタンで戻り、再度「保存」ボタンを押した場合で、起動するアクションが異なることについて疑問で、メンターさんに教えてもらったことを記事にまとめたいと思います。

開発環境
“`
ruby -v 3.2.2
rails -v 6.1.7.6
“`

まず、新規入力画面のページ、URLだと、/blogs/new 
ここでディベロッパーツールで見てみると、
“`

省略

“`
となっており、actionが、”/blogs/confirm”、methodが”post”ということで、titleとcontentを入力しcreate blogのボタンを押すと、postメソッドでURL”/blogs/confirm”のところ、つまりblogs#confirm 、confirmアクションへとぶ。(一番下のルーティ

元記事を表示

【Rails】renderでのデプロイ時のミスまとめ

# はじめに
お疲れさまです。
おおくまです。

Railsで実装したアプリをrenderでデプロイした際になかなか上手くいきませんでした。
ほとんどがタイポでした。笑
備忘録として残したいと思います。

# 環境
Ruby 3.2.2
Rails 7.0.8
Webアプリケーションサーバ render
データベース PostgreSQL

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# ①ホストの許可

**Before**
“`ruby:config/environments/production.rb
Rails.application.configure do
config.hosts << 'https://********.onrender.com' end ```

**After**
“`ruby:config/environments/production.rb
Rails.application.configure do

元記事を表示

レビューで指摘されたリファクタリングベスト5【まだ短く・分かりやすくできる】

「このリファクタリングは思いつかなかった。。。 ?? 」

# はじめに
こんにちは、[まつけん](https://twitter.com/matsuken_web314)です。渋谷の[サウナ道場](https://sauna-ikitai.com/saunas/78191)によくいます。
最近エンジニアになって、1年が経ちました。

実装で、手も足も出ないことが無くなってきて、成長を感じてます。
ですが、「もっと短く・分かりやすくできる」というリファクタリングの観点でレビューをもらうことが割とあります。
その中でも「これは、、、気づかなかった。あざます!」となるリファクタリングのベスト5を紹介します。

:::note info
この記事が参考になりそうな読者

– RubyのリファクタリングTipsを知りたい方
– エンジニア1年目がレビューで指摘されたリファクタリングを知りたい方
:::

※こちらの記事に出てくるコードに関しては全て`Ruby`です。実務で学んだことなので、出てくるコードは全てフィクションです。(実際のサービスのコードではないです)

# 【第5位】wher

元記事を表示

【Rails】ネーミングのお作法:MVC編

# はじめに
Railsでの一般的な命名規則について説明していきます。

:::note info
表記法
* キャメルケース
* アッパー
* ロウワー
* スネークケース
* コンスタントケース
* ケバブケース
* M (Model) → 単数形
* V (View) → 複数形
* C (Controller) → 複数形
:::

## キャメルケース
キャメル(camel)はラクダのことで、コブに見立てて単語ごとの頭文字を大文字で表記します。
全体の先頭の文字は、大文字の場合と小文字の場合とがある。

### アッパーキャメルケース
主にクラス名、モジュール名で使用され
先頭が大文字のキャメルケースで表記します。

“`admin_user.rb
# 例
class AdminUser
end
“`

### ロウワーキャメルケース
主に`JavaScript`の変数名などで使用され
先頭が小文字のキャメルケースで表記します。

“`.js
// 例
const helloWorld = “ハローワールド”;
console.log(helloWorl

元記事を表示

ガード節について

# はじめに
現在、railsを使う現場で働いてますが、コードレビューでうけた指摘を定着し、記憶に残すために投稿します!

# 【結論】ガード節を使った書き方

**要件**
ある特定のユーザー名`param[:name]`が渡される。
* `users`テーブルに情報がある場合
さらに`purchases`テーブルを検索し、当該ユーザーの購入記録を取得する。
* `users`テーブルに情報がない場合
処理を終了する。

**ガード節を使わない書き方**
“`ruby
def index
if param[:name].present?
@user = User.find_by(user_name: param[:name])
if @user.present?
@purchases = Purchase.find_by(user_id: @user.id)
if @purchases.present?
# 購入記録がある場合の処理
els

元記事を表示

CのヘッダーファイルからRuby-FFIのコードを自動生成するc2ffi4rbをリバイバルした

## はじめに

Rubyは、PythonやJavaScriptのような人気言語と比較すると利用人口が少ないため、やりたいことを実現するためには、C言語やRust言語など、他言語で書かれたライブラリのバインディングを適宜自作する必要があります。

Ruby言語では、バインディング作成のための仕組みが数多く用意されています。

* ネイティブC拡張
* fiddle
* ruby-ffi
* GObject Introspection
* Magnus(Rust用)

swig というのもありますが、私は使用経験がありません。

この中で「個人用のバインディングの作成時間の最小化」という観点から評価すると ruby-ffi が最もよいと思います。ruby-ffiは、Cの型とRubyのクラスを自動で相互変換してくれ、構造体に対するサポートも豊富です。

しかし、ruby-ffiを選択する場合でも、バインディング作成の敷居は低くはありません。私も読者もフルタイムでRubyのライブラリを作れるわけではありません。最初の数時間でプロトタイプが完成する、ぐらいの工数でないと、なかなか隙間時間でバイ

元記事を表示

【Ruby】アソシエーションを使った投稿分類【投稿分類応用】

# はじめに
筆者は 大学生限定 プログラミングコミュニティ 『GeekSalon』で活動している者です!
もし少しでも興味がありましたら、ぜひお話を聞きにきてください!

# 前提
この記事でできることを紹介します。
今回は投稿の分類をし、その後にアソシエーションを使いさらに分類するといったことをします。

例えば、音楽をジャンル毎に分ける → ジャンル毎にアーティストを投稿する → アーティストの曲ごとに分類する。
流れはこんな感じになります。

他にも、スポーツをジャンル毎に分ける → ジャンル毎にスポーツを投稿する → そのスポーツチームごとに分ける。といったこともできます。

https://qiita.com/kubochiro/items/4d80a91a6133b680cb4b

参考記事:投稿の分類はこちらの記事を参考にしました

# カテゴリー分けその1
今回は、音楽をジャンル毎に分ける → ジャンル毎にアーティストを投稿する → アーティストの曲ごとに分類することをします!
![Qiita動画2.gif](https://qiita-image-store.s3.

元記事を表示

【Rails】rubocop導入手順の備忘録

# はじめに
お疲れさまです。
おおくまです。

現在、色々なことを試して遊んでいるミニアプリに~~重い腰を上げて~~rubocopを導入しました。
その際の備忘録です。

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 実装
[rubocop](https://github.com/rubocop/rubocop)をインストールする。
“`ruby:Gemfile
+ gem ‘rubocop’, require: false
“`
“bundle install“を実行。

“bundle exec rubocop“でrubocopを通してみる。

“`ruby:ターミナル
52 files inspected, 688 offenses detected, 669 offenses autocorrectable

The following RuboCop extension libra

元記事を表示

【Ruby】puts / print / p / pp の違い 【チェリー本を読んで】

## はじめに
今回の記事は過去に「プロを目指す人のためのRuby入門」を読んで、勉強になった・意識していなかった
部分を備忘録的にまとめています。

`puts` `print` `p` `pp` のメソッドについてどれも出力に使用するものですが、
どれも挙動が少し違います

## それで、puts / print / p / pp の違いは何なの?
**結論**

| メソッド | 出力後の改行 | 配列の表示 | 呼び出すメソッド | 戻り値 | 対象者 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| puts | あり | 要素ごとに改行 | to_s | nil | 一般ユーザ |
| print | なし | 改行しない | to_s | nil | 一般ユーザ |
| p | あり | 改行しない | inspect | 引数のオブジェクト | 開発者 |
| pp | あり | 見やすく整形 | inspect | 引数のオブジェクト | 開発者|

挙動として、上記の図のようになります!
因みに `pp` の見やすく整形は配列だけではなく、ハッシュ等の大

元記事を表示

[Ruby] 初めての記号プログラミング

# 概要

Ruby はその言語の特性を利用することで,英数字を使用せずにプログラムを書ける.英数字を使用しないプログラムを書くことは,俗に記号プログラミングと呼ばれる.

この記事では,[偉大な先駆者の記事](https://qiita.com/zifre/items/951dc73ae0ee56348538)をベースに,詳しい解説を加えつつ,競技プログラミングの簡単な問題に正解するプログラムを作成する段階まで追加で説明する.

# 前提

* Ruby で FizzBuzz を書ける
* Ruby で簡単な再帰処理をかける

# 注意事項

記号プログラミングは,暇を持て余したプログラマーが個人で楽しむための遊びである.保守性や可読性が著しく低いため,仕事では使用しないこと.

# 本編

先に方針について触れると,最終的には `eval` に任意の文字列を渡すことで任意のプログラムを実行させる.そのためには文字列を生成する必要があるが,英字は使用できないため数値を使用する.よって,まずは数値を錬成する.

## 0 と 1 の錬成

Ruby で記号のみから数値を錬成する最も簡単

元記事を表示

【RSpec】備忘録:stub_constメソッド、create_listメソッド

## stub_constで定数をスタブ化する

:::note
RSpecのテストフレームワークを使用しているRubyやRuby on Railsのプロジェクトで見られるメソッドの一つ。一時的に定数の値をスタブ(つまり、偽の値に置き換える)するのに役立つ。
:::

#### 使用例
特定の定数の値に依存するコードをテストしている場合、その定数の値を一時的に変更してテストシナリオを検証することができる。

“`ruby
it “does something based on MY_CONSTANT” do
stub_const(“MyClass::MY_CONSTANT”, “fake_value”)

# このブロック内では、MyClass::MY_CONSTANTは”fake_value”として扱われる
expect(MyClass.some_method).to eq(expected_result_based_on_fake_value)
end
“`

この例では、`MyClass::MY_CONSTANT`を`fake_value`に一時的に置き換え

元記事を表示

【Rails】Qiita APIを使ってRailsに関する記事を取得する

# はじめに
お疲れさまです。
おおくまです。

[前回](https://qiita.com/kumaryoya/items/eafbc5063e60e3aaa4d5)に引き続きAPIについてです。
今回は、**Qiita API**を使ってRailsでミニアプリを作ってみました。

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# アクセストークンを取得する
それでは、[Qiita APIのドキュメント](https://qiita.com/api/v2/docs)に沿って実装していきたいと思います。
まず、初めに**アクセストークン**を取得します。
アクセストークンを取得しなくてもAPIを利用することはできますが、認証している状態ではユーザーごとに1時間に1000回まで、認証していない状態ではIPアドレスごとに1時間に60回までという[利用制限](https://qiita.com/api/v2/doc

元記事を表示

ransack scopeの検索キーワードとして ‘T’ が使えない

# 問題

ransackでは、ActiveRecordのscopeを用いて検索することができます。しかし、以下のように検索キーワードとして `’T’` は使えません。エラーメッセージにある通り、scopeに渡されているはずのキーワードが渡されていません。

![Sep-24-2023 23-49-35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472392/4e3f26ba-85f5-3ce6-680d-540e33f2515d.gif)

## 環境

– Rails 7.1.7
– Ruby 3.2.2
– Ransack 4.0.0

# 原因

このような問題が起きるのは、`’T’` などといった真理値っぽいものは、ActiveRecordのscopeに渡される前にサニタイズされるからです。

検索キーワードとして、真っぽいものが入っていたら `true`に、偽っぽいものが入っていたら`false`に変換しています(`sanitized_scope_args`メソッドの5-8行目)。

元記事を表示

コールバックでのsaved_change_to_ と will_save_change_to

## はじめに
スクールにて、コールバックの設定に手間取り、その際調べることで挙動の違いを理解したつもりなので、同じようなことにハマった人のためになればいいなと、健忘録として残します。

### 開発環境
Rails 6.1.7.4
ruby 3.0.1

### 目的
管理者が、最後の1人のとき、管理者が0人とならないように権限の編集を制限する。
つまり、1人もいなくなっちゃ困るので、必ず1人は権限を在籍させたい訳です。

### 最初に試したこと(失敗したこと)
– Qiita記事や調べてまずは下記のように設定
“`rb
def admin_cannot_update
if User.where(admin: true).count == 1 && self.saved_change_to_admin == [true,false]
throw :abort
end
end
“`
adminに設定されたユーザーがデータベースに1人だけであり、かつ対象のオブジェクトのadminカラムをtrueからfalseに変更しようとしたとき、 thow :abortで更新を中

元記事を表示

OTHERカテゴリの最新記事