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

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

【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる

# はじめに
プライベートでの共同開発において、「開発環境と本番環境の差異をできるだけ少なくしたい」という思いからローカルで動かせるS3互換ストレージを調べていました。業務で`fake-s3`というサービスを使用したことがありますが、MinIOというサービスも現場で使われている例を発見したのでそちらを導入してみました。

# MinIOについて
MinIOとはAWS S3互換のオブジェクトストレージのことです。

https://min.io/

* 導入するメリット
* ローカルに仮想的な S3 環境を構築できる
* ローカルの仮想環境なので不用意にAPIを叩いてもお金も掛からない

# シナリオ
簡単なアプリを作成した後、MinIOを導入し、投稿した画像がMinIOに格納されるかを確認してみます。

### 1. アプリの土台を作成する
以下の機能をもつ簡易的なブログアプリを作成する。

* 記事一覧機能
* 記事詳細機能
* 記事投稿機能

#### 動作確認
MinIOを用いない状態で画像を投稿し、storageフォルダにファイルが格納されることを確認する

#

元記事を表示

RailsでYoutubeの動画を投稿・編集する方法

# 概要

Youtubeにアップロードされた動画をRailsアプリで投稿したいという方に向けたものです。
Youtubeの動画を投稿した時にYoutubeのURLのなかで最後の11桁の値のみを取り出し、他の変数に取り入れるようにしている記事が多い。
それだと編集する時に、末尾11桁を入力しないとエラーが起こってしまうので、それが起きないような、その実装方法を記載します。

# 1. YouTubeURLの種類

### YouTubeURLは僕がパッと見た感じ3種類のURLが存在します

#### PCでのYouTube閲覧時のURL 一番スタンダード?

![qiita-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364026/54573626-027c-083a-62a9-faf618d10c2a.jpeg)

#### 共有用URL (スマホで視聴中の動画を友達に共有するときはこれ)
https://

元記事を表示

renderで部分テンプレートを呼び出す方法

#はじめに
 この記事はプログラミング学習の備忘録です。今回はrenderを使って指定のビューファイルを呼び出す方法についてまとめます。
#viewでrenderメソッドを使う
 まずviewでよく使われるrenderメソッドの用法は、部分テンプレートを呼び出す時です。部分テンプレートとは複数のviewファイルで使われるコードを切り出して、共通化するファイルのことです。
renderで部分テンプレートを呼び出すためには、まずは共通部分をまとめた部分テンプレートファイルを作ります。
この時に気をつけることは、ファイル名の先頭にアンダーバーをつけて
**「_tweet.html.erb」**のような形にすることです。

次に部分テンプレートを呼び出します。呼び出し方は主に、
①部分テンプレートをそのまま呼び出す場合
②変数を渡す場合
の2つがあります。順番に説明します。 
#部分テンプレートをそのまま呼び出す
例えばformを作る部分テンプレートには変数を渡さず、そのまま呼び出されます。
まずは「_form.html.erb」というファイルを作り、

“`new.html.erb
<

元記事を表示

MVVMパターンをVue.jsのコードから理解してみる。

## はじめに
アプリ開発をしていると、MVVMパターンで作ってみました的な記事をよく見る。
そこでMVVMパターンを理解しようと調べてみると、**MVCパターンとの比較**で語られる記事が多く、イメージがしにくい。
なぜなら、各パターンの代表として語られるフレームワークのカバーする範囲が、まるで異なるからだ。

– Ruby on Rails(MVC) -> FE/BEを含むフレームワーク
– Vue.js(MVVM) -> FEフレームワーク

これらを比較すると、MVCのVの部分を細分化したものがMVVMなのか?と誤解してしまう。

**本記事の目的** 
Vue.jsで作成したサンプルアプリのコードに対して**何がMVでVでMなのかを対応付け**行い、MVVMに関する理解を深める。

Vueのサンプルアプリのコード

https://github.com/ninoko1995/vue-app

Vueのサンプルアプリのurl

https://angry-carson-84bdcd.netlify.app/

## MVCとMVVMの違い(ちょーざっくり)
MVC, MVVM

元記事を表示

stripメソッドとそれに関連するメソッドのまとめ

rubysilverを勉強するためのサイトのRexを勉強してわからなかったメソッドがあったので備忘録として残しておきます
https://rex.libertyfish.co.jp/

##Stripメソッド
stripという英語の意味は、「剥ぎ取る」という意味です
結論からいうと、文字列先頭と末尾の空白文字を全て取り除いた文字列を生成して返すメソッドなんです。
[ruby 公式ドキュメントより](https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html)

このリファレンスに書いてあるのですが、「空白文字の定義は ” \t\r\n\f\v”」と書いてあるんです。
そこで思ったのが、「\\t\r\n\f\v」ってなに?って思ったんですよね。
(この文字列の中にスペースも入ってるのでご注意を)

ここで大事になるのが、正規表現についての知識が必要になるんですよね。
よく調べたら、これがrubyの[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2freg

元記事を表示

Failing package is: mysql-community-libs-8.0.28-1.el7.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# エラー内容

“`
The GPG keys listed for the “MySQL 8.0 Community Server” repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

Failing package is: mysql-community-libs-8.0.28-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
“`
# 経緯
“`
Gem files will remain installed in /home/ec2-user/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/mysql2-0.5.

元記事を表示

自作アプリをRails6から7にアップデートした際の手順。

12月にRails7がリリースされたので、1ヶ月ほど遅れましたが自作アプリをRails7にアップデートしてみました。

## まずやること
Gemを最新のバージョンに上げておきます。

“`
bundle update
“`
こんなエラーが出ました。

“`
Bundler could not find compatible versions for gem “actionview”:
In snapshot (Gemfile.lock):
actionview (>= 6.1.4.4)

In Gemfile:
actionview (~> 6.1.4.4)

rails (~> 7.0.0) was resolved to 7.0.0, which depends on
actionview (= 7.0.0)
“`
ログを見た感じ、railtiesのバージョンを上げればいいようです。
なのでGemfileを以下のように編集。
・変更前

“`
gem ‘actionview’, ‘~> 6.1.4.4’
“`
変更後

元記事を表示

[JS]基礎的な文法(変数定義)

アウトプットとして

Rubyの学習をしてJSのコードを見ると、ごちゃごちゃしてるように見えてどうしても苦手意識が拭えない…
一つ一つ分解するとそんなに難しくないはずだとは思っているが…
というわけで、苦手意識克服するために超基礎的なところから!!

## JSの変数定義の仕方
JavaScriptの変数定義の様式は、var、const、letと3つ存在する

### var
varの特徴として、`再代入、再定義ともに可能`

“`javascript
var sample = “こんにちは”

sample = “こんにちは”
// 再代入OK

var sample = “こんにちは”
// 再定義OK
“`

### const
後から書き換えることができない変数を定義する書き方
constの特徴として、`再代入、再定義ともに不可`

“`javascript
const sample = “こんにちは”

sample = “こんにちは”
// 再代入NG →エラーが起こる

const sample = “こんにちは”
// 再定義NG →エラーが起こる
“`

※c

元記事を表示

systemテストで Net::ReadTimeout が出るときの対応

テスト用のCIサービスにHeroku CIを使ったところ、systemテストで`Net::ReadTimeout`が頻発しました。

driven_byメソッドにoptionsオプションを加え、`timeout: 秒数` を指定したところ治りました。

“`rails_helper.rb
config.before(:each) do |example|
if example.metadata[:type] == :system
driven_by :selenium, using: :headless_chrome, screen_size: [2000, 3000],
options: { timeout: 120 }
end
end
“`

以下、各種ライブラリのソースコードから。driven_byメソッドのoptionsオプションは、Capybara::Selenium::Driver に渡されます。

“`actionpack-6.1.4.4/lib/action_dispatch/system_testing/dri

元記事を表示

Githubの新しいgit push 2022

2021年8月からhttpsのlocalでpushできなくなった(パスワードでアクセルできない)ので

変更点と新しいgit pushの仕方を説明します。

先にファイルに入れたアプリを作成しておきます。

githubでレポジトリを作成します。

httpsとsshがありますがhttpsのままで大丈夫です。

次にホーム画面の右上のマイアイコンからsettingを選びます。

developer settingを選び、personal access tokenを選びます。

名前をmytoken20221010などとしておき、

setting optionでrepoだけを選ぶ。

入力が完了したら、generate tokenをクリック

tokenが発行されたらコピーして控えておきます。

それからコマンドラインでcd test-appのようにアプリまで場所を移動して

git init

git add .

git commit -m “first commit”

it remote add origin https://github.com/githubのユーザ名/アプリ

元記事を表示

rails assets:precompile RAILS_ENV=productionでThe engine “node” is incompatible with this module. Expected version “xx.xx.x”. Got “zz.zz.z”とerrorになった時の対処方

“`package.json
“node”: “xx.xx.x”
“`
この”xx.xx.x”をエラー表示の”zz.zz.z"にバージョンを合わせると解決!

元記事を表示

credentials.yml.encをRubyMineで編集する

# 前提環境

“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`
OSはWindows10 64bitです。

# RubyMineの実行ファイルパスを取得する

スタートメニューなどからRubyMineのアイコンを探して、[ 右クリック->(その他)->ファイルの場所を開く ]を`rubymine64.exe`ファイルが出てくるまで行います。

そうしたら、ファイルをコピーしてエクスプローラーのアドレス欄に張り付けて、その文字列をコピーしてください。

# 環境変数を設定する

値の例: `”C:\…\rubymine64.exe –wait”`

– 一時的

“`
set EDITOR=先ほど取ってきたパス –wait
“`

– 恒久的

“`
setx EDITOR 先ほど取ってきたパス –wait
“`

# 編集

“`
rails credentials:edit
“`

元記事を表示

【RuboCop】特定の「ディレクトリ」をチェック対象外とする

# 概要
bundle exec rubocopを実行した際、ルール違反のファイルを指摘してくれるが、
その中で**特定のディレクトリ**をルール適用対象外とする方法についてメモ。

## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26
rubocop 1.23.0
rubocop-rails 2.12.4

### ルール違反の検出
前提:多数のカラムを持つSampleモデルをrails generateで作成した直後とする。

