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

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

Firebase・GCP(BigQuery)を活用したリソースのPV数のカウントについて

ネイティブアプリ開発のプロジェクトで、自分のプロフィールが閲覧された回数などを記録して、ユーザーにそれを表示してあげると言う機構を作成しました。
その際に、Firebase、GCPを活用して作ったので、その記録を書きたいと思います!
主にバックエンド(Rails)の視点で書いていますが、基本は仕組みの解説なので、言語はそれほど関係ないかなと思います。

# 作った機構の全体像
まずは作った機構の全体像を載せておきます。
– アプリ側のコードにGAのタグを埋め込み
– ユーザーがイベントを踏むと発火しデータをGAへ送信
– GAで保存→定期的にGAからBigQueryにデータをエクスポート
– BigQueryでデータを永続化→BigQueryで保存データに対してSQLを実行してデータを加工して取得
– そのデータをアプリで表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/dd189027-056d-9ccf-9a82-c68c98bf3e9b.png)

# GC

元記事を表示

【Docker】Docker for macのコンテナに他端末からアクセスする方法【Rails】【React】

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

## Docker for macのコンテナに他端末からアクセスする方法
Docker for macでは特段の設定をすることなく、ローカル環境と同じように[【Rails】macのrailsサーバーに他の端末からアクセスする方法](https://qiita.com/P-man_Brown/items/040b14576020f51a843d)に記載の手順でアクセスできました。
Windowsの場合には別途設定が必要なようです。

### Nginx + Rails
`nginx.conf`を以下のように記述している場合には`http://localhost`の代わりに`http://ローカルIPアドレス`とすることでiPad等でアクセスできます。

“`nginx.conf
upstream myapp

元記事を表示

SNS認証について

# SNS認証について
– 学習マッチングサイトを作成して、google認証を実装したい
– 認証機能について理解を深めたい
## 環境
– AWS:EC2,RDS(MySQL),VPC,Route53
– webサーバー:NGINX
– アプリケーションサーバー:Puma
– フレームワーク:Ruby on Rails

## 認証の仕組みについて
今回はgoogle認証であるため、登場人物は、

– googleのリソースサーバ
– エンドユーザー
– webアプリ
– googleの認可サーバー

です。
### リソースサーバーとは
リソースサーバとは、保護対象のリソースを保持しているサーバーを指します。ここでいうリソースとは、googleフォトの画像やプロフィール情報等のことと思います。
### ユーザー
リソースオーナであり、アカウントを連携したいユーザーを指す。
### webアプリ
これは、つまり、学習マッチングサイトです。
### 認可サーバー
リソースサーバーに信頼されたサーバーで、リソースオーナーの認証を行い、リソースサーバーに対するアクセストークンを発行します。

元記事を表示

外部キー制約のついたカラムを削除する方法

ここではgenreテーブルからmovie_idカラムを削除します。

まず “`$ rails generate migration remove_カラム名_from_テーブル名“` を実行して、外部キー制約のかかったカラムを削除するためのマイグレーションファイルを作成します。

“`
# rails g migration remove_movie_from_genre movie:references
Running via Spring preloader in process 414
invoke active_record
create db/migrate/20220406054902_remove_movie_from_genre.rb
“`

削除用のマイグレーションファイルを確認します。
“`20220406054902_remove_movie_from_genre.rb
class RemoveMovieFromGenre < ActiveRecord::Migration[6.0] def change r

元記事を表示

Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法

とある案件で、Active Storageで管理しているファイルを複数選択して、1つのzipファイルに圧縮する要件があったので実装方法を検討しました。

# 前提

この記事では下記のUserモデルの`save_selected_avatars`メソッドの実装方法を検討します。

“`ruby:user.rb
class User < ApplicationRecord has_one_attached :avatar class << self def save_selected_avatars(user_ids) # TODO: user_idsで指定したユーザーのavatarを1つのzipファイルに圧縮して保存する end end end ``` なお、この記事では下記のバージョンを使って動作確認しています。 ZIPファイルを生成する処理はrubyzipのGemを使います。 * ruby 3.1.1 * rails, activestorage 7.0.2.3 * rubyzip 2.3.2 # 実装方法検討 ## その1 ま

元記事を表示

Rails APIからReactに渡すデータを整形する方法

RailsAPI+Reactという構成でアプリを作っているとデータを整える必要がある時が多々あると思います。

例えば以下のようなユーザーデータがあるとします。

“`ruby
{
name: ‘taro’
age: 21
sex: ‘male’
phone_number: 08012341234
post_code: ‘xxx-xxxx’
prefecture: ‘ZZZ県’
city: ‘ZZZ市’
ward: ‘ZZZ区’
town: ‘ZZZ町’
}

“`
React側で住所が欲しいときに一々、郵便番号や県、市などを繋げるのは面倒ですよね。こういう時はRailsでシリアライザーをつかうと便利です。シリアライザーは以下のようになります。

“`ruby
class UserSerializer < ActiveModel::Serializer attributes :name, :age, :sex, :phone_number, :post_code, :prefecture, :city, :ward, :town de

元記事を表示

railsでclass, moduleの定義場所を探したい

# はじめに

[こちらの記事](https://www.notion.so/Rails-logger-debug-3a5e8388d53b4848b954eebc4693ff3b)で `logger` の正体を探るためにRailsモジュールの中身を見ようとしたのですが、定義ファイルを探すのが少し大変だったのでその方法をメモしておきます。

# moduleの探し方

コンソールで探しているモジュールに値を再代入すると警告と一緒に定義場所のパスが出力されるのでそれを利用します。

個人的には利便性を考えて同じものを再代入するのがよいと思います。

例えば私の環境でActionControllerを探そうとすると次のようになります。

“`
irb(main):058:0> ActionController.class
=> Module

irb(main):062:0> ActionController = ActionController
(irb):62: warning: already initialized constant ActionController
/usr/l

元記事を表示

if式やループのネストを減らす方法まとめ

# 結論

– 早期リターンする
– 条件式で代入を行う

以上のやり方でネストを減らすことができます。

### 早期リターンする

例えば、受け取った数字が50より大きいとき2倍にする関数があるとき

早期リターンしない場合。
“`ruby
def double(number)
if number > 50
number * 2
end
end
“`

早期リターンする場合。
“`ruby
def double(number)
return if number <= 50 number * 2 end ``` ループ内の場合は`next if number`でも良いですね。 ### 条件式で代入を行う 例えば、ユーザーを1つ取り出して何かしたいとき 条件式で代入しない場合 ```ruby def update user = User.find(params[:id]) if user ... end end ``` 条件式で代入する場合 ```ruby def update if user = User.find(par

元記事を表示

1年ぶりに更新したサービスがherokuのデプロイエラーが出たときにやった解決策

1年前に作ったサービスで、クライアントさんから、値段部分の修正を依頼されました。
そのため4月に切り替わる時点でアップされるように、ローカルで準備を進めていました。
ちなみにローカルでは問題なく切り替わり、githubにもpushが完了。
3末日にさ、herokuにデプロイ!
git push origin heroku でものの数分で終わる作業なはずが
半日近く費やす結果になりました。
なぜかherokuにデプロイでエラーが出てしまいました。
随分久しぶりに動かしたのもあって諸々のアップデートが原因だったようですが、それに付随してのあれこれを記録がてら

## herokuデプロイエラー

“`
$git push heroku main
“`
これで通常であれば、リモートリポジトリの最新のmainブランチのものがherokuに反映されるはずが

“`
[Release/obj.target/binding/src/binding.o] Error 1
remote: gyp ERR! build error
remote: gyp ERR! st

元記事を表示

【Python】Pythonの型名が覚えられなかったのでメモ

Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。

下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
 ・Java, Ruby(他覚えやすかったキーワードなど)での呼び方

※あれば感想など
“`

###### 数値
“`
・int
 ・整数

・float
 ・小数点

※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`

###### 論理
“`
・bool(Yes / No)
 ・boolean
“`

###### 文字列
“`
・str
 ・String

※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`

###### シーケンス
“`
・list
 ・ArrayList(Java)(後から追加できるからArrayListで覚える)

・tuple
 ・list(配列)(後から変更できないからlistで覚える)

元記事を表示

作字クリエイターの方を支援するSNSを作ってみたい【個人開発/RoR/Docker/AWS/DaisyUI】

# HelloWorld!
はじめまして!突然ですが皆様**作字クリエイター**ってご存知でしょうか?恐らく多くの方は首を横に振られたと思います。試しに作字≒タイポグラフィでググってみると、

>タイポグラフィは、活字を用い、それを適切に配列することで、印刷物における文字の体裁を整える技芸である。(Wikipedia)

とのこと。要するに文字を使ったデザインに関わる創作をする方々のことですね。今回はそんな作字クリエイターの方を支援するようなプラットフォームを作りたいと考え、独学でプログラミングを学びながらこれまで作ってきたWebアプリをご紹介できればと思います。

:::note info
なお本アプリはまだまだ実装したい機能があり、これからも開発を続けていこうと考えているため、表題の語尾は”~みたい”としました。
:::

【アプリ名】
__Sakujiru__
【URL】
▷http://sakujiru.com/
【レポジトリ】
▷https://github.com/dlanx0607/sakujiru-app

### 製作者の人となり
– 牛タン:poultry_leg

元記事を表示

Rails バッチ処理のエラー 「uninitialized constant Batch」

### バッチ処理を試していたときのエラー 「uninitialized constant Batch」 ###

色々調べると、「spring」というものが原因かも…

“`terminal
$spring status #springの状態を確かめる
Spring is running: #springが動いている状態

$spring stop #springを止める
Spring stopped.
“`

これで無事に動くようになりました!

↓参考にしました ※springの説明

https://pleiades.io/help/ruby/spring.html

元記事を表示

【Rails】Cannot render console from ! の対処法【Docker】

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

## `Cannot render console from !` の対処法
### 状況
DockerのRails環境で開発をしていたところ、以下のようにログに`Cannot render console from 172.19.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1`と出力されました。

“`:ターミナル
Started GET “/food_enquetes/new” for 172.19.0.1 at 2022-04-02 11:12:06 +0900
Cannot render console from 172.19.0.1! Allowed networks: 127.0.0.0/127.255.255.255

元記事を表示

Rubyとは?今流行のプログラミング言語の一種Rubyって何?これであなたもプログラミングへの第1歩!

こんにちは!初めまして!現在都内大学3年生になります、重村 倫音と申します。
今回は私が大学2年生の秋学期のうち3ヶ月間で習得したruby言語について簡単に初心者さんにもrubyが何なのかという説明記事を書いてみましたのでぜひ読んでみてください!

まず最初に、Rubyという言語はまつもとひろゆき氏が関数型プログラミングと命令型プログラミングを絶妙にまじ合わせて作成したものであります。その為、様々な面でバランスが取れていて、次に説明するRubyのいいところに繋がるのです。

Rubyというのは、数多くあるうちのプログラミング言語の一種です。主に多くの人に知られているウェブサイト、twitterやcookpadと言ったウェブサービスはrubyを通して作られています。数多く存在するプログラミング言語の中でも、rubyは利用者数がかなり多いです。その人気というのも、

-シンプル
-起動の速さ

という二つの観点が主に挙げられます。

最初にシンプルという観点でプログラミング初心者さんでも簡単に自分のウェブページが作れてしまうところなんです!私自身、プログラミングのプの字も知らずにrubyの

元記事を表示

【Rails】To avoid mistakes, drop_table is only reversible if given options or a block (can be empty).エラーの対処法

# やりたいこと
“`# rails db:migrate:down VERSION=20220404233925“`
で指定したマイグレーションファイルをdownさせたい
→最終的にはマイグレーションファイルを削除したい

# エラー内容
“`
# rails db:migrate:down VERSION=20220404233925
== 20220404233925 Masters: reverting ==========================================
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

To avoid mistakes, drop_table is only reversible if given options or a block (can be empty).

(省略)
“`

# 調査
https://prograshi.com/framework/rails/rollback_d

元記事を表示

Railsでテーブルの削除

mastersテーブルを削除してみる。
テーブルを削除するためのマイグレーションファイルを作成する。

**マイグレーションファイル作成**
“`
$ rails g migration masters
“`

**マイグレーションファイル編集**

“`
class Masters < ActiveRecord::Migration[6.0] def change drop_table :masters end end ``` ``` $ rails db:migrate ``` でテーブルの削除ができます。 参考:https://qiita.com/kanuu/items/a9223712ee0ff8d19d56 https://k-koh.hatenablog.com/entry/2020/08/18/103826 開発環境 mac OS バージョン11.6 エディタ VScode

元記事を表示

良いコードとは

# 今回のアウトプットの目的
良いコードとはどのようなものか?
良いコードを書くにはどうすればよいか?
WEBアプリケーション開発をする上でとても重要だと感じたので、
改めて整理したいと思います。

# 良いコードとは
**結論:他人が見てわかりやすく意味のわかるコードが一番良いコードだと思います**

具体的にどのようなことを意識すれば良いコードになるのか纏めてみたいと思います。
①わかりやすいコメントを書く、and 無駄なコメントはしない。
②変数名やメソッド名は誰が見てもわかりやすい名前にする。
③インデントをつけてしっかりと揃える。
④ネストしすぎない。
⑤直接数字を記述するのではなく変数を利用する。

**またDRYの原則も重要だと思います**
DRY(Don’t Repeat Yourself)とは?
=「同じ情報を繰り返し定義しない」という考え方
ダメな例
“`not_dry.rb
a = 100 * 1.1
b = 200 * 1.1
c = 300 * 1.1
“`
良い例
“`dry.rb
tax = 1.1
a = 100 * tax
b = 200 * t

元記事を表示

EC2+RDSでrailsの環境構築

# はじめに
EC2上にrails環境を構築する手順を備忘録として残しておきます。
DBはRDS(MySQL)を使用

# 前提
EC2を作成し、ログイン済
 ※参考 [EC2にログインする](https://qiita.com/koyama_0122/items/8470522ec23513b749f4)
RDS(MySQL)作成済

# バージョン
ruby 2.7.0
rails 7.0.2
MySQL 8.0.28
bundler 2.1.2

# 手順

### パッケージの最新化
“`
$ sudo yum update -y
“`

### 必要なパッケージのインストール
“`
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcu

元記事を表示

オブジェクト指向とは

オブジェクト指向について整理したいと思ったのでアウトプットします。

# オブジェクト指向とは?
A.「ある役割を持ったモノ」ごとにクラス(プログラム全体の設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のこと。

# そもそもオブジェクトとは何なのか?
(わかりやすい記事があったので自分なりに解説)
A.ざっくりでいうと「モノ」
プログラミング視点で考えてみる。
例えばケータイでいうと、
**オブジェクト:ケータイ**
**クラス:スマートフォン**
**インスタンス:iPhoneやAndroid**
こんな感じで考えるとわかりやすいと思った。

# オブジェクト指向のメリット
①効率よくプログラムを設計・開発できる
例、サイト制作などで色違いのボタンを5つ作るとします。
オブジェクト指向を使用しない場合は5つ全てにプログラムを実装しなければならない。
しかしオブジェクト指向を使用すれば1つのボタンの「モノ」として作成し設定してしまえば、
色を変えたり、文字を変えたりするだけで済む。

②不具合の原因を特定しやすくなる
オブジ

元記事を表示

【Rails】カラム追加したいんだけど

# カラムを追加するには
## 先に結論
カラムを追加するには以下のコマンドを実行します。
“`bash
$ rails generate migration Addカラム名Toクラス名 カラム名:データ型
$ rails db:migrate
“`

## 例
クラス名**PostImages**に、**user_id**というカラム(データ型は**integer**)を作るのを忘れていたので、追加したい。
“`bash
$ rails generate migration AddUser_idToPostImages user_id:integer
“`
このコマンドを実行すると、db/migrateの下に、

**(作成日時)_add_user_id_to_post_images.rb**

というファイルができます。`(作成日時)_add_{カラム名}_{クラス名}`

“`bash
$ rails db:migrate
“`
最後にこのコマンドを実行して、カラムを追加できました。

元記事を表示

OTHERカテゴリの最新記事