- 1. ステージングされていない変更を破棄してブランチを移る
- 2. クラウド環境構築(github-codespaces)
- 3. 【Ruby on Rails】トランザクション内で定義した変数をトランザクション外でも使う方法
- 4. JSONからパターンマッチで欲しい情報をサクッと取り出す
- 5. dockerで一回コンテナから出てから作業して、また入り直す。
- 6. 【デイトラ】Webアプリ開発コースで作成したRailsアプリをRender.comでデプロイする方法
- 7. Railsでto_paramメソッドが呼び出せない
- 8. ActiveModelSerializerを触ってみた
- 9. counter_cacheの導入と使い方
- 10. 【初心者向け】Ruby on Rails webサイトへの表示について
- 11. Raspberry PiにRailsサーバーを立てて運用する
- 12. Rspec で特定種類のテストだけを対象に before / after を設定する例
- 13. 【Ruby】文字列の長さを調べる方法
- 14. heroku run rails db:migrateでdbに接続ができないエラーが出た。
- 15. 【Rails】Support for calling #default_scope without a block is removed.
- 16. 【Rails6】mappingを使用した診断機能
- 17. 全てのモデルを列挙する
- 18. 【Ruby】文字列と数値を変換する方法
- 19. GitHubプルリクエストをローカルにcheckoutする手順
- 20. 【Ruby】ユーザの入力を受け付ける方法
ステージングされていない変更を破棄してブランチを移る
# ブランチを移動したいけど変更したところを戻せなくて移動できない!
となったことはありませんか?:::note alert
gitでは、衝突する変更を含む場合はブランチを移ることができません
(衝突しないなら可能)
:::チーム開発の際、余計な変更も含めてcommitしてしまうと、
変更履歴が汚くなってしまいます😭# 指針としては
:::note info
・変更を保持したまま、ブランチを移る
・変更を破棄してブランチを移る
:::
この二つがあると思います。# 変更を保持したまま、ブランチを移る
*変更を一時保存する*
“`
git stash
“`
*ブランチを移動する*
“`
git checkout 移りたいブランチ名
“`
*必要に応じてstashした変更を戻す*
“`
git stash pop
“`
# 変更を破棄して、ブランチを移る
*変更を破棄する*
“`
git checkout — .
“`
*ブランチを移る*
“`
git checkout 移りたいブランチ名
“`
(まあGPTに聞けば出てくることではあるんですけどねw)
クラウド環境構築(github-codespaces)
## 環境構築をクラウドで簡略化しよう!
githubのサービスで無料枠のクラウド上に環境構築が出来るサービスがあった。
これを使用すれば、rubyとrailsやその他ライブラリなどで発生するバージョンでの交互関係のエラーを
解消できるという。
コード記入はVScodeのような操作性!
個人アカウントでは、15GBのストレージと1ヶ月に120Hが無料枠で使える。
環境構築でさんざん苦しみ、初学者たちが苦しんできた事実を鑑みればとても有益にみえる。早速、githubでリポジトリ新しく作成。
githubのメイン画面からcode→codespaceタブ→openingcodespace
で作成が出来る。“`
rvm list
“`ダウンロードのバージョンを確認。
適用したいのはruby3.0.1なのですがリストにありませんでした。
rvmでダウンロードします。“`
rvm install ruby 3.0.1
“`rials もダウンロード
“`
gem install rails v-7.0.0 -N
“`“-N”でドキュメントのダウンロードを
【Ruby on Rails】トランザクション内で定義した変数をトランザクション外でも使う方法
# はじめに
仕事でRuby on Railsを用いてバックエンド開発を行っているのですが、その中でトランザクション内で定義した変数をトランザクション外で使いたいケースが出てきたので、その方法について共有します。
# インスタンス変数を使う
その方法とは、「**インスタンス変数を使う**」ことです。インスタンス変数とは、`@hogehoge`といったように、変数の前に`@`を付与した変数になり、ブロックの外でも変数を使用したいときに用いられます。
ブロックの外でインスタンス変数を使う用途として
* クラス内のメソッドで定義された変数に対して、インスタンスを生成することで別のメソッドでも利用できるようにする(詳細記事は[こちら](https://qiita.com/mary_new_programmer/items/4c4353c3d1df7242f515))
* Controllerファイルで定義した変数をViewファイルでも利用できるようにする(詳細記事は[こちら](https://zenn.dev/ganmo3/articles/58c1f44fa50831))
が代
JSONからパターンマッチで欲しい情報をサクッと取り出す
Webhookのレスポンス(JSON形式)から特定の値だけを取り出したいときにパターンマッチをつかうと便利だったので紹介します。
:::note info
以下を `irb` で直接打ち込みながら動作確認できます
::::::note warn
正常系・異常系を書く場合、case-inを使うほうが適切な場面もあります。
決まったレスポンスを扱うときや、取得できなかった場合の適切なエラーハンドリングをおこなう前提で使うようにすること。
:::# シンプルなkey/value
“`rb
json = {
“id”: 1,
“name”: “John Doe”,
“email”: “johndoe@example.com”,
“registered_at”: “2024-01-15T10:30:00Z”
}
“`## nameとemailだけほしい
“`rb
json => { name:, email }name
=> “John Doe”
=> “johndoe@example.com”
“`# 配列の先頭の住所を取得す
dockerで一回コンテナから出てから作業して、また入り直す。
# コンテナから出て作業するのってどうすれば?
と思ったので書こうと思いました。結論としては、*コンテナ内から出る*
まず、現在コンテナ内にいる場合は、exit コマンドを実行してシェルを終了し、ホストマシンに戻ります。
“`
exit
“`
/ここで諸々作業する*再度コンテナに入る*
その後、以下のコマンドを使って、元の作業していたコンテナに再度入ります。
“`
docker exec -it コンテナ名 /bin/sh
“`
### 流れ
– exit でコンテナ内のシェルから抜ける。
– コンテナが実行中であれば、*docker exec -it コンテナ名 /bin/sh* で再度シェルに接続できる。
これで問題なくコンテナ内に再度入れます!
【デイトラ】Webアプリ開発コースで作成したRailsアプリをRender.comでデプロイする方法
## はじめに
いま受講しているデイトラのWebアプリ開発コースでは、合計3つのアプリを作成します(ハンズオンで作成するアプリ + 課題として作成するアプリ × 2)ハンズオン形式でレクチャーされているデプロイ方法はherokuです。
PostgreSQLのアドオンをそれぞれのアプリに使用する必要があるため、
各アプリごとに$5/月かかってしまう計算になります。気持ち的にそのお金があるなら技術書を買いたいので、Renderを使ったデプロイに挑戦してみました。
### 開発環境
– Ruby 2.7.7 => 3.1.0*
– Rails 6.0.6.1 => 6.1.7.8*
– node.js v14.16.1
– PostgreSQL 14
– Windows11
– WSL2(Ubuntu)*もともとのバージョンが古く、Renderでのデプロイに対応していなかったため、アップデート作業が必要になりました
### デプロイまでの流れ
1. デプロイ用の設定(S3の設定など)
1. Renderの登録・設定
1. RubyとRailsのバージョンアップ対応
1. R
Railsでto_paramメソッドが呼び出せない
## 概要
SEO対策の一環として、RailsアプリケーションのURLに含まれる`id`を固有名詞に置き換える実装を行いました。
例えば、以下のようなケースです。“`ruby
# これを
https://spocale.com/fruit/1
# 以下の形式にしたい。
https://spocale.com/fruit/apple
“`
フルーツに関する一覧ページがあり、そこから「りんご」を選択して詳細ページに飛ぶ場合を想定します。このとき、URLの`id`部分を`apple`という固有の文字列に変えたいとします。ただし、既存のURLを突然変更すると、ブックマークなどで保存されている従来のURLが使えなくなる可能性があります。そこで、id付きの従来のURLも維持しつつ、新しい形式のURLも利用できるように実装しました。この記事では、その過程で直面した課題と解決方法についてまとめます。
## 対象読者
– Railsアプリケーションでid付きのURLを固有名詞で表示する方法
ActiveModelSerializerを触ってみた
# はじめに
ActiveModelSerializerを業務で使ったのでざっくりと使い方をまとめようと思います。
誤り等ございましたら、コメントいただけるとありがたいです。# セットアップ
#### インストール方法
– Gemのインストール手順
“`ruby
gem ‘active_model_serializers’, ‘~> 0.10.0’
“`
出力されるjson構造を変更したい場合(defaultはattributes),
config/initializers/active_model_serializers.ファイルを作成し,
“`ruby
ActiveModelSerializers.config.adapter = :json_api
“`
を記述します。#### active_model_serializerとは
– ActiveModelSerializerの概要
ActiveModelSerializerはrailsアプリケーションを簡単にjsonシリアライズするためのgemですシリアライズとは、(W
counter_cacheの導入と使い方
この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。
## 記事投稿の背景
この記事ではXのクローンサイトを作成中にBulletで検知したN+1問題を解決するために実装した内容を紹介します。
機能としては投稿に対するいいねとコメントの数を集計して表示させる機能に関する内容です。
実装当初の内容と修正後の内容を掲載したいと思います。## 実装当初のコード
“`ruby:tweet.rb
class Tweet < ApplicationRecord belongs_to :user validates :content, presence: true, length: { in: 1..140 } has_many_attached :images has_many :favorites, dependent: :destroy has_many :comments, dependent: :destroy has_many :retweets, dependent:
【初心者向け】Ruby on Rails webサイトへの表示について
現在、デイトラでWeb開発を学んでおり、その学習において、学んだことを共有させていただきます!
現在は、Ruby on RailsでWebサイトを作成中です。
![スクリーンショット 2024-09-25 15.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894345/650a3c5b-d9bd-c4a2-af14-ce07b232e71e.png)
どうやってこれらの文字を表示しているのでしょうか?
“`routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
get ‘/’ => ‘home#index’
end
“`
ブラウザから get ‘/’ リクエストがきたら、routes.rbで処理が開始され、home#indexが実行されます
Raspberry PiにRailsサーバーを立てて運用する
![P_20240924_172516.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72890/ea5e1765-6b95-a2c9-7e62-19679f63e5c9.jpeg)
# 初めに
家庭内で家族が使えるお小遣いアプリをRuby on Railsで作っているのですが、少しでも維持費を抑えるためにRaspberry Piを自宅サーバーにしてその上で動かすことにしました。
ただし、今回はあくまで自宅内でのサービス限定とし外部には公開しません。# 前提条件
– Raspberry Pi 5を使用
– OSインストール、初期設定、ネットワークの設定は済んでいる
– 消費電力を抑えるために無線LANはOFFにしている
– sshで接続できるようになっている# 下準備、環境アップデート
“` bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rsi-update
sudo rpi-upda
Rspec で特定種類のテストだけを対象に before / after を設定する例
# 例
system test の全てのテストケースを対象に `before(:each)` の処理をさせる場合
`rails_helper.rb` に以下を設定
“`rb
RSpec.configure do |config|
config.before(:each, :type => lambda { |spec_type| spec_type == :system}) do
…
end
end
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
# プロフィール・経歴
https://github.com/YumaInaura/YumaInaura
【Ruby】文字列の長さを調べる方法
文字列の長さを調べるには`length`メソッドを使用します。
## 基本的な使い方
`length`メソッドは、以下のように使用します。
“`ruby
# 文字列の長さを取得
string = “Hello, World!”
puts string.length # 出力: 13“`
空白や特殊文字もカウントされます。
“`ruby
string_with_spaces = ” Ruby ”
puts string_with_spaces.length # 出力: 8
“`## 配列の要素を数える
配列に対して`length`メソッドを使用すると、その配列に含まれる要素の数を返します。
“`ruby
empty_array = []
puts empty_array.length # 出力: 0mixed_array = [1, “two”, :three]
puts mixed_array.length # 出力: 3
“`## `size`メソッド
`size`メソッドも`length`メソッドと同様に使用できます。
“`r
heroku run rails db:migrateでdbに接続ができないエラーが出た。
自分用備忘録です。初心者なので、間違っていることや、理解が違っていることがありましたら、教えていただけると幸いです。
## 問題
deviseでメール認証機能をつけたアプリをherokuにデプロイしようとした際、dbが見つからないというエラーが出た。## 解決方法
database.ymlファイルのproductionに
“`url: <%= ENV['DATABASE_URL'] %>“` を追加する。#### [解決までの過程(記録用)]
deviseで管理者機能をつけたアプリをherokuにデプロイ。
“`ruby
% git push heroku master
“`HerokuのダッシュボードのResourcesからadd on設定
postgresqlを選択データベースの設定が完了したので、
“`ruby
% heroku run rails db:migrate
“`下記のエラーが発生しました。
“`ruby
Running rails db:migrate on ⬢ hidden-journey-8
【Rails】Support for calling #default_scope without a block is removed.
## はじめに
Railsのアップデート中にdefault_scopeを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
コード
“`ruby
default_scope order(“created_at DESC”)
“`エラー文
“`ruby
Support for calling #default_scope without a block is removed. For example instead of `default_scope where(color: ‘red’)`, please use `default_scope { where(color: ‘red’) }`. (Alternatively you can just redefine self.default_scope.)
“`## 解決方法
以下のように修正します。
“`ruby
default_scope { order(“created_at DESC”) }
“`## 参考
https://stackoverflow.com/questions/3
【Rails6】mappingを使用した診断機能
## 1. 導入
### 背景
Railsアプリケーションでユーザー入力に基づく診断機能を実装する方法を説明します。本記事では、ユーザーの名前と選択したシナリオに応じて、最適な花を推薦する機能に焦点を当てています。
### 目的
この機能を通じて、特定の条件に基づいて適切なデータをマッピングし、ユーザーに適した結果を提示する方法を示します。## 2. 実装手順
### 基本設定
– Railsアプリケーションのセットアップ
– 必要なGemのインストール(例: gem ‘sqlite3’, gem ‘puma’)モデルの作成
“`ruby:ruby
# app/models/flower.rb
class Flower < ApplicationRecord end ``` ### コントローラの設定 ```ruby:ruby class DiagnosesController < ApplicationController def create @recipient_name = params[:recipient_name].strip.dow
全てのモデルを列挙する
# やりたいこと
全てのモデルを列挙したい。
# 方法
“`rb
# 開発環境だとクラスが自動読み込みされる。
# このままだと読み込み済みのモデルしか列挙できないので、明示的に一括読み込みしておく。
# 規模が大きい Rails アプリケーションだと時間がかかる。
Rails.application.eager_load!# 全てのモデルを列挙する。
# ApplicationRecord のような抽象クラスは除外する。
ActiveRecord::Base.descendants.reject(&:abstract_class?)
“`# バージョン情報
※ 現時点での最新のバージョンではありません。
“`rb
RUBY_VERSION
#=> “3.1.2”Rails.version
#=> “7.1.4”
“`
【Ruby】文字列と数値を変換する方法
## 文字列を数値に変換する
文字列を数値に変換するには`.to_i`メソッドを使用します。
“`ruby
value = “123”
integer_value = value.to_i
puts integer_value
# 123
“`文字列が整数に変換可能な場合にはその整数値が返されます。
変換できない場合には、`0`が返されます。“`ruby
value = “abc”
integer_value = value.to_i
puts integer_value
# 0
“`## 数値を文字列に変換する
数値を文字列に変換するには`.to_s`を使用します。
“`ruby
number = 123
string_value = number.to_s
puts string_value
# “123”
“`すべてのオブジェクトは`.to_s`メソッドを持っており、呼び出すことでそのオブジェクトの文字列表現を取得できます。
“`ruby
array = [1, 2, 3]
string_value = array.to_s
p
GitHubプルリクエストをローカルにcheckoutする手順
## 背景
背景としては他の開発メンバーのプルリクをこちらで修正するためにローカル環境へ内容を落とす必要があったためRequest(プルリクエスト)をローカルへcheckoutする必要がありました。この記事では、GitHubのプルリクエストをローカル環境に取り込むための具体的な手順について説明します。
## 1. 対象リポジトリをclone
まず、対象リポジトリをローカルにcloneします。以下のコマンドを使用してください。“`
git clone git@github.com:GitHubアカウント名/test.git
“`
testリポジトリを例としてcloneしています。## 2. fetchを実行
次に、プルリクエストのIDと新しく作成するブランチ名を指定して、git fetchコマンドを実行
“`
git fetch origin pull/1/head:develop
“`
ここで、1はプルリクエストのIDで、developは作成するブランチ名です。プルリクエストのIDはGitHubのプルリクエスト画面から確認できます。## 3. 作成されたbra
【Ruby】ユーザの入力を受け付ける方法
ユーザーからの入力を受け付けるには`gets`メソッドを使用します。
## 基本的な使い方
`gets`メソッドは、標準入力から1行のデータを読み取ります。
以下は、`gets`メソッドの基本的な使用例です。“`ruby:example.rb
puts “名前を入力してください”name = gets
puts “こんにちは” + name + “さん”
“`このコードを実行すると、ユーザーに名前の入力を促し、入力された文字列を使用してメッセージを出力します。
“`terminal
$ ruby example.rb
名前を入力してください
sample
こんにちはsample
さん
“`## 改行文字の取り扱い
`gets`メソッドは、入力されたデータの末尾に改行文字を含みます。
この改行文字は`chomp`メソッドを使用することで削除できます。“`ruby
puts “名前を入力してください”name = gets.chomp
puts “こんにちは” + name + “さん”
“`上記のようにすることで末尾の改行文字が削除され