“`terminal:terminal
# チェックの実行
❯❯❯ bundle exec rubocop

# ルール違反箇所の検出
sample-app/.rubocop.yml: Warning: no department given for MethodLength.
Inspecting 63 files
…………………………………………………….C.

Offenses:

db/migrate/20220119115229_crea

元記事を表示

プログラミング言語を簡単にまとめる

##Java
JavaとはC言語ベースに開発された汎用性の高いプログラミング言語。求人需要が多い
WEBサービスから業務システム、組み込み、など多岐に渡り開発現場で採用されている。
フレームワークはspring Framework

##Ruby
Rubyとはオブジェクト指向のプログラミング言語。コードはシンプルに書きやすく読みやすい。
WEBサービスやWEBアプリケーションができる。
フレームワークのRuby on Rails。クックパッドや食べログに使用されている

##PHP
PHPとは動的なWEBページを生成することができるサーバーサイドのスクリプト語。HTMLは静的WEBページ。
他のプログラミング言語と比べると文法が比較的容易なので取得しやすい。
フレームワークはLaravel

## C#
マイクロソフト社が開発したオブジェクト指向のプログラミング言語。Javaと似ている。
GUIアプリケーション、WEBアプリケーション、ゲーム開発ができる
フレームワークはASP.NET

元記事を表示

RailsでMissing helper file helpers/〜〜というエラーが出た時の解決策

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Railsチュートリアル6版の学習中、14章の「14.2.4[Follow]ボタン(基本編)」の
`$ rails generate controller Relationships`
を実行後に
>Missing helper file helpers/relationships_helper.rb (AbstractController::Helpers::MissingHelperError)

というエラーが出て戸惑ったのですが、解決したため共有です。

# 結論
`$ spring stop`
コマンドで解決しました。

## springとは
「開発効率を上げるためにバックグラウンドで動いてくれているやつ」らしいです!

https://nyakanishi.work/lets-stop-spring-when-the-rails-command-does-not-work-properly/#toc1

## spring

元記事を表示

【RSpec】変数名を付けながら大量のデータ作成したとき

##instance_variable_set

テストで変数名を付けながら大量のデータを作成したいときに便利。

“`ruby
(Date.new(2022, 1, 1)..Date.new(2022, 1, 31)).each_with_index do |date, i|
instance_variable_set(“@date#{i+1}”, date)
end

@date1 #=> Sat, 01 Jan 2022
@date2 #=> Sun, 02 Jan 2022
@date3 #=> Mon, 03 Jan 2022

“`

##参考

https://docs.ruby-lang.org/ja/latest/method/Object/i/instance_variable_set.html

https://qiita.com/yosaprog/items/c008c709e851c9e7c717

元記事を表示

RailsのN + 1問題とは

#N + 1問題
***ループ処理の中でSQLを発行した際にSQLが大量に増えてしまうことです。***
言い換えるとデータベースのアクセス数が増えすぎてしまうことです。

#N + 1問題の具体例
野球選手検索アプリがあると想定します。

チーム(teams)とそれに所属する選手(players)を例に説明します。

teamsテーブル

|id|name|
|—|—–|
|1|巨人|
|2|阪神|
|3|広島|

playersテーブル

|id|team_id|name|
|—|—–|—–|
|1|1|佐藤選手|
|2|1|田中選手|
|3|2|鈴木選手|
|4|2|渡辺選手|
|5|3|高橋選手|
|6|3|山田選手|

1チームに複数の選手が所属しているので1対多の関係です。

“`app/models/team.rb
class Team < ApplicationRecord has_many :players end ``` ```app/models/player.rb class Team < ApplicationRecord

元記事を表示

railsの環境構築

## はじめに
備忘録
PCはMac M1チップ
参考記事を読んでから実装するとわかりやすいと思います。

## 参考にした記事
[【Ruby】Rubyのインストール手順と動作確認](https://info-wcn.com/ruby-install-mac/)
[Ruby on Rails の環境構築構築](https://info-wcn.com/ruby-on-rails-environment-mac/)

[bundlerで非推奨になった –path –binstubs – Qiita](https://qiita.com/devzooiiooz/items/8babd82f780f01812f9d)
[bundle exec はもういやだ – Qiita](https://qiita.com/circled9/items/1a3c6c38ee40de4cf5e3)

## 特質事項
非推奨の`–path vendor/bundle –binstubs=vendor/bin`を使わない方法で実装する

rails 環境構築部の`bundle exec`を省略する設定

元記事を表示

音声ファイルを保存、再生、ダウンロード機能を実装。【Ruby】

# 目的
音声ファイルをアップロードし保存ができ、再生やダウンロードができるように実装します。
以下の画像のようなオーディオプレーヤーが実装されるのがゴールです。
[![Image from Gyazo](https://i.gyazo.com/c7beca78223170f1134c6b610b1f7668.jpg)](https://gyazo.com/c7beca78223170f1134c6b610b1f7668)

# 手順
### オーディオファイルを保存したいモデルにカラムを追加。

“`ターミナル.
% rails generate migration AddFileToモデル名 file:string
“`
“`ターミナル.
% rails db:migrate
“`
### ストロングパラメータの修正

“`songs_controller.rb
# 省略

private

def song_params
params.require(:song).permit(:file, :title)  # permit()の中に:fileを追

元記事を表示

rails 7.0.1 + MySQL/SQLiteの構成だとrails6.0で作成したmigrateファイルの`references`/`belongs_to`定義が動かない

# TL;DR

`MySQL`を使用している`rails`アプリケーションの場合、`rails`バージョンを7.0.1にして、`rails` 6.0で生成したmigrateファイルを使ってdb migrateを行うとエラーが発生します

# 詳細

## 発生するケース

例えば`users`テーブルが存在していて、`users`に紐づく子テーブル`posts`を追加しようとした場合で以下のようなmigrateファイルをrails6.0の作成したとします。

“`ruby
class Posts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.references :users, foreign_key: true t.timestamps end end end ``` の後rails7.1にアップグレードを行い`migrate reset`などmigrateを再度実行した場合に以下のエラーが発生します。 ``` Column `us

元記事を表示

OTHERカテゴリの最新記事