Rails関連のことを調べてみた2023年01月08日

Rails関連のことを調べてみた2023年01月08日

Ruby on Railsを基本からまとめてみた【APIを構築する方法】

## Rubyでできること(API)

Rubyの中でもRuby on Railsを活用することでAPIの実装ができる。APIは簡単に説明すると『サーバーに保存されているソフトウェアを別のシステムやアプリケーションに利用させること』。特定のルールでサーバーへとアクセスさせ、処理した結果をレスポンスすることを指す。

APIはGoogle社など大手企業が提供しているイメージがあるが、Rubyを活用すれば自分で実装でき、この実装したAPIを社内やスマホアプリなどと連携して利用できる。例えば、経費精算のAPIを作成しておけば、従業員がデータを入力するだけで関係システムに情報登録する仕組みが実装できる。

## 参考サイト
[【2022最新】Rubyでできること7選!トレンドは?](https://www.anken-navi.jp/news/programming-language/ruby/ruby-possible-7/)

元記事を表示

Rails6 – rspec + capybara のテストで Webpacker::Manifest::MissingEntryError

# 問題

rspecでページにvisitするだけでエラーが発生する

“`rb
require ‘rails_helper’

feature type: :feature do
scenario do
visit new_user_session_path
end
end
“`

# エラー

“`
Failures:

1) {:type=>:feature}
Failure/Error: <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

ActionView::Template::Error:
Webpacker can’t find application.js in /Users/yumainaura/projects/YumaInaura/rails6-app/public/packs-test/manifest.json. Possible causes:
1. You want to set

元記事を表示

Rails6 – Webpacker::Manifest::MissingEntryError を解決する

ページアクセスすると `Webpacker::Manifest::MissingEntryError ` が発生する

# 解決

Gemfile で webpackerのバージョンを上げる

“`
gem ‘webpacker’, ‘~> 5.0’
“`

“`
bundle install
“`

# Webpackerの実行

nodeバージョンによってはSSL関係のエラー ( `ERR_OSSL_EVP_UNSUPPORTED` ) が出るので、環境変数 `NODE_OPTIONS=–openssl-legacy-provider` を付ける

“`
rails webpacker:install
NODE_OPTIONS=–openssl-legacy-provider rails webpacker:compile
“`

# チャットメンバー募集

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

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

元記事を表示

モデルの属性にバリデーションをかける

# lengthのバリデーションをかけてみる。
“`rb
validates :name, {presence: true, length: { in: 1..10 }}
“`
### 空で送信してみた。
“`Name can’t be blank“`
“`Name is too short (minimum is 1 character)“`
というメッセージが表示された。

### 11以上で送信してみる。
“`Name is too long (maximum is 10 characters)“`
というメッセージが表示された。

### 気づき
これだけでバリデーションが掛けられている。ことがわかった。

# バリデーションにメッセージオプションをつけてみる
“`rb
validates :name, {presence: true, length: { in: 1..10, message: “1文字以上から10文字以下で入力してください。”}}
“`
“`Name 1文字以上から10文字以下で入力してください。“`と表示された。

###

元記事を表示

Rails7 – rails console ( pry-rails ) で何故かActiveModelのデータ(インスタンス情報)が表示されない

# 問題

昔のバージョンではこれで色々データが表示されてたはず

“`rb
User.last
=> #
“`

# 解決

とりあえずattributesで表示できた

“`rb
User.last.attributes
# => {“id”=>3,
# “email”=>”example@example.com”,
# “remember_created_at”=>nil}
“`

# その他

to_json も試したが何故か引数が必須になっている
only 指定は動くが except 指定が動かない

“`rb
User.last.to_json(only: [:id])
# => “{\”id\”:3}”
“`

“`rb
User.last.to_json(except: [:id])

# ArgumentError: wrong number of arguments (given 0, expected 1)
“`

# 環境

Rails 7.0.4

# チャットメンバー募集

何か質問、悩み事、相談などあ

元記事を表示

Rails7 で deviseが何かと変

# 問題

サインインではエラーが起こるたびエラー文が増える

![image](https://user-images.githubusercontent.com/13635059/211134046-6b3c348f-1b79-4546-abe2-0ebae10843e1.png)

サインアップではそもそもエラーが表示されない

![image](https://user-images.githubusercontent.com/13635059/211134041-fbf99cd7-bd26-491b-99ba-8f9b8eead855.png)

サインアップに成功してDBにはユーザーが登録された場合でもエラーが起こる

“`
undefined method `user_url’
“`

参考

https://abillyz.com/vclbuff/studies/460

# 解決

どうやらHotWireと「相性」が悪いらしい
Viewの送信ボタンで無効化することで従来のdevise画面の挙動に戻った

“`erb

『API』を基本からまとめてみた

## APIとは?
「API」とは、「Application Programming Interface」の頭文字のこと

英文字だけの意味だと、『アプリケーション・プログラミング・インターフェイス』で、大雑把に言うと『アプリケーションをプログラミングするためのインターフェース』という意味。

『インターフェイス』をコンピュータ用語でいうと、「何か」と「何か」をつなぐものという意味で、つまり、『API』とは、この「何か」と「何か」が「アプリケーション、ソフトウェア」と「プログラム」をつなぐもの、という意味。

『APIを公開する』とはわかりやすく言うと、『ソフトウェアにAPIという外部とやりとりする窓口を作り、外部アプリとコミュニケーションや連携ができる状態にする』ということ。

## APIの利点、メリットは何?

API機能には大きく3つの利点がある

①ソフトウェア開発の効率化
②セキュリティの向上
③最新情報を簡単に取得可能

## ①ソフトウェア開発の効率化

APIで組み込むことができる信頼できるプログラムが世の中にすでに存在する場合、そのプログラムと連携することで、自分で

元記事を表示

Rails – permit params (Strong Parameter) でハッシュを許可する

permit対象としてハッシュを書けばいけるはず

“`rb
params.require(:foo).permit(bar: {})
“`

# チャットメンバー募集

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

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

# Twitter

元記事を表示

[CircleCIのセキュリティインシデント対応] Railsのmaster keyをローテーション(再生成)する

大した情報ではないですが、
circle ciでRailsを使っている人への注意喚起になればと思います。

## 話の発端
2023/04/01 CircleCIで管理しているセキュア情報が漏洩したかもらしい

https://circleci.com/blog/january-4-2023-security-alert/

## 環境
– Ruby on Rails: 7.0.2
– Ruby: 3.1
– ruby:3.1.0 をベースイメージにしたコンテナ内で作業

## 再生成していく
今回は例として、production用のcredentialsを再生成します。

#### ① 現状のcredentialsをメモする
“`bash
# 現状のcredentialsをメモ帳などにコピー
$ rails credentials:show -e production
db:
username: hoge
password: huga
“`

#### ② credentialファイルとmast

元記事を表示

Railsのcollection_selectの使い方

毎回調べているので備忘録として。

以下のような構成になっている。

“`erb
<%= collection_select(対象となるモデル名, paramsに贈りたいモデルのカラム, 選択肢として表示されるモデルのレコード(配列), 選択肢として表示されるモデルのカラム, { prompt: "何もも選択されていない場合に表示される文字", select: 選択済みのレコード }) %>
“`

具体的には以下のように使う。

“`erb:edit.html.erb
<%= collection_select(:product, :id, @products, :id, :name, { prompt: "商品名を選択してください", select: @product }) %>
“`

元記事を表示

【Ruby on Rails】devise_invitableを使った既存ユーザーへの招待機能の実装

# はじめに
この記事は、初学者がgem「devise_invitable」のカスタマイズに挑戦してみた記事です。チーム(グループ)があるアプリで、新規ユーザー/既存ユーザーのどちらにも招待メールを送り、招待されたユーザーがパスワードを登録した時にチームに所属できるようにしています。
***この記事ではdevise_invitableの基本的な実装方法は説明していません。実装済みを前提としています。**

# 経緯(読み飛ばしても?‍♀️)
Dive Into Codeというプログラミングスクールの卒業課題で「複数人でタスク管理を行うアプリ」を作成しました。簡単なアプリ紹介としては、複数人が所属するチームを作成し、そこでタスクを管理を行うというものです。
招待したい人に「このチームに入ってよ!」と招待メールを送ることができたらいいなと思い、gem「devise_invitable」を使用することにしました。
##### しかし、問題が。。?
アプリのイメージとしては1人のユーザーがたくさんのチームに所属できるというものだったのですが、デフォルトのdevise_invitableの機能

元記事を表示

ユーザー名にバリデーションをつける

# プロゲートで簡単なバリデーションを行なっていた。
“`rb
lass User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness:true} . . . end ``` # 目標 * railsガイドで書かれているバリデーションを実行する。 * バリデーションで引っ掛かったらエラーメッセージを表示させる。 まだこれからだけど 送信ボタンを押した時もバリデーションを実行できそうだ。 これは後から考える。 とりあえず同期しながら簡単なことを行なっていく。 # 目的と合うバリデーションオプション ### ```:on```オプション バリデーションのタイミングを指定 ```:on```オプションはバリデーションを実行するタイミングを指定し、 ```:create```または```:update```のいずれかの値を取ります。 ### ```:message```オプション err

元記事を表示

Docker Rails7 apiモード mysqlでGraphqlを使用する方法

# 記事の内容
Graphqlをキャッチアップするにあたって、そもそもなんでGraphqlを使用するのか? からはじめました。
また、学習するにあたって初めて聞くような単語がたくさんあったので、メモがてらこの記事にまとめていこうと思いました。
この記事ではDockerでの環境構築からuserのindex,show,createまでを記載しようと思います。

# Graphqlとは?
さっそくですが[参考](https://udemy.benesse.co.jp/development/system/graphql.html)がとてもわかりやすかったのです。GraphQLを導入した有名なサービスも紹介されており面白いです。
API用のクエリ言語であり、REST APIではサーバ側で返すデータ構造等を決めていたが、実際にデータを使用するクライアント側で自由にデータを取得できます。
今日のスマホやSPAでは複雑なデータを扱うことが多いため、注目されている。

### メリット・デメリット

#### メリット
– フロント側でレスポンスの形式を指定できる
– 必要なデータのみ取得でき、オ

元記事を表示

ActiveJobで実装したデータ取り込みジョブを2.2倍高速化した

PubAnnotationという文章への注釈を管理するWebアプリケーションがあります。
このアプリケーションには注釈のついた文章データを一括アップロードする機能があります。
7万文章をアップロードすると7時間掛かります。この処理を高速化するために工夫しました。

PubAnnotationはRuby on Railsで実装されたWebアプリケーションです。
一括アップロード機能は、ActiveJobで実装され、Sidekiqで実行されているバッチ処理です。

## 結果

最初に結果を示します。
文章をアップロードしたときの平均アップロード数です。
文章によってデータ量がちがいます。2000~2500程度の文章をアップロードして平均を取りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15964/8b407a4e-2e6d-9f86-62d6-8b0966b88d14.png)

縦軸が1秒当たりのアップロード文章数です。横軸はアップロードした文章数です。
次の三つの修正

元記事を表示

コミット→プッシュ→マージ

# コミットまで

1.現在のブランチを確認
“`git
$ git branch
“`

2.ブランチを切ってそのブランチに移動
“`git
$ git checkout -b (作成するブランチ名)
“`

3.作業を行う

4.修正したファイルの確認
“`git
$ git status
“`

5.ソースコードを確認
“`git
$ git diff
“`

6.全てステージングに追加する
“`git
$ git add -A
“`

7.コミットを行う
“`git
$ git commit -m “コミットメッセージ”
“`

8.コミットログを確認
“`
$ git log
“`

# プッシュをおこなう

1.githubへプッシュ
“`git
$ git push origin 現在のブランチ名
“`

# マージを行う

1.masterブランチに移動
“`
$ git checkout master
“`

2.masterブランチへマージ
“`
$ git merge マージしたいブランチ名
“`

3.リモートブランチの

元記事を表示

Github ActionsでECSに自動デプロイできているのに想定通りの挙動にならなかったエラーをご紹介

# 本記事について
本記事は、先日Github ActionsにてECSへCI/CDパイプラインを構築した際に自身がハマってしまった2つのエラーについて備忘録も込めて記載します。
GitHub Actionsではエラーにならずに通ったものの、サイトを確認してみると想定通りの挙動になっていなかった部分となります。
※初学者のため、間違い等ございましたらご指摘いただけますと幸いです。

# 環境
– MacOS: Ventura13.0.1
– Ruby:3.12
– Rails:7.0.4

# ①Railsの環境変数Master.keyの不足によるエラー
ポートフォリオの作成中、まずCircleCIでパイプラインを構築したのちに、Github Actionsに移行したので、そこまで大きいエラーはないと思っていましたが、エラーに遭いました。

## 起きた事象
Github ActionsではエラーにならずECRへpush後、ECSへデプロイできていましたが、サイトを開くとfrontendとbackendの通信がうまくいっていなかったです。
“`java:cloudwatch log

元記事を表示

Railsのcolumn名の変更

Railsのカラム名を間違ってmigrateしてしまったので修正方法を書いておきます。
自分の理解度を高めるためのアウトプットです。

//誤りの記述
rails g model User nam:string age:integer
カラム名をnameにしたかったがnamにしていた。

db:migrateの前に修正すればよかったが、気づかずmigrateしてしまった。

なので以下の処理を実施
1.migrationファイルを作成
$ rails generate migration rename_[変更前のカラム名]_column_to_[モデル名(複数形)]

2.migrationファイルを編集
生成されたファイルにchangeメソッドを追加し、そこに変更したいカラム名を記述する。
rename_column :テーブル名, :変更前のカラム名, :変更後のカラム名

class RenameNamColumnToUsers < ActiveRecord::Migration[7.0] def change rename_column :users, :nam,

元記事を表示

gemとbundlerについて

# はじめに
gemとbundlerについて、
ちゃんと理解できていなかったので、備忘録としてまとめる。

## gemとは
gem形式にパッケージングされたRuby用の外部ライブラリのこと。

gem形式とは
外部ライブラリのフォルダやファイルをgem形式(.gem)という1つのファイルに(パッケージング)まとめたもののこと。
参考:
https://pikawaka.com/ruby/how-gem-works#gem(gemパッケージ)とは

