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

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

【Rails】フォロー/フォロワー機能のアソシエーションについて【初学者の疑問点を詳しめに解説】

## はじめに
 本記事は、Railsの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _フォロー/フォロワー機能のアソシエーションについて_
 
 です。 

 現在、Twitterクローンを作成しており、フォロー/フォロワー機能の実装の際に上記について疑問を抱きました。

## 疑問点についての解説
###いいね機能実装時との比較
おそらく、多くの方がフォロー/フォロワー機能実装の前にいいね機能の実装に取り組んでいることと思いますので、いいね機能と比較して確認していきます。
#### いいね機能のアソシエーションの記述
##### Favoriteモデルの記述

“`ruby:app/models/favorite.rb
class Favorite < ApplicationRecord belongs_to

元記事を表示

【LINE×Rails】Rails初学者も作れるLINE Botアプリケーション

# 概要
この記事では、先日リリースした[ReLINE【”猫さん”】](https://www.cat-reline.com/)で得た LINE Messaging API の知見を使って、`投稿に応じて返信するテキストを変化させるLINE Botアプリケーション`を作成します。

記事の内容に沿って実際に手を動かして取り組んでもらうと、今回私が作成したものと同じものができるので、お時間のある方はチャレンジしてもらえると嬉しいです!

【注意点】
この記事では上記のLINE Botアプリケーションを作成する流れを記載していきます。そのため技術的な話はほとんど出てきませんが、身近なLINEアプリを使ってプログラミングへの楽しさや作成する面白さなどを感じてもらえたら幸いです。

【今回挑戦する4ケース】
1.”おまじない”(`アブラカタブラ`、`チチンプイプイ`、`ヒラケゴマ` のいずれかテキスト)が投稿された場合
   => `It is Omajinai`と返す
2.`ruby`というテキストが投稿された場合
   => `Is it Programming language? O

元記事を表示

Git環境で独自のコマンドを登録する【zsh, bash】

## はじめに
Railsで開発するならbundle e rails (省略)とかめちゃくちゃ使用します。
私はgit pull origin feature/add-watch-modelとか当たりまえのようにタイピングしてました。

そして今更ですがaliasで独自コマンドを設定したので1人でも誰かの役にたてば良いな
と思って記事にしました。

## 参考記事
https://etalocohcetihw.com/blog/git_optimization/

https://qiita.com/reireias/items/d906ab086c3bc4c22147

## 環境
– shell: zsh

## 独自コマンド登録方法
とりあえず下記で登録できます。

“`terminal
alias g=’git’
“`
でもターミナルを閉じたり分割すると使用できなくなります
なのでシェルの設定ファイルに書き込みます

## シェルの設定ファイルへ書き込む
だいたいの人はbashかzshを使用していると思いますので下記のコマンドで設定ファイルを開きます

“`termin

元記事を表示

【Rails】目的地の日没時刻がわかるだけのシンプルなアプリを作った

##はじめに
タイトル通り、目的地の日没時刻がわかるだけのシンプルなアプリを作りました。
[シンプルマジックアワー](“https://simple-magichour.com/”)というアプリです。
開発の過程などを記していきます。

##アプリの説明
日付と都市を選択すると日没の時刻を表示します。
それだけだとあまりに味気なかったので、マジックアワーの時刻も付け足しました。
![スクリーンショット 2021-12-02 13.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1535961/1a05c464-4f75-cfa3-5ec6-d5df906cea44.png)

####なぜ作ろうと思ったか
一眼レフカメラで夕焼けの写真を撮るのが趣味なのですが、綺麗な夕焼けを撮るには日没の時間を知っておく必要があります。
日没の時間が分かるアプリはごまんとあるのですが、その多くは日没時刻以外の情報もたくさん表示されます。(日の出の時刻や太陽の位置など)
また、地点についても詳細な位置を取得するた

元記事を表示

Ruby biz Grand prix 2021のファイナリストに選ばれた

[Catallaxy Advent Calendar](https://qiita.com/advent-calendar/2021/catallaxy) 1日目を担当します、エンジニア1号です。

[Ruby biz Grand prix 2021(Ruby bizグランプリ2021)](https://rubybiz.jp/)へエントリーして、ファイナリストに選ばれましたので、今日はそのことに触れてみたいと思います。

## Catallaxyとは
金属加工プラットフォームを提供する2015年創業スタートアップになります。2018年に現在の業態にピボットしたのち、2021年3月にはシリーズAとして約4.1億円を調達しており、現在までに累計約8億円の資金調達をしております。従業員数26名のうち、エンジニア10名、デザイナー1名、エンジニアの業務委託・インターン数名のメンバー構成になっており(2021年9月応募時点)、約半数がプロダクトに関わる業務に携わっています。

## Ruby biz Grand prix
2015年からRuby bizグランプリ実行委員会が開催するRubyを活

元記事を表示

【オブジェクト指向】コンストラクタ

##コンストラクタとは
Rubyのようなオブジェクト指向のプログラミング言語で使われる機能の1つで、オブジェクトを生成した際に1度だけ実行される機能を指す名称。
initialize という名前のメソッドは自動的に private に設定される。

##initialize
– 「new」メソッドが実行された際に自動的に呼び出される

“`ruby
class Sample
def initialize
p ‘初期化処理’
end
end

s = Sample.new
“初期化処理”
=> #
“`

– インスタンスを生成するnewメソッドで引数を指定することで、その値をインスタンス変数に設定することが可能

“`ruby
class Sample
def initialize(name)
@name = name
end

def execute()
p @name + ‘ hello’
end
end

sample1 = Sample.new(‘ka

元記事を表示

preload, eager_load, includesについて

# はじめに
株式会社じげんでエンジニアをしているiLLviAです。

パフォーマンス低下につながる「N+1」問題。これを解消するメソッドとしてActiveRecordには`preload`, `eager_load`, `includes`が用意されています。
これらの各メソッドが「どのような挙動をするのか」「どのような場面で使い分けるのか」など理解せず雰囲気で`includes`を多用していたので、理解を深めるためにまとめてみました。

# 関連付け
`Article`は、中間テーブル`ArticleTag`を介して「Ruby」「JavaScript」「PHP」などの複数の`Tag`と紐づいています。
### **Model**

“`ruby
class Article < ApplicationRecord has_many: :article_tags has_many: :tags, through: :article_tags end class Tag < ApplicationRecord has_many: :article_tags has_

元記事を表示

自動車の品質管理からエンジニアになってみて

## はじめに
未経験からエンジニアに転職して、現在はフリーランスエンジニアとして活動しています。
エンジニアになった経緯などを書きますので、エンジニア転職を検討している方の参考になれば幸いです!

⬇️僕の経歴です

|年月|所属|
|—|—|
|2018/04~2020/04|自動車会社(新卒入社)|
|2019/05~2019/10|Progate, Railsチュートリアルで独学|
|2019/11~2020/02|ポテパンキャンプ|
|2020/04~2021/10|受託会社で正社員|
|2021/11~|自社開発会社でフリーランス|

## 1. 前職の内容
前職の自動車メーカーでは、海外の自動車のリコールなどを扱う品質管理の部門にいました。

品質管理といっても実際に、製品を扱ったり、図面を書いたりするわけではなく、
海外のお客様・研究所・部品メーカーの間に入って、スケジュールの調整を行う中間部門でした。

具体的には下記のような仕事の流れでした。

お客様から訴えがある
➡️ 過去に同じ問題がないかをデータで調べる
➡️ 同じ問題が多発していれば、研究所・工場や

元記事を表示

「ロジックをモデルに移す」よりシンプルなファットコントローラの解消法【個人開発で学んだこと】

# 記事を読むのにかかる時間
約10分

# 結論
コントローラの記述が膨れ上がってしまう、いわゆる**「ファットコントローラ」**について、
最もオーソドックスな解消法として挙げられる「ロジックをモデルに移す」よりシンプルなのは
**「テーブル設計を工夫し、そもそもコントローラに何も書かなくて良い状態を作る」**
ことだと思います。
今回、個人開発でその体験ができたので共有します。

# この記事から得られること
実装の前段階にあたる**テーブル設計**を工夫することで
コードをシンプルにする方法を一つ知ることができる。

# 必要なRailsの予備知識
・一般的なCRUDのアクション
・多対多の関連付け(`has_many :through`とか`belongs_to`)の概要
・enum

# 目次
[結論](#結論)
[開発したサービス](#開発したサービス)
[テーブル設計で工夫したこと](#テーブル設計で工夫したこと)
[詳しく](#詳しく)
[まとめ](#まとめ)
[最後に](#最後に)

# 開発したサービス

https://bachelor-derby4.herok

元記事を表示

【Rails】モデルとテーブルの関係について【初学者の疑問点を簡潔に】

## はじめに
 本記事は、Railsの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  ・モデルとテーブルの関係
 
 です。 

 現在、Twitterクローンを作成しており、フォロー/フォロワー機能の実装の際に上記について疑問を抱きました。
 
## 疑問点についての解説

#### モデルとテーブルの関係について
**`結論:テーブルとコントローラをモデルがつなぎ、モデルとテーブルの関連付けは、それぞれの名前によってRailsが自動的に行う。`**

 モデルとは
 モデルとは、コントローラとテーブルとの繋ぎ役です。コントローラから指示を受けてデータベースとの間で情報のやり取りを行います。簡単に表すと以下の通りです。  
  
     コントローラ ⇄ モデル ⇄ データーベース

元記事を表示

【IT業界未経験】テックキャンプからエンジニア職に就職するまでの記録

#はじめに
2021年3月から学習を始めて内定をもらうまでの記録をまとめました。
参考にして頂けれる所とこれは参考にならないなど反面教師にして頂ければ幸いです。

| 章 | 内容 |
|—|—|
|簡単な経歴|[自己紹介](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B)|
|学習から内定までの道のり|[時系列にまとめています](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E5%AD%A6%E7%BF%92%E3%81%8B%E3%82%89%E5%86%85%E5%AE%9A%E3%81%BE%E3%81%A7%E3%81%AE%E9%81%93%E3%81%AE%E3%82%8A)|
|転職活動内容|[実績と面接等について](https://qiita.com/N396184501/items/88ac98c8e83b47df6187#%E8%BB%A2%E8%81%

元記事を表示

【RSpec】JSONの値を確認するテスト

##環境
Ruby 3.0.2
Rails 6.1.4.1

##APIのリクエストテスト
gemを使わずにjsonが期待通りに取れているかのテストを書くとこうなる。

“`ruby
describe “GET /api/v1/fruits” do
subject { get ‘/api/v1/fruits’, headers: headers }
let!(:available_fruits1) { create(:fruit) }
let!(:available_fruits2) { create(:fruit) }
let!(:unavailable_fruits) { create(:fruit, :unavailable) }

it ‘旬の果物を返すこと’ do
subject
json = JSON.parse(response.body)
expect(response.status).to eq 200

# 果物が3つあり、そのうち旬の果物が2つ、旬じゃないのが1つ。jsonで取れるのは果物が2つ

元記事を表示

Gitサーバーが搭載された楽譜共有WEBサービスを作成した

# 楽譜共有WEBサービスを作成した

## 概要

「楽譜を共有する」サービスを作った。
既存サービスと異なる点

– 基本的にコードで楽譜を記述する
– Gitサーバーが搭載されているので、楽譜の間違いなどを修正することが容易
– アーティスト情報や曲情報を整理できるようになっている
– 例) 「凛として時雨」「TK from 凛として時雨」「Ling tosite Sigure」どれ…?
– 翻訳機能がついている

それを作るにあたって、困ったこと、工夫した点、使用した技術、などをまとめたいと思います。
※語彙力ないです
[alphaTab](https://github.com/CoderLine/alphaTab)様の恩恵が非常に大きいです

## 自己紹介

– 大学3年生
– 都内在住
– WEBエンジニア

はじめまして。私は主にWEB系の開発を行っています。
プログラミングは大学1年生の時にRailsTutorialに入門しました。
今は、RailsとReactをメインで開発を行っています。

## 今回使用した技術

### STAVE Editor

元記事を表示

細かいつまずいたことをメモしておく(11月編)

# はじめに

11月の個人的につまったところのメモになります。
Qiitaに記事にするほどでもないかなというものを自分用にまとめています。

今月は大した作業はなく問題は少なかったです。

# 問題

## 1. なぜか子モデルが作成されず、モデル名_idがないと言われた

“`
class_room.build_member(number: row[:number])
“`

rowはExcelのファイルをhash形式にした各行を表しています。
ここで、class_roomをsaveすると、member_idがないというSQLエラーが出ます。

原因は、row[:number]がinteger型で送られてくるのに対して、numberカラムのバリデーションで`string`になっていたことから`member`の作成ができずに、(エラーは起きるが)class_roomが作成されるため、参照するmemberがないので怒られていた。

“`
class_room.build_member(number: row[:number].to_s)
“`

とすることで解決した。

##

元記事を表示

レガシーシステムからの脱却

# 前書き
昨年に引き続き、今年もKITのアドカレの記事を書いていきます。
……他に話すべきこともないので早速初めましょうか。

# レガシーシステムの闇
私がアサインされたプロジェクトではRailsでWebアプリを開発していました。最初のリリースが行われたのは5年前だったため、古いプロジェクトではありませんでした。
また、実際にそのアプリが動いているサイトにアクセスしてみたりもしましたが、怪しい様子はありませんでした……あくまでユーザ側から見れば…。

## あるとき闇に気付く
環境構築をしていたとき、異変に気付きます。

* CIが数年前から失敗してるけど、設定ミスかな
* 今使ってるRubyが数年前からEOFになってる…
* 更新されないGemfile
* テストどこ…?
* slimファイルでごり押しされたレイアウト

ここから開発チームの戦いが始まりました。

### 1. CIが何年も前から失敗している
CIツールのバージョンが更新されていないのが原因でした。
イシューは立っていたものの、誰もその問題に対処していませんでした。

### 2. Rubyのバージョンが古い
R

元記事を表示

bundle installで失敗する

# 問題
– Rails Tutorial (5.1) 第1章 1.3.1
– `bundle install` しようとすると以下のようなエラーが出る

“`
Fetching gem metadata from https://rubygems.org/…………
You have requested:
spring = 2.0.2

The bundle currently has spring locked at 2.1.1.
Try running `bundle update spring`

If you are updating multiple gems in your Gemfile at once,
try passing them all to `bundle update`
“`

– 書いてあるとおりに `bundle update spring` をしてもまたエラー

“`
Fetching gem metadata from https://rubygems.org/…………
Resolving dependenc

元記事を表示

rbenvでglobalを使ってもバージョンが切り替わらない

# 原因
– ホームディレクトリに `.ruby-version` ファイルがあるため
– ホームディレクトリで `rbenv local` コマンドを使ったのが原因
– おそらくglobalよりもlocalが優先され、ホームディレクトリでlocalが設定されているので強制的に常にlocalが指定されている状況になっていた

# 解決法
– ホームディレクトリの `.ruby-version` フォルダを削除し、再びglobalで再設定する

“`zsh
$ cat ~/.ruby-version
$ rm ~/.ruby-version
$ rbenv global <バージョン>
“`

# 参考
– [【Ruby】rbenv global してもバージョンが変らない|鹿せんべいとエンジニア](https://shikasen-engineer.com/rbenv_global/)
– [[初期設定]なぜ「.ruby-version」を作成するのか? – Qiita](https://qiita.com/shimadama/items/74033b932800bb61b3f3)

元記事を表示

【初心者向け】Railsでのタスク定期実行方法

###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
・clockwork 2.0.4
・本番環境 Heroku
###■Railsでのタスク定期実行方法(開発環境)
####状況
Railsアプリケーション上でタスクを定期実行したい。
そして、Windows環境ではgem「whenever」は使用できないため、gem「clockwork」をインストールし目的を達成する。
####作業内容
1)gem「clockwork」をインストール

“`ruby:Gemfile
gem ‘clockwork’
“`

“`ruby:ターミナル
bundle install
“`

2)タスクファイルを作成
「config\clock.rb」のように、任意の階層・ファイルを作成する。

3)タスクファイルの内容を記載

“`ruby:config\clock.rb
require ‘clockwork’

require File.expand_path(‘../boot’, __FILE__)
require File.expand_pat

元記事を表示

【初心者向け】MechanizeでJavaScriptの箇所を読み取れない

###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
・Mechanize 2.8.2
###■MechanizeでJavaScriptの箇所を読み取れない
####状況
Railsアプリケーションでgem「Mechanize」を使用し、Webスクレイピングを行っている。
しかし、HTMLファイル内のJavaScriptの箇所だけ読み取れない(パースできない)。
####原因
MechanizeはJavaScript未対応
####対処1
MechanizeではなくSeleniumなどを使用

https://iwathi3.hatenablog.com/entry/web_scraping_Ruby_Selenium

####対処2
JavaScriptが行うはずの処理をRubyで置き換える。
ただし、そのためにはJavaScriptの内容を読み解く能力が必要。

https://www.ownway.info/Ruby/mechanize/against_javascript

####対処3
HTMLファイル内のscriptタグを削

元記事を表示

【Ruby on rails】 記事閲覧数を表示させる

ホームページ閲覧数を表示させる機能を追加

ruby 2.6.3p62
rails 5.2.6

# 1.新規実行内容

Gemfileに以下を追記

“`
gem ‘impressionist’, ‘~>1.6.1’
“`

railsバージョンとimpressionistバージョンによっては
エラーが発生するので注意

“`
bundle install
“`

“`
rails g impressionist
“`

impressionistテーブルを作ると以下が自動で作成されますが
使うのは1カラム(session_hash)である

“`create_impressions_table.rb
class CreateImpressionsTable < ActiveRecord::Migration[5.2] def self.up create_table :impressions, :force => true do |t|
t.string :impressionable_type
t.integer :impress

元記事を表示

OTHERカテゴリの最新記事