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

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

Gemのインストール方法いろいろ

通常とは違うGemの読み込み方法を3つほどまとめました。

1.ブランチ指定してGemを読み込む方法
2.プライベートリポジトリにしているGemの読み込み方法
3.ローカルのGemを読み込む方法

の3つです。

## 1.ブランチ指定してGemを読み込む方法

“`ruby
gem ‘gem名’, git: ‘gitのパス’, branch: ‘ブランチ名’
“`

## 2.プライベートリポジトリにしているGemの読み込み方法

### ①GitHubでpersonal access tokenを取得する。
### ②それを環境変数に設定する
.envに記述。もしくはLinuxの環境変数に直接設定。

“`ruby
GIT_ACCESS_TOKEN=”発行されたトークン”
“`
### ③Gemfileのgemのインストール先をプライベートgemにする。

“`ruby
gem ‘gem名’, git: “gemのパス”
“`

### ④以下のコマンドでbundle installを実行する。

“`bash
BUNDLE_GITHUB__COM=$GIT_ACCE

元記事を表示

Railsシルバーってどんな問題が出るの?

はじめまして!
リンクアンドモチベーションの新卒エンジニアの葛葉(くずば)です。

# 初めに
入社してから、
「全体研修3ヶ月」 -> 「プログラミング研修3ヶ月」 -> 「配属されて3ヶ月」
と、泣いたり笑ったり苦しんだりしながら学びの多い日々を過ごしてきました。

現在は、営業する上で必要なデータをSQLを書いて出す作業や、簡易なバックエンドの実装(Ruby on Rails)などの業務を行っています。

しかし、2つ目のバックエンドの実装業務では、研修では全く学んでいない内容がたくさんあり、分からないことばかりです。。。

そこで、メンターと相談して、Rails4技術者認定シルバー試験(Rails Silver)を受けることにしました。

よく使われる公式問題集を中心に勉強を進めているので、
その中で解いてきた問題に類似した問題を2つ作成したので、紹介したいと思います。

ぜひ、何も見ずに解けるか試してみてください!!

# 問題
## 問題1
Active Recordを使用し、次のようなモデル定義を行なっている。
“`# app/models/sport.rb
class

元記事を表示

Railsにおける途中経過の確認

## pry
Railsではpryを使うことによって、プログラムを一時的に止めることができます。
一時的に止めることによって何が嬉しいのかというと、途中経過をみることができます。

大抵の場合、バックエンド側でデータを取得してクライアント側に渡すと思いますが、このデータがどこまで持ってこれているのかだったり、そのオブジェクトが思うような状態になっているのかの確認をクライアント側に来て初めてするのでは効率が悪いです。
プログラムを途中で止めることによって、その時点でのデータやオブジェクトの状態を確認することができます。

“`pry-rails“`をGemfileに追加し、“`bundle install“`します。
止めたい場所に、“`binding.pry“`を追加することによって一時的に止めることができます。

