- 1. macOSにRubyの最新バージョンをインストール
- 2. ActiveAdminのアクション追加例3パターン
- 3. 💎AnthropicのClaude3をRubyから呼び出す
- 4. 【rails】Herokuに画像が表示されない
- 5. 【rails】viewの共通applicationを切り分ける
- 6. 【rails】.envファイルに環境変数を設定する
- 7. 【rails】OAuthを用いて、GitHub認証ログイン機能を実装する
- 8. erbファイルでemmetが効かなくなった
- 9. DateTimeのズレ
- 10. Ruby extendについて
- 11. Example title
- 12. Example title
- 13. Railsの日本語化
- 14. 【ザックリ概要】ActiveRecordの基礎
- 15. 【ruby】timesを使った繰り返し処理
- 16. 【Rails】RSpec便利なカスタマイズ
- 17. GroveBeginnerKit を、C++(Arduino)とRuby(ラズパイ,Rboard) で使う I2C – OLED(SSD1315) 編
- 18. railsでのお作法について纏めてみた
- 19. Ruby Silverの勉強をして良かった点
- 20. ancestry gemで発生するN+1問題の解決法
macOSにRubyの最新バージョンをインストール
ふとRubyを触ろうと思った時にバージョンを確認すると、なかなか古いバージョンだったのでアップデートしようとしました。
rbenvというツールを使って複数バージョンが共存可能とのことだったの、それを使ってアップデートではなく最新版をインストールしていきます# 環境
OS : macOS14.4.1
Homebrew : 4.2.21
shell : zshHomebrewは既にインストール済み、最新版にアップデート済みの前提で書いていきます。
Homebrewをインストールしていない場合は[こちら](https://qiita.com/ynack/items/e9151819461590678bf5)を参考にどうぞ。# SystemのRubyのバージョン確認
作業を始める前にデフォルトのrubyのバージョンを確認します。
“` :バージョン確認
% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
“`2.6.10p210で2022年4月12日のバージ
ActiveAdminのアクション追加例3パターン
## はじめに
ActiveAdminで開発を進めていると独自アクションを追加したいケースがあります。
本記事ではよく使うアクションの追加例を3パターン紹介します。### アクションとは
Railsのコントローラに記述する`#index`, `#show`, `#new`, `#create`, `#edit`, `#update`, `#destroy`などのことです。
### どのような時にアクションを追加するのか
ActiveAdminでは普段使用する7種類のアクションを用意してくれますが、例えば「全ユーザを一括で更新したい」といった処理はもちろん自分でアクションを書く必要があります。
通常のRailsコントローラならroutes.rbにmemberやcollectionを書けばよいのですが、ActiveAdminではそうはいかないので本記事を書くことにしました。参考: [Railsガイドのmemberやcollectionの解説](https://railsguides.jp/routing.html#restful%E3%81%AA%E3%82%A2%E3%8
💎AnthropicのClaude3をRubyから呼び出す
## 環境
macOS Ventura 13.5.2
Ruby 2.6.10p210## やりたいこと
RubyをAnthropicのClaude3を呼び出したい
日本語記事を検索するとAmazon Bedrockを使った方法しかないので記事にしてみた## やったこと
`@alexrudall`氏の`anthropic`のライブラリを使用しますhttps://github.com/alexrudall/anthropic
—
#### `Gemfile`に下記を追加
“`Gemfile
source ‘https://rubygems.org’
gem “anthropic”
“`
#### ライブラリをインストール
ターミナルにて現在の作業ディレクトリに移動し`bundle install`を実行
“`zsh
bundle install
Fetching gem metadata from https://rubygems.org/………
Resolving dependencies…
Using base64 0.2.0
Followin
【rails】Herokuに画像が表示されない
# はじめに
– `assets/images/logo.jpeg` に画像を保存し,imgタグにてパスを参照してブラウザ表示を試みた。
– 上記ローカル環境にて表示することはできたが、“heroku“にデプロイした環境では表示させることができなかった。# やったこと
– 拡張子が `jpeg` になっていた→ `jpg` に修正する。
– `img` タグで記述を `image_tag` に修正する。
– `assets/images/x_logo.jpg` で絶対パス指定していたものを、 `x_logo.jpg` の形で相対パスに変更する。
– 修正後のコード↓“`ruby
.login
.text-center
= image_tag ‘x_logo.jpg’ ,alt: ” ,width: ’60’ ,height: ’57’
h3.text-center サインアップ“`
# 結果
– 開発環境、Heroku本番環境の両方でアイコンの画像を表示させることができた。
# 参考
https://qiita.com/jnchito/
【rails】viewの共通applicationを切り分ける
# やりたいこと
– deviseを用いたログイン、サインアップ画面と通常のメイン画面とで、共通のviewを切り分けて表示させたい。
– (例)メニューヘッダー,サイドバーはログイン画面には表示させたくない# やったこと
1. ユーザー認証用のHTMLを作る
2. ApplicationControllerに描画の切替を制御する記述をする
ユーザー認証用のHTML(ファイル名は任意)のファイル名で作って、`app/views/layouts/`配下に作る
※`app/views/layouts/devise.html.erb`で作るとします
devise.html.erb
“`jsx
Sample
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'rel
【rails】.envファイルに環境変数を設定する
# はじめに
– 外部に公開したくないpasswordなどを環境変数として `.env`ファイルに設定する。
– githubにコミットした際に、 `gitignore` ファイルに.envファイルを指定することで、パスを外部に公開されないようにすることができる。
– 上記の手順を簡単に下記へまとめる。# 手順
– detenvを `Gemfile` にインストール
“`jsx
gem ‘dotenv-rails’
“`– `.env` ファイルに外部に公開したくないIDやpassを記述する
“`jsx
LOGIN_NAME=’name123′
LOGIN_PASSWORD=’pass123′
“`– 上記を `環境変数` として他のファイルから呼び出す際は以下のように記述する
“`jsx
ENV[‘LOGIN_NAME’]
ENV[‘LOGIN_PASSWORD’]
“`– Githubに.envファイルがコミットされないように `.gitignore` ファイルに以下を追加
“`ruby
/.env
“`# 参考
https://q
【rails】OAuthを用いて、GitHub認証ログイン機能を実装する
# やりたいこと
– deviseのomniauthableの機能でgithubログインを実装する
– [ログイン](http://localhost:3000/users/sign_in),[サインアップ](http://localhost:3000/users/sign_up)からgithubログインができるようにする。– 挙動
– サインアップ、ログイン画面より「GitHub認証」のボタンを押下
– GitHubのログイン画面へ遷移しid,パスを入力しログインボタンを押下
– github上で認証するためのトークンを発行し、それをWebサイト側で検証
– 上記が認証されるとトップ画面へ遷移する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/515b9f63-e3b8-c9e4-0d21-6a0f981afc17.png)
# 調査
– 必要なこと
– omniauthableの実装に必要なge
erbファイルでemmetが効かなくなった
## emmetが効かない・・・
vscodeでerbファイルにdiv.containerなどを途中まで入力してtabキーを押しても自動補完されなくなってしまった・・・## Ruby LSPを有効化したら
拡張機能のRuby LSPが無効になっていたので、有効化→再起動
[![Image from Gyazo](https://i.gyazo.com/88f5734f6fa8a085f59ce72c75fa845b.png)](https://gyazo.com/88f5734f6fa8a085f59ce72c75fa845b)無事にemmetが使用できるようになりました!!
DateTimeのズレ
# sqlで範囲検索するとずれる
“`rb
irb(main):073:0> a = DateTime.now
=> Fri, 10 May 2024 00:45:56 +0900
“`
“`rb
irb(main):076:0> Model.where(created_at:b .. a)
Model Load (0.5ms) SELECT `models`.* FROM `models` WHERE `models`.`created_at` BETWEEN ‘2024-05-03 00:00:00’ AND ‘2024-05-09 15:45:56.557590’
=> []
“`
“`Fri, 10 May 2024 00:45:56 +0900“`が“`’2024-05-09 15:45:56.557590’“`になっている。9時間前になる。
“`+0900“`が9時間前になっているからだと思う。“`+0000“`すると時差が解消される“`rb
irb(main):078:0> a = “#{DateTime.now.to_date}
Ruby extendについて
# はじめに
#### ※以下の内容には誤りが含まれる可能性があります
# extendとは何か
extendとはモジュールのメソッドを使用するためのメソッドです。
クラスの中でモジュールを呼び出すときに使います。
その際extendはクラスメソッドとして読み込む。
# extendの使い方
“`
module cat
def name
“ミケ”
end
endclass Animal
extend Cat
endp Animal.name
“`includeメソッドとの違いはクラスメソッドとしてモジュールがインクルードされる点です。
# まとめ
– extendはモジュールを使用するためのメソッド
– extendeはクラスメソッドとして読み込む
Example title
# Example
Example title
# Example
Railsの日本語化
## バージョン
Ruby:3.1.4p223
Rails :7.0.8.1## 手順
1. 複数言語に対応させるため”rails-i18n”というGemを導入
2. “ja.yml”ファイルを作成
3. application.rb内に設定を記述### 1.複数言語に対応させるため”rails-i18n”というGemを導入
rails-i18n は、Railsアプリケーションで国際化(i18n)をサポートするためのGemで。
国際化とは、アプリケーションのテキストやメッセージを複数の言語に対応させるためのプロセスのことで、このGemを使うことで、Railsアプリケーションで多言語サポートを実装するための便利な機能が提供されます。“`ruby
gem ‘rails-i18n’
“`
### 2. “ja.yml”ファイルを作成
**config➡locals➡配下に”ja.yml”を作成**“.yml”はYAML(YAML Ain’t Markup Language)形式のファイル拡張子。
“ja.yml”ファイル
【ザックリ概要】ActiveRecordの基礎
※解釈が入り混じっているので不備などがあるかもしれません。予めご了承ください。
※ザックリと理解するというスタンスなのでまとめ方が不十分かもしれません
***
引用元・参考サイト
[Railsガイド](https://railsguides.jp/active_record_basics.html)
***
# 概要
– `Active Record`はMVCのMを相当する『オブジェクト指向 × DB操作』を可能にした仕組み
データ操作をオブジェクトを介して実現可能にしている
– ORMというシステム設計パターンを採用しており、ORMではDBの種類ごとのSQLの記述の違いを吸収してくれるなど”互換性が高い”のが大きな特徴
– `Active Record`は次のような特徴を持つ
– 先述したSQLでのDB操作をオブジェクトを介して実行可能な点に加えて、『RDBのような”テーブル同士の相関”などよりDB寄りなデータの意味までもオブジェクトで表現できる』
> ・モデルおよびモデル内のデータを表現する[^1]
> ・モデル同士の関連付け(アソシエーション)を表現する[^1]
【ruby】timesを使った繰り返し処理
timesを使った繰り返し処理です。
“`ruby
greeting = ‘Hello world’
n = 5
n.times do
puts greeting
end“`
実行した結果です。
![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710584/a66ee55e-e680-6c13-77a2-d9eb3b9cf966.jpeg)
【Rails】RSpec便利なカスタマイズ
# カスタマイズ一覧
“`spec_helper.rb
RSpec.configure do |config|
# 1
config.filter_run_when_matching :focus# 2
config.example_status_persistence_file_path = “spec/examples.txt”# 3
config.disable_monkey_patching!# 4
if config.files_to_run.one?
config.default_formatter = “doc”
end# 5
config.profile_examples = 10# 6
config.order = :random# 7
Kernel.srand config.seed
end
“`## 1. 特定のテストのみ実行する方法
### 方法1
“`terminal
// rspec ファイルパス:行数
$ rspec spec/models/user_sp
GroveBeginnerKit を、C++(Arduino)とRuby(ラズパイ,Rboard) で使う I2C – OLED(SSD1315) 編
[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。
[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第7回、最後は I2C 接続の OLED ビットマップディスプレイを題材にします。
このレポートでは、今まで通り
「メーカーのデータシートを見て、ICを直接コントロールをすること」
を、方針とします。しかしながら、今までのセンサー類と違いディスプレイコントローラは桁違いに設定項目が多く扱いが難しいです。通常ですと既存ライブラリを使うのが当たり前になると思いますが、学習用の記事という性質上ライブラリは使わずにコントロールします。[^1]
ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspb
railsでのお作法について纏めてみた
## 対象読者
– railsを初めて触る人
– 簡単なCRUD、ルーティングまでを一つの記事で理解したい方
– apiとwebのエンドポイントを共存させるほう法を知りたい方
Ruby Silverの勉強をして良かった点
転職活動中のRubyエンジニアです。
自分の経験を棚卸した際に、Ruby Silverの勉強をしておいて良かったなと思いました。
せっかくなので何が良かったかを紹介します。## 「インスタンス変数のセッターメソッド呼び出しになぜレシーバの明示が必要か」がわかった
nameとageのカラムを持つusersテーブルと対応するクラスを以下のように実装したとします。
“`app/models/user.rb
class User < ActiveRecord::Base def set_attributes(name, age) # ↓レシーバを明示する self.name = name # ↓レシーバを明示しない age = age end end ``` set_attributesメソッドでnameとageに値をセットできるつもりですが、いざ実行すると以下のようになります。 ```rb u = User.new u.set_attributes('Taro', 25) u.name #=> ‘Taro’
u.age #=> nil
`
ancestry gemで発生するN+1問題の解決法
# はじめに
Railsで階層構造を持つデータモデルを扱う際に使用する`ancestry` gem。便利なメソッドが準備されている反面、そのまま使用してしまうとN+1を起こしパフォーマンス的に良くない状態になってしまったので、どうやって解決したかを説明します。## TL;DR
`ancestry` gemを使用して親子関係を扱う際に、メソッドを使わず自己参照のリレーションを利用することでN+1問題を解消できます。# 環境
Ruby 3.3.0
Rails 7.1.3.2
ancestry 4.3.3## 親子関係とN+1問題の例
`ancestry` gemを使うと、カテゴリーのような階層構造を持つモデルを簡単に作成できます。例えば、以下のようにCategoryモデル単体で階層化されたモデルを例に考えます。“`ruby
# category.rb
class Category < ApplicationRecord has_ancestry end ``` N+1を起こす原因箇所 ```erb -# index.html.erb
関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた