時々とおまわり

プログラミング雑記

M1 macでRubyインストール時のBUILD FAILEDエラーの解決法

RubyをM1 macにインストールする際にBUILD FAILED が表示されインストールできなかったので解決法を調べました。 結論 下記コマンドでインストールできる。 $ RUBY_CFLAGS="-w" rbenv install x.x.x 原因とエラー詳細は後述します。 環境 今回インストールし…

【Rails】フォロー機能の設計と実装

フォロー機能の設計から実装までの情報を整理しました。 実現したいこと 次の2つの機能を実装したい。 自分以外のユーザーをフォローできる フォローしているユーザー 、フォローされているユーザー を取得できる フォロー機能のテーブル設計 上記のフォロー…

ぼっち演算子とは?

ぼっち演算子の使い方をすっかり忘れていたのでまとめておきます。 結論 ぼっち演算子&. とはレシーバーがnil だった場合にNoMethodError ではなくnil を返すRubyのメソッド呼び出しの演算子です。 メソッド呼び出しで .の代わりに &.を使うことができます。…

rails g controllerでディレクトリを指定してファイルを作成する

rails g controller でディレクトリを指定してファイルを作成したかったのでやり方を調べました。 結論 指定するディレクトリを/ か:: で区切って指定する。 $ rails g controller ディレクトリ名/コントローラ名 アクション名 $ rails g controller ディレ…

【Rails】orderメソッドの使い方

order メソッドで並び替えする必要が出たので使い方を調べました。 orderメソッドとは? 取得したレコードを特定のキーで並び変えるメソッド。 Active Record クエリインターフェイス - Railsガイド orderメソッドの使い方 次の書き方で取得したレコードを並…

【Rails】関連付けたモデルの外部キーへのpresense: trueは必要ない

コードレビューでpresense: true の使い方を指摘されたので調べてみました。 結論 関連付けたモデルの外部キーへのpresense: true は必要ない。 アソシエーションによって紐付けられた外部キーの存在しない値やnil の場合へのpresenceバリデーションは自動的…

【Rails】request.refererとは?

コントローラーでリダイレクトさせる際にrequest.referer という見慣れない記述を見かけたので調べてみました。 結論 request.referer で遷移元のURLを取得できる。 requestとは? 現在実行中のリクエストサイクルの中でリクエスト情報が保存されているreque…

【Rails】redirect_toでのnoticeの2つの書き方

redirect_to を使った際のnotice オプションの書き方を忘れていたので調べました。 noticeオプションとは? redirect_to にnotice を使うで遷移後にフラッシュメッセージを表示できる。 フラッシュを表示するためのオプション(キー)はnotice 以外にもalert …

【Rails】外部キー制約とは?

作成したアプリのコードレビューで外部キー制約を追加するように指摘されたので調べて見ました。 結論 外部キーを保存するカラムに対して関連付けしているテーブルの主キーのみを保存するように制限し、データ不整合を防止すること。 具体的には次の制約が追…

【Rails】ビューファイルのパーシャルにはローカル変数で値を渡すべき

パーシャルを使ってビューファイルを共通化する際にlocals オプションを使うべきなのか分からなかったので調べてみました。 結論 パーシャルにはlocals オプションを使ってローカル変数で値を渡した方が良い。 partialは呼び出し元のテンプレートとだけ紐づ…

ブログをはじめて良かったという話

これは「フィヨルドブートキャンプ Part 2 Advent Calendar 2022」の20日目の記事です。 昨日はGennyBoyさんの「家庭・仕事とフィヨルドブートキャンプでの学びを両立させるために4時起き生活にしてみた話」でした。 朝活仲間として学習や輪読会を楽しく続け…

Railsのform_withの使い方

Railsのform_with メソッドへの理解が曖昧だったので簡単にまとめました。 form_with の特徴 Rails5.1以降はform_tag とform_for が非推奨になり、替わりにform_with が推奨になる form_for 的な使い方、form_tag 的な使い方の2つの使い方ができる オプショ…

gitでpush済みのコミットを取り消す方法

誤ってpushしたコミットを取り消す必要が出たのでやり方を調べました。 結論 push済みのコミットを取り消すにはgit reset かgit revert を使う。 git reset: コミットを取り消す、強制pushする git revert: 打ち消しコミットを作成する、追加pushする コミッ…

フィヨルドブートキャンプに入会して1年経ちました

2022年11月5日でフィヨルドブートキャンプ(以下「FBC」)に入会して1年が経ちました。 今年も残り1ヶ月になったのでちょっと早いですが今年の振り返りをしておきます。 学習時間について 私の1年間の学習時間です。 合計時間: 約950時間 月平均: 約80時間 週…

Railsでロールバックしてマイグレーションを修正する

FBCでRailsを使ったユーザーフォローのプラクティスを進めています。 間違ったマイグレーションをロールバックして修正する必要性が出たのでやり方を調べました。 結論 下記手順でDBをロールバックできる。 マイグレーションのバージョン確認 rollback する …

