- 1. Rails 8.0.0 のアプリケーションをDocker環境で起動する
- 2. [Rails]マイグレーション後のschema.rbはいつも絶対ではない
- 3. 【誰でもできる】自作Gemを作って公開するまでの道のり
- 4. 【個人開発】勉強場所の検索サービスを作成しました ✍️
- 5. とほほのRuby on Rails入門を参照しながら、よくわかっていないことをまとめた
- 6. Ruby on RailsにViteとTailwindCSSを導入
- 7. 【Rails】N + 1問題についてそろそろちゃんと向き合わなきゃな…
- 8. rails new [プロジェクト名]コマンドで作成したアプリがGitHubにプッシュできない時の対処法
- 9. Ruby on Railsの課題の取り組み方(RUNTEQの課題を通して学んだ課題の取り組み方について)
- 10. RailsからSlack/GoogleChat/TeamsなどのチャットアプリにDMで通知を送る
- 11. 【Rails】レコードが見つからない場合におけるfindとfind_byの挙動の違い
- 12. Rails で DB から取得するデータに対し order が効かない場合
- 13. macOS利用の初心者Rubyプログラマは要確認!9つの開発環境チェックポイント
- 14. ユーザー設定(devise)駆け足説明 【備忘録】
- 15. 【Ruby on Rails】renderとredirect_to
- 16. 初学者が見逃しがちなN+1とは【Rails、Django】
- 17. Lightsailで立ち上げたRedmineのadminユーザーのpassを忘れてしまった
- 18. Tailwind CSSでレスポンシブが効かない!! ビューポートメタタグ
- 19. railsアプリのフォルダ構造
- 20. railsのライブラリ構造
Rails 8.0.0 のアプリケーションをDocker環境で起動する
この状態を目指します。
![Ruby_on_Rails_8_0_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504414/9654b43c-c5ea-7a2d-1a12-4cef5100ad6a.png)# 準備
VSCodeに `Dev Containers`拡張機能をインストールしておきます。
筆者のVSCodeは言語設定を日本語にしてあります。# rails-new コマンドをインストール
Docker環境前提ですが、このコマンドを使えばPCにRubyやRailsをインストールしなくても、新しいRailsアプリケーションを作れます。
`rails-new blog –devcontainer` のように使います。
コマンドが使えるかどうかは`rails-new help`や`rails-new -V`で確認できます。https://github.com/rails/rails-new
具体的な手順
“`
https
[Rails]マイグレーション後のschema.rbはいつも絶対ではない
「私が貼ったインデックス、全部消されているのですが…」
今週仕事をしていたら、このような連絡をいただいた。
あれ、schema.rbは手修正してはいけないんじゃなかった?(違う)## 経緯
いつものようにマイグレーション込みのPRを作成し、レビュー後マージされその週の本番リリースまでにその内容がSTGところだった。コンフリクトも生じていなく、developマージの時はschema.rbのバージョンだけ新しくしてapprove、マージ。
しかし、マイグレーションの時にインデックスを貼るところの記述がschema.rbから丸ごと消えていてそのままSTGが運用されていた。
## 兆候
確かに最近マイグレーションを実行するたびにすごい量のモデルアノテーションの変更分が出ていた。
うざいなと思いつつ、原因を探ろうとはしなかった。## 原因
### マイグレーション実行順序
以下のような状況を考える。“`
develop branch: A -> B -> C
\
feature branch: D ->
【誰でもできる】自作Gemを作って公開するまでの道のり
こんにちは、とまだです。
[Ruby on Rails Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ruby-on-rails)、2 日目の記事をお届けします!
みなさんは、「**自分で Gem を作ってみたい!**」と思ったことはありませんか?
自分が作った Gem(ライブラリ)が世界中の Ruby on Rails アプリで使われるなんて、ちょっとテンション上がりますよね。
そこで、今回は Gem の作り方を**初心者向け**に解説していきたいと思います。
以前、無駄な Gem を作った経験をもとにしているので、よければそちらもご覧ください。
https://qiita.com/tomada/items/579d54283f03a0dc6a9b
## Gem って何?
まずは、そもそも Gem とは何かおさらいしましょう。
Gem とは、Ruby で作られたライブラリやプログラムをパッケージ化したものです。
例えば、以下のようなものが Gem として提供されています。
– **de
【個人開発】勉強場所の検索サービスを作成しました ✍️
# はじめに
初めまして。ゆうき(@yuki31100725)と申します。現在、プログラミングスクールRUNTEQに通ってRuby on Railsを学習しております。
今回、スクールの卒業制作として「**LearnLocator**」という、勉強場所(自習室・コワーキングスペース)の検索サービスを作成しました。
### サービスはこちら
https://www.learn-locator.com/### GitHubリポジトリはこちら
https://github.com/Yuki11saitou/LearnLocator本サービスとロゴに込めた思い
このロゴは、羽根ペンで筆を走らせるようなイメージと、LearnLocatorの「 L 」を組み合わせたデザインにしています。
また、サービス全体で「 白 」を基調としたデザイン
とほほのRuby on Rails入門を参照しながら、よくわかっていないことをまとめた
とりあえずやってみようという感じで手を出した際の雑多なメモです。
お世話になったサイトは以下です。https://www.tohoho-web.com/ex/rails.html
## 3.10 スキャフォールド(scaffold)とは何か
> ルーティングやコントローラー(controller)、ビュー(view)、モデル(model)とテーブル(データベース)の記述やファイルなどを自動で作成してくれるコマンドです。
実際に以下を実行してみると、大量のファイルが自動で生成されました。
しかも既にxxx.html.erb等
Ruby on RailsにViteとTailwindCSSを導入
前は`Webpack`を使っていましたが、設定などが難しいので辞めました。VueJSに慣れてから、VueJSの作者の作った`Vite`を使ってみて、早くて便利なので各プロジェクトに導入しました。
この記事は、既存のRailsアプリケーションに簡単に`Vite`と`TailwindCSS`を導入する方法をメモします。
## Viteを追加する
“`ruby:Gemfile
gem ‘vite_rails’
“`そして以下のコマンドでViteをインストールする
“`zsh
vite install
“``app/views/layouts/application.html.erb`に、`stylesheet_link_tag`と`javascript_importmap_tags`はもう必要ないので削除します。その代わりにVite専用タグを追加します。
“`erb:app/views/layouts/application.html.erb
<%= vite_client_tag %>
<%= vite_javascript_tag 'appl
【Rails】N + 1問題についてそろそろちゃんと向き合わなきゃな…
# 「あー、N+1問題ね。うんうん…もちろん考慮すべきだね」
と言いつつ朧げな理解のままここまで生きてきました。
歴が長くなるにつれこういう基本的なことを知らないのがバレると恥ずかしいので
恥をかく前にちゃんと理解しておこう。## eager_load
指定したassociationをLEFT OUTER JOINでキャッシュする
“`
orders.eager_load(:order_items)
“`
“`
SELECT
`orders`.`id` AS t0_r0,
`orders`.`store_account_id` AS t0_r1
FROM
`orders`
LEFT OUTER JOIN `order_items` ON `order_items`.`order_id` = `orders`.`id`;
“`
## preloadordersテーブルからデータを取得
取得してきた`order`のidを持つ`order_items`をIN句で取得
クエリが2回実行される
“`
orders.pre_load(:order_items)
`
rails new [プロジェクト名]コマンドで作成したアプリがGitHubにプッシュできない時の対処法
## はじめに
以下のrails newコマンドで作成したプロジェクトがGitHubにプッシュできず困ったので、同じエラーに悩まれている方の手助けになればと思い、記事に残すことにしました。
“`bash
rails new rails-app
“`## まずは結論
結論から言うと、rails newコマンドで.gitファイルがrails-appディレクトリ内に自動的に作成されていて、それがGitHubではサブモジュールとして扱われてしまうことが原因でした。作成された.gitを削除することで解消しました。## エラー状況
“`bash
git add rails-app
“`
上記を実行すると、以下のように表示されます
“`bash
error: ‘rails-app/’ does not have a commit checked out
fatal: adding files failed
“`## エラー対処
### 1. ディレクトリ内のファイルを確認
“`bash
ls -a rails-app/
“`
**実行結果**
![スクリーンショット 2
Ruby on Railsの課題の取り組み方(RUNTEQの課題を通して学んだ課題の取り組み方について)
Hello!しっしーです🦁
僕は、現在RUNTEQというプログラミングスクールに通い、
Ruby on Railsを使ってWebアプリ開発の技術習得を目指しています!そして、現在は5ヶ月目に突入!
総学習時間はざっくり800時間くらいになります。
(※独学時の学習時間も含むHTML、CSS、JSがメイン)そんな僕が、現在どのように課題と向き合い、
どのように問題解決をしているのかをまとめてお話しすることで、これから学習をしていく方の参考になるのではないか?と思い!
現在の課題の取り組み方をまとめておきたいと思います。
## 目次:
– [Ruby on Railsの課題に取り組む時の心構え](#ruby-on-railsの課題に取り組む時の心構え)
– [Railsの課題の進め方](#railsの課題の進め方)
– [まとめ](#まとめ)## Ruby on Railsの課題に取り組む時の心構え
まず、課題に対する心構えについてお話しします。
当然ですが、ある程度学習を進めているとはいえ、
僕は全くの🔰初心者です。なので、何もわかりません笑
なので、ち
RailsからSlack/GoogleChat/TeamsなどのチャットアプリにDMで通知を送る
## はじめに
サーバーから直接DMで通知を送りたいことがあると思いますが、Webhookを使うと公開チャンネルへの投稿はできるものの、DMには送信できません。
そこで今回は、各チャットツールでDM送信を実現する方法を比較しながら紹介します。## チャットツール連携の共通的なステップ
### 1. チャットアプリの作成
各チャットツールで、アプリ名、機能、認証時のリダイレクトURLなどを設定します。
設定は`manifest.json`や管理画面から行います。### 2. アプリのインストール
通常、管理者の承認が必要です。開発時には自分のワークスペースや組織でのみインストール可能です。
他組織へのインストールが必要な場合は、マーケットプレイスへの公開やリンク共有で促します。### 3. ユーザー認証ボタンの用意
OAuth認証を行うためのボタンを設置し、スコープなどのパラメータを渡します。認証完了後、アクセストークンが発行されます。### 4. サーバーからのDM送信
取得したアクセストークンでメッセージを送信します。
ユーザー認証によって得られたアクセストークンをり
【Rails】レコードが見つからない場合におけるfindとfind_byの挙動の違い
## はじめに
Railsの`find`メソッドと`find_by`メソッドはレコードが見つからない時の挙動が異なります。
どっちがどっちだったかいつも忘れるため、備忘録としてまとめます。
## レコードが見つからない場合におけるfindとfind_byの挙動の違い
レコードが見つからない場合の両者の挙動は次のとおりです。
– `find`メソッド:`ActiveRecord::RecordNotFound`エラーを返す
– `find_by`メソッド:`nil`を返す## 実際の挙動を確認
実際の挙動を確認して終わります。
### `find`メソッド(ActiveRecord::RecordNotFoundエラーが発生)
“`ruby
sample-app> Book.find(99999999)
Book Load (0.6ms) SELECT “books”.* FROM “books” WHERE “books”.”id” = ? LIMIT ? [[“id”, 99999999], [“LIMIT”, 1]]
/opt/homebre
Rails で DB から取得するデータに対し order が効かない場合
# 修正前
* 条件に応じてソート方法を分岐させたくて以下のように実装
* しかし機能しなかった
“`ruby:修正前
def search
result = Post.all.order(created_at: :desc)
if #-条件-#
result = result.order(:created_at)
end
end
“`# 修正後
* 以下のように修正したら機能
“`ruby:修正後
def search
result = Post.all
if #-条件-#
result = result.order(:created_at)
end
end
“`# メモ
* この場合は `Post.all` の時点で「id の降順」になっているので、実質「created_at の降順」であったので余計な order になっていた
macOS利用の初心者Rubyプログラマは要確認!9つの開発環境チェックポイント
## はじめに:これは何?
僕は[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)でメンターをやっています。
これまでたくさんの生徒さんたちを見てきましたが、まあまあの頻度で「開発環境がおかしいせいで、不思議なトラブルに巻き込まれるケース」を見てきました。具体的には「Appleチップなのに、間違ってIntel版のセットアップを行っているケース」です。
特にプログラミング初心者の人はネットの記事を見よう見まねでセットアップするので、本人も知らないうちにおかしなセットアップをしていることがあります。この状態だと「ある程度は正常に動くが、どこかで謎なトラブルに巻き込まれて無限に時間を溶かしてしまう」という問題が発生しやすいです。
そこで、この記事ではmacOSでRubyを動かしているプログラミング初心者の方を対象に、開発環境のチェックポイントを9つ紹介します。
「AppleチップとかIntelとか、今まで全然気にしたことがなかった」という人は、特に危険かもしれません。
問題がなければ10分程度で終わるので、ぜひ最初から順にチェックしていってく
ユーザー設定(devise)駆け足説明 【備忘録】
## はじめに
サイトを作る際に新規登録、ログイン、ログアウトのユーザー設定は必ず行うものなので詳細は省きとりあえず設定できるよう駆け足で説明。1.Gemfileの最後の行に以下を入力
“`Gemfile
gem ‘devise’
“`
2.ターミナルに順番に入力
“`
% pwd # 現在のディレクトリが作成中のアプリ名であることを確認して
% bundle install # Gemをインストール
% rails s # サーバー再起動
% rails g devise:install # deviseファイル作成
% rails g devise user # deviseコマンドでUserモデルを作成
“`
これでユーザー関連のモデルやマイグレーションも自動で生成してくれて
以下のようにroutes.rbにルーティング追記されている。
“`config/routes.rb
Rails.application.routes.draw do
devise_for :us
【Ruby on Rails】renderとredirect_to
renderを勘違いしていたので整理。
## renderメソッド
renderメソッドは、呼び出すビューファイルを指定することができる。
“`ruby:例
render :edit
“`
コントローラー内で使用するメソッドだが、処理がうまくいかなかったときに、元のページに戻る処理で使われることが多い。
理由は、元のページのデータをそのまま保持することができるため。## redirect_toメソッド
redirect_toメソッドは、指定のurlへ遷移するようリクエストを送信している。
コントローラー内で使用し、pathやURLを指定する。
“`ruby:例
redirect_to root_path
“`
renderがビューファイルを指定しているのに対して、redirect_toは再度ルーティングを通してコントローラーで処理が行われている。## renderメソッドでのビュー再表示
renderメソッドは便利で、フォームでの入力ミスがあった時でも、元のページに戻り、かつ入力値が残ったままになる。
しかし、ビュー内で他のコントローラーに定義されているインスタンス変数
初学者が見逃しがちなN+1とは【Rails、Django】
# はじめに
みなさん、こんにちは。Happiness Chainメンターのryoです。
今回は、RailsやDjangoの課題を取り組んでいる受講生のコードレビューをする際に、よく指摘するN + 1について、詳細と解決策をお話します。
# N+1問題とは
RailsやDjango等に付帯するORMで、1つのテーブルから関連するテーブルのデータも取得する際に、発生する問題です。
例えばXのツイート機能で、ツイート一覧を表示する画面にて説明すると、
ツイートには、ユーザーが紐づいており、ユーザー画像を表示しています。![tweet_list.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634526/106f06e5-bd60-0919-5864-b7740dd49f2b.jpeg)
Railsに以下の様なcontroller, viewを記述しているとします。
“`rb:(Rails)
class TweetsController < ApplicationController d
Lightsailで立ち上げたRedmineのadminユーザーのpassを忘れてしまった
## 経緯
タスク管理ツールとしてRedmineを利用していて
急にadminユーザーとしてログインができなくなった際に焦ったので
同じ過ちを犯さないためにメモ## Redmineとは
RedmineとはそもそもRailsによって作成されたタスク管理ツールです。
ここを理解していると焦らず対応することができる## やったこと
Lightsailサーバのコマンドプロンプトから、もしくはssh可能であれば自身のターミナルからsshしてアクセスをする。1. Redmineのインストールディレクトリに移動
例:
“`
cd /var/lib/redmine
“`
わからなければ
“`
sudo find / -name “config.ru” 2>/dev/null
“`2.Railsのコンソールを開く
“`
bundle exec rails console -e production
“`3.ユーザーのlogin 属性を出力
“`
User.all.each { |user| puts user.login }
“`
ここでadmin: trueと記載さ
Tailwind CSSでレスポンシブが効かない!! ビューポートメタタグ
Tailwind CSSを使ってレスポンシブデザインを作成しているのに、画面サイズを変えてもデザインが変更されない!!
### その原因は、**ビューポートメタタグ**がないことでした!!## ビューポートメタタグとは?
ビューポートメタタグは、ブラウザに「どのように画面サイズを扱うべきか」を指示するものです。このタグがないと、ブラウザはデスクトップ向けのサイズを基準にしてしまい、スマホやタブレットでの表示が崩れることがあります。
### 必要なタグ
`内に追加しましょう。
以下のコードをHTMLの`“`html
“`これで、ブラウザがデバイスの画面幅に合わせてページを適切に表示するようになります。
## このタグの役割
1. **`width=device-width`**
デバイスの画面幅をそのままビューポートの幅として使用します。これにより、ページが画面に収まり、横スクロールが発生しにくくなりま
railsアプリのフォルダ構造
“`rb
/<作成したアプリケーションの名前>
Gemfile #必要なgemを定義
Gemfile.lock #インストールされたgemのリスト
README.md #readmeファイル
Rakefile #ターミナルから実行可能なジョブ
/app
/assets #アセット(javascript/スタイルシート、画像などのリソース)
/config #アセットバイプライン
/image # 画像ファイル
/styleshieets # CSS(SCSS)スタイルシート
application.css # アプリケーション共通のスタイルシート
/channels # Action Cable実装クラス
/controllers # コントローラクラス
application_controller.rb # アプリケーション共通のコントローラ
/help
railsのライブラリ構造
# Action Pack
### Action Controller
>Controllerを担当。
リクエスト処理、状態管理、レスポンスの生成などを司る### Action View
>Viewを担当。テンプレートに基づいてレスポンスを生成。
開発に役立つヘルパーやレイアウト機能を提供。Ajaxにも対応。### Action Dispatch
>リクエスト処理の委譲先を決定するルーティング機能を提供# Active Model
>命名規則/検証機能など、Modelの基本的な規約を定義# Active Record
>データベースへのアクセスを担当、O/Rマッパー# Action Mailer
>メールの送受信機能を提供# Action Mailbox
>メールの受信ん機能を提供# Action Text
>リッチテキストの表示/編集機能を提供# Action Cable
>リアルタイムの双方交通新機能を提供# Active Storage
>ストレージサービスへのデータストア機能を提供# ACtive Resource
>Webサービス関連の