ライブラリとは、汎用性の高い機能を他のプログラムで呼び出して使えるように部品化して集めたファイルのこと。
ライブラリには大きく分けて標準ライブラリ、組み込みライブラリ、外部ライブラリの3種類あり、
gemは外部ライブラリにあたる。

備考:
Railsもgemパッケージとして提供されている。
他にも有名なgemとしては、ユーザ認証を簡単に実装できる「devise」、ページネーションを簡単に実装できる「kaminari」がある。

## RubyGemsとは
Rubyのパッケージ(gem)を管理するシステムで、Ruby1.9以降から標準ライ

元記事を表示

【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法

## はじめに
Rails 7.0がリリースされて1年以上経ちましたが、Railsのメジャーな認証ライブラリであるDeviseは未だにRails 7.0に部分的にしか対応していません([参考](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md#481—2021-12-16))。
そのため、Rails 7.0で`rails new`したRailsアプリケーション(つまり、Turboが有効になっている状態)だと、Deviseを使おうと思っても意図しない挙動になります。

そこで、この記事ではTurboを有効化したままRails 7.0でDeviseを使う方法を紹介します。

なお、ネットを検索するとこの記事と同じテーマで書かれた記事がすでにいくつもありますが、今回紹介する方法はかなりシンプルかつ、実際のサンプルアプリ(とテストコード)で動作確認済みなので、個人的にはかなりお勧めです。

## 対象バージョン
この記事は以下のバージョンで動作確認しています(それぞれ2023年1月4日時点での最新バージョンです)。

元記事を表示

Ruby on RailsのアプリにLINEを組み込む。

## はじめに
– 今回は[【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)で実装したLINEログインとLINEbotについての解説記事になります。

## Lineログイン機能について
### Railsアプリの作成
まずはじめに アプリを作成していない方は`rails new`してアプリを作成してください。

### Deviseの導入
LINEログイン機能を実装する前にまずはDeviseでログイン機能を実装していきます。

“`ruby:Gemfile
gem ‘devise’
“`

Gemfileに記載が完了したら、`bundle install`を実行

次に、ターミナルで以下を実行し、Deviseを使えるようにしていきます。
“`terminal:ターミナル
rails g devise:install
rails g devise User
rails db:migrate
“`

ここまで問題なく実行できれば、`rails s`でサーバを立ち

元記事を表示

OTHERカテゴリの最新記事