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

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

ローカルでスクレイピングを行い、S3を経由してHerokuのDBを定期更新する方法

本記事は[RUNTEQアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/runteq) 23日目の記事となります。
# はじめに
今回の内容はスクレイピングで外部サイトの情報を取得して、定期的にHerokuのDBを更新する時に必要になるお話です。

Seleniumで動的なサイトをスクレイピングする際に
「ローカルなら動くけど、Herokuだと動かない・・・」

そんな場合の次善策として本記事の手法を活用いただければと思います。

※スクレイピング取得先の利用規約は確認済みで、2秒以上の`sleep`でサイトに過度な負荷がかからないようにしています。

# 開発環境
+ ruby 2.6.6
+ Rails 5.2.6
+ gem `whenever`、`selenium-webdriver`、`aws-sdk-s3`
+ Herokuデプロイ済み

# この手法を採用するに至った背景
#### やりたかったこと
・縦スクロールしないと全ての要素が表示されないサイト(SNSなど)をSeleniumでスクレイピングする
・`ra

元記事を表示

deviseの複数モデル使用でauthenticate_user!を使用したい

### 事象

オリジナルアプリを作成していて、アカウアントを分けるためにdeviseの複数モデルを使用している。
authenticate_user!を使用してログインしていない場合はログインページに遷移させる記述を
したかったが、複数モデルを使用しているためどちらかがログインしている場合でも片方の記述が
適用されてしまう。

“`application_controller.rb
before_action :authenticate_trainer!
before_action :authenticate_cliant!
“`

### 解決方法

“`posts_controller.rb
before_action :redirect_root, only: [:edit]

private

def redirect_root
redirect_to root_path unless cliant_signed_in? or trainer_signed_in?
end
“`
と言う記述に変更する。
ログインページに飛ばすような記述だと、複数モデルのためどちらの

元記事を表示

Rubyのattr_accessorとは何か

## 概要
Rubyでよく使用されるattr_accessorについてその必要性や使用方法などを備忘録として記載していきます。

## attr_accessorとは何か
結論から言うと`attr_accessor`(読み方: アトリビュートアクセサー)とは、
外部からクラス内の__変数を参照するためのゲッターメソッド__とその__変数を変更するためのセッターメソッド__を定義するものです。
ゲッターメソッドとセッターメソッドについては後ほど実際の例を記載します。

– 下記のようなUserクラスが定義されていたとします。

“`ruby
class User
def initialize(name, age)
@name = name
@age = age
end
end
“`

– 外部から直接変数を参照した場合

“`ruby
# Userインスタンスを作成
user = User.new(‘鈴木’, 33)
# 下記のように外部から直接参照しようとするとエラーになる
puts user.name
# もしくは
puts user.age
“`

元記事を表示

必見!コードレビューするなら絶対に知っておきたい5つのコツと20+αの観点

この記事は[モチベーションクラウドシリーズアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mcs)の5日目の記事です。

こんにちは。モチベーションクラウドシリーズのテックリードをしている江上です。
現在弊社では、50名ほどのエンジニアが日々コードを書き、レビューをしています。僕自身もテックリードとして多くのコードレビューを行ってきました。
当然、コードレビューはエンジニアの大事な仕事だとは思うのですが、**『思ったより時間がかかる』****『何をみたらいいかわからない』**というのは誰しもが悩むポイントではないでしょうか?
そこで、この記事では、多くのコードレビューをする上で気づいた僕なりの**コードレビューのコツ**を記していきたいと思います。
効率的・効果的にコードレビューをすることで、コードを書く時間が増えるだけでなく、レビュー観点を知ることでコードの精度向上にも貢献できれば幸いです。

## いいコードレビューとは
[wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B

元記事を表示

永久保存版!エンジニア向け情報収集サイトをまとめてみた【定期更新】

##この記事はなに?
普段、出勤時や仕事中に読んでいるエンジニア向けのサイトをまとめてみました。
※ この記事は定期的に更新する予定です。

## RSSリーダー
RSSリーダーとは、登録したWebサイトの情報を自動的に取得し、表示するツールです。
これから紹介する記事を毎日チェックするうえで便利です。ぜひ活用しましょう。

https://feedly.com

https://www.inoreader.com/language/japanese

ちなみに…
国内外の開発に関する大量の情報を独自のアルゴリズムで整理して配信してくれるサービスもあります。

https://techfeed.io/categories/all

## 知識共有サイトのトレンド
Qiitaなどのエンジニア向け知見共有サービスです。
トレンド入りした記事をウォッチするのがおすすめです。

https://qiita.com/Qiita/items/b5c1550c969776b65b9b

https://qiita.com/Qiita/items/616e8f6d4f69bd582ab5

htt

元記事を表示

Rails7とhtmでReactしてみる

## Rails7襲来

Rails7がリリースされたということで、久々にTypeScriptから戻ってみたわけですが、どうやらフロントエンドに大きな変更が加わったらしく、色々調べてみました。

Rails7のフロントエンドのデフォルトはimportmapsという仕組みになるらしく、それは中々良さげな仕組みなのですが、説明する記事は多いので、この記事では触れません。

私の気を引いたのはこの動画でした。
なんと、Rails+importmapsでReactできるというのです。

ぱっと見かなり気持ち悪いのですが、食わず嫌いもなんなので、一度触ってみることにしました。

## rails new

とりあえずごく普通の`rails new`。
Rubyのバージョンは3.0.3。

## 適当なrootページを用意

“`bash
./bin/rails generate controller home index
“`

“`rb:routes.rb
Rails.application.rou