“`user.rb
class User < ApplicationRecord def publish_post binding.pry user.posts.create(title:

元記事を表示

Stimulus 4: レジリエンスのための設計

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/designing-for-resilience

クリップボードAPIは[現在のブラウザーで十分にサポート](https://caniuse.com/#feat=clipboard)されていますが、古いブラウザーでアプリケーションを使用している少数の人々がまだいると予想される場合があります。

また、アプリケーションへのアクセスに時々問題が発生することも想定しておく必要があります。たとえば、断続的なネットワーク接続またはCDNの可用性により、JavaScriptの一部またはすべてが読み込まれない可能性があります。

古いブラウザーのサポートは無駄だと片付けたり、ネットワークの問題を更新後に解決する一時的な不具合として片付けたりするのは魅力的です。しかし、多くの場合でこの種の問題に対して適切に回復力のある機能を構築することは自明のことです。

プログレッシブエン

元記事を表示

Rails7の環境構築のメモ

# はじめに
Rails6入門書籍参考にしながらRails7入れようとしたら詰んだのでメモを残します。

環境構築あるあるですが
30分くらいかなと思ったら謎に詰んで1.5時間ももってかれました。

# 環境
Windows11 Home 22H2
※私用PCでプログラミングしたことなかったので、初期で入ってるものなし。

# 1. インストール
#### Ruby 3.1.3 (2022/12最新)
サイトから最新を入手してインストール
https://rubyinstaller.org/downloads/

#### MSYS2
rubyインストール後に自動で起動
書籍にはなかったので雰囲気でMSYS2 →1を選択 (+MINGWの3を選ばなかった)

#### Rails 7.0.4 (2022/12最新)
“`> gem install rails“`
最新をインストール

ここからエラー祭り。



#### エラー①
> rails No such file or directory – git config init.defaultbranch

Rai

元記事を表示

【Rails】で、結局 params[:id]って何なん

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿13日目のエントリーです。

12日目も 私で
[【Rails】gemを使わずに 楽天Apiを動かしてみよう:後編【ハンズオン】](https://qiita.com/tomoaki-kimura/items/eb8faf554f8c398954ac)

## 環境と前提

– ruby 3.1.1
– Rails 6.1.7

## Railsでアプリを作る

### 準備

準備は、 `rails new` をやる準備が整っている前提で進めていきます。

“`bash:bash
$ rails _6.1.7_ new routes_test
“`

でアプリを作成します。

もし、この時点で、

“`
can’t find gem railties (= 6.1.7) with executable rails (Gem::GemNotFoundException

元記事を表示

「Ruby on Rails」Sidekiqジェムを紹介する

概要:
・Sidekiq は、Rails アプリケーションでバックグラウンド ジョブを実行するための gem です。
・Sidekiq は、マルチスレッドと Redis を使用して複数のジョブを同時に処理します。
・Redis は、ジョブをキューに格納するためのデータベース ストアとして理解されます。

コンフィギュレーション:
Sidekiq:
Gemfile に次の行を追加します: gem “sidekiq”

次に、bundle install を実行します

Redis:
次のリンクに従って Redis をインストールします: https://redis.io/topics/quickstart

ファイル config/initializers/sidekiq.rb で Redis に接続するように Sidekiq を構成します。

Sidekiq.configure_server do |config|
config.redis = {
url: “redis://127.0.0.1:6379/12”
}
end

元記事を表示

rails s(rails server)でエラーENOENTが出た件

前提です

railsを導入して、rails sやろうと思った矢先に出たエラーです

初歩的すぎるのか、ネットで調べても出なかったので、載せようと思います。
初心者でつまずく人もいるんじゃないでしょうか。

問題点

アプリケーション内でrails sを起動してもエラーが出てしまう。

以下、環境

OS:Windows11
Ruby:3.1.3p185 (2022-11-24 revision 1a6b16756e) [x64-mingw-ucrt]
Rails:7.0.4

以下エラーコード

“`題名

C:\Users\user\sample_app>rails s

C:/Program Files/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/app_loader.rb:53:in `exec’: No such file or directory –
“C:/Program Files/Ruby31-x64/bin/ruby.exe” (Errno::ENOENT)

元記事を表示

Docker で Rails と OpenSearch を連携させる【環境構築】

# はじめに

docekr-composeを使ったRailsアプリケーションにて
OpenSearchを利用するための開発環境 構築手順をまとめます。

## 方針

下記2点の理由から、gem `elasticsearch-rails` を使ってRailsとOpenSearchを連携させます。
– rubyとopensearchを使ったクライアントは2022/12/11時点では公式に存在しない
– OpenSearch1系はElasticSearchの7.10をサポートしている

# 実行環境

“`config: バージョン情報
Docker: 20.10.14
docker-compose: 1.29.2
ruby: 2.7.6
rails: 6.0.5
OpenSearch: 1.3.6
“`

## 前提

– docker-composeでrailsが構築できていること
– 検索として扱うModelが存在し、レコードを持っていること
– 今回は例として`Book`Modelを使用

# 開発環境の構築

## OpenSearchをdocker-compo

元記事を表示

ActiveStorage + has_one_attached + S3でもサブディレクトリに入れたい!

# なにがしたいのか
S3にそのまま上げても使えはするんですが、大人の事情で1つのバケットしか使えない等の理由でディレクトリに入れたい時あると思います。
S3にディレクトリの概念は無いんですがそこは便宜上ディレクトリで行かせてください。

確かに`has_one_attached`でも`record.attach(key: ‘images/example.png’)`の形でキーは使えます。
ただ、楽をするためにRailsを使ってるんだ!ってスタンスの自分としては気に食わないわけです。

form_withでフォーム作ってfile_field使ってパラメーター渡すだけで簡単にアップロードしたくないですか??私はしたいです。

## ActiveStorageでフォルダはサポートされていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96621/165e83b4-4372-2431-8de7-52be2c61856a.png)
https://github.com/rails/rails

元記事を表示

【Rails】gemを使わずに 楽天Apiを動かしてみよう:後編【ハンズオン】

この投稿は、
[DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor)
の投稿12日目のエントリーです。

11日目は @takumi3488 さんで
[【CSS】テキストの下線(アンダーライン)を太くしたくないですか?僕はしたいです。](https://qiita.com/takumi3488/items/074a995cb4a5313991eb)

## 環境と前提

– ruby 3.1.1
– Rails 6.1.7

https://qiita.com/tomoaki-kimura/items/635b7f136a9967b457b4

↑こちらからの続きとなります。

Apiの理解が・・・という方は是非前編で手を動かしてみて下さい。

## 1.Railsでアプリを作る

### 準備

準備は、 `rails new` をやる準備が整っている前提で進めていきます。

“`bash:bash
$ rails _6.1.7_ new ra

元記事を表示

Rails RuboCop

## はじめに
チーム開発ではコードの規約が大切になります。

規約がなかった場合、「僕はインデント幅2が好きだから2にしとくね」「僕はインデント幅100が好きだから100にしとくね」みたいな感じになってコードの可読性が落ちたり、思わぬエラーを引き起こしたりします。

そのような規約を暗黙の了解ではなく、自動的に適用させられたら嬉しいです。
そんな時に役立つのが“`RuboCop“`です。

## RuboCopとは
Rubyのリンターです。Javascriptだと“`ESLint“`が有名だと思います。
解析するだけでなく、フォーマッターの役割もしてくれます。

#### セットアップ
Railsに導入するものとします。“`Gemfile“`に以下のgemを追加します(rspecを使わない方は4行目は必要ありません)。
“`
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
gem “rubocop-rails”, require: false

元記事を表示

Stimulus 3: リアルなものを構築する

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/handbook/building-something-real

最初のコントローラーを実装し、StimulusがHTMLをJavaScriptに接続する方法を学びました。 それでは、Basecampからコントローラーを再作成して、実際のアプリケーションで使用できるものを見てみましょう。

# DOMクリップボードAPIのラッピング

BasecampのUIには次のようなボタンが散在しています。

![bc3-clipboard-ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238166/a07f03d3-3a96-7438-dfc1-3089312c16df.png)

これらのボタンのいずれかをクリックすると、BasecampはURLや電子メー アドレスなどのテキストをクリップボード

元記事を表示

デザイン用gem(bulma-rails)

# bulma-railsについて
デザイン用のgemです。
Github↓
https://github.com/joshuajansen/bulma-rails

# バージョン
Ruby:2.7.7
Rails:7.0.4

# 導入方法
Gemfileに`gem “bulma-rails”`を書き込み、ターミナルで`bundle install`を行う。

インポートするために、app/assets/stylesheets/application.cssに書き込む。
“`ruby:app/assets/stylesheets/application.css
@import “bulma”;
“`
この際、拡張子を`css`から`scss`に変更する。

これで導入完了です。

元記事を表示

アプリにログイン機能を追加

# 参考記事
参考記事というか、deviseについてはここに全部書いてあります。
https://github.com/heartcombo/devise#starting-with-rails

# バージョン
Ruby:2.7.7
Rails:7.0.4

# gemをインストール
これをやらないと使えないです。
“` ruby:Gemfile
gem ‘devise’
“`
保存後、ターミナルに下記のコードを入力
“`
 bundle install
“`

# セットアップ
インストールが完了すると、色々出てくるので指示通りに進めていきます。
※保存を忘れずに
![スクリーンショット 2022-12-13 1.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2018163/4c86643b-dc2b-f30d-109a-c87db58aa05a.png)

[1] `config/environments/development.rb`に以下のコードを書く。
“`ruby

元記事を表示

Railsでdistinctとpluck/select連用する時ハマった件

# TL;DR

前後文に`distinct`が存在する(可能性がある)場合、`pluck`または`select`を使うとき、`id`(またはその他一意性識別子)を一緒に入れないと、場合によって見つかりにくいBugが発生します。

## OK:
“`ruby
user.purchases.distinct.pluck(:id, :amount).map(&:last).sum
# または
user.purchases.distinct.select(:id, :amount).map(&:amount).sum
“`

## NG:
“`ruby
user.purchases.distinct.pluck(:amount).sum
# または
user.purchases.distinct.select(:amount).map(&:amount).sum
“`

# 起因
仕事で開発を行なった通販システムで、ある日から「会員の購入金額の合計データを出力する」という要望がありました。
開発する際に、「購入金額の合計を取るには、わざわざ全件をインスタンス化しなくていいじゃない」と

元記事を表示

データ移行をして学んだ3つのこと

## はじめに
はじめまして。
リンクアンドモチベーションでエンジニアをしている田中です。
まだまだ若輩者のエンジニアですが
直近、データ移行タスクに挑戦する機会があり、大事な観点を特に3点学んだのでこの場でアウトプットさせていただきます。

## 構成
– 今回担当したデータ移行タスク
– 躓いたことと学び
– 今後の展望

## 今回担当したデータ移行タスク
今回担当した移行タスクは3点です。移行タスクファイルはrailsを使って作成しています。
– 社内Aアプリケーションから、社内Bアプリケーションへマイクロサービス化に伴ってDB分離するための移行
– 社内Aアプリケーションから、外部Cアプリケーションへマイクロサービス化に伴ってAPI分離するための移行
– 社内AアプリケーションのAテーブルにおいて、AカラムからBカラムへ、カラム名変更に伴う移行

## 躓いたことと学び
特に3点、ベテランエンジニアの方からFBいただく中で学びが大きかったので、ピックアップして書きたいと思います。

### 要件は正しいか 〜移行対象のデータ範囲が決まっていない〜
エンジニア側の要件定義では移

元記事を表示

Railsアプリのローディングまとめる

eager load と hot reload を混合していたのでまとめる。

## Definitions

– `eager loading`
– = load all files when booting up a Rails server.
– Configured with `config.eager_load = true`
– `reloading` (= hot reloading)
– = reflect the code changes immediately to a runninng Rails server before processing the next request.
– Configured with `config.cache_classes = false`

To reflect code changes in rails console, hit `relaod!` in the console.

## Default configurations in Rails 7.0.4

| | develop

元記事を表示

既存MVCのRailsプロジェクトを最速でフロントとバックエンドに分離する方法

# はじめに
RailsはMVCフレームワークとしてよく使われていますが、昨今はRailsをAPIモードで利用して、フロントはReactなりVueなりで書くことが多いかと思います。
とはいえその流れはここ数年で、少し前まではRailsデフォルトの方法としてフロント側もerbファイルで書いているプロジェクトがほとんどだったと思います。
そのまま流れで、運用しているプロジェクトもたくさんあると思いますが、パフォーマンスや保守性のため分離したいと考えている人も多いかと思います。

本記事ではなるべく低工数でフロントエンドとバックエンドを分離する方法を考えました。
色々試行錯誤してこういう結論に達したというだけなので、アドバイスあれば是非お願いします!

# 結論
先に結論だけ書いておくと、「Get系はGraphQL、他はRestAPIで書く」です。

# 前提条件
MVCで書かれているので、基本的にAPI仕様書はなく、テストもほとんどない状態
ロジック自体はあまりいじりたくないので、可能な限り既存コードを転用したい

# 採用した施策

### GraphQL
Get周りは[graphql-

元記事を表示

ぼくのかんがえたさいきょうのRails APIリファクタリング

# はじめに
テキトーにタイトル考えたんですが「ぼくのかんがえたさいきょうの」って元ネタがキン肉マンの子供からの超人提案募集らしいですね。
子供たちが考えた超人を見るが如く、優しい目でご指摘頂けると助かります。

本題に入りまして、Railsは最初のうちは、Rails wayに乗ってれば結構サクサク書けるんですが、ある程度規模が大きくなってくると途端に管理が難しくなります。
ControllerとModelくらいしか使ってないプロジェクトをリファクタリングしていく方法を考えました。
そこまで大きくないプロジェクトなら、最初からこの方式でAPI組んでも良いかなと思います。

しっかりリファクタリングする時間があればいくらでもできると思うので、ある程度方針だけ決めて、それに沿って効果が高そうなものをまとめていきます。

# 基本方針

## Controller
ControllerはAPIのinputを受け取るだけのレイヤーとして使います。
ロジックは全て後述するLogicにまとめて、返り値の整形はSerializerに任せてしまうのが良いと思います。
ただし、Controller内では

元記事を表示

OTHERカテゴリの最新記事