- 1. PHPerがRuby(Ruby on Rails)を約3年経験した結果
- 2. Railsで不定期タスクを簡単に管理する:Sidekiqの活用法
- 3. 【個人開発】野球歴16年男が「野球の成績を記録して友達とランキング形式で共有できる」サービスを開発しました
- 4. 【個人開発】歯ブラシの情報収集と、リサイクルでの地球環境改善を目指すアプリを開発しました
- 5. 【Rails + Docker】Render.comでMulti Environment Credentialsに対応する
- 6. 【Rails】find_eachで大量データを扱う
- 7. かんたんLINE botをつくろう!【クイズをつくる】
- 8. RailsのModelで定義したenumの対応関係を確認する
- 9. 【Rails】Youtube APIを使ってIDで動画を検索する
- 10. かんたんLINE botをつくろう!【Rails 応用編】
- 11. 【Rails API】rack-corsでレスポンスヘッダーにアクセスできるようにする方法
- 12. collectionオプション
- 13. 【Rails】指定したマイグレーションのみやり直す方法
- 14. 【Rails】パスワードリセット機能を実装する
- 15. かんたんLINE botをつくろう!【Rails編】
- 16. Redmineをv1.4からv5.1へアップグレード
- 17. ActiveStorageの合計サイズのバリデーションをかけるには?
- 18. 【Rails・デザパタ】マイグレーションで学ぶCommandパターン
- 19. bundle install実行時に”An error occurred while installing pg (1.5.6), and Bundler cannot continue. “って出る時
- 20. 【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
PHPerがRuby(Ruby on Rails)を約3年経験した結果
# はじめに
Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です:innocent:今回はHubbleに転職して約3年経つので、振り返りの意味も込めてPHPerで一切Rubyを触ったことがなかった僕が、約3年Rubyを使った所感を書こうと思います!
# 筆者のサマリ
大学は電子情報で大学院は技術経営を学んでしました。大学院は21卒なので21卒で就活をして、サマーインターンでWeb開発を知り、PHPと出会い、Web開発の沼にハマりました。しかし、大学院にいるよりも早く実践を積みたいと、大学院を中退し、20卒としてソーシャルゲーム会社に就職しました。
ソーシャルゲームということで、PHPをそのまま経験、その後受託系の会社に転職し、そこにはPHPerKaigiの運営にも携わっている方にPHPの真髄を叩き込まれました。その後、自分が完全未経験のRubyで開発しているHubbleに入社しました。
# 結論
RubyもPHPも本質はなにも変わらないです。
これはその通りと言えば、その通りのこ
Railsで不定期タスクを簡単に管理する:Sidekiqの活用法
# 1. はじめに
自分は10月よりAPPRENTICE SHIP(内定直結型エンジニア学習プログラム)のカリキュラムに2期生として参加しています。
この記事はオリジナルアプリ開発の際に使用した、Sidekiqの備忘録として書いています。
間違いがありましたらご指摘いただけると幸いです
#### 読者対象
– Ruby初学者の方
– これからSidekiqを使おうか悩んでいる方
– RubyまたはRailsで非同期処理を行おうとしている方
– 不定期な時間で動く処理を実装しようとしている方
以上がこの記事の対象者となります。
# 2. Sidekiqとは?
[Sidekiq公式リファレンス](https://github.com/sidekiq/sidekiq)
SidekiqとはRubyで非同期処理を簡単に実装するためのライブラリになります。
#### 補足:そもそも非同期処理って?
– 簡単に言えば、サーバーのタイミングをみて手隙の時間に処理してもらう方法です。他の処理とタイミングが被っても他の処理が止まりません。
– 逆に同期処理にしてしまうと、重い処理を走らせた時に、完了する
【個人開発】野球歴16年男が「野球の成績を記録して友達とランキング形式で共有できる」サービスを開発しました
## はじめに
私は小学校〜社会人2年目までの**約16年間**、野球漬けの毎日を過ごしていました。そんな野球男が**全ての野球人**に向けた **「野球の成績記録・共有サービス」** を開発しました。このサービスは、試合ごとに**個人成績を記録**することで、**自動で「打率」や「防御率」**などを**計算**し管理することができます。そして、**LINEのグループ機能**のように簡単にユーザー同士でグループを作成し、グループ内のメンバーで **「打率」や「防御率」などの個人成績をランキング形式で共有・比較** することができます。
このサービスを作成したいと思った背景としては、私が野球部のキャプテンを務めている際に、選手の野球に対するモチベーション向上に課題を感じることが多くあり、その課題を解決するサービスを作成したいと思ったことがきっかけになります。そのため、ユーザー同士の成績をランキング形式で比較することで、ユーザーに対して競争心を与え、少しでもモチベーション向上のサポートに繋げたいと考えました。
そして、今回 **「BUZZ BASE | 野球の個人成績をランキング
【個人開発】歯ブラシの情報収集と、リサイクルでの地球環境改善を目指すアプリを開発しました
## はじめに
はじめまして、Ryuseiと申します。
プログラミングスクールでRubyとRuby On Railsを中心に学習しているのですが、
歯ブラシの情報収集を行いながら、歯ブラシのリサイクルを広めていくアプリとして「歯ブラシLife! ~Make up environment~」(以下歯ブラシLife)を作成しました。アプリURL: https://www.haburashi-life.com
Github URL: https://github.com/TAMETOMO8/Haburashi_Life## なぜこのアプリを作ったのか?
以前からドラッグストアなどで、「歯の間が磨けていない気がするからこの歯ブラシを使おう」「今回はどんな歯ブラシを使おうか?」と店頭で見比べたり、実際に使ってみたりと歯ブラシに関心がありました。そんな中で、ふと「他の人はどんな歯ブラシを使用しているのか?」と疑問に感じました。他の人が使用している歯ブラシを知るサービス、アプリがないか調べましたが、調べた限りでは見つけることができなかったので、無いなら自分で作ってしまおうと考え、このアプリを
【Rails + Docker】Render.comでMulti Environment Credentialsに対応する
## はじめに
Render.comでなにも考えずデプロイしたら、development環境でデプロイされてしまいました。
production環境でデプロイしたくて試行錯誤したのでその方法と詰まった点を簡単にまとめてみました。
Render.comに環境変数を追加するために今までdashboardから追加していました。
`.env`で環境変数を管理することも考えましたが、チーム開発の際の障害が大きすぎるので`credentials.yml.enc`での管理を考えました。## Multi Environment Credentialsとは
credentialsは`rails5.2`からサポートされ始めた機能です。
機密情報を暗号化し、安全に保護するためのものです。
Credentialsを使えば、復号化キーを紛失、もしくは盗難にあわない限り、機密情報を保護することができます。
`rails6`よりMulti Environment Credentials機能が追加され、環境毎に秘匿情報を設定できるようになりました。## 実際に設定する
最終的な`credentials.yml
【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テーブルにいるすべての生徒の名前を出力することができます。
レコード数が少ない場合は上記の例のように書くのがよいでしょう。
しかしレコードが大量にある場合は、上記のようにレコードを一気に取得する方法だとメモリ
かんたんLINE botをつくろう!【クイズをつくる】
# はじめに
前回記事で物足りなかった方向けの記事です。
https://qiita.com/kohki_takatama/items/88927cf75ae1a5f683f2
## 課題:`postback`を使用してクイズを3問つくる
こんな課題を、前回記事の最後に出しました。
その解答例を載せておきます。# 解答例
ヒント
`postback`を使うメリットは、
– `message`と違い、(非正規の)ユーザー操作で呼び出すことができない
– 「正しい回答」と「間違った回答」で処理をまとめられること(問題を増やしたときに、同じ処理を繰り返し書かなくてすむこと)です。
特に、「正しい回答」と「間違った回答」で処理をまとめられること
これを実現してみてください。条件分岐には、すでにあるものが使えます。
`def callback`の中の、`case event ~ when Line::Bot::Event::Message ~`を拡張しま
RailsのModelで定義したenumの対応関係を確認する
## 背景
enumを設定したはいいものの、
一定数を超えると数字と文字の対応関係がわかりにくくなると思います。そんな時にconsoleでパッと確認できますよ〜という内容です。
## 確認方法
まず、例として次のようなUserモデルがあるとします。“`ruby
class User < ApplicationRecord enum :status, [ :active, :inactive, :suspended # ...省略 ] end ``` このモデルで定義されたstatus enumの数値と文字列の対応関係を表示するには、 rails consoleで以下のコマンドを実行します。 ```ruby User.statuses ``` これにより、以下のような出力が得られます。 ``` { "active" => 0,
“inactive” => 1,
“suspended” => 2,
…
}
“`めでたし*2。
【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とサービス**の**ライ
かんたんLINE botをつくろう!【Rails 応用編】
# はじめに
前回記事で作成した、以下のコードを改造していきます!
https://qiita.com/kohki_takatama/items/278b1f47e355e08df43a
“`ruby
class LinebotController < ApplicationController def callback body = request.body.read events = client.parse_events_from(body) events.each do |event| case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text message = { type: 'text', text: event.message['text'] }
【Rails API】rack-corsでレスポンスヘッダーにアクセスできるようにする方法
`rack-cors`をインストールして`config/initializers/cors.rb`の`expose`を記述することでJavaScriptからレスポンスヘッダーにアクセスできるようになります。
“`rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins ‘localhost:3000’resource “*”,
headers: :any,
methods: %i[get post put patch delete options head],
expose: %w[X-Sample],
credentials: true
end
end
“`上記の場合には`X-Sample`にアクセス可能になります。
https://github.com/cyu/rack-cors
collectionオプション
collection オプションは指定したインスタンス変数の中にある要素の数だけ、部分テンプレートを呼びだすことができる。
collectionを使えば繰り返し表示させたい要素がインスタンス変数に複数入っている場合でも`each`メソッドを使わず`render`で繰り返し表示できる。## collectionを使う場合
“`ruby
<%= render partial: 'hoge', collection: @hoges %>
“`
collectionを使用する際は、複数要素が入っているインスタンス変数を、collectionオプションの対象に指定する。部分テンプレート内では、インスタンス変数から取り出した要素を、部分テンプレート名と同じ変数名で扱うことができます。
つまり、_hoge.html.erb内において、@hogesから取り出された1つ1つの要素はhogeとして扱うことができます。## eachを使う場合
“`ruby
<% @hoges.each do |hoge|%>
<%= render partial: 'hoge', lacals: {hog
【Rails】指定したマイグレーションのみやり直す方法
マイグレーションをやり直したいファイル名:db/migrate/20240227224617_sorcery_reset_password.rb
“`
docker compose run web rails db:migrate:redo VERSION=20240227224617
“`### 参考
https://mintaku-blog.net/rails-redo/
【Rails】パスワードリセット機能を実装する
## 実装の流れ
1. sorceryのReset passwordモジュールをインストールする
1. Mailerの作成
1. コントローラの作成
1. トークンにユニーク制約を付与
1. ビューファイルの作成
1. letter_opener_webの導入
1. configを導入公式wikiに手順が説明されている。
https://github.com/Sorcery/sorcery/wiki/Reset-password## sorceryのサブモジュールをインストール
“`
$ rails g sorcery:install reset_password –only-submodules
“`
以下のファイルが生成される。
config/initializers/sorcery.rb
app/models/user.rb
db/migrate/20231105121233_sorcery_reset_password.rbしかし私の場合、app/models/user.rbでエラーのような文が表示された。
“`
gsub config/initializ
かんたんLINE botをつくろう!【Rails編】
# はじめに
前回記事はこちら
https://qiita.com/kohki_takatama/items/e19960e479a712d63408
1. LINE botをつくろう!ノーコード編
2. LINE botをつくろう!Rails編 👈今ココ
3. あれって、何してたの?会(イベント内のみで、2次会的に開催)[【個人開発】通勤時にQiitaのトレンド記事が届くLINE Botを開発した #Ruby – Qiita](https://qiita.com/KNR109/items/e1b5ebd94393441fff74)
こちらの記事を大きく参考にさせていただきました!ありがとうございます!
# 2. LINE botをつくろう!Rails編ここからはアドバンスな内容です。
# 2-1. ngrok の設定
LINE botのテストに必要な、ngrokというサービスのアカウントを作成します。
簡単に言うと、ローカルな(自分の手元の)プログラミングコードに外部からアクセスできるようにするサービスです。## 2-1-1. ngrokにアクセス
https
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化やコンテナ化はなし__。移行
ActiveStorageの合計サイズのバリデーションをかけるには?
複数のActiveStorage とモデルを紐づける `has_many_attached :files` フィールドの合計サイズでバリデーションをかけるのにはまりました。
## 削除フラグに対応した以下のようなフィールドを定義しているケースです
“`ruby:some_model.rb
has_many_attached :files
accepts_nested_attributes_for :files_attachments, allow_destroy: true
“`## 以下のように書いてませんか?
安心してくださいうまく動きません。
削除予定のファイルも含めてサイズが計算されてしまいます。“`ruby:some_model.rb
validate :validate_total_attachments_size
def validate_total_attachments_size
total_size = 0files.each do |file|
total_size += file.byte_siz
【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
bundle install実行時に”An error occurred while installing pg (1.5.6), and Bundler cannot continue. “って出る時
## 概要
“`
$ rails new アプリ名 –database=postgresql
“`
や
“`
$ bundle install
“`
などを実行した際にタイトルのエラー文に遭遇しました。エラー文からわかる通り、「Railsのposgresql用のgemをインストールしている最中にエラーが発生しました」ということだとは思うのですが、ネット記事などで似たようなケースがあまりなく、類似の記事でも原因が自分のケースと全然違うようだったのであまり参考にならなそうですが自分のケースを備忘録的に書いてみました。
## やったこと
“`
$ brew services list
“`
で
mysql none
postgresql@14 started
と表示されていたので、動いている状態でした。##### 最初から確認してみた
pg_config –version などのコマンドを実行して、PostgreSQLがインストールされているかを確認します。
“`
$ pg_config –version
=> PostgreSQL 14.11(Home
【Rails】ネストされた関連オブジェクトのレンダリング問題とその対処法
## 概要
`Rails` で `API` を開発する際に、`ActiveModelSerializers` のバージョン `0.10.x` を使用しているとネストされた関連オブジェクトをレンダリングできないという問題に直面しました。この問題は、`render` メソッドで `include` オプションを明示的に指定することで解決できます。
## 原因
`ActiveModelSerializers` のバージョン `0.10.x` では、デフォルトでネストされた関連オブジェクトの自動レンダリングがサポートされていません。これにより、期待通りにネストされた `JSON` を返却するために追加の手順が必要になります。
## 対処法: `include` オプションの使用
期待通りにネストされた `JSON` レスポンスを生成するためには、`render` メソッド内で `include` オプションを使用して、明示的にネストされたオブジェクトを指定する必要があります。以下は、店舗情報とその関連オブジェクトをレンダリングする `Rails` コントローラーの実装例です。
“