- 1. 【初学者の教訓】gem Sorceryを使う時の注意点とmigrationについて
- 2. 【Rails】update_attributesが使用できない
- 3. ポートフォリオで予約サイトを作りました
- 4. 【個人開発】趣味でバンド活動をする私が、練習で使いたいタスク管理アプリを作りました🎸
- 5. ポートフォリオ・テスト
- 6. Turbo Streamの主なアクション
- 7. replaceメソッドを活用した関連テーブルの更新
- 8. Ruby on Rails コマンドラインまとめ
- 9. ねえ、知ってた?「Railsドキュメント」はRailsの公式ドキュメントではないんですよ、という話
- 10. Rails7でActive Storageを用いた画像リサイズを行うために必要な準備
- 11. Ruby on Railsで簡単にMessagePackエコーサーバを構築してみた話 – Unity通信の学習用に
- 12. S3 Presigned URLを使ってハマった話
- 13. 【Rails】findとfind_byの違いを理解する
- 14. ECS環境で動作しているRuby on Railsの環境に、EventBridge Ruleでバッチ処理を組み込む
- 15. 【個人開発】Qiitaで投稿を断念してしまった私が、3ヶ月越しに「初学者向けの技術記事アプリ」を作成しました!💐
- 16. 【豆知識】rails console から errors メソッドや full_message メソッドの返り値を確認する手順について
- 17. Railsで、パーシャルを使って、Webサイト・Webアプリの画面を作る
- 18. エンコードとデコード
- 19. Procとlambdaの違いとRails開発で使われる場面
- 20. includesメソッドについて
【初学者の教訓】gem Sorceryを使う時の注意点とmigrationについて
## はじめに
Railsでアプリを作成中、gem sorceryでユーザー認証機能を追加しようとしたときに起きた出来事と、そのときに学んだ教訓です。
## 結論
– `rails generate sorcery:install`を実行するとUserモデルも自動的に作成されるので、すでにUserモデルを作っている場合は要注意
– 公式をよく読みましょう。
https://github.com/Sorcery/sorcery## 何があった?
Railsで掲示板アプリを作成していました。User、Post、Commentなどのモデルを作成したところで、「そういえばsorceryってgemでログイン機能作れるんだったな〜」と軽い気持ちでgemをbundle installし、`rails generate sorcery:install`したところ…
“`ruby
web-1 | == 20240827051328 SorceryCore: migrating ======================================
web-1 | — crea
【Rails】update_attributesが使用できない
## はじめに
Railsのアップデート中にupdate_attributesを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
以下のように、update_attributesを使用するとエラーが出ます。
“`ruby
@user.update_attributes(attributes)
“`## 解決方法
Rails6.1からupdate_attributesは使用できなくなりました。
代わりにupdateを使います。
“`ruby
@user.update(attributes)
“`## 参考
ポートフォリオで予約サイトを作りました
## はじめに
転職を目的として、未経験からスクールでプログラミングの学習を行った際に制作したポートフォリオです。
学習期間は約4か月、そのうちポートフォリオ制作には1ヶ月半ほどかけています。また、前職がネットショップだったこともあり、考えやすいだろうと思って予約サイトを制作することにしました。
制作の中で、個人的にこだわったポイントをまとめて紹介します。## ポートフォリオのテーマ
「お花屋さん発信型のフラワーアレンジメントや花束の予約サイト」
お客さんが、複数あるショップから商品を選んで予約する、お花屋さん限定のモールというイメージです。## このテーマを選んだ理由
友人がお花屋さんで働いており、お花のアレンジメントや花束などを当日急に来店されたお客さんから注文されると、事前に準備することもできず焦ってしまって大変だという話を聞きました。
また、私自身、花束などを購入したことがなかったとき、どうやって予約や購入をすればいいのか悩んだ経験があります。お店とお客さん、お互いにすれ違ってしまっているな…と感じたため、お花屋さん側が花束やアレンジ
【個人開発】趣味でバンド活動をする私が、練習で使いたいタスク管理アプリを作りました🎸
# はじめに
初めまして。かめと申します。
未経験からのWebエンジニア転職を目指して、学習を続けております。
この度、バンド活動をする社会人に向けた、タスク管理ツール「bandmemo(バンドメモ)」を開発いたしました。**▼サービスURL**
https://bandmemo-app.com/
**▼GitHub URL**
https://github.com/kame-0707/graduation_bandmemo[![Image from Gyazo](https://i.gyazo.com/35c01695ae5f80b111b5ee763e70c76b.png)](https://gyazo.com/35c01695ae5f80b111b5ee763e70c76b)
# 開発した理由
これまで、仕事と両立しながら趣味で複数のバンドに所属してきました。
バンド活動は、実際に体験してみると細かいタスクが多いです。社会人バンドのタスク内容例
“`
【ライブ運営の場合】
– ライブ会場を抑える
– イベント
ポートフォリオ・テスト
テスト投稿
Turbo Streamの主なアクション
## 初めに
疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。# Turbo Streamとは
HTMLの断片をリアルタイムで更新するツール。
Java Scriptの動的な更新を知識が無くとも可能にする。# 代表的なアクション
・append
・prepend
・replace
・update
・remove
・before
・after
“`
<%= turbo_stream.prepend "(IDの名称)" do %>
<%= render @xxxxxx %>
<% end %>
“`
指定した要素をアクションに従って指定したIDを持つ要素の内部に反映する。
# Append
新しい要素を既存のコンテンツの後に追加# Prepend
新しい要素を既存のコンテンツの後に追加# Replace
既存の要素を新しい内容で置き換える# Update
既存の要素の内容を部分的に更新する際に使用する。
※いいね数等#
replaceメソッドを活用した関連テーブルの更新
# はじめに
Rubyには“`replace“`というメソッドがあります。
Rubyの配列 (Array) やハッシュ (Hash) などのオブジェクトに対して使われ、対象オブジェクトの内容を別のオブジェクトの内容で置き換えるメソッドです。
https://docs.ruby-lang.org/ja/latest/method/Array/i/replace.html
よく見るのは
“`ruby
a = [1, 2, 3]
a.replace [4, 5, 6]
p a #=> [4, 5, 6]
“`“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { c: 3, d: 4 }hash1.replace(hash2)
puts hash1.inspect #=> { c: 3, d: 4 }
“`
この辺りでしょうか??今回は“`replace“`を配列やハッシュではなく、ActiveRecordと一緒に使ってみることにします。
# replaceを使ったコード例
:::note
Ruby on Rails コマンドラインまとめ
## 1. Rails New
– **実行方法**: `rails new <アプリケーション名>`
– **できること**: 新しいRailsプロジェクトを作成する
– **実行例**:
“`bash
rails new myapp
“`## 2. Rails Server
– **実行方法**: `rails s` または `rails server`
– **できること**: ローカル開発サーバーを起動し、アプリケーションをブラウザでテストする
– **実行例**:
“`bash
rails s
“`## 3. Rails Generate
– **実行方法**: `rails generate <タイプ> <名前>` または `rails g <タイプ> <名前>`
– **できること**: コントローラ、モデル、リソース、スキャフォールドを作成する### 例:
– **コントローラの作成**:
– **実行例**:
“`bash
rails generate con
ねえ、知ってた?「Railsドキュメント」はRailsの公式ドキュメントではないんですよ、という話
## TL;DR(最初に結論)
– Railsドキュメント( https://railsdoc.com/ )というサイトはRailsの公式ドキュメントではない
– 最初のとっかかりをつかむために参照するのは良いが、情報の裏取りとして公式サイトの情報も併せてチェックしよう## はじめに
上記のTL;DRに書いた話をすでに知ってる人や、わかっている人はこの記事を読まなくても大丈夫です。
ですが、Railsを学び始めた初心者プログラマのみなさんは意外と勘違いしている人が多そうなので、注意喚起を兼ねてこの記事を書いておきます。## 「Railsドキュメント」はRailsの公式ドキュメントではない
Rails関連の調べ物をすると、検索結果の上位によく上がってくる「Railsドキュメント」というサイトがあります。![Screenshot 2024-08-24 at 11.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/c29064d5-b9ff-f8d1-311b-5061d95
Rails7でActive Storageを用いた画像リサイズを行うために必要な準備
Rails初学者の備忘録として、表題の手順を簡単にまとめておきます。
振り返るとだいぶ初歩的な部分で詰まってしまったのですが、自身と同じくActive Storageを全く初めて使う方に少しでも参考になれば幸いです。## 使用環境
– Rails 7.0.8.4
– Ruby 3.2.1## 現状・実現したいこと
– ECサイトの商品一覧ページを只今製作中
– とりあえずActiveStorageの導入は済んでおり、Item(商品)テーブル上のimageカラムに画像の登録はできている
– 現在はシンプルに下記コードで画像表示中“`erb:app/views/items/index.html.erb
<%= image_tag item.image %>
“`
– 下記画像のように、現状、Seedで登録した画像サイズがバラバラで、見栄えがよろしくないので450×300のサイズに統一したい![スクリーンショット 2024-08-25 17.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
Ruby on Railsで簡単にMessagePackエコーサーバを構築してみた話 – Unity通信の学習用に
# はじめに
Unityのタグを入れましたが、内容はRailsを使ったサーバ構築の話です。
Railsを使ったサーバの構築がすごく手軽で感動したので記事として残しました。### なぜエコーサーバを立てようと思ったのか
Unityの通信周りの実装を学ぼうと思い、通信テストを効率的に行うためにはサーバが必要になりました。
「エコーサーバ」という、クライアントから送信されたデータをそのまま返すサーバを立てることで、クライアント側の実装を容易にテストできるようになります。
エコーサーバとは、クライアントから受け取ったリクエストデータをそのままレスポンスとして返すシンプルなサーバです。
これにより、クライアントが送信するデータと受信するデータを簡単に確認でき、テストが非常に効率的になります。### MessagePackについて
通信のデータ形式としてMessagePackを使用します。
JSONが広く使われていますが、MessagePackはパフォーマンス面で優れており選択肢として選ばれるケースも増えると思います。
私自身がMessagePackを試してみたいという好奇心から始めた内容
S3 Presigned URLを使ってハマった話
社内システムでアバター機能を作る必要があり、s3を利用して実装することにした。
## tl;dr
以下の点で躓きました。
1. ローカルとデプロイ環境では設定が異なる
→ ECSが自動的に環境変数を処理してくれる
2. CORS設定
→ AWSコンソールで設定する必要あり
3. 署名方式
→ クライアントで送るとき複合化をする必要があった## なんでpresigned url?
### クライアントで直接送りたい
サーバーで画像の処理を行うと、何台しかない状態でオーバーヘッドの起きる可能性がある。
その反面、クライアントはユーザーの数ほど存在するため、画像の処理をクライアントに任せたいと考えた。### 外部からs3にアクセスする方法
調べると、以下のような選択肢があった。
1. Public
→ 誰でもアクセスできてしまう。今回は社内システムなので外部に公開したくない
2. AWS SDK
→ IAM権限を持っているユーザーだけ
3. AWS CLI
→ IAM権限を持っているユーザーだけ
4. S3サイトホスト
→ 静的サイトを作っているわけではない
5. C
【Rails】findとfind_byの違いを理解する
## はじめに
Railsでデータベース操作を効率的に行うためfindとfind_byの違いを調べたのでメモとして残します!
それぞれのメソッドの動作や使いどころを簡単な例を通じてお伝えできればと思います。## 両者の違い
### findメソッド
Rialsの公式より
> find(*args)
Find by id – This can either be a specific id (ID), a list of ids (ID, ID, ID), or an array of ids ([ID, ID, ID]). ‘ID` refers to an “identifier”. For models with a single-column primary key, `ID` will be a single value, and for models with a composite primary key, it will be an array of values. If one or more records cannot be found for the requ
ECS環境で動作しているRuby on Railsの環境に、EventBridge Ruleでバッチ処理を組み込む
# 概要
表題の構成でバッチ処理を構築したので、その構築方法について記載します。# 前提条件
:::note warn
前提条件一覧
– `ECS`環境で`Ruby on Rails`のアプリが動作している
– `Terraform`がインストールされている
– `ECS`や `Network`関連(`ALB`、`IAM`、セキュリティーグループ等)が`Terraform`で構築されている
– `Ruby on Rails`のバージョンは、7.0以上
:::# 作成手順
## Ruby on Rails
### 初期設定
– `EventBridge Rule`から`rails runner`(以下、`r`に省略)でコマンド叩く際、`path`の入力を行わないで済む様にする為、下記を追加した
“`config/application.rb
config.eager_load_paths << Rails.root.join("lib", "batches") ``` 上記の設定をした事で、ローカル環境では、下記のコマンドでバッチ処理の確認が可能 ```sh rails r "
【個人開発】Qiitaで投稿を断念してしまった私が、3ヶ月越しに「初学者向けの技術記事アプリ」を作成しました!💐
## はじめに
初めまして。
2024年1月よりプログラミングスクールRUNTEQに通っている、sayaと申します。
今回スクールの卒業制作として、**技術記事投稿したことがない/投稿に苦手意識を感じている方向けの技術記事投稿アプリ**を作成しました。①投稿へのハードルが低いこと
②第三者からの反応内容を確認できること
③継続して投稿できること
を目的に、約2ヶ月に渡り開発を行ってまいりました。### サービスURL: [Miniita(ミニータ)](https://www.miniita.com/)
### GitHub: [リポジトリ](https://github.com/s17w09/Miniita)
[![Image from Gyazo](https://i.gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24.png)](https://gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24)3ヶ月前にQiitaで記事を投稿するのを断念してから、この度このような形で記事を投稿できることをとても嬉し
【豆知識】rails console から errors メソッドや full_message メソッドの返り値を確認する手順について
# はじめに
アプリ制作課題に取り組むと同時に過去課題を参考にしているわーちゃんです。今回はユーザー登録でバリデーションエラーが発生した場合、そのエラーメッセージを画面に表示するようなファイル設定、コードの記載を行ったあと、ローカルで確認することもできますが、ターミナルで確認できるようになってこそ!!大切だとおもったので、改めて学習しなおしてみました。
前回に比べて、「じゃあこの場合はどうなるのか?」という考えもできるようになってきたのでアウトプットの為にもまとめてみます。## さっそく手順
1. **`rails console` を起動**
`docker compose exec web rails c` で Rails コンソールを開く2. **モデルのインスタンスを作成**
バリデーションエラーを確認するためには、モデルのインスタンスを作成し、そのインスタンスが無効な状態である必要があります。たとえば、`User` モデルがあると仮定します。“`ruby
user = User.new
“`
Railsで、パーシャルを使って、Webサイト・Webアプリの画面を作る
## 概要
パーシャルの意味合いはおそらく、Webサイトの画面の開発のDRYさを低減するのが目的だと感じた。
開発の効率を上げる、同じコードを繰り返す書くことを避ける
その機能を提供してくれるのが、Railsのパーシャルという機能だ。
機能というか、Railsのサービス的な?
## やり方
Railsのフレームワークを生成すると、たくさんのディレクトリが自動生成される。
その中に、appディレクトリがある。
そして、
appディレクトリの中に、viewsディレクトリがあり、
viewsディレクトリの中に、layoutsディレクトリがある。
Railsは、`render`メソッドが使えますが、
“`
app/views/layouts
“`このディレクトリの中に、
“`
__◯◯.html.erb
“`というファイルを作ります。
そして、
“`
application.html.erb
“`の中に、
“`
<%= render 'layouts/◯◯' %>
“`と記載すれば、
`__◯◯.html.erb`の中に、
エンコードとデコード
# はじめに
先日、業務で文字列をエンコード、デコードする実装を行ったので、備忘録として記事にまとめたいと思います
この記事では、Ruby on Railsでのエンコードとデコードの基本的な使い方について説明します# エンコードとデコードとは?
エンコードとデコードは、データを異なる形式に変換し、必要に応じて元の形式に戻すプロセスです
このプロセスにより、データの送信や保存時にセキュリティが確保され、データの整合性も維持されますRuby on Railsでは、`Base64`モジュールを使用してエンコードとデコードを行います
`Base64`モジュールを使用して、文字列のエンコードとデコードを簡単に行うことができます## エンコード
エンコードは**データを特定の形式に変換する**手順です
例えば、バイナリデータをテキスト形式に変換することで、インターネット通信やデータベースにデータを保存する際にセキュリティが担保され、データが安全に取り扱えるようになります以下は、ユーザーのパスワードをBase64でエンコードする例です
“`
require ‘base64’
Procとlambdaの違いとRails開発で使われる場面
## はじめに
`Proc.new`と`lambda`はどちらもProcクラスのオブジェクトを作成する方法です。
しかし、両者で作られるオブジェクトには挙動の違いがあります。
そこでこの記事では、`Proc.new`と`lambda`それぞれで生成されるProcオブジェクトの違いをまとめます。
この記事におけるバージョンは**Ruby 3.3**です。
## 【おさらい】`Proc.new`と`lambda`の使い方
最初にサラッと`Proc.new`と`lambda`の使い方を確認しておきます。
### `Proc.new`の使い方
次のように`Proc.new`を使います。
“`ruby
p = Proc.new { |n| n * 2 }
p.call(5) #=> 10
“`また`Proc.new`の代わりに`proc`メソッドを用いても、同じ機能のProcオブジェクトを生成できます。
“`ruby
p = proc { |n| n * 2 }
p.call(5) #=> 10
“`### `lambda`の使い方
`Proc.new`
includesメソッドについて
## 初めに
疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。## どういった時に使用するメソッドか
主に一覧などを作成する際、アクションに定義する。
関連するデータを一度のクエリで効率的に取得できる。## 具体的には
“`
@object = object.includes(:example)
“`
objectを取得と同時にそれに関連するexampleも一緒にロードされる。
これによってN+1問題が解消されるので、効率的に関連データを取得できる。