Ruby関連のことを調べてみた2021年02月12日

Ruby関連のことを調べてみた2021年02月12日

【Rails6】Docker環境でRSpecのシステムスペックを実行する

# はじめに

こちらの記事の続きとなります。

[【Rails6】Docker + Rails + MariaDB のローカル環境でアプリ開発を始めよう【おとなもこどもも、おねーさんも】](https://qiita.com/masarashi/items/61c5d9c63e9588b948f0)

Dockerコンテナで使用する Rubyイメージですが、システムスペックを実行する際に必要なブラウザがインストールされておらず、システムスペックを実行できません。
ブラウザをインストールしてしまうという方法もありますが、システムスペックは開発環境で実行し、本番環境では実行しないためブラウザが不要です。
何かをインストールすれば少なからずイメージ容量が増えてしまう点や、開発環境だけブラウザがインストールされるように Dockerファイルを作るのもメンテナンス性の観点から避けたいです。

そこで、ブラウザを別のコンテナとして起動することで解決します。

# RSpecの設定

RSpecの設定に関しては、「Everyday Rails – RSpecによるRailsテスト入門」を参考にさ

元記事を表示

[未経験エンジニア]のオリジナルアプリ制作の反省7. 開発に入るまでが勝負だという話

# 何を書くのか
一つ目のオリジナルアプリケーションを作成、運用しているうちに、先に決めなかったことで苦しんだことを項目ごとに簡単に振り返ります。ほとんど、自分への戒めです。お付き合い願います。

## 環境
Ruby: 2.6.5
Rails: 6.0.3.4

## 結論
これらの項目を取り上げます。

| 番号 | タイトル|
|:-:|:-:|
| 1 | ビューの構成をBEMで考える。 |
| 2 |いったん部分テンプレのことは忘れる |
|3 |後から読み返しやすいコードにしましょう|

# 1. ビューの構成をBEMで考える。
BEMとは、Block, Element, Modifierの略で、webサイトのコンポーネント化を行う
ためのフロントエンド設計方法の一つです。

詳細な説明については、[こちらの記事](https://www.codegrid.net/articles/bem-basic-1/)をご覧ください。

BEMがどんなものか、かなりざっくりと説明すると

– **classの命名規則**に共通認識を持ちましょう。
– **block >

元記事を表示

テックキャンプで学んだこと

# テックキャンプで学んだプログラミング

– Progate

HTML/CSSをやって簡単なWebページ
– Ruby on Rails
– MVCの流れ、ルーティング
– M(モデル):バリデーション、アソシエーション
(ex belongs_to :モデル名、has_many(またはhas_one) :モデル名)
– V(ビュー),C(コントローラー)
(ex アクション(index,new,create,edit,show,update,destroy,search)

元記事を表示

コメント機能実装の際に詰まった。 [Rails,Ruby,binding.pry]

#環境
ruby 2.6.5
rails 6.0.0
MySQL
Github

#発生したエラー
コメント機能の実装の際、投稿後のリダイレクトに関する記述の部分で以下のエラーが発生

“`
No route matches {:action=>”show”, :controller=>”boards”, :id=>nil}, missing required keys: [:id]
“`

その時のコードは以下の通りです。

“`ruby:show.html.erb
<%= form_with(model: [@board, @comment], local: true) do |f| %>
<%= f.text_area :text, id:"text" %>
<%= f.submit "SEND" %>
<% end %>
“`

“`ruby:comments_controller
class CommentsController < ApplicationController def create @commen

元記事を表示

【Ruby】ソケットをプロミスキャスモードにする

# メモ

– 原理的には以下ページの通りに行う。 `setsockopt` を呼び出して、その時に `PACKET_ADD_MEMBERSHIP` オプションとそのオプションに必要な `struct packet_mreq` のデータを渡せば良い。
[Man page of PACKET](https://linuxjm.osdn.jp/html/LDP_man-pages/man7/packet.7.html)
– `struct packet_mreq`はCの構造体であるが、[参考リンク](https://kure.hatenablog.jp/archive/category/setsocopt)の通り色々と調べたところ、Rubyから渡す場合は構造体のメンバのデータを順番に並べた文字列を渡せば良さそう。
– 例えば、 `mr_ifindex` はインターフェース番号(int=4Byte)なので、Rubyの文字列の一文字のデータはCのchar1つに変換されるよう(動作的にそう見えるが厳密には違うかも)なので、インターフェース番号を加えた4文字の文字列を渡せば良い。下記の `mr_i

元記事を表示

[Mac] PC本体の更新(アップデート後のエラー)について

##pcのスペック

・**MacOS BIG Sur**
最近更新してバージョン11.2.1
・**VScode**
バージョン:1.53.1
  
  
プログラミングの学習をするに当たって、
**VScode**を使用しているのですが、

**PC本体の更新**をする際に、毎回と言っていいほど、
VSコードの右下あたりに
  

「gitをダウンロードしますか?」と出て来ます。

**ダウンロードも何も現在進行形で使っています。**
  

定期的に最新の状態に保ってくれているのはすごく有難いんですが、
その本体更新後に毎回出てくる文字が邪魔なんで**解決法**を書いていきます。(*自分の場合の解決方法です)

  
  

もし、gitやその他、エラーが起きたら、本体のバージョンUpに伴って、
**コマンドラインツール**とのパスがうまく通っていない可能性があリます。
(恐らく環境構築あたり)

なので、
**Gitの場合**

xcode-select –install

をターミナルで打ってあげて、
**最新のソフトウェア**に更新してあげると、直る可能性

元記事を表示

Herokuにデプロイする際のエラーstatus=500の解消例

#はじめに
status=500のエラーが起こる原因は様々でデバックには一苦労しますが、
初めからアプリを作成し直すのは待ってください!!

なお、DBに問題があり、デバックできないケースもありますので作り直さなければ
ならない場合もあります。

デバックできないと判断するまで、原因を洗い出しエラー解消に努めましょう!!

本記事はあくまでもstatus=500のエラーの一例です。

#バージョン
rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0

#前提
app/javascript/packs/application.jsのturbolinksの記述は削除済み

“`app/javascript/packs/application.js

〜省略〜

require(“@rails/ujs”).start()
// require(“turbolinks”).start()// ←この行を削除する
require(“@rails/activestorage”).start()
require(“channels”)

〜省略〜

“`

元記事を表示

with_optionsで複数のバリデーションをまとめる

# with_options

`with_options 〇〇`と書くことで、
複数の情報に対して共通したオプションを付けることが可能。

## 具体例を用いて比較

「a、b、cそれぞれのカラムが空では保存できない」というバリデーションを設定する場合

“`rb:
class Sample < ApplicationRecord validates :a, presence: true validates :b, presence: true validates :c, presence: true end ``` >この様に共通の`presence: true`(カラムが空では保存できない)といった
validationをひとつひとつに設定していく

“`rb
class Sample < ApplicationRecord with_options presence: true do validates :a validates :b validates :c end end ``` >上記の様にdo〜end内でバリデーションを

元記事を表示

heroku/デプロイ/エラー原因/bundler

herokuにデプロイする際に苦しんだ。
エラーは以下の通り

“`
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against your app
remote: ! and using the production group of your Gemfile.
remote: ! /tmp/build_0d17b8ad/config/boot.rb:4:in `require’: cannot load such file — bootsnap/setup (LoadError)
remote: ! from /tmp/build_0d17b8ad/config/boot.rb:4:in `
remote: ! from /tmp/build_0d17b8ad/bin/rake:3:in `require_relative’
re

元記事を表示

【効率化】RGB→カラーコード変換器を作ってみた

オリジナルアプリを作成し始めたら、色を扱うためにRGBから16進数のカラーコードへ変換したい場面が増えてきました。 他にもいいツールはあるでしょうが、せっかくなので、自分で作ってみました。

## [Ruby](http://d.hatena.ne.jp/keyword/Ruby)の記述

![f:id:lynx-levin:20201103130757p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/l/lynx-levin/20201103/20201103130757.png)

– まずは、R、G、Bをそれぞれ入力します。
– その後、7行目でそれぞれ16進数に変換し、つなげます。

### 詳しく解説

`format(“%X”, R)`
  ・・・Rを16進数に直す
(例) 200 → “C8” 15 → “F”
  →これを、2桁表示にしたい

`format(“%2X”, R)`
  ・・・「2」を付ける
(例) 200 → “C8″ 15 → ” F”
  →1桁目の半角スペースを0にしたい

`

元記事を表示

既存のRailsアプリに後からdeviseを導入する方法

# はじめに
作成中のRailsアプリにdeviseを導入した時のことを記事にします。
初めての記事ですので、間違っている点などあればコメントを頂ければありがたいです。
以下参考とさせて頂いた記事になります。


https://github.com/heartcombo/devise

https://qiita.com/cigalecigales/items/16ce0a9a7e79b9c3974e

https://qiita.com/gakkie/items/6ef70c0788c3cbff81ee

バージョン

“`
rails : 6.1.1
ruby : 2.6.6
devise : 4.7.3
“`
手順は初期の段階から導入する場合とそんなに変わりません

1. まずGemfileにgemを記載してインストールします

“`
gem ‘devise’ #追加
“`
“`
bundle install
“`

2. 続いて以下のコマンドを実行します

“`
rails g devise:install
“`

元記事を表示

【Rails】部分テンプレートの一部を特定のページでのみ表示するには?

共通の記述を部分テンプレート化したけど、ページによって一部分だけ記述を変えたいときってありますよね。
そんなときは、`current_page?`メソッドが便利です!

#current_page?メソッドとは?
表示中のページのパスを判定できるメソッドです。
引数にしたパスが表示中のページと同じかどうかを判定してくれています。同じであればtrueを返します。

“`
current_page?(判定したいパス)
“`
実際にHTMLファイルで使用する際は、以下のようにif文を用いて記述します。

“`
<% if current_page?(root_path) %>

現在のページはトップページです

<% end %>
“`
また、複数のページを指定することもできます。

“`
<% if current_page?(root_path, 〇〇_path, XX_path) %>
“`

#参考記事
https://railsdoc.com/page/current_page_q
https://qiita.com/zenizh/items/8b

元記事を表示

初めてRailsでログイン機能実装してみた

先日からRailsでポートフォリオ作成してまして今回はアウトプットのためログイン機能について記事を書きます。

###実装した機能
gem ‘devise’
というgem使用してログイン機能を作成します。
deviseというgemはユーザー認証に必要な機能を簡単に作ってくれるとゆうなんとも便利なgem
です。

###deviseをインストールする
エディタでGemfileを開いて先ほどの

“`
gem ‘devise’
“`
をgemfileに追加して

“`
bundle install
“`
でインストールします。
次にdeviseの設定ファイルを作成したいのでrailsコマンドを使って

“`
rails g devise:install
“`
これでconfigディレクトリに以下のファイルが出来上がりました。
config/initializers/devise.rb
config/locales/devise.en.yml

###dbの設定をする
ユーザーモデルを作成したいのでrailsコマンドを使います

“`
rails g devise user
`

元記事を表示

railsとvue.jsの初期環境構築をしたいなと思いました

環境
ruby2.6.3
rails6.1.2.1
yarn 1.22.10
v14.15.3
vue@2.6.12 (npm list vueで確認できます)
##ステップ1 アプリを作成
webpackありでアプリを作成する。データベースにポストグレスを使う。
“`$ rails new アプリ名 –webpack=vue -d postgresql “`
データベースの作成
“`$ bundle exec rails db:setup“`
バックエンド側サーバーの起動
“`$ bundle exec rails server“`
フロントエンド側サーバーの起動
“`$ bin/webpack-dev-server“`
##ステップ2 Procfileを作成する

“`ruby:Procfile
rails: bundle exec rails s -p 3000
webpack: ./bin/webpack-dev-server
“`
変更があるたびに毎回コンパイルするのは面倒なので、gem ‘foreman’を使って“rails s“するだけで変更が反

元記事を表示

Railsのgem ‘active_hash’で都道府県データを作成

# Railsのgem ‘active_hash’で都道府県データを作成

Railsでデータベースに都道府県データを持たせずに、
active_hashでデータを持たせる方法を備忘録として記事にします。

特に都道府県を一から記載するのが面倒という人は以下に記載のコードをコピーしていただければと思います。

## ActiveHashとは
Active_Hashとは、都道府県名などの変更されないデータをモデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができるGemのこと。

## 環境
Rails 6.0.3
Ruby 2.6.5
macOS Catalina

## 事前準備

## active_hashを導入します

Gemfile

“`
gem ‘active_hash’
“`
bundle installをします。

“`
$ bundle install
“`

次にモデルを作成します。

“`ruby

rails g model area
“`

rails db:migrateします。

“`
$ rails

元記事を表示

Rspec の Request Spec で Stripe-Signature ヘッダを含めたテストをする

Stripe を利用していてwebhookを使ったStripe 上で発生したイベントに対して処理を行うというのはよくあると思います。

Stripe ではイベントが第三者ではなく Stripe によって送信されたリクエストであることを確認するために Signature の検証ができるようになっています。
[Check the webhook signatures](https://stripe.com/docs/webhooks/signatures)

基本的にはwebhook でイベントを受け取るエンドポイントで Signature の確認処理を実行すると思いますが、テストでは自前で Signature を作成する必要があります。

ここでは公式のStripe API の Ruby Gems の stripe-ruby と Rspec でテストする前提での例を説明します。

– [stripe/stripe-ruby: Ruby library for the Stripe API.](https://github.com/stripe/stripe-ruby)

## Stri

元記事を表示

簡単なカレンダー機能の導入方法(1)

#Gemの`simple_calendar`を使ったカレンダー機能の実装について
###[公式のGitHub](https://github.com/excid3/simple_calendar)

###完成形
![](https://i.gyazo.com/7d80a5ba65a8a33b44450c4c0af8754b.png)

###目次

– [Gemの導入](https://qiita.com/programming_00/items/b10e7d866a2b664f3a05#%E3%82%B8%E3%82%A7%E3%83%A0%E3%81%AE%E5%B0%8E%E5%85%A5%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
– [CSSの追記](https://qiita.com/programming_00/items/b10e7d866a2b664f3a05#css%E3%81%AB%E8%BF%BD%E8%A8%98%E3%81%97%E3%81%BE%E3%81%99)
– [カレンダーの

元記事を表示

【Rails6】Docker環境でWebpackerのコンパイルが遅い【対策】

# はじめに

こちらの記事の続きとなります。

[【Rails6】Docker + Rails + MariaDB のローカル環境でアプリ開発を始めよう【おとなもこどもも、おねーさんも】](https://qiita.com/masarashi/items/61c5d9c63e9588b948f0)

CSSファイルを編集してページの更新をするたびに、表示がめちゃくちゃ遅い問題にぶつかりました。

具体的な事象としては、数十秒ほどブラウザの読み込みが発生します。その際にログを確認すると、”webpack: Compiling…” という出力のまま止まり、しばらくすると “webpack: Compiled successfully.” となってページが表示されます。

こんな状態ではおちおちCSSの編集ができないので、対策を施しました。

# 参考にさせていただいた記事

[dockerでwebpackerが遅い問題を改善する](https://qiita.com/MoguraStore/items/ca80c99c5542898ec3b5)

# 設定方法

解決のため、w

元記事を表示

【Rails】validatesとvalidates_associated違い

# はじめに
モデルのバリデーションでうまくいかなかったり、勘違いしていた記述を整理し、学びがあったので書きます。

# 状況
親モデルとして`product`モデル、子モデルとして`product_image`モデルがあります。
`product`を作成した時は必ず一つ以上の`product_image`のレコードがあることが条件

以下のようなモデルの記述です。

“`ruby
class Product < ApplicationRecord has_many :product_images, dependent: :destroy accepts_nested_attributes_for :product_images, allow_destroy: true validates_associated :product_images validates :product_images, presence: true end ``` ```ruby class ProductImage < ApplicationRecord mount_upload

元記事を表示

AWS CLIで出力したJSONをソートして順序のゆらぎを吸収したメモ

AWSの環境構築内容を履歴管理したくて、AWS CLIで出力したJSONをバージョン管理ツールにコミットして差分確認することにしたのですが、AWS CLIで出力されるJSONの配列などの順序が毎回必ずしも同じではなく、変更が無いのにDiffが出ることがありました。
そこで、JSONをソート出来ればと思ったのですが、いろいろ検索してもJSONを良い感じにソートできるLinuxコマンドが見つからなく、JSONをソートするRubyをチャカっと書いて、その場しのぎをしたのでメモ。
JSONの要素のキーと値の両方を文字列として接続して、その文字列でソートして、同じ内容のJSONであれば表記の順序がまちまちでも同じ出力結果になるように出来たと思います。
もっと良い方法など気づいた事がありましたらコメント頂けると幸いです。

“`ruby:sort_json.rb
#!<パス>/ruby
# -*- coding: utf-8 -*-

require ‘json’

def sortHash(h)
str = ”
new_hash = Hash.new
h.sort.to_h.ea

元記事を表示

OTHERカテゴリの最新記事