Rails関連のことを調べてみた

Rails関連のことを調べてみた

SigNozでRailsのAPMを取得&ログを無理やり転送する

## 結論

– SigNozでAPMを取得するのはわりかし簡単
– 2024/02現在でログを転送するは若干面倒

## 前提条件

– Ruby on Rails7.1の環境をDockerとdocker-compose.ymlで構築済み

## 手順

### SigNozを構築する

https://signoz.io/docs/install/docker/

を手順通りに実行

“`sh
git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/
docker compose -f docker/clickhouse-setup/docker-compose.yaml up -d
“`

http://localhost:3301

にアクセス

### SigNozでログの転送準備

https://signoz.io/docs/userguide/send-logs-http/
の手順通りに

– deploy/docker/clickhouse-setup/docker-c

元記事を表示

Rails で CSV と TSV をダウンロード(失敗談)

Rails で,あるモデルのデータ一覧を CSV でも TSV でもダウンロードできるようにするとき,ちょっとハマったのでメモ。

# やりたかったこと

ItemsController の `index` アクションで

“`rb
def index
@items = Item.all
respond_to do |format|
format.html do
end

format.csv do
end

format.tsv do
end
end
end
“`

みたいなことがしたかった。

要するに,リクエストが

* `/items` なら HTML を
* `/items.csv` なら CSV を
* `/items.tsv` なら TSV を

返す,と。

んで,CSV の場合のテンプレートは Ruby で記述し `/app/views/items/index.csv.ruby` というファイルで提供する。

ここまではよくある話。

では TSV のテンプレートをどうするか?

# 最初にやった方法

元記事を表示

【Rails】パーシャル(部分テンプレート)内での変数の使用

# はじめに
この記事では学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。

# 起こった問題
パーシャルにローカル変数を渡そうとしたが上手くいかなかった

# 結論
localsオプションを使用してローカル変数を渡すときは
“`
<%= render partial: ‘パーシャル名’, locals: { ローカル変数名: インスタンス変数名} %>
“`
の**partial**を省略せずに書く
またはpartialを省略するならlocalsも省略する

# 解決までの道のり
### 前提条件
– Solidusを使用してECサイトを作成中
– 商品カテゴリーページへのリンクを含むヘッダーをパーシャル化

### なぜパーシャル内でインスタンス変数を使用しないほうがいいのか?
パーシャルとコントローラーが結びついてしまうと、コントローラー内の変数を変更したときにパーシャル内の記述も変更しなければならなくなり、せっかくパーシャルとして切り出したのに使い勝手

元記事を表示

docker/docker composeでrailsアプリをdocker化する

## はじめに
dockerとdocker composeでrailsアプリをDocker化する方法について記載します。
dockerとdocker composeについては勉強している程で記載しています。

## Dockerおすすめ本
下記勉強に使用した本ですが、初学者でも分かりやすかったので共有します。

Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド
![スクリーンショット 2024-02-09 20.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/5123ba74-3c16-9c89-1dae-d090868961fb.png)

https://amzn.asia/d/b6qGAbr

## 構築環境
“`
Ruby 3.2.2
Rails 7.0.6
postgres 12
“`

## ①必要ファイルの作成を行う
以下の4つのファイルの作成が必要です。
– Dockerfile

https://docs

元記事を表示

現場で使える Ruby on Rails 5速習実践ガイドを読んだ

## はじめに
今回はRailsのインプット用の教材として[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=7NL117JN69F3&keywords=Rails&qid=1642106965&sprefix=rails%2Caps%2C252&sr=8-6)
を読んだので、その感想について記事にします。

## 良かった点
Railsの機能について実際にアプリを作ってみながら解説するという流れで
解説していてわかりやすかったです。
テスト

元記事を表示

【Ruby,Rails】長いメソッド名をわかりやすい名前に変えて使用してみよう

どうもこんにちは。

今回は、Ruby,Railsでメソッド名を自分のわかりやすい名前に変更して使用する方法を紹介します。

# メソッド名を変更して使用する方法

大きく分けて2つです。

1. `alias`や`alias_method`を使用する
1. 独自のメソッド名変更メソッドを用意する

