Rails関連のことを調べてみた2022年12月31日

Rails関連のことを調べてみた2022年12月31日
目次

【個人開発】日用品を自動で購入してくれるアプリを作りました。

## はじめに
こんにちは@prg_mtと申します。
DIVE INTO CODEでエンジニア転職を目指し、4ヶ月間学習をして参りました。
今回はその集大成となるオリジナルアプリについての記事を書いてみます。

## 開発したアプリについて
今回開発したアプリ名は「Stock Roller」です。
アプリ名の由来は「日用品のストックを継続的に回していく」という部分からです。
![スクリーンショット 2022-12-30 17.25.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881858/1c1def99-9ef7-0890-93ac-9bd890573728.png)

【アプリURL】
https://stock-roller.work/
【Git Hub URL】
https://github.com/TomokiMatsubuchi/Stock-Rolling-App.git

### アプリ制作のきっかけ
![スクリーンショット 2022-12-3

元記事を表示

APIキーを隠す (GoogleMapsAPIを参考に)

GoogleCloudPlatformにてGoogleMapsAPIを利用する際にはAPIキーを取得し、アプリに反映させなければなりません。
その際に注意してほしいのが、APIキーはAPI提供事業者から、利用者個人またはプロジェクトに対して専用で割り当てられるものです。なので、APIキーを盗まれて不正に利用された場合、悪質なアカウントとして停止されたり、ユーザーの個人情報が盗まれたりする危険性が出てきます。APIキーはパスワードなどの認証情報と同じく、厳重に管理しなければなりません。

分かりやすく言うならば、
**APIキーを公開してる=裸で街を歩いてる状態**ということです。

GoogleMapsAPIを利用する記事はこちら
[Railsで地図 投稿 地名検索 一覧表示 GoogleMapsAPI(JavaScript) gemなし](https://qiita.com/kakeru0520sou1/items/9a39b3a122a8be5b9b65)

今回は、この記事でAPIキーを利用する際に、APIキーを非表示にする方法を記事にしました!!

# い

元記事を表示

Capistranoを使った自動デプロイで詰まった話 (Your bundle only supports…)

こんにちは、しほです。

Qiita初投稿。Railsで作ったポートフォリオをCapistranoで自動デプロイしようとして詰まった話でございます。

# 環境

Rails 6.1.6

# 背景

こちらの記事を参考に、AWS EC2への自動デプロイ を実装しようとしていました。
https://pikawaka.com/rails/capistrano

Capistranoとかのインストールをしたり、NginxやUnicornの設定をした後、最後に以下の自動デプロイ コマンドを打ってみると
“`
bundle exec cap production deploy
“`
**「Your bundle only supports platforms [“x86_64-darwin-19”]・・・」**
とエラーが発生して進めない。困った。

# 解決にいたるまで

1. とりあえずぐぐる。このあたりの記事を見て、なんかBundlerがうまくいかないんだなーということを考えた。
https://autovice.jp/articles/150

2\. エラーログに指示のあった以

元記事を表示

【Rails】記事投稿に紐づく複数のタグを保存する実装

## 概要
何らかの記事投稿機能があるとして、各記事に紐づくタグを複数設定したいとします。
今回、アンチパターンとともに、サンプルをご紹介します。

## テーブル定義
まず以下のようにテーブル定義されているとします。
![投稿機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/b85cc5d2-9040-fb94-474f-1859b76741dd.png)

基本的な設計です。
ユーザーは複数の投稿ができる。
投稿は1人のユーザーに従属する。
`1 対 多`の関係ですね。

そこに、「投稿にタグを複数付けられるようにしたい」という要件が発生しました。
そこで以下のようなテーブル定義を検討したいと思います。
![タグ機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/fdb21694-303f-6342-c5d3-0d3ceef3eabb.png)
1つの投稿は、複数のタグを持てる。
タグは

元記事を表示

(備忘録)MacにゼロからRubyの環境構築をする方法

# 環境構築とは?
* プログラミングを書いたり、実行したりするような環境を自分のパソコンに整うこと

# 環境構築の手順

## ①テキストエディタの準備
* テキストエディタは文章を作成、編集するためのソフトウェア
* Microsoftが無料提供しているVisual Studio Codeが有名
* 今回はVisual Studio Codeを中心に進む
* Download URL : https://code.visualstudio.com/

## ②VSCodeに拡張機能導入(推奨)
#### 拡張機能とは?
* VSCode単体ではサポートしてない機能を後から付け加えるためのもの

#### Japanese Language Pack for Visual Studio Code
* 日本語表記にする

#### HTML Snippets
* HTMLタグ、CSSタグの入力を補完

#### Ruby
* Rubyの構文をチェック、間違った箇所を指摘

#### zenkaku
* 全角スペースを知らせる
* zenkakuに関してはインストールしただけでは使用

元記事を表示

コントローラを共通化したModuleに対応するビューを自動で検索させる

# ユースケース

Railsで、複数のコントローラに似たActionがあるときに、それらを1つのModuleに切り出して、共通化することがありますよね。controllers/concerns/xxx_feature.rb のようなファイルに切り出すパターンです。

このとき、対応するビューも共通化したいことがあります。たとえば、showアクションを共通化している場合、こんな感じで自分で指定やれば、もちろんできます。

“`ruby:xxx_feature.rb
def show

render “shared/xxx/show”
end
“`

ただ、以下のような点が不満です。

1. 面倒。
2. あるコントローラでは共通化ビューを使いたい、あるコントローラでは直接コントローラで自前のカスタムビューを使いたいという切り分けをしようとすると、テンプレートの有無を調べたりして煩雑になる。

特に、2については耐え難いと感じて、方法を調べました。

# 解決方法

バッチリ、エレガントな方法がありました。

“`ruby:xxx_feature.rb
module

元記事を表示

stripe + Rails 7でサブスクリプション機能を実装してみた

stripeを使って、サブスクリプション機能に関する以下のユースケースを実装してみた。
– プレミアム会員になる
– プレミアム会員を退会する

![overview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227279/9b0ccfb3-7527-d29c-396d-631e9e3a5ea7.gif)

# 前提条件

– stripeアカウントを持っている
– 以下のgemをGemfileに追加している
“`:Gemfile
gem ‘devise’
gem ‘haml-rails’
gem ‘stripe’
“`
– `devise` gemにより、Userモデルを作成している
– Userモデルは以下の属性を持っている
– customer_key:string
– stripe上の顧客IDを表す属性
– subscription_key:string
– stripe上のサブスクリプションIDを表す属性
– subscription_status

元記事を表示

[Go]Collection操作が楽楽書けるsamber/loライブラリの紹介

元々RailsからGoの案件にうつって一ヶ月半ほど経過しました。
この間に、Rubyに存在した

– 配列から条件にマッチする要素を取得する“find(detect)“
– 配列から条件にマッチする要素で絞り込んだ配列を生成する“filter(select)“
– 配列から新たな配列を生成する“map“

といった**便利メソッドが標準ライブラリとして存在せずforループやら活用して自分たちでなんとかするしかない・・・というのが実情であると知って絶望** していましたが、Go 1.18で追加されたジェネリクスを利用した外部ライブラリ[samber/lo](https://github.com/samber/lo)を使えば楽に書けることを知って歓喜しました。

自分と同じように**Rails案件からGo案件に移ってきて絶望した人向けに、サンプルコードで対比して紹介**したいと思います。
また、このライブラリには弱点も存在するので、その辺も交えて紹介したいと思います。

なお、Rubyでは配列は「Array」と呼び、Goでも配列はあるけど、実際使うのはほぼ動的配列である「Sli

元記事を表示

ActiveRecord::ProtectedEnvironmentError: の対処方法

## はじめに

Railsチュートリアル第7版の10章の終わりにデータをRenderにデプロイしたところ、タイトルのようなエラーが発生しました。

## 環境

OS: macOS Monterey Version 12.3
Ruby: 3.1.2
Rails: 7.0.4

## 発生したエラー

Manual DeployのDeploy latest commitを実行後、Renderのログに以下のエラーが発生しました。

“`
Dec 29 11:35:59 AM rails aborted!
Dec 29 11:35:59 AM ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
Dec 29 11:35:59 AM If you are sure you want to continue, run the same command with the environment

元記事を表示

マイグレーションを扱うときに使ったコマンド

# マイグレーションを扱うときに使ったコマンド
### migrationファイルの適用状況を確認
#### 出典
https://www.sejuku.net/blog/14229#:~:text=bin/rails%20db%3Amigrate%3Astatus%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%80%81migration%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E9%81%A9%E7%94%A8%E7%8A%B6%E6%B3%81%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B

“`
rails db:migrate:status
“`
【Status】の列が“`【up】のものは実行済み“`、“`【down】のものは未実行“`です。
#### 出典
https://www.tairaengineer-note.com/ruby-on-rails-rails-db-migrate-status

元記事を表示

ActiveRecord::RecordNotFound(Couldn’t find Member with ‘id’=2)エラーについて

# ※投稿後、ミスに気付いたので後日編集します!※

初めての投稿です。
プログラミングスクールの卒業制作のような位置付けでオリジナルアプリを作成していて、エラーが出たので備忘録として投稿します。
読みにくい部分もあるかと思いますがご容赦ください。

## 開発しているアプリ
– 自分の趣味で所属している団体内(約70名が所属)で使用することを想定した連絡ツールアプリ。
– 今後はメール一斉送信機能、メンバーを指定したチャット機能、データファイル投稿機能などを実装予定。

## 実装環境
– MacOS Ventura13.0
– Ruby 2.6.5
– Rails 6.1.6.1
– MySQL 14.14
– TablePlus 5.1.0(本番環境のデータベースを管理)

## 状況
– deviseを使ってユーザー新規登録とログイン機能を実装済み。
– マイページ・ユーザー情報編集機能を実装。
– さらに、ユーザー情報より詳細な団員情報の登録・編集機能を実装。
– renderを使ってデプロイが完了。

## 関係するDBの構成
– ユーザー情報:usersテーブル
– 団員

元記事を表示

Ruby on Rails / React / Docker の環境構築

## はじめに
Ruby on Rails + React の開発環境をDockerで構築する手順です。PC環境は windows(WSL2, ubuntu)です。データベースはMySQLを使っています。以下の操作は全てubuntu側から実行します。

## 前提

Docker Desktop がダウンロードされている必要があります。また、起動していないとDockerコマンドが使用できません。

https://www.docker.com/products/docker-desktop/

## ディレクトリ・ファイルの作成

“`bash
mkdir myapp
cd myapp
mkdir backend
mkdir frontend
touch docker-compose.yml
touch backend/Gemfile
touch backend/Gemfile.lock
touch backend/entrypoint.sh
touch backend/Dockerfile
touch frontend/Dockerfile
“`

プロジェクト名は`myapp`

元記事を表示

SQLでバルクインサートを使ってテストデータを大量に作成する

# この記事を書いた背景
RailsのAPIモードで開発していたのですが、動作確認のためステージング環境にテストデータを大量に作成する必要がありました。

その際、Railsコンソールからデータを増やそうと思い`each`で繰り返しデータの生成を実行したのですが、herokuのプランの都合上1時間に発行できるクエリ数が3,600に限られており、それがオーバーしたようでデータの作成が途中で終わってしまいました(泣)

しかも、一度クエリの上限数を超えると1時間ほどDBにアクセスできなくなるという問題も、、、
(現在は有料プランに切り替えたので恐らく問題ないですが、当時は無料プランだったためこうした制限に引っ掛かりました)

参考:https://zenn.dev/ttskch/articles/905ae809e29504

– 急に有料プランに切り替えたくても自社持ちの費用でないため承認まで時間がかかる可能性があること、
– リリースまで時間がなく、なるべくすぐにステージング環境で動作検証をしたかったこと
このような理由から、herokuが復旧後、SQLでバルクインサートを行い発行する

元記事を表示

(備忘録)AWSのS3を使い、画像をアップロードする方法

# データの保管とは?
* Webアプリケーションでは、毎日たくさんのユーザーより写真や動画がアップロードされてる。
* そのデータはユーザーがいつでも見返すことができるように蓄積しないといけない。
* その時、使うサービスを「ストレージサービス」という。

# ストレージサービスとは?
* インターネット上でデータを保存する場所を提供するサービス
* AmazonのS3はその体表的なサービス提供者

# Heroku、Renderなど、デプロイサイト利用(経由)し、リリースしたサイトに関して、ストレージサービスが必要となる理由
* Userがアップロードした画像などデータは、アプリがデプロイまたは再起動(自動更新)される度に、消えてしまう仕様になっている為
* 但し、有料バージョンはその限りではない。

# AWS、S3の無料使用期間
* 12ヶ月間、一定の使用量までは無料で利用できる
→S3の場合、以下が無料で使える
①5GBの容量
②20,000 件のGetリクエスト
③2,000 件のPutリクエスト
※今後変わる可能性はあり

* 無料枠でS3を利用する際は以下に注意
①不

元記事を表示

Railsでポートフォリオ制作③【実装:GitHubにあげる〜ユーザー機能実装】

ポートフォリオの環境構築が完了したので、実装に入ります。

## これまで
https://qiita.com/mahariiku/items/1f062eed36dab8ace782

https://qiita.com/mahariiku/items/31a741d478004598b995

## 実装手順
– GitHubに上げる
– issueを作っていく
– gemのインストールと各種設定
– GitHub Actionsを導入
– Dockerを導入
– タイムゾーンの設定
– devise(ユーザー認証gem)の導入
– 国際化(localize)
– UIのテンプレートを導入
– ユーザー関連機能のviewとspec実装

## GitHubに上げる
– GitHubのマイページで、リポジトリの新規作成
– ローカルのrailsプロジェクトのディレクトリで`add`→`commit`→`remote add`→`push`
– GitHubのリポジトリページを更新してローカルの内容がプッシュされているのを確認!
![スクリーンショット 2022-11-12 7.10.

元記事を表示

[Ruby on rails] 駆け出しエンジニアの「なんでこの名前なん?」4選

どうも、9月に入社しました駆け出しエンジニア(4か月)です。
この記事では、僕が「**え、それそういう由来だったのね**」と思ったIT用語や略語を4つまとめてみたいと思います。
漠然とした機能に加え、その語の由来やニュアンスを的確に捉えることができれば初学者はよりスムーズに、経験者はより深く用語について理解できるのではないでしょうか。
尚、以下は完全なる僕の主観に基づいた情報であり、現状の僕の用語に対する理解です。
間違い、補足等あれば都度コメントいただけると幸いです。
それではスタートです。
※Ruby on Railsを主に触っている前提です。
# erb
これは”Embedded RuBy”の略です。日本語に訳すと、「**埋められたruby**」。
よくHTMLファイルなどで見かかけますね。
〇〇.html.erbのような感じです。つまり、「rubyが埋められたHTMLファイル」だよ!ってことを示してくれています。「あれ、、rubyが読み込まれてない、、」なんてことが起きた時は拡張子がきちんと「.erb」になっていなかった。なんてことはよくあるので、よくよく確かめてみるべきだ

元記事を表示

Ruby on Rails + Vue.js + AWS Fargate + Circle CiでSPAアプリを作成してみた

## はじめに
最近、と言ってもこのアプリを作ったのは2021年終わりから2022年前半くらいになるのですが、
未経験エンジニアのポートフォリオのレベルがだいぶ上がっているという話を耳にすることが多く、未経験で業界に飛び込んだ自分も負けていられないなという思いから業務後にコツコツアプリを作ってみました。

先に言い訳をしておくと、転職活動中だったこともあり`Terraform`でインフラのコード化までやり切ることができず、テストコードも未実装というかなりお粗末なアプリになってしまいました。反省。。。
ただ、業務と並行して未経験の技術をキャッチアップしていたことが転職面接時には結構ウケが良かったので、ある程度プラス評価はしてもらったかなと思っています。
あとシンプルに自分の作りたいものが形になっていくのはやっぱり楽しい

【Rails】HERE Maps APIで地図機能を作ってみる

# 概要
今回、無料でMap機能が使えるかつGoogleMapのAPIよりすごい!という話を
[以下の記事](https://qiita.com/Akira-Isegawa/items/a31be5893e362c6f10c3)で見かけたので、Railsで実装してみました!
投稿機能を実装していれば実装できる機能なので、ぜひ遊んでみてください〜!

https://qiita.com/Akira-Isegawa/items/a31be5893e362c6f10c3

:::note warn
投稿機能の実装が必要です
:::

# アカウント登録とプロジェクトの作成
以下の記事にある、`Developerの登録`を参考に進めましょう!

https://qiita.com/Akira-Isegawa/items/a31be5893e362c6f10c3

上記の記事のようにプロジェクトの作成が終わったら
アプリのディレクトリ直下(Gemfileと同じ階層)に`.env`という名前のファイルを作成し
APIキーを`.env`に入れます。

“`:.env
HERE_MAP_API_KE

CloudWatchでRailsアプリケーションログの10秒以上の処理を抽出するフィルタの書き方

# はじめに
医療系クラウドサービスを提供しているレイヤードという会社で働いています。

今回あるサービスのデータベースにおいて`Lock wait timeout exceeded`が発生し、やたら処理時間が長いヤツがいそうだゾ(しかもトランザクションかけてやがる!)、という事で犯人捜しをした時のメモです。

AWSのClowdWatchでRailsのproductionログを対象に「◯秒以上の処理」を検索しました(しょーもなくてごめんなさいw)。
RailsのログでなくてもDBやWebサーバのログ検索も同様に使えると思います。

# 前提
当然ながらClowdWatchにログを上げている前提です。
Railsのログは下図のようになっており矢印のms箇所を検索します。
[![Image from Gyazo](https://i.gyazo.com/38b43cfc7f81df1c54d564b685b6aee9.png)](https://gyazo.com/38b43cfc7f81df1c54d564b685b6aee9)

# 手順
– ClowdWatchの画面で「ログのイン

Railsでセキュアなパスワードを実装する方法[備忘録]

セキュアなパスワードを実装する

ユーザ認証について

ユーザ認証は以下の手順で行われます。

  1. パスワードの送信。
  2. ハッシュ化(ハッシュ関数を使って入力されたデータを不可逆なデータにする。)
  3. データベース内のハッシュ化された値との比較

今回は特にパスワードのハッシュ化の実装について学んだことを残しておこうと思います。

has_secure_password

ハッシュ化されたパスワードを実装する時は、has_secure_passwordメソッドを使います。

このメソッドを使用すると以下のことができるようになります。

  1. ハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。
  2. authenticateメソッドが使えるようになる。(引数に正しいパスワードを入力すると、正しいユーザ情報を返し、間違ったパスワードだとfalseを返すメソッド)