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

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

エンジニア向け生産性Tips【定期更新】

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

# この記事はなに?
一日中PCと共に過ごすエンジニアにとって、Tipsほど知りたいことはないと思います。
この記事では、社内エンジニアに「生産性をあげるTips」をテーマにアンケート調査したものをまとめました。
特に新人エンジニアの方や手っ取り早くTipsを知りたい方におすすめの記事です。
まとめたアンケートからつらつら書いてるので、順番にまとまりはありません。あらかじめご了承くださいmm

※ この記事は定期的に更新されます。

# Chrome Tips
皆さんよく使うGoogle Chromeに関するTipsです。

#### ショートカット
まずは王道。ショートカットから!

https://support.google.com/chrome/answer/157179?hl=ja&co=GENIE.Platform%3DDesktop

#### Chrome Tab Group
こんなタブになるこ

元記事を表示

ActiveRecordのNullリレーションが便利そう

# はじめに

Railsガイドを読み返していたら便利そうなものを見つけたので備忘録代わりに残しておきます。

# Nullリレーション

> noneメソッドは、チェーン (chain) 可能なリレーションを返します (レコードは返しません)。このメソッドから返されたリレーションにどのような条件をチェーンさせても、常に空のリレーションが生成されます。これは、メソッドまたはスコープへのチェーン可能な応答が必要で、しかも結果を一切返したくない場合に便利です。

https://railsguides.jp/active_record_querying.html#null%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

“`ruby
irb(main):001:0> User.none
=> []
irb(main):002:0> User.none.class
=> User::ActiveRecord_Relation
“`

こんな感じで、空のリレーション(Nullリレーション)を返してくれる。

“`ruby
ir

元記事を表示

chartkickのグラフが表示されない

# 環境

Docker
mysql 8.0
rails6.1.4
ruby3.0.2
intel版Mac使用

# 考えられる原因

view側(html.erb)のコードの記述の問題でうまくデータを抽出できてないかとも思ったが、
<%= pie_chart [['赤', 50], ['青', 50]]%>
と公式のお試しコードで記述してもグラフ出ないので、コーディングの部分ではなさそう。

chromeの検証でconsoleを調べた結果、エラーを発見。
“`
application.js:1 Uncaught Error: Cannot find module ‘chartkick/chart.js’
at webpackMissingModule (application.js:1)
at Module../app/javascript/packs/application.js (application.js:1)
“`

とりあえず、JSでエラーが起きてるのは間違いないみたい。
エラー文にはchartkickが見つかりません。と書いてある。

# 解決策

元記事を表示

Rust で API を作成して Rails の便利さを改めて実感した話

# 目次

– [はじめに](#はじめに)
– [想定読者](#想定読者)
– [作成した API について](#作成した-api-について)
– [概要](#概要)
– [開発環境](#開発環境)
– [フォルダー構成](#フォルダー構成)
– [本題](#本題)
– [Rocket & diesel と Rails それぞれの実装に対する比較](#rocketdiesel-と-rails-それぞれの実装に対する比較)
– [目的 1. API として使用できるために、Json や Status を設定できるようにする](#目的-1-api-として使用できるためにjson-や-status-を設定できるようにする)
– [目的 2. User 作成時に、 Validation からエラーメッセージを取得し、Json で返却する](#目的-2-user-作成時に-validation-からエラーメッセージを取得しjson-で返却する)
– [目的 3. Request Header の Token を用いて、ユーザー認証を

元記事を表示

IPアドレスと対峙することになった2年目エンジニアの記録

# はじめに
初めまして、私は現在リンクアンドモチベーションにてバックエンドエンジニアをしている中﨑です。
先日、私はIPアドレス制限機能の実装を任されましたが、お恥ずかしながらIPアドレスについてほとんど知りませんでした、、、
そんな私がリリース完了するまでに学んだことを記載していきたいなと思っています。
私と同じように「IPアドレスについてあんまり分かっていないな」という方や、「IPアドレス制限の実装をするよ」という方の参考になれば幸いです。

# 目次
– [基本知識](#基本知識)
– [IPアドレスに関わるライブラリ](#ipアドレスに関わるライブラリ)
– [IPアドレス制限を実装した時のこと](#ipアドレス制限を実装した時のこと)
– [前提](#前提)
– [IPアドレスの入力チェック(バリデーション)](#ipアドレスの入力チェックバリデーション)
– [IP制限検証時の性能について](#ip制限検証時の性能について)
– [ドキュメント用に記載するIPアドレスについて](#ドキュメント用に記載するipアドレスについて)

#基本知識
I

元記事を表示

【Rails】環境変数使うならHeroku側にも設定しないと当然エラーが出る件

# はじめに

転職のためプログラミングを勉強し始めて約4ヶ月が経ちました。
現在、Ruby on Railsを使用して音声の感情を判定するポートフォリオを製作しています。
API利用で音声をpostしてレスポンスをもらうコードをHerokuに反映させたときのエラーについて記事に残したいと思います。

# 結論先に
ローカルでAPIキーを環境変数に設定した場合、
Heroku側にも設定しなければならない

# エラーまでの経緯
今回使用したいAPIは一日の利用回数限度が設定されていた。
ポートフォリオで使うにはもう少し上限を上げたいと思い、開発企業側にコンタクトをとってみる。
幸い上限枠の拡張を快く了承してくれ、専用のAPIキーを発行してくれた。

このAPIキーをGitに晒すのは良くないので、
dotenvを使用して環境変数とすることに。

dotenvの公式資料はこちら↓
https://github.com/bkeepers/dotenv

.envファイルにAPIキーを定義して

“`:.env
API_KEY = ‘***********’
“`

R

元記事を表示

【Docker】Rails6 API + React(TypeScript)のSPA開発環境を構築する

# はじめに
自分用のメモとして記録しておきます。

# 1. ディレクトリ構成の確認と必要ファイルの用意
以下のディレクトリ構成になるようにファイルを用意する。
![スクリーンショット 2021-12-19 1.02.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646903/169bddcb-4ec9-4bdd-fe69-ac63f2d773bf.png)

“`bash
$ 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
“`

# 2. docker-compose.ymlの用意

“`yml:docker-compose.yml
version

