- 1. 【Rails】find_eachで大量データを扱う
- 2. 【Rails】Youtube APIを使ってIDで動画を検索する
- 3. rubyの個人的推しメソッド take_while を使ってみよう
- 4. 色々な言語の Dictionary のキーの型の扱いについて調べてみた
- 5. Redmineをv1.4からv5.1へアップグレード
- 6. 必要そうなのを全部入れておいたマイコンの中のmRuby量産型
- 7. WSL2でrbenvからRubyをビルドしようとしたら、すんなりいかなかった話
- 8. 【Rails・デザパタ】マイグレーションで学ぶCommandパターン
- 9. 【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
- 10. Ryby/Ruby on Railsを習得するためにやったこと まとめ(随時更新)
- 11. マイグレーションとmerge の関係性
- 12. 最適なデータベース設計とは
- 13. AtCoder Unit Test が新しくなりました!
- 14. rails testしたら “Migrations are pending. …” とか出る
- 15. 【Railsチュートリアル】第11-14章 まとめ
- 16. 【Railsチュートリアル】第6-10章 まとめ
- 17. 【Railsチュートリアル】第1-5章 まとめ
- 18. 【Progate】Ruby on Rails 5 まとめ
- 19. find_or_create_byメソッドについて
- 20. 【個人開発】運動の習慣化を手助けするサービス『トレゴリ』をリリースしました🦍
【Rails】find_eachで大量データを扱う
# この記事で言いたいこと
大量データのループ処理を扱う際には`find_each`がメモリ節約に有効である。# きっかけ
先日、Ruby on Railsで大量データを扱う機会がありました。
その際`find_each`というメソッドがあることを学んだので、`each`との違いを明らかにしながらまとめていこうと思います。# eachを用いた例
`Student`というモデルがあると仮定します。
studentsテーブルにある生徒の名前(nameカラム)を全員分出力したい場合、皆さんはどのようなコードを書きますか?“`ruby
Student.all.each do |student|
puts student.name
end
“`上記のように`Student.all`でレコードを全件取得してから`each`メソッドを使用することで、studentsテーブルにいるすべての生徒の名前を出力することができます。
レコード数が少ない場合は上記の例のように書くのがよいでしょう。
しかしレコードが大量にある場合は、上記のようにレコードを一気に取得する方法だとメモリ
【Rails】Youtube APIを使ってIDで動画を検索する
# はじめに
この記事では学習中に出会ったエラーとその解決までの道のりを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。# やりたいこと
YouTubeの動画IDから動画情報を検索し、タイトル・概要欄・サムネイルを取得する# 準備
– APIキーの取得
– APIキーを環境変数に設定
– YouTube Data API v3を使うためのgemをインストールこの3つを準備していきます。
## APIキーの取得
– Google Cloud Consoleにログイン
– 新しいプロジェクトを作成![77772AA8-87F8-4842-93B5-FAAF741B9554_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3671013/b59aafd9-fba9-448f-e181-76b62371327a.jpeg)
– 使用するAPIの有効化
**APIとサービス**の**ライ
rubyの個人的推しメソッド take_while を使ってみよう
rubyの組み込みメソッド一覧を見ていると
「こんなメソッドがあったんだ!」という
マイナー(個人の感想です)なメソッドを見つけることがありますよね。
痒いところに手が届くような、豊富なメソッドがrubyにはありますが
そんなメソッドの中、個人的推しメソッドである`take_while`を紹介します。## take_whileの機能
`take_while`は、Enumerableモジュールのメソッドです。**Enumerableオブジェクトの要素を順に評価し、
falseになった最初の要素の、手前の要素までを配列で返却します**## こんな時につかおう!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391935/7710e1fc-be69-3505-eaba-671124132451.png)例えば、シャッフルしたデッキのトップからカードを順に引いていき、JOKERが出るまで手札に加えるような処理を想定します。
“`ruby
deck = [‘♠️2’, ‘♦️5
色々な言語の Dictionary のキーの型の扱いについて調べてみた
Dictionary や object のキーに複数の型を指定した場合、どういった扱いになるのかが非常に気になったので、自分の知っている範囲の言語で試してみました!
# Python の場合
“`python:Python
a = {}
a[1] = “int”
a[1.0] = “float”
a[“1.0”] = “str”
# => {1: ‘float’, ‘1.0’: ‘str’}
“`int と float は同一視されるようです。Python では `1 == 1.0` が成立するので、これは合理的な気もしますね。使う側は非常に安心できます。他にも、True, False, Fraction, Decimal なども同一視されるようです。
> Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).
https://docs.python.org/3.5/lib
Redmineをv1.4からv5.1へアップグレード
最近、とあるお仕事で長年運用してきたRedmine v1.4をRedmine v5.1へアップグレードしました。
Redmineの構築は約10年ぶり。作業しながらだんだん思い出してきましたが、Redmineのインストールはとても面倒です。Redmineの、というよりは、Ruby on Railsベースのアプリの、というほうが正しいのかもしれませんが。
作業のログを残しておきます。# 要件
* __OSのEOSL対応__。元々Redmineを運用してきたサーバーのOSのEOSL対応が必要なため、別途新しくサーバーを用意してRedmineをインストールする。
* __基盤をさくらのVPSからAWSへ移行__。構築や運用における様々な利便性を考慮し、新しいサーバーOSはAWS上に構築する。
* __旧環境のデータを新環境へ移行__。旧環境のRedmineからデータベース内の全データとディスク上の添付ファイルを移行する。
* __DBもEOSL対応__。OS同様にEOSL対応が必要なため、新しいサーバー上に最新のMySQLをインストールする。
* __RDS化やコンテナ化はなし__。移行
必要そうなのを全部入れておいたマイコンの中のmRuby量産型
計算機
a)データ
b)ロジック
c)Net
システム
WSL2でrbenvからRubyをビルドしようとしたら、すんなりいかなかった話
# 今回のサマリ
WSL2上のUbuntuでrbenvからRubyをビルドしようとしたら、ライブラリが足りずにエラーが出ました。
足りなかったライブラリは以下の通りです。
* `libyaml`
* `fiddle`
* `openssl`# 環境
* WSL2(windows11)
* Ubuntu.22.04LTS
* rbenvのバージョンは以下の通り
“`
~$ rbenv -v
rbenv 1.2.0-87-ge8b7a27
“`# 今回の困りごと
今度はWSL2上でのUbuntuの話です。
WSL2上で運用しているUbuntuでrbenvからRubyをビルドしようとしたら、下記のようなエラーを吐かれました。“`
$ rbenv install 3.2.3
==> Downloading openssl-3.1.4.tar.gz…
-> curl -q -fL -o openssl-3.1.4.tar.gz https://dqw8nmjcqpjn7.cloudfront.net/840af5366ab9b522bde525826be3ef0
【Rails・デザパタ】マイグレーションで学ぶCommandパターン
## Commandパターンとは
Commandは「命令」という意味で、「命令」をオブジェクトに表したデザインパターンです。命令オブジェクトごとにステータスを保持されることで、複数のコマンドの履歴管理や、複数の命令をまとめて実行・ロールバックすることが容易になります。## Rails の ActiveRecord での Commandパターン
`Rails` の `ActiveRecord` のマイグレーション機能ではテーブルを追加したり、カラムの変更を行うことができます。本来はSQLを直接実行することでDBに変更を加えますが、マイグレーションは専用のスクリプトファイルを用意し、それを実行します。## マイグレーションの基本動作
マイグレーションファイルの作成はコマンドで実行することができます
“`terminal
rails generate model Cat name:string age:integer
“`“`db/migration/20240315_create_cats.rb
class CreateCats < ActiveRecord::Mi
【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
## 概要
`Rails` で `API` を開発する際に、`ActiveModelSerializers` のバージョン `0.10.x` を使用しているとネストされた関連オブジェクトをレンダリングできないという問題に直面しました。この問題は、`render` メソッドで `include` オプションを明示的に指定することで解決できます。
## 原因
`ActiveModelSerializers` のバージョン `0.10.x` では、デフォルトでネストされた関連オブジェクトの自動レンダリングがサポートされていません。これにより、期待通りにネストされた `JSON` を返却するために追加の手順が必要になります。
## 対処法: `include` オプションの使用
期待通りにネストされた `JSON` レスポンスを生成するためには、`render` メソッド内で `include` オプションを使用して、明示的にネストされたオブジェクトを指定する必要があります。以下は、店舗情報とその関連オブジェクトをレンダリングする `Rails` コントローラーの実装例です。
“
Ryby/Ruby on Railsを習得するためにやったこと まとめ(随時更新)
バックエンド言語「Ruby」およびWebフレームワーク「Ruby on Rails」を習得するためにやったことをここにまとめます。随時更新中!!
—
RubyもインストールしてHello worldしてみる。
※参考:[初めてのRuby:インストール確認、REPL、Hello worldまで](http://idr-zz.hatenablog.com/entry/2018/11/20/224131)
6年ぶりのRyby再開計画発動!!Rubyistに、俺はなる!?
※参考:[Rubyistに、俺はなる!? 6年ぶりのRyby再開計画発動](https://www.i-ryo.com/entry/2024/03/24/201632)
最新版のRubyをGemini先生に助けられながらインストールする
※参考:[【Ruby】最新版Rubyをインストール 〜苦戦の記録〜(ありがとうGemini先生)](https://www.i-ryo.com/entry/2024/03/26/225903)
マイグレーションとmerge の関係性
マイグレーションに記入した
“`ruby
class CreatePrototypes < ActiveRecord::Migration[7.0] def change create_table :prototypes do |t| t.string :title t.text :catch_copy t.text :concept t.references :user, null:false, foreign_key: true t.timestamps end end end ``` 上記の通り `t.references :user, null:false, foreign_key: true` を記述すると ストロングパラメーターに`merge`を付けることを忘れずにする!!これをせずにいるとうまく遷移できなかった。 具体的に ```ruby private def prototype_params params.require(:photo).permit(
最適なデータベース設計とは
# 初めに
バックエンドエンジニアとしてそれなりに仕事をしているので、度々データベースのパフォーマンスを調査する事がある。この機会に、最適なデータベースとは何なのか一度棚卸ししたいと思い、データベース設計のベストプラクティスを見直してみた(ついでに社内でRailsを触れているのでデータベース設計も軽くRailsで書いた)
# 最適なデータベース設計とは
データベースの正規化とパフォーマンスのバランスは、データモデリングにおいて非常に重要なテーマです。この記事では、商品管理データベースを例に、Railsを使用して次の2つの異なるアプローチでテーブルを作成する方法を紹介します。
1. **正規化が適正なテーブル作成** – データの整合性と再利用性を最大化する
2. **パフォーマンスが優先のテーブル作成** – クエリの速度と効率を最大化する### **1. 正規化が適正なテーブル作成**
正規化は、データの重複を避け、整合性を保つために行います。商品管理データベースでは、以下のようにテーブルを設計します。
– **`products`** テーブル: 商品ID、商品名、
AtCoder Unit Test が新しくなりました!
AtCoder の問題ページからユニットテストを生成するブラウザ拡張機能 “AtCoder Unit Test” を大幅リニューアル!便利な新機能をいろいろ実装しました!
* **テストコードのテンプレートが編集できるようになりました。**
* **テストコードの生成方法が変更になりました。**
* Go, Ruby のテストコードを生成できるようになりました。
* (Python, Ruby) テストコードを含んだまま提出できるようになりました。 ([例](https://atcoder.jp/contests/abc341/submissions/51385551))
* (Java, Kotlin) テストライブラリが JUnit5 に変更になりました。ダウンロードは ↓ から。ぜひご利用ください!!!
* [AtCoder Unit Test – Chrome ウェブストア](https://chromewebstore.google.com/detail/atcoder-unit-test/lmahhninbclefepjbcdfbcjnancipfmi?hl=j
rails testしたら “Migrations are pending. …” とか出る
# はじめに
最近、Railsを触り始めました。
転職先で使用するかもしれないので学習するためにはじめてます。
(この時はまだ決まってない。この先も決まらない…かも…しれない :relaxed: )今回は自分が遭遇したエラー対応の備忘録として書いてます。
# 環境
* Ruby 3.2.3
* Rails 7.1.3
* SQLite3 1.4## `rails test` したら、’Migrations are pending.’ と出る
`rails test` コマンドを実行しようとしたら、以下のエラーが出る。
“`terminal
C:\Users> rails test
Migrations are pending. To resolve this issue, run:bin/rails db:migrate
You have 2 pending migrations:
db/migrate/20240227131218_create_users.rb
db/migrate/20240302042818_create_micropost
【Railsチュートリアル】第11-14章 まとめ
## 第11章
### コンソールの改行
“`ruby:ターミナルrails generate migration add_activation_to_users \
> activation_digest:string activated:boolean activated_at:datetime“`
### メーラーの生成
“`ruby:ターミナルrails generate mailer UserMailer account_activation password_reset
“`
### メールを即時送信
“`ruby:app/controllers/users_controller.rbUserMailer.account_activation(@user).deliver_now
“`
### メッセージを渡し、動作させる
“`ruby:app/models/user.rbdigest = self.send(“#{attribute}_digest”)
“`
### コントローラのアクション内で定義された変数をテストで使
【Railsチュートリアル】第6-10章 まとめ
## 第6章
### データベースを変更しないようにコンソールを使う
“`ruby:コンソールrails console –sandbox
“`
### オブジェクトが有効化を確認
“`ruby:コンソール>> user.valid?
true“`
### データベースにオブジェクトを保存
“`ruby:コンソール>> user.save
“`
### オブジェクトの生成とデータベースへの保存
“`ruby:コンソール>> User.create(name: “A Nother”, email: “another@example.org”)
“`
### データベースからの削除
“`ruby:コンソール>> foo.destroy
“`
### idからデータを検索
“`ruby:コンソール>> User.find(1)
“`
### 値からデータを検索
“`ruby:コンソール>> User.find_by(email: “michael@example.com”)
“`
### データベースの最
【Railsチュートリアル】第1-5章 まとめ
## 第1章
### サーバー実行
“`ruby:ターミナルrails server
“`
### ファイル確認
“`ruby:ターミナルls app/controllers/*_controller.rb
“`
### Gitの設定内容の確認
“`ruby:ターミナルgit config –list
“`
### 全ての変更ファイルをステージング
“`ruby:ターミナルgit add -A
“`
### 現在のステージング状態を知る
“`ruby:ターミナルgit status
“`
### ステージングされた変更内容をリポジトリに保存
“`ruby:ターミナルgit commit -m “Initialize repository”
“`
### これまでのコミットメッセージ履歴を確認
“`ruby:ターミナルgit log
“`
### 直前にコミットした状態まで戻る
“`ruby:ターミナルgit restore
“`
### ブランチを新たに作成し、移動する
“`ruby:タ
【Progate】Ruby on Rails 5 まとめ
## 各コードの機能
### ターミナル
|コード|機能|
|:-|:-|
|`rails new アプリ`|入力したアプリ名と同じファイルを作成|
|`rails server`|サーバーを起動|
|`rails g controller コントローラ名 アクション名`|コントローラとそれに対応したファイルを作成|
|`rails g model テーブル名 カラム名:データ型(※テーブル名は単数系&頭大文字)`|マイグレーションとモデルを作成|
|`rails g migration`|マイグレーションのみを作成(マイグレーションの中身は自分で作成する必要がある)|
|`rails console`|コンソールを起動|
|`quit`|コンソールを終了|
|`File.write(ファイルの場所,ファイルの中身)`|指定したファイルの場所にファイルの中身を記述する|
|`bundle install`|Gemfileに記述したgemをインストールする|
|`インスタンス名.save`|インスタンスをテーブルに保存|
|`モデル名.first`|テーブルから一つのデー
find_or_create_byメソッドについて
## はじめに
個人開発でOmniAuthを用いた認証機能を実装する際に、“`find_or_create_by“`メソッドの挙動について疑問が生じたので、その点について調べてみました。
:::note warn
初学者のため間違いがあるかもしれません。
その際はご指摘いただけると嬉しいです。:::
## 元々の認証機能の一部
既存のユーザーに対して変更があった際には、updateメソッドで更新をしたかったのですが、“`user_update(user_params)“`の部分が動いていないようだったのでなぜだろうと気になりました。
“`ruby
def self.find_or_create_from_auth_hash(auth_hash)
user_params = user_params_from_auth_hash(auth_hash)
User.find_or_create_by!(uid: user_params[:uid]) do |user|
user.update(user_params)
end
end
【個人開発】運動の習慣化を手助けするサービス『トレゴリ』をリリースしました🦍
# まず初めに
皆さん初めまして、[のぞみ](@muscle_gori02)と申します。
私は現在、未経験からのWEBエンジニア転職を目指して、日々学習&転職活動を行なっております。
2024年2月に、運動の習慣化を手助けするゲームフィケーションサービス『トレゴリ』をリリースしました!
**「トレゴリ?なんかゴリラに関係するアプリ何かな?」**
と思われた皆さん、ご明察です…!
今回の記事では、『トレゴリ』の具体的なサービス内容・開発のきっかけ・使用技術…などについて書きました。少々長くなっておりますが、是非最後まで読んでいただけると嬉しいです。笑
# 自己紹介
個人開発のお話に入る前に、少し自己紹介をさせていただきたいと思います🦍
私は地元の高校卒業後、とある製造企業へ入社し生産管理部門の進行長として、約6年間社内製造の進行計画管理に携わってきました。そんな中で色々あり、エンジニアを目指すべく昨年4月に某プログラミングスクールへ入学しました。
(経緯等については長くなってしまうので、省略させていただきます…笑)昨年12月まで仕事と学習