ただし、`alias`や`alias_method`は全てのメソッドに対して使用できる訳ではありません。
以下のメソッドに対して`alias`や`alias_method`を使用することができます。

1. **明示的に定義されたメソッド**: クラス内で明示的に定義されたインスタンスメソッドやクラスメソッドには、通常、エイリアスを定義することができます
1. **継承されたメソッド**: スーパークラスから継承されたメソッドに対してもエイリアスを定義することが可能です

一方で`alias`や`alias_method`を使用できないメソッドは以下のようなものです。

1. **動的に生成されるメソッド**: メタプログラミング技術やフレームワークの内部機構によって動的に生成されるメソッ

元記事を表示

フォームを扱うヘルパーメソッド

Railsを使ったアプリケーション作成の流れと、よく使いそうなフォームを生成するメッセージヘルパーを少しまとめました。

実行環境
ruby 3.0.1
rails 7.1.3

## Railsアプリケーションの作成

“`ruby
~/ルートディレクトリ

$ rails new for_form_helper_method -d postgresql

cd for_form_helper_method
“`

`$ rails new [任意のアプリケーション名] -d [使用するデータベースアプリケーション名]` でアプリケーションを作成し、作成したアプリケーションのディレクトリに移動。

“`ruby
[~/for_form_helper_method]

$ rails g scaffold AccountCreate name:string
“`

`$ rails g scaffold [モデル名] [カラム名①:データの型① カラム名②:データの型②・・・]` でマイグレーションファイル、モデル、コントローラー、ルーティング、ビューを生成。

“`rub

元記事を表示

RubyOnRails: チュートリアル: 第3章ほぼ静的なページの作成

こちらのページとほぼ同じことを行いました。
[第3章ほぼ静的なページの作成](https://railstutorial.jp/chapters/static_pages?version=7.0#sec-static_pages)

確認した環境

“`text
$ ruby –version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]

$ rails –version
Rails 7.1.3

$ bundler –version
Bundler version 2.5.6

$ bundle –version
Bundler version 2.5.6
“`

## プロジェクトの作成

“`bash
rails new sample_app
cd sample_app
bundle install
“`

サーバーの起動

“`bash
rails server -b 0.0.0.0
“`

## ページの作成

“`bash
rails generate contro

元記事を表示

アソシエーションのthrough, sourceオプションを図として理解する。

# きっかけ
Railsを使って掲示板をブックマークする機能を実装する勉強中、中間テーブルを絡めたアソシエーションの理解に苦しんだ。
特に、後述の`bookmarked_boards.destroy(board)`と、`bookmark.destroy(bookmark)`が同じ意味であることのイメージができなかった。
図としてイメージをすることでさらに理解を定着させたい。

:::note warn
※部分は独自の解釈が含まれるので、間違いであればご指摘いただけると幸いです。
:::

# 環境
ruby 3.14
rails 7.0.3.1
mac OS Sonoma 14.2.1
docker 24.0.7
docker compose v2.23.3-desktop.2

# したいこと
* 多対多のアソシエーションにおけるthroughオプションと、sourceオプションを理解する。
* `bookmarked_boards.destroy(board)`と`bookmarks.destroy(bookmark)`が何故同じ結果になるのかを図で理解する。

# 今回のポイン

元記事を表示

axiosを使わないでいいね機能を非同期化

こんにちは、普段はプログラミングスクールでメンターをやっている@takokkeです。

今回はいいね機能の非同期化手順を学習記録としてまとめてみました。axiosなどのjsライブラリを使わず、シンプルにjQueryだけで実装したいと思います
# 非同期処理の大まかな手順
1. いいねボタンを押したら、javascriptリクエストがコントローラに送られる
1. アクションがデータ処理を行い、いつもならhtml.erbにインスタンス変数を渡すが、今回はjs.erbへ渡す
1. js.erbに記述したjsコードが、いいねボタンの部分だけ書き換える

ポイントは、いつもならコントローラで定義したインスタンス変数がhtml.erbに渡るのを、**js.erb**に渡すということです。

# いいねボタンのHTMLを部分テンプレート化
いいねボタンの部分テンプレートを作成します。