元記事を表示

RailsのActiveRecordのcount、length、sizeメソッドの違い

# はじめに
いよいよダットのターンです!たまにはRailsについて書かずHTMLかJavascriptばかりの記事を投稿したので今回はRailsのメソッドについて説明させていただきます。:pray:
開発者としてはこれらのメソッドを触ったことがあるはずですね。風通はこの三つの中に勝手に選んでどっちでも使って無事で計算されるので大丈夫と思いましたが、実はそうでしょうか?実際は場合によって返った結果も変わって実行する時間も異なる可能性があります。さっそくですが、始めましょう!

# 概要
この記事はこれらのメソッドがRubyに使われる時を気にしないでActiveRecordに使用する時だけ中心してください。結局、アソシエーションの中に幾つのレコードがあるか教えてくれますが、内部の処理がちょっと違います。
例えば、このモーデルとリレーションがあります。

“`ruby:app/models/post.rb
class Post
has_many :comments, dependent: :destroy
end

“`

“`ruby:app/models/comment.rb

元記事を表示

他業種からプログラミング講座に挑戦してみて見えたこと(課題)

#はじめに
7月から県のIT人材育成講座(プログラミング)を受講して見えた自身の課題について記事にしてみようと思います。
仕事を継続したまま、パソコンスキル0で全くの他業種から挑戦して何が大変だったか、何が見えたか、何が見えなかったのか・・・ご助言もいただけると嬉しいです。
また初めて記事を書くので足らない部分もあると思いますがご了承ください。

#受講中に出会った壁
・パソコン操作がわからない(Macの使い方がわからない)
・環境構築・・・なんのことかわからず言われたままに操作
・時間の確保(仕事と学習のバランスが難しい)
・**分からないことが分からない**。これが一番辛かったです。

#受講中に出会った壁の乗り越え方
・習うより慣れろ。とにかく触りまくる。初歩の初歩ですがブラインドタッチの練習も行う。
・分からないことは割り切って先に進む勇気を持つ。
・時間はあるのではなく作るもの。・・・でも睡眠時間は削らないよう工夫。
・調べる調べる調べる。とりあえず調べることで乗り越えられたことも多々。

#乗り越えたと思って実はできていなかったこと(見えていなかった部分)
・調べることで、

元記事を表示

has_one関連付けのbuild_associationメソッドは暗黙的にレコードを削除する

# 環境

– Rails 7.0.0
– Ruby 2.7.5
– MySQL 5.7

# 前提

– user.rb

“`ruby
class User < ApplicationRecord has_one :item, dependent: :destroy end ``` - item.rb ```ruby class Item < ApplicationRecord belongs_to :user end ``` # 解説 ActiveRecordでhas_one関連付けを利用すると、以下のメソッドが追加される。 - `build_association(attributes = {})` このメソッドはオブジェクトを作成するだけでレコードを保存・更新・削除しないように見えるが、特定の状況ではレコードが削除される。 ## 準備 userとそれに紐づくitemを作成する。 ```ruby $ irb(main):001:0> user = User.create!
TRANSACTION (0.3ms) BEGIN
User Cr

元記事を表示

【Ruby】複数の配列を同時にループさせたいときはzipメソッドを使う

##zipメソッド
複数の配列を同時にループされられる。

“`ruby
# 各配列の要素がインデックス0から取り出されて配列になる
array1 = [1, 2, 3]
array2 = [4, 5, 6]

p array1.zip(array2)
# => [[1, 4], [2, 5], [3, 6]]
“`

“`ruby
@articles = [‘article1’, ‘article2’, ‘article3’]
@authors = [‘kato’, ‘yamada’, ‘suzuki’]

@articles.zip(@authors).each do |article, author|
puts article
puts author
end

# => [[“article1”, “kato”], [“article2”, “yamada”], [“article3”, “suzuki”]]
“`

https://docs.ruby-lang.org/ja/latest/method/Array/i/zip.html

元記事を表示

理解して使うsidekiq-worker-killer

# 1. 概要
sidekiqプロセスのメモリ使用率が元に戻らない悩みを解消するためのイチ手段として、
**gem「[sidekiq-worker-killer](https://github.com/klaxit/sidekiq-worker-killer)」を使う**
がある。

残念ながら、上記GitHubのReadmeのみでは、その詳細な挙動を知ることは難しい。
そこで本記事では、sidekiq-worker-killerのソースコード(ver.1.0.0)、およびその他関連情報を調査して理解した、sidekiq-worker-killerの設定項目・挙動について全体的にまとめた。

本記事を読むことで、以下がわかると思う。

– [sidekiq-worker-killerの設定の意味・設定方法](https://qiita.com/drafts/d0611bad1649165c3663/edit#2-sidekiq-worker-killer%E3%81%AE%E8%A8%AD%E5%AE%9A)
– [sidekiq-worker-killerの処理開始タイミング](

元記事を表示

【多分暫定対応】M1 macのDocker上のRails 7でTailwind CSS 3を使う

Rails 7では、`–css tailwind`オプションをつけると[tailwindcss-rails](https://github.com/rails/tailwindcss-rails)を通じて、Tailwind CSS 3が使えるようになります。

しかし、[ややこしい経緯]()によりARM Linuxの上では使えないので、npmからTailwind CSS 3をインストールして使う必要があります。

まずは、`npm install tailwindcss`をしてインストールします。

そして`Rakefile`の最後に下記のように書き加えてください。

“`
# use Tailwind CSS 3 on npm
original_verbose = $VERBOSE
$VERBOSE = nil # suppress warnings
TAILWIND_COMPILE_COMMAND = “#{Pathname.new(__dir__).to_s}/node_modules/.bin/tailwindcss -i #{Rails.root.join(“app/as

元記事を表示

英語が苦手なエンジニアが、克服するためにやったこと

# 自己紹介
株式会社じげんの山本です。
賃貸情報サービス「賃貸スモッカ」をはじめとした不動産サービスを展開する住まいDiv.でサーバーサイドエンジニアを担当しています。
# 英語への苦手意識
エンジニアの皆さんは、言語や、フレームワークのドキュメントを英語で読んだり、GitHub の**全て英語**で記載された議論を読むことに苦手意識はあるでしょうか?
僕は以前まで苦手意識がありました。これを読んでいるみなさんも、もしかしたら多かれ少なかれあるのではないでしょうか?
普通は第二言語で技術を勉強するなんて辛いと思います。「ただでさえ技術がわからなくてググっているわけで、なんでさらに苦労をしないといけないんだ」と思う方もいるでしょう。ただそれでも「英語で技術について読めるようになった方が得ですよ!」という話をします。
「なんで英語で読むと良いのか?」「どうやったら読めるようになるのか?」ということについて書きます。

# なんで英語で読むと良いの?
この質問には①量と、②質という方向から回答したいと思います。

## ①量
単純な計算で、インターネットにある言語別の情報量を考えてみましょ

元記事を表示

JavaScriptにおける、同期・非同期通信の違い

# 同期・非同期通信の違い
**・3行で要約します**

“`
同期通信では、受け取ったHTMLを表示させるため、ブラウザではページ全体を再読み込みします。
Ajaxを用いた非同期通信のレスポンスでは、JSON形式のデータそのものを返しています。
データそのものを受け取って、ページの一部分のみを更新するため、ブラウザでページ全体を再読み込みしなくてよい
“`

## レスポンスで返される内容が違う

同期通信のレスポンスでは、ビューファイル(index.html.erb)をもとに生成されたHTMLを返していました。
受け取ったHTMLを表示させるため、ブラウザではページ全体を再読み込みします。

非同期通信のレスポンスでは、JSON形式のデータ(ページの一部分)を返しています。

## 操作性が違う
非同期通信を実装することでよりよい応答性、操作性を実現できる
データの読み込みなどの待ち時間の短縮

元記事を表示

【Rails】references型について

##references型とは
references型は新しく作成するテーブルのカラムに、作成済みのテーブルを指定する場合に使う。
>既存のテーブルを参照するので、reference(参照という意味)。

##references使用法
referencesは“rails g model“で、モデルとマイグレーションファイルを生成する時のカラムの型を指定するときに使う。“モデル名(小文字):references“の形で指定。

“`
コマンド例: (userテーブルと紐付けたい、postテーブルを作成)
rails g model post name:string body:string user:references
“`

上記のコマンドを実行すると、
**①** reference型を指定したカラム名は テーブル名_id となる。
(user:reference であれば、 user_id というカラムが生成される)

**②** referencesを指定したことで、生成されたモデルファイルに“belongs_to :user“が追加される。

“`
clas

元記事を表示

【Ruby, Rails】複数の時間から平均を算出する

![スクリーンショット 2021-12-22 13.33.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246920/ffa7c711-43ac-4db7-cf0a-72ca47ad5705.png)
# はじめに
現在、Ruby on Railsにて睡眠を記録するアプリを作成しています。睡眠の平均時間を表示しようとしたら、一筋縄ではいかず苦労しました。対策を備忘録として残そうと思います。

## 開発環境
Mac OS Big Sur 11.6
VSCode
Ruby 3.0.2p107
Rails 6.1.4.1
MySQL 8.0.27 for macos11.6 on arm64 (Homebrew)

## データ
DB(MySQL)ではSleepLogsテーブルを作成し、以下のデータを保存しています。

sleep_atカラムやwake_atカラムは、データの表示や睡眠時間の計算を行うため、datetime型で保存しています。

|項目名|値の例(値の型)|説明|
|:—–|:

元記事を表示

【Rails】タイムゾーンを日本時間に変更する

##時間を変更する意味
RailsのデフォルトタイムゾーンはUTC(協定時)となっているため、“created_atメソッド“や“updated_atメソッド“を使って時間を表示させてみると日本時間から9時間差の表記になってしまう。この差分を埋めるため、時間設定をする必要がある。

##手順
config/application.rbファイルに“config.time_zone = ‘Tokyo’“を記載。

“`
class Application < Rails::Application config.time_zone = 'Tokyo' end ``` 上記の設定が完了したら、一度アプリケーションを落とし再起動すると日本時間での表記になる。 ただし、このままだと表記されると ``Tue, 30 Jul 2019 00:12:19 +0000``のようになり、少し見にくくなってしまう。 ##読みやすい日時フォーマットにする ※ネットで検索すると以下のようにstrftimeメソッドを使って検索する方法がよく出てくるが、他にも日時を表示するViewがあると、

元記事を表示

Dotenv を導入したのに環境変数が読めない

rake restart

元記事を表示

【Rails】seeds.rbファイルとは

##seedsファイルとは
初期データを生成してくれるファイルのことで、簡単にテストデータを作ったりできる。

##記入方法
“`
#通常の場合
User.create(name: “Taro”)
User.create(name: “Hanako”)

#配列の場合
users = User.create([{name: “Taro”}, {name: “Hanako”}])

#大量のテストデータの場合(この場合は100回繰り返す)
100.times do |n|
User.create(title: “test{n}人目”, content:”test!#{n}回目”)
end
“`
内容を記入し終わったら、“rails db:seed“のコマンドを実行。

##Faker
このFakerを使うと、実在しそうなデータを生成してくれるgemがあるのでその手順や記入法も記載しておく。

**Gemfile**

“`
gem ‘faker’

↑この文を追加後、bundle installを入力。
“`

**記入法**

“`
10.times do
Use

元記事を表示

未経験初心者がWEB家計簿を作ってみた【Rails / Docker / Heroku / CircleCI】

## 初めに
こんにちは。
当記事は独学・未経験者がポートフォリオを兼ねてWEBアプリを作った、ご紹介させて頂きたいと思います。

昨今、未経験者が作成したポートフォリオ作成記事も多く存在するので、何番煎じかにはなってしまいますが、
この記事も同じ初学者の方の参考になればうれしく思います

## 概要
共同口座専用の家計簿アプリ「キョウドウコウザ」
 http://www.kyodokoza.com/

シンプルかつ見やすさにこだわった「共同口座(共用口座・共同財布)向けの家計簿アプリ」です。

img1.png img2.png

  • OTHERカテゴリの最新記事