- 1. 【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
- 2. ユーザー管理機能
- 3. 正規表現 – 量指定子(繰り返し)について
- 4. Rails パラメータを直接使って四則演算する際の注意点と解決策
- 5. 【Rails】form_withにおけるmodel: とは何者か?
- 6. 【Rails】yieldとrenderの違い
- 7. [Ruby] コマンドライン用フレームワーク「Benry-CmdApp」の紹介
- 8. 【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。
- 9. RubySilverメモ
- 10. Rspecの導入と単体テストコード
- 11. 投稿アプリ詳細表示機能 同じコードをまとめる
- 12. ツイートを編集
- 13. Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる
- 14. [Ruby]こんなものをeachで回すんじゃあないよ
- 15. Ruby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について
- 16. Ruby芸160チャレンジ(#31)正規表現のパターン利用
- 17. optparseでコマンドラインのオプションを使えるようにする
- 18. Example title
- 19. ebayのカードカテゴリ商品のコンディション設定について
- 20. 【Sidekiq】特定のジョブだけ排他制御
【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
※この記録は、プログラミング初学者である私が、行き詰まったり難しいと思ったりしたものを復習できる様にとして残している自分メモです。同じ様なところでつまずいている方のお役に立つことができれば尚よし。間違った記載等あれば教えていただければありがたいです。
## はじめに
いろんなファイルを自動作成してくれるgenerateコマンド。しかし初期段階では何から何まで自動生成されると煩わしさを感じるものもあるからRailsにはジェネレーター実行時にファイルを生成しない為の設定も用意されている。
今回は、config/application.rb内の設定によって、generate コマンドで生成されるファイルに制限をかけようかと。## rails generation時の挙動を確認
ターミナルでrails generation(またはrails g)を実行。
下記の様な色々なファイルが自動生成される。“`
$ bin/rails g controller boards
Running via Spring preloader in process 26592
[+] Running 2
ユーザー管理機能
ユーザ管理機能はとても便利なRuby on RailsのGem機能です!
備忘録として投稿します!### 目的
– deviseを理解
– deviseを使用したユーザー登録の理解
### ログイン機能の実装
– ユーザー登録したユーザーのみがアプリを使えるようにする
– ログインしてないユーザーは投稿機能のアプリだと
新規作成、編集、削除機能などが使えないようにする### ライブラリのインストール
#### devise
ユーザー管理機能を簡単に実装するためのGem
Gemfile
`gem ‘devise’`ターミナル
`bundle install`
Gemインストール後はサーバー再起動
インストールしたGemの反映のタイミングが、サーバー起動時であるため
`ターミナル`### deviseの設定ファイルを作成
#### rails g devise::innstall コマンド
追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンド`rails g devise:install`
### deviseのUse
正規表現 – 量指定子(繰り返し)について
# はじめに
正規表現で、直前の文字の出現回数を指定する、量指定子の紹介と簡単な用法を例示する。
検証は Ruby で行うため、Onigmo 正規表現ライブラリに従う。# 量指定子(Quantifier)
`「」`とそれに囲まれた領域にマッチするパターンを検討する。
“`:例文1
aaa「bbb」ccc
“`
こういった文字列の `「bbb」` にマッチする表現を考える。その中で量指定子の種類と効果を確認する。
## 用法
`「」` の中に含まれるテキストが固定内容なら、以下の様に簡単な正規表現を記述できる。“`ruby:基本1
re = Regexp.new(/「bbb」/)p ‘aaa「bbb」ccc’.scan(re)
# => [“「bbb」”]# scan なのでマッチしたすべてが配列で出てくる
“`しかし、入力された文字列を対象とする場合
`「」` に含まれる内容は文字種も長さも定まったものではないだろう。この不定な内容にマッチするように正規表現を書く際に、量指定子が有効である。
量指定子にはいくつかのタイプがある。
## gre
Rails パラメータを直接使って四則演算する際の注意点と解決策
※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。
# はじめに
Railsアプリケーションを開発する際に、パラメータの処理は非常に重要です。
しかし、パラメータはデフォルトで文字列として扱われるため、予期せぬ結果が生じることがあります。
本記事では、その中でも掛け算の処理に焦点を当て、問題の理解と解決策について説明します。# パラメータの文字列扱いによる問題
Railsでは、リクエストパラメータはデフォルトで文字列として扱われます。例えば、以下のようなコントローラアクションがあるとします。“`ruby
# app/controllers/products_controller.rbclass ProductsController < ApplicationController def calculate_price price = params[:price] result = price * 5 render json: { result: result } end end `
【Rails】form_withにおけるmodel: とは何者か?
:::note warn
**注記**
この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
:::こんにちは!
ご覧いただきありがとうございます!
**Ito** と申します!
Ruby on Rails初学者です。
タイトルの通り
**form_withにおけるmodel: とは何者か?**
個人的にわかりにくいと感じたので、端的にまとめてみました。## 場面設定
掲示板アプリを想定しています。* `Post`モデルの`index`ビューに、`author`(著者)を選択して`post`を検索できる検索フォームを実装しています。
* `Post`モデルが`Author`モデルと関連付けされています。
* `authors`テーブルと`posts`テーブルは **一対多** の関係です。### モデル
“`rb:app/models/post.rb
class Post < Applicat
【Rails】yieldとrenderの違い
# はじめに
Railsチュートリアルを進めているとview/layouts/application.html.erbの中で見かけたyieldというメソッドと部分的に描画するrenderという似たようなメソッドが目につき、これどういう違いなのかと疑問に思ったので記事にしてました。# そもそもapplication.html.erbって?
Railsのビューは
– application.html.erb → HTMLやHEADタグなどの共通レイアウト
– アクション名.html.erb → BODYタグ内の個別レイアウトこの二つで役割分担して画面表示している。
application.erbはコントローラ固有のレイアウトが見つからない場合、**デフォルトで使用される共通レイアウト。**
全てのページで使われるhead、ヘッダー、フッターなどをここで一括して書くことで個別レイアウト内で同じコードを書く必要がなくなり、DRYが保たれる。
[(コントローラーでレイアウトを指定するにはlayoutメソッドを使う)](https://pikawaka.com/rails/layou
[Ruby] コマンドライン用フレームワーク「Benry-CmdApp」の紹介
([2023年 Ruby アドベントカレンダー](https://qiita.com/advent-calendar/2023/ruby) 8 日目の記事です。もともと別の方(dzsさん)がエントリーしていましたが、キャンセルされたようなので、代打を務めます。記事公開が最終日になったのは、キャンセルに気づいたのが 2、3 日前だったからです。ご理解をお願いします。)
サブコマンドを受け取るタイプのコマンドラインアプリケーション用に、「[Benry-CmdApp](https://kwatch.github.io/benry-ruby/benry-cmdapp.html)」というフレームワークを Ruby で開発したので紹介します。
## 概要
Git や Docker や Gem のコマンドは、サブコマンド(またはアクション)を受け取ります。またサブコマンドごとに異なるオプションを受けつけます。
“`term
$ git commit -m “message” # 「commit」がサブコマンド$ docker run -it “ubuntu:lat
【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。
:::note warn
**注記**
この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
:::ご覧いただきありがとうございます!
**Ito** と申します!
Ruby on Rails初学者です。
タイトルの通り
**「RailsでのO/Rマッピング時、中間テーブルがどのように変換されているのか?」**
個人的にわかりにくいと感じたので、端的にまとめてみました。## 場面設定
タグ投稿機能を持った掲示板アプリを想定しています。`Post`モデルが`Tags`モデルと関連付けされています。
`posts`テーブルと`tags`テーブルは`post_tags`テーブルを介して多対多の関係です。### モデル
“`rb:app/models/post.rb
class Post < ApplicationRecord has_many :post_tags has_many
RubySilverメモ
# はじめに
Rubyの実務数年。実装やレビューにおいて困っている事は特に無いが、RubySilverに触れることで更に理解を深め、発想の引き出しを増やしたい。
今回の記載はただの自分用メモ。Goldは別途行う予定。## 学習に使用した参考サイト
– https://rex.libertyfish.co.jp/
– https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0# ローカル変数とメソッド名が同じ場合の挙動
“`rb
hoge = 0def hoge
5 * 100
endp hoge
“`
“`rb:実行結果
0
“`:::note
変数の定義が優先される
:::現場ではまずやらない書き方だけど理解しておくことが大切。
# 多重代入
## 例
– https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#multiassign
“`rb
foo, bar = [1, 2] #
Rspecの導入と単体テストコード
テストは非常に重要だけど、避けていました、、、笑
しっかり復習していきます!### 目的
– RSpecでテストのテストの書く準備
– 基本てみなテストコードの書き方理解
– テストコードの実行方法を理解### バリデーション設定
app/models/user.rb
“`ruby
validates :nickname, presence: true
“`### RspecのGem追加
Gemfile
“`ruby
〜 略〜
group :development, :test do
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`
ターミナル
`bundle install`### RSpec設定
`rails g rspec:install`テストコードの結果をターミナル上に可視化する
.rspec
`–format documentation`### テストファイル作成
`rails g rspec:model userspec/models/user_spec.rb
“`ruby
require ‘rail
投稿アプリ詳細表示機能 同じコードをまとめる
今回もテックキャンプのカリキュラムの復習です!
### 目的
– showアクションの処理の理解
– before_actionを理解### showアクションのルーティングを設定
詳細画面のパスは、削除や編集と同じくツイートごとに管理
idが1のツイート詳細画面は、`/tweets/1`パスconfig/routes.rb
“`ruby
resources :tweets, only: [:show]
“`### もし、7つのアクションがある場合
“`ruby
変更前
resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update, :show]
変更後
resources :tweets
“`rails routesを実行
ターミナル
“`weet GET /tweets/:id(.:format) tweets#show“`### 詳細ボタンを投稿一覧に追加
app/views/tweets/index.html.erb
“`ruby
<%= link_to
ツイートを編集
投稿機能アプリの実装の復習を備忘録としてあげてます!
### 目的
– CRUD(UPDATE)
– HTTPメソッドのPATCH
– edit アクションの処理の理解
– updateアクションの処理の理解### ツイート編集機能の実装
1. ツイート編集画面のルーティング設定
2. 編集ボタン編集ボタンをビューに追加
3. editアクションをコントローラーに定義
4. 編集画面のビューファイルを作成
5. ツイートの更新を行うためのルーティングを設定
6. updateアクションをコントローラーに定義「editアクションで編集ページを「表示」→「updateアクションでデータの更新」
### edit アクションのルーティング設定
config/routes.rb
“`ruby
〜略〜
resource :tweets, only: [:edit]
〜略〜
“`ターミナルで
rails routesコマンドで確認
ターミナル
` edit_tweet GET /tweets/:id/edit(.:format)
Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる
2024年春以降、Appleから指定されたSDKについて、App Store ConnectでこれらのSDKを含むアプリを提出する場合や、アプリのアップデートの一環としてこれらのSDKのいずれかを追加するアップデートを提出する場合には、プライバシーマニフェストを含める必要があります。
https://developer.apple.com/jp/support/third-party-SDK-requirements/
このうち、アプリに該当のSDKがCocoapods管理ライブラリで混入されているかどうかを調べるruby scriptを作成しました。
# ファイル
以下の2ファイルを同じディレクトリに配置します。
`pod_file_path`は任意のPodfile.lockのパスに置き換えてください。“`check.rb
def find_matching_keywords(text, keywords)
text = text.downcasematching_keywords = []
keywords.each do |keyword|
[Ruby]こんなものをeachで回すんじゃあないよ
すっかり寒くなりましたね。
みなさん、each使ってますか??便利で利用シーンの多いこの子ですが、どんな構造のデータに対して使うべきかを考えなければ、読みにくく、拡張性の低いものになってしまいます。今回の記事では、僕のeachに突っ込むデータの変遷を晒し上げ、「**こんなものをeachで回すんじゃあないよ**」と言いたくなるようなアンチパターンの配列(ハッシュ)を紹介していきます。今回出力したい内容は以下の通り。
“`
Tom(年齢:23歳、身長:170cm、出身国:Canada)
Mika(年齢:27歳、身長:150cm、出身国:Japan)
Brown(年齢:23歳、身長:170cm、出身国:Brazil)
“`それではeachで回してみましょう!!
## フェーズ1:配列しか勝たん
“`ruby
person_info_array = [[‘Tom’, 23, 170, ‘Canada’],
[‘Mika’, 27, 150, ‘Japan’],
[‘Brown’, 19, 1
Ruby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について
## はじめに
2023年12月25日に、Rubyの新しいバージョンであるRuby 3.3がリリースされました。
一方、2021年12月2日に出版した書籍「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。
そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。
というわけで、この記事ではRuby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について説明します(第1版との差異ではないの
Ruby芸160チャレンジ(#31)正規表現のパターン利用
## この記事は何
[shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。
例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160## 実行環境など
– Docker image: ruby:3.0.2
– 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。## 今回のテーマ
`#24`以降、しばらく題材的に取り組みづらいものが続くので`#31`まで飛ばします。https://github.com/shellgei/shellgei160/blob/master/answer/31.md
optparseでコマンドラインのオプションを使えるようにする
## はじめに
コマンドラインから任意のオプションを設定するoptparseについて学習したので
その使い方についてまとめます。## 使い方
optparseを使用する際は[公式リファレンス](https://docs.ruby-lang.org/ja/latest/library/optparse.html#argv)より以下の3つの工程が必要になります。
1. OptionParser オブジェクト opt を生成する。
2. オプションを取り扱うブロックを opt に登録する。
3. opt.parse(ARGV) でコマンドラインを実際に parse する。コードでは以下のようになります。
“`ruby:code
require ‘optparse’
opt = OptionParser.newopt.on(‘-a’) {|v| p v }
opt.on(‘-b’) {|v| p v }opt.parse!(ARGV)
p ARGV
“`↑のコードを記載したrubyファイルを起動する際にオプションとして“`-a“`と“`-b“`が
使用で
Example title
# Example2
ebayのカードカテゴリ商品のコンディション設定について
## はじめに
eBayにおいて、カードカテゴリに商品を出品する際には通常のコンディション設定(newやusedなど)とは異なり、カードカテゴリ特有のコンディションとそれに付随する情報を設定する必要があります(設定しないと出品できないです)。この記事では、対象となるカテゴリやコンディションの設定方法、そしてそれに関連するテーブル構成について簡単に説明します。
## 対象カテゴリ
通常とは異なる設定が必要になるカードカテゴリは以下の3種類です。・Sports Memorabilia, Cards & Fan Shop > Sports Trading Cards > Trading Card Singles (CategoryID: 261328)
・Collectibles > Non-Sport Trading Cards > Trading Card Singles (CategoryID: 183050)
・Toys & Hobbies > Collectible Card Games > CCG Individual Cards (CategoryID: 183454
【Sidekiq】特定のジョブだけ排他制御
https://rubygems.org/gems/sidekiq-unique-jobs/versions/8.0.3?locale=ja
これを使います。
# コード
“`ruby
class Worker
include Sidekiq::Workerssidekiq_options lock: :while_executing, on_conflict: :hogefuga_strategy,
lock_args_method: :lock_args
def perform(id, piyo)
# Do work
end
end
“`このコードでは、`id`, `piyo` が同一のジョブが並列実行されないように制御されます。もし衝突が発生した場合、`hogefuga_strategy` が呼び出されてジョブは消費されます。
## 衝突時
“`lib/strategies/hogefuga_strategy.rb
module Strategies
class HogeFugaStrategy