- 1. ツイートを編集
- 2. Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる
- 3. [Ruby]こんなものをeachで回すんじゃあないよ
- 4. Ruby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について
- 5. Ruby芸160チャレンジ(#31)正規表現のパターン利用
- 6. optparseでコマンドラインのオプションを使えるようにする
- 7. Example title
- 8. ebayのカードカテゴリ商品のコンディション設定について
- 9. 【Sidekiq】特定のジョブだけ排他制御
- 10. stimulus.jsからのturbo_frameリクエストを送信する方法
- 11. 【Rails】初学者向けエラー対応まとめ
- 12. Rails 上の N+1 クエリを検出、修正、防止する方法
- 13. AtCoder「競プロ典型90」のRubyによる解法まとめ
- 14. 【Ruby】RubyのStructを活用する
- 15. 【来年の目標】2019年ごろに作ったRuby/TKアプリ javascriptで作り直したい(2024年中)
- 16. 投稿機能アプリの削除機能
- 17. Rubyのクラスとインスタンスについて
- 18. 「オブジェクト指向設計実践ガイド」を読んだ
- 19. サンプルコードでわかる!Ruby 3.3の主な新機能と変更点
- 20. RailsでURL短縮サービスをつくってみる
ツイートを編集
投稿機能アプリの実装の復習を備忘録としてあげてます!
### 目的
– 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
投稿機能アプリの削除機能
備忘録としてあげさせていただきました。
## 目的
– CRUDのD(DELETE)を体験
– データの操作で基本的な処理となる「削除」を理解
– destroyアクションを理解
– Prefix## 削除機能
7つのアクションのうち、削除機能はdestroyが該当## 実装の流れ
1. ツイートを削除するためのルーティングを設定
1. 削除ボタンをビューに追加
1. destroyアクションをコントローラーに定義する## destroyアクションのルーティング設定
config/routes.rb
“`ruby
resources :tweets, only: [:index, :new, :create, :destroy]
“`## 削除ボタンを投稿一覧に追加
`linl_to`mメソッドを使い、削除ボタンを追加
削除ボタンのパスには **_ツイートのid_**を パラメーターとして持たせる
/tweets/《tweetのid》というパスにすると、パラメーターとして受け取ることができるHTTP: **_DELETE_** メソッド
Rubyのクラスとインスタンスについて
## 概要
自分自身が初めてクラスとインスタンスを学習した際に苦労したため、その際にメモしたものをアウトプットの練習を兼ねて記事にしました。
自分自身まだまだ知識が浅く間違いがあるかもしれませんが、その際は優しくご指摘・アドバイス頂けると幸いです。
よろしくお願いします。### クラスとインスタンスの概要
クラスとインスタンスの関係は設計図とその設計図から作られた実物体というような説明がよくされます。
これは後々でてくる`new`メソッドを使ったインスタンスの作成方法の部分で上記の説明がわかると思います。
クラスから作られたインスタンスは共通の性質を持ちながらも、そのインスタンスごとに特有の性質を持たせることができるようになります。### クラスの定義方法
クラスの定義には`class`というキーワードを使います。
例えば`Human`クラスというクラスを作るとします。
“`ruby
class Human
# このなかにクラスのメソッドや持たせたいデータを書いていく
end
“`### インスタンスの作成方法
インスタンスは先ほどのクラスに対して`new`メソ
「オブジェクト指向設計実践ガイド」を読んだ
## はじめに
[オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方](https://www.amazon.co.jp/dp/477418361X) を読みました。
![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143317/039fd29c-4a6f-e6ef-393f-0b10d7c1fabd.png)
この本は、オブジェクト指向の設計について、Rubyのプログラムをサンプルに、分かりやすく解説されています。
設計について学びたいRubyエンジニアにおすすめできます。これを学ぶことで、変更しやすい、メンテナンス性の高いコードを書くための考え方が身につけられます。
メンテナンス性の高いコードを書きたいと思っているRubyエンジニアは、個人的には、リーダブルコードの次に読むべき本だなと感じました。 (リーダブルなコードについては前提として知っておいたほうがいいです)## どうしてこの本を読んだのか
クラスの設計、インターフェース
サンプルコードでわかる!Ruby 3.3の主な新機能と変更点
## はじめに
Rubyは毎年12月25日にアップデートされます。
Ruby 3.3は2023年12月25日に正式リリースされる予定です。
本記事の執筆時点ではrc1がリリースされています。https://www.ruby-lang.org/ja/news/2023/12/11/ruby-3-3-0-rc1-released/
この記事ではRuby 3.3で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。
ただし、すべての変更点を網羅しているわけではありません。個人的に「Railsアプリケーションの開発時に役立ちそうだな」と思った内容をピックアップしています。本記事で紹介していない変更点も多数ありますので、以下のような情報源もぜひチェックしてみてください。
https://www.ruby-lang.org/ja/news/2023/12/11/ruby-3-3-0-rc1-released/
https://github.com/ruby/ruby/blob/v3_3_0_rc1/NEWS.md
### 動作確認したRub
RailsでURL短縮サービスをつくってみる
# 概要
### どのようなサービスか
長いURLを短いURLに変換するサービスです。
有名どころで言うと[bitly](https://bitly.com/)ですね。
試しに、Wikipediaの長いURLを変換してみます
長いURL:https://ja.wikipedia.org/wiki/1-%E3%83%94%E3%83%AD%E3%83%AA%E3%83%B3-4-%E3%83%92%E3%83%89%E3%83%AD%E3%82%AD%E3%82%B7-2-%E3%82%AB%E3%83%AB%E3%83%9C%E3%83%B3%E9%85%B8%E3%83%87%E3%82%A2%E3%83%9F%E3%83%8A%E3%83%BC%E3%82%BC
短いURL:https://bit.ly/49UA01h
どちらも同じページへ遷移することが確認できます。### 短縮方法
URL短縮用のGemもありますが、今回は使用せずにハッシュ変換+衝突判定で開発します。### リポジトリ
コードを確認したい方は以下へhttps://github.com/kakeruAo