git stashの使い方

gitで管理している作業を並行して進める事が多くなってきたのでgit stash の使い方をまとめておきます。 git stashとは? stashを使用すると、コミットしていない変更を退避することができます。 stashで現在の変更を退避して、今すぐやりたい作業をして、退…

VSCodeにsolargraphを導入する

曖昧だったVSCodeへのsolargraphの導入について整理したのでまとめておきます。 結論 VSCodeでsolargraphを使うにあたって以下の2つが必要。 VSCode拡張機能Ruby Solargraph solargraph gem 下記手順で導入、設定する。 VSCode拡張機能Ruby Solargraph の導…

gitでコンフリクトした時に変更を一括で反映する

gitでコンフリクトが発生して手動ではなく一括で変更を反映したかったのでやり方を調べました。 結論 git checkout --ours ファイルパス、git checkout --theirs ファイルパス を使う。 --ours: 取り込み側の変更を残す --thirs: 取り込まれる側の変更を反映…

Active StorageのN+1問題を解決する

FBCのActive Storageを使ったユーザーアイコンの表示機能を実装しています。 Active Storageを使用した画像取得時にN+1問題が発生していると指摘を受けたので解決法を調べました。 結論 Active StorageのN+1問題はwith_attached_attachment_name スコープを…

Pandocを使ってmarkdownからdocxに変換する方法

markdownで書いたメモをGoogleドキュメントで編集したかったので、markdownファイルからdocxファイルへの変換方法を調べました。 結論 Pandocを使うことでmarkdownファイルからdocxファイルに変換できる。 Pandocとは? .md から.docx 等のドキュメントに変…

Active Storageでアップロードする画像をimage_processingでリサイズする

Active Storageを使った画像アップロード機能を実装中です。 MiniMagickを使った画像リサイズの情報はたくさん見つかったのですが、image_processing gemを使った情報はあまり多くない印象でした。 Rails6からimage_processing gemが必要になったようなので…

Active Storageで画像アップロードに必要なgemについて

RailsのActive Storageを使った画像アップロード機能の実装を行っています。 Active Storageを使う際にgem等の多くのツールが必要になりますが、使用用途が分からずどのツールを使えば良いか分かりにくかったのでまとめました。 Active Storageを使った画像…

Active Storageを使った画像アップロード機能のセットアップ

FBCのRailsプラクティスも残り僅かになってきました。 Active Storageを使って画像アップロード機能を実装するという新しい課題に着手しました。 Acrive Storageを使った画像アップロード機能のセットアップについて調べました。 今回は次のような条件での実…

letter opener webでRailsのメール送信を確認する

前回の記事でRailsにdeviseでメール認証を使ったパスワード再設定を実装しました。 RailsのAction Mailerを使って送信したメールの内容をletter_opener_webというgemで確認できるようなので使い方を調べました。 結論 下記手順でletter_opener_web gemを導入…

RailsのdeviseでCookieを削除してログアウトする

deviseの課題を提出できたので気になってたことをちょっとだけ深堀りしてます。 今回はdeviseでのログイン認証を行っているアプリに対してCookieを削除してログアウトする方法を調べました。 結論 ChromeのDevToolsのApplication タブ内のCookies を選択して…

Railsで特定のアクションのみバリデーションをかけたい

FBCのRailsのdeviseのプラクティスで特定のアクションのみバリデーションをかけたかったので方法を調べました。 結論 特定のアクションのみバリデーションをかけるにはon: オプションでアクションを指定する。 バリデーションはデフォルトでレコード作成、更…

Railsで作成したカラム名を変更する

FBCのdeviseプラクティスで作成したアプリのカラム名を変更したかったので方法を調べました。 結論 作成済みのカラム名の変更は以下手順で行う。 カラム名変更用マイグレーションファイル作成 マイグレーションファイルにカラム名変更の記述を追加 マイグレ…

Railsで整数のみ、桁数指定でバリデーションを追加する

FBCのdeviseプラクティスで郵便番号に整数のみ、桁数指定でバリデーションを追加したかったので方法を調べました。 結論 バリデーションで以下を指定することで整数のみ、桁数指定を追加できます。 整数のみ: numericality: { only_integer: true } 桁数指定…

deviseをdevise-i18nを使って多言語化する

前回の記事ではRailsにdeviseでメール認証を使ったパスワード再設定を実装しました。 今回はアプリ全体の表示をdevise-i18n gemで多言語化します。 tigrish/devise-i18n: Translations for the devise gem 実装対象のアプリはRailsにdeviseを使ってログイン…

Railsにdeviseでメール認証を使ったパスワード再設定を実装する

前回の記事ではRailsアプリにdeviseを使ってユーザーページを追加しました。 今回はdeviseが用意してくれているrecoverble モジュールを使ってメール認証を使ったパスワード再設定機能を追加します。 実装対象のアプリはdeviseを使ってログイン機能を実装す…