- 1. [Ruby] コマンドライン用フレームワーク「Benry-CmdApp」の紹介
- 2. 【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。
- 3. RubySilverメモ
- 4. Rspecの導入と単体テストコード
- 5. 投稿アプリ詳細表示機能 同じコードをまとめる
- 6. ツイートを編集
- 7. Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる
- 8. [Ruby]こんなものをeachで回すんじゃあないよ
- 9. Ruby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について
- 10. Ruby芸160チャレンジ(#31)正規表現のパターン利用
- 11. optparseでコマンドラインのオプションを使えるようにする
- 12. Example title
- 13. ebayのカードカテゴリ商品のコンディション設定について
- 14. 【Sidekiq】特定のジョブだけ排他制御
- 15. stimulus.jsからのturbo_frameリクエストを送信する方法
- 16. 【Rails】初学者向けエラー対応まとめ
- 17. Rails 上の N+1 クエリを検出、修正、防止する方法
- 18. AtCoder「競プロ典型90」のRubyによる解法まとめ
- 19. 【Ruby】RubyのStructを活用する
- 20. 【来年の目標】2019年ごろに作ったRuby/TKアプリ javascriptで作り直したい(2024年中)
[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
stimulus.jsからのturbo_frameリクエストを送信する方法
# はじめに
JavaScriptでTurboFrameリクエストを行う方法がわかったので共有します。# 問題
‘modal’という名のturbo_frame_tagにJavaScriptで’/modals/pop_ups’というリクエストを行いたい場合は通常のlink_toタグなどでのリクエスト送信ができない。# 解決方法
“` js
sendTurboRequestToPopUpModal = () => {
// turbo_frame_tag ‘modal’を示している
// turbo_frame_tagは指定した属性と同名のidが付与されるため
const frame = document.getElementById(‘modal’)
// turbo_frame_tagはsrc属性を付与するだけでその部分を指定のURLに置換する原理があるため、この処理だけでmodalが開く
frame.src = ‘/modals/pop_ups’
}
“`
turbo_frame_tagはsrc属性に設定されたURLに中身を
【Rails】初学者向けエラー対応まとめ
# はじめに
プログラミングはエラーと切っても切り離せない関係です。
素人からどんな玄人でもエラーと向き合いながら開発をしていきます!エラーと仲良くなり、乗り越えることを通してプログラミングの喜びを味うことができるでしょう。この記事では主に初学者向けにRailsアプリ開発におけるエラーを取り上げます。
# Goal
一般的なエラー解決の向き合い方と代表的なエラー解決のユースケースについて知る。# エラー対応の原則
エラー解決には、構造や因果関係を理解したうえで、様々なヒントから原因を推測し、変更を加える必要があります。
エラー解決できる能力は、確かに経験値に依る側面も大きいですが、吸収のスピードを上げることも大切です。構造や因果関係の理解に関しては、学習コンテンツを読み込んだりして理解に努めると良いでしょう。原因の推測に関して、例えば、基本的な投稿機能やが上手く実装できないとなった場合、以下のように原因を推測してみましょう!
根っこのデータベースから順番に必要な仕組みが備わっているか確認していきます。### 1. テブル、カラムがあるか
db/schema.rbを
Rails 上の N+1 クエリを検出、修正、防止する方法
### N+1 クエリとは?
N+1 クエリは、Rails アプリで Active Record などのObject Relational Mapping(ORM) を使用するときによく発生するパフォーマンスの問題です。 これは、ORM が単一のクエリを使用してすべてのオブジェクトを一度にロードするのではなく、オブジェクトのリストにあるオブジェクトごとに個別のクエリを実行するときに発生します。たとえば、次のコードを考えてみましょう。
“`
# Get all comments
comments = Comment.all# For each comment, a new user query will be triggered
comments.each do |comment|
comment.user
end
“`
Comments テーブルに 1000 レコードがある場合、以上のコードは、コメントしたユーザーを取得するために 1000件の個別のクエリを実行することになりますが、これは非常に非効率的になる可能性があります。 これは N+1 クエリの例です。N+
AtCoder「競プロ典型90」のRubyによる解法まとめ
# はじめに
こんにちは!
この記事は[AtCoder 競プロ典型90](https://atcoder.jp/contests/typical90)の[Rubyによる解答をまとめたGitHubリポジトリ](https://github.com/gostachan/typical_90/tree/main)の紹介です.
なお,紹介するリポジトリは本記事の著者が作成したリポジトリです.# [今回紹介するリポジトリ](https://github.com/gostachan/typical_90/tree/main)
# コンセプト
* RubyでAtCoderを遊ぶ際に,解答例が出てこないことがよくあるので,共有する場所を作りたい!
* 別解を共有することによってRubyの理解を深めたい# ルール
### 動作環境
* 基本的にRubyバージョンは最新バージョンを推奨します
* 各個人での環境で動作確認をしプルリクしてください
* 今後ルールを変更する可能性があります
### ディレクトリツリー
#### 説明
* 本ディレクトリは問題の星の数(難易度)ごとに問題をまとめていま
【Ruby】RubyのStructを活用する
# 1. Struct
RubyにはStructという、構造体を扱うクラスがあります。:::note info
構造体とは?
構造体とは「1つ以上の、任意の種類の値をまとめて1つにしたもの」である。データや情報、プログラムのコードなどを意味のある単位に分類・分割・整理して、構造的にまとめることが目的。
無秩序なデータをオブジェクト指向的に記載できるので最高。
:::## TL;DR
– 「シンプルなデータ構造」「一時的なデータのカプセル化」を目的としている。ここでの「一時的」の定義は、主にプログラムのスコープやライフサイクルの短さを指す
– 「構造や目的がはっきりしているが、完全なクラスを定義するほどではない場合」に用いられる
– リファクタリングの文脈だと「責務が複数存在するモデルを分割するための最初のステップ」として用いられる
– Hashでサイレントエラーが起きてしまった場合にStructが検討されることもある(Structで属性間違えたらエラーが出るので、エラー検知が迅速)# 2. Structの基本的な定義・振る舞い
– 任意のパラメーター、メソッドを定
【来年の目標】2019年ごろに作ったRuby/TKアプリ javascriptで作り直したい(2024年中)
javaspcriptの勉強のモチベーションとして
2019年ごろに作ったRuby/TKアプリ をjavascriptで作り直したい
javaspcript + HTML + css
HTA っていうんですかね?機能
・指定条件でファイルを検索して登録。(ベースディレクトリ、拡張子、含むワード、無視ワード)
・拡張子別に指定したプログラムに渡して実行。
・実行時間、実行回数を記録。
・ランダムソート、ランダム実行。
・ファイルの移動、リネームを自動検出して実行時間回数などのデータも移行※開発当時の環境 今はこのバージョンはもうないので自分でruby/TK環境を用意する必要あり
WITHOUT DEVKIT Ruby 2.3.3 ※32ビット
Ruby 2.3.3 (x64) ※64ビットgit hub
https://github.com/majimiki/rubytktest/blob/main/_Random_Launcher.rbw