元記事を表示

【個人開発】Gestee : タスクとスケジュールとドキュメントをまとめて管理できるアプリ

**スケジュール**と**タスク**と**Wiki(ドキュメント)**をまとめて1つの**プロジェクト**として管理ができるアプリ**Gestee(ジェスティー)**を作りました。

GesteeLogo

# アプリを作ったきっかけ

私は学生なのですが、さまざまなことを同時にやっています。

– 研究
– インターン
– 個人開発 etc

いろいろな開発をやっていると、所属先によってgoogleアカウントを切り替えたりしなけらばなりません。
また、研究室ではドキュメント管理にesaを使っているけど、インターン先ではkibelaを使っているなど、別々に管理せざるを得なく、いちいちChromeのタブを増やしたりしなければなりません。

これらが嫌で、**スケジュール**と**タスク**と**Wiki(ドキ

元記事を表示

yarn upgrade-interactive –latestで依存を一気に解決。

“`
rails s

“`

を実行したら

npm rebuild node-sass
npm ERR! code 1
npm ERR! path /Users/soichirohara/coffee_passport/node_modules/node-sass
npm ERR! command failed
npm ERR! command sh -c node scripts/build.js
npm ERR! Building: /usr/local/bin/node /Users/soichirohara/coffee_passport/node_modules/node-gyp/bin/node-gyp.js rebuild –verbose –libsass_ext= –libsass_cflags= –libsass_ldflags= –libsass_library=
npm ERR! gyp info it worked if it ends with ok

npm ERR! gyp: No Xcode or CLT version dete

元記事を表示

docker-compose up 時にerror checking context: ‘no permission to read from ‘/Users/config/master.key”.

“`
docker-compose up
“`

を実行したら

“`
soichirohara@SoichironoMacBook-Pro coffee_passport % docker-compose up
Creating network “coffee_passport_default” with the default driver
Creating volume “coffee_passport_mysql-data” with local driver
Creating volume “coffee_passport_vendor_bundle” with local driver
Building web
error checking context: ‘no permission to read from ‘/Users/soichirohara/coffee_passport/config/master.key”.
“`

とエラーになった・

クローンしたリポジトリにマスターキーがなかったので
マスターキーを作り直したからこのエラーが発生したと思

元記事を表示

【Rails】ハッシュタグ機能の実装

#概要
備忘録としてインスタやTwitterでよく見かける#ハッシュタグの実装方法を投稿します

#参照
以下の記事を参考にしました。
ほとんど同じですが、上手く行かなかったところを自分なりに組み合わせました。
https://qiita.com/Naoki1126/items/4ea584a4c149d3ad5472
https://qiita.com/MitsuTurtle/items/614b154641ab4e4b56ba
https://glodia.jp/blog/3936/

#完成図
![hashtag_video2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287171/6e4391e2-9766-8462-470b-f006065e6f9c.gif)

#アプリの作成
“`ruby:ターミナル
$cd desktop
$rails new hashtag_sample
$cd hashtag_sample
“`
#DBの作成
DB(

元記事を表示

【Rails】form_withについて

##form_withとは
railsで情報を送信するためのヘルパーメソッド。 form_withを使うことにより、簡単に入力フォームに必要なHTMLを作成することができる。

##form_withの使い方

“`
<%= form_with(モデル or URL(パス),[スコープ],[オプション]) do |f| %>
フォームの中身
<% end %>
“`
“モデル“
@userや@postなどモデルオブジェクトを入れる場合に使う。

“URL“
URLを指定する場合に使う。

“スコープ“
formのフィールド名にスコープを追加する場合に使う。

“オプション“
送信先のurlやタグの設定(クラスをつけたり、MIMEタイプを指定したり)

**モデルとurlの使い分け**
・モデル: データベースに保存する時(登録フォームなど)
・URL: 入力された情報をデータベースに保存しない時(ログインフォームなど)

##form_withメソッドの便利な機能
form_withには、モデル(:model)で記述した場合の便利な機能がある。

引数として渡さ

元記事を表示

N+1問題

##N+1問題とは
N + 1問題とは、必要以上にSQLが発行されてしまい、動作が悪くなってしまう問題のこと。
必要以上にSQLが発行されると時間が掛かり、これが数回なら特に動作に影響はないが、何万回と回数が増えると動作が重くなってしまう。

##N+1問題を実際に見てみる
※ここではテーブルのアソシエーションについての説明は省く。

ネコの飼い主のテーブルがownersテーブル、ネコの名前を扱うテーブルがcatsテーブルの2つのテーブルを例にN +1 問題を確認していく。

「全ての飼い主の猫の一覧」をviewで表示したい場合、controller側で全ての飼い主をallメソッドで取得し、view側で飼い主の持つcatsをアソシエーションによって下記の様に記述。

“`
# controller
@owners = Owner.all

# view
@owners.each do |owner|
owner.cats.each do |cat|
cat.name
end
end

結果:
# controller
SELECT `owners`.* FROM `o

元記事を表示

未経験者が実務案件に挑戦し、エンジニアとしての心構えを学ぶ

# はじめに
エンジニアを目指した未経験者が、実務案件に挑戦し、もがき奮闘しながらもやり抜いた結果、エンジニアとしての心構えを身につけることができた話をしていきます。

実務案件は3セクションに分かれており、課題、考え、行ったことをそれぞれのセクションでお伝えできればと思います。長いですがお付き合いくださいませ。

# 筆者について
工場生産ラインの管理業務に携わりながら、エンジニアへの転向を目指している29歳です。
管理業務を効率化するためExcel VBAを独学で始め、プログラミングにのめり込んでいきました。

21年6月より本気でエンジニアを目指して学習を始め、縁あって10月より実務案件に参画させて頂くことになりました。

– 実務案件までに学習してきた内容
– CS => Linux => Progate => Railsチュートリアル => Docker => AWS

# 実務案件って…?
現役エンジニアであるY氏経由で、とあるクライアントから医院紹介サイト(Rails)のSEOを改善させたいという案件を頂きました。
本案件にはY氏の伴走付きで、私含め3名の未経験者が

元記事を表示

現役ミュージシャンが実務未経験から実務案件に挑戦。コードを書く事だけがエンジニアの仕事ではないと気付かされる!

# 自己紹介

初めまして!現在音楽講師をしているhirokiと申します。
未経験からエンジニアへの転職を目指し日々学習をしております。
楽器歴はもう17年と日々演奏技術を磨きながら最新の音楽情報をキャッチアップしております。

そんな私がプログラミングを始めたのは、別のミュージシャンの方が自分のホームページを持っていたので「僕も作ってみたいな」という気持ちからでした。
そこからプログラミングについて調べみるとそのページにはログイン機能などがあり、これはなんだと?と思い調べてみました。

調べていくと、Webアプリケーションが作れ、雛形が揃っていて尚且つ学びやすいというフレームワークがあるという記事を見つけました。そこで出会ったのがRuby on Railsでした。まずは始めないと正解・不正解も分からないので、何事も触れてみようと思い学習をスタートしました。
独学で勉強し少しずつ理解が深まるごとにどんどんプログラミングにハマっていきました。

ある出来事で転職したいと思うようになりました。それは、目の前でWebサービスを使っている生徒さんの困っている姿でした。
生徒さんから『バンドを組

元記事を表示

mysql2をインストールする際のエラー解決!

AWSにデプロイするに伴い、DBをSQLite3からmysql2へ変更することにしました。
まずgemfileをSQLite3からmysql2へ書き換えて`bundle install`してみると下記のエラーが起こってしまいました!

“`
current directory: /Users/fujiwaratakumi/Desktop/WorkShare/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/ext/mysql2
/Users/fujiwaratakumi/.rbenv/versions/2.7.5/bin/ruby -I /Users/fujiwaratakumi/.rbenv/versions/2.7.5/lib/ruby/site_ruby/2.7.0 -r ./siteconf20211223-8259-uwu9op.rb extconf.rb
–with-ldflags\=-L/usr/local/opt/openssl/lib
checking for rb_absint_size()… yes
checking

元記事を表示

マイクロサービス化に伴うAPIのGo移行をRails側で対応してみた

この記事は、2021年の[アトラエアドベントカレンダー](https://qiita.com/advent-calendar/2021/atrae)22日目の記事です。
昨日の記事は、@kinoshitatraeさんによる[「モードレスUIデザイン ~ ユーザーをクリエイティブにする」](https://note.com/pitagorasukippa/n/nfcb654923e1c)でした。
***
こんにちは!People Techカンパニー、アトラエに22卒として入社予定で、内定者インターンをしている家令(かれい)と申します。Wevoxでバックエンドエンジニアをやっています。

今回は内定者インターンを始めてから多くの時間を費やしてきた「Wevoxのマイクロサービス化に伴う、APIのGo移行」について紹介したいと思います。
## Wevoxのマイクロサービス化について
Wevoxのアーキテクチャは現在、モノリシックからマイクロサービスへと移行している真っ只中にあります。モノリシックの時代には、Ruby on Railsが多くの責務を担っていたのですが、以下の方針でマイクロサービス

元記事を表示

Sorceryでよく使うメソッド

##current_user
現在ログイン中のuserを返す。コントローラ、ビューで利用可能。

##require_login
ログインをしていないユーザーをアクション単位で弾く。
アクセスしようとしたURLをセッションに格納し、not_authenticatedを実行するメソッド。“before_action“で指定する。
アクションごとに変える場合は、“only: :action“を付ける。

“`
#controller
before_action :require_login
“`

##not_authenticated
require_login内で、このメソッドが実行される。
“デフォルトではredirect_to root_path(自動的にルートに飛ばされる)と定義されている“が、カスタマイズしたい場合はapplication_controllerで上書きをする。

“`
class ApplicationController < ActionController::Base protected def not_authenticated

元記事を表示

ローカルでスクレイピングを行い、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
“`
と言う記述に変更する。
ログインページに飛ばすような記述だと、複数モデルのためどちらの

元記事を表示

OTHERカテゴリの最新記事