“`erb:app/views/favorites/_favorite-btn.erb
<% if book.favorited_by?(current_user) %>
<%= link_to book_fa

元記事を表示

【Rails】データの状態遷移をわかりやすく定義できるGem「AASM」

どうもこんにちは。

コード理解を進めている中でAASMというライブラリが何者なのか知る必要がありそうなので、調べてみました。

# AASMについて

ChatGPTに聞いてみたところ、以下のような返答が返ってきました。

> `AASM(Acts As State Machine)`は、オブジェクトの状態を管理し、状態間の遷移を定義するためのRubyライブラリです。このライブラリを使用すると、モデルの状態遷移を宣言的に記述でき、コールバックや条件付き遷移などの高度な機能を利用することができます。

ちょっとよくわからなかったですが、よく調べてみると、
**データの状態を変更する前と後で明示的に処理を分けることができてメソッド化できる**ライブラリということです。

これは実際にコードを書いて理解するのがわかりやすそうです。

## modelを用意

以下のようにテーブル,モデルを用意します。

contentsテーブル
| カラム名 | 型 |
| — | — |
| id | integer |
| title | string |
| status | integer

元記事を表示

【rails】bootstrapを導入した際にcssを読み込ませる方法!

今回はbootstrap導入方法からその後のcssの読み込み方法に関して説明します!

## bootstrap導入
既に導入済みの方は飛ばしてください。

#### 1. yarnでインストールする
“`terminal
$ yarn add jquery bootstrap@4.6.2 popper.js
“`
#### 2. config/webpack/enviroment.jsを編集
“`javascript: congfig/webpack/environment.js
:
:
///以下すべて追加してください
const webpack = require(‘webpack’)
environment.plugins.prepend(
‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’,
Popper: ‘popper.js’
})
)
“`
#### 3. app/javascriptの配下にst

元記事を表示

【日記?考察?】pluckメソッドとfind_byメソッドはどこで使うのか

こんばんは!
今まであまり使う機会がなかったメソッドをこの機に理解しよう!とおもったのですが、
pluckメソッドの使いどころがいまいちピンとこず、
今回は**pluckメソッド**と**find_byメソッド**について考えてみるというふわっとした感じです:cactus:
(現在DM機能がうまく実装できず煮詰まり中。。。)

## pluckメソッドはどんな時に使う?
> pluck メソッドは、指定されたカラムの値を直接データベースから取得し、ActiveRecord オブジェクトのインスタンス化をせずに値の配列として返します。これは特に、カラムの値を素早く配列として取得したい場合に便利です。

↑引用元は[こちら](https://zenn.dev/kumasaka/articles/d17ddda0c9476b)

初心者(私)はこれでもすぐ理解できなかったので、自分の言葉に直して使った状況も踏まえながら説明してみたいと思います。

ということで、私がどういうタイミングでpluckを使う流れになったのか考えてみました。

まさに絶賛煮詰まり中のDM機能実装の際、
ログイン中のユ

元記事を表示

VSCode + Docker + Docker-compose +Railsのデバッグの設定方法

# 概要
`Dev container`の環境を作らず、ステップ実行でデバッグが出来る環境を作成しました。今回は、その方法を記載します。

# 事前設定
以下がインストールされている事が前提です。
– **Docker Desktop**
– **Visual Studio Code**
– **VSCode rdbg Ruby Debugger**

# ディレクトリー構成
“`sh
.
├── db/
│ ├── conf/
│ │ └── .env   
│ └── postgres_volume # ← コンテナー起動時に自動生成
├── web/
│ ├── vscode/
│ │ └── lanuch.json
│ ├── # rails関連のファイル
│ ├── Dockerfile
│ ├── Gemfile
│ └── Gemfile.lock
└── compose.yml
“`

# 環境構築
– `Dockerfile`の構成は下記
“`Dockerfile
FROM ruby:3.2.2
ENV LANG=ja

元記事を表示

gitコミットの取り消し

直前のコミットを取り消すには
“`
git reset –soft HEAD^
“`
ワークディレクトリの内容はそのままでコミットだけ取り消すことができる。

元記事を表示

【個人開発】スクール生活をより豊かにするためのアプリを開発しました🤖

## はじめに
私はプログラミングスクール「RUNTEQ」に通い、プログラミング学習をしております。
今回私はスクール生活での小さな悩みを解消するアプリを開発いたしました。

RUNTEQではカリキュラムなどで分からない問題があったときや、
就職活動等の話を受講生同士で相談し合いたい時に、
Discord(ビデオ通話・音声通話でのコミュニケーションツール)を用いて受講生同士で交流しあうことがよくあります。

その際に私は2つの思いがありました。
1. オンラインスクールであるため、気軽にDiscrodで集まる人を募集するハードルが少し高い…もっと気軽に声をかけたい!という思い
2. Xなどの投稿を通じて募集を行う人が多かったのですが、SNSのコメント欄などで、日程調整をすることが少し手間だな…という思い

今もRUNTEQでは交流は盛んでコミュニティによく助けられているのですが、
受講生同士が今よりももっと気軽に学習や就職活動の相談を行い、より交流の輪を広げることができるようになったらいいな…という思いがきっかけで、
Discordに集まる日程や時間を調整できるアプリと

元記事を表示

xxx_pathの”xxx”をどう設定するか調べるには

ターミナル上でdocker-compose run web bin/rails routesコマンドを実行する
(config/routes.rbに定義されたルーティングとそれぞれの Prefix, Verb, URI Pattern, Controller#Actionの対応表が表示される)

リダイレクト先のアクション(例:Controller#Action の tasks#show)の行を探す

その行の Prefix 部分を確認(例: “task”)。このPrefixに_pathを追加する(例:task_path)ことで、Railsが URI Pattern のパスを生成する。

元記事を表示

【Rails】外部キーの作成に便利?reference型とは?

こんにちは!
今回はテーブル作成時に使用するカラム**reference型**について紹介します!

## reference型を使う時はいつ?
 外部キー(FK, foreign keyともいう)を作成したいとき、integer型を用いてt.integer: xxx_idと単純に作ることもできますが、下の例のようにreference型を使うこともできます。

“`ruby: XXXX_create_xxxx.rb
t.references: user, foreign_key: true
t.references: group, foreign_key: true
“`
このように用いますが、reference型を知らない方は、あれ?外部キーを作るのにカラム名に_idが抜けてる?となると思います。
実は、reference型はマイグレーションファイル上ではuserやgroupとしか表示されて
いませんが、 rails db:migrate後にuser_id、group_idのように自動で外部キーのカラムが作成されるという特徴があります。

## 外部キー制約が必

元記事を表示

【Rails】CSV出力機能を簡単に作成する

## はじめに
Railsでモデル(Item)のデータを取得しcsv出力する機能を作成する

## 環境
`ruby 2.7.2p137`
`Rails 6.0.3.4`

## コンロトーラー
~~~ruby:app/controllers/items_controller.rb
require ‘csv’

def export_csv
items = Item.all # 出力したいデータと取得します
headers = [‘id’, ‘name’]
data = CSV.generate do |csv|
csv << headers # 1行目ヘッダーになるため、項目をheadersに代入して初めにcsvに書き込みます。 items.each do |item| csv << [item.id, item.name] # 1行目にヘッダーを書き込み終えたら、2行目以降はitemsをループ処理で書き込んでいきます。この時ヘッダーの項目と出力する値が乖離しないように同じ順番にしています。 end end send_data

元記事を表示

Thrusterを楽しみにしている

先日、Rails8のマイルストーンが発表された。

その中でAirlockという謎のワードがでていたのをご存知だろうか

Railsのフロントエンドは7以降import-mapsを使ったstimulusコントローラのオートローダーを導入している

基本的に何もしなければRailsアプリケーションはTurboによって最初からSPA化されてるということもあり、このローダーはデフォルトで初回表示時にimport-maps内に記載されてるStimulusコントローラの全ダウンロードを実施する

https://github.com/hotwired/stimulus-rails#:~:text=controllers%20are%20pinned.-,By%20default%2C%20your%20application,controllers%2Findex.js%20file.,-When%20lazy%20loading

この読み込みを高速化するため、Rails7系以降はhttp/2化がパフォーマンス上の重要な要件となっている

https://x.com/dhh/status/17

元記事を表示

OTHERカテゴリの最新記事