- 1. `length` `size` `count`の使い分け【後編:Rails】
- 2. Ruby on RailsにおけるN+1問題
- 3. `length` `size` `count`の使い分け【前編:Ruby】
- 4. 初心者必見!ChatGPTとOSSで爆速プログラミング学習!〜もうつまらない本もプログラミングスクールもいらない〜
- 5. 【AtCoder】AtCoder Beginner Contest 336 解法メモ【Ruby】
- 6. Progate +α メモず【Ruby on Rails ⑩⑪】
- 7. Rubyの「*」記号ってなんなの、という疑問について調べた
- 8. rails勉強2日目
- 9. 【初学者向け】最速で実務に入るためのロードマップ Rails編
- 10. [Ruby]optparseでコマンドラインから引数を受け取る
- 11. コマンドでファイルを作成するジェネレーターの作成
- 12. 【rails】rubyXLを使って別途用意したエクセルファイルを出力する機能を作成
- 13. rubyXLで作成したエクセル出力機能を呼び出すとActionController::UnknownFormatが発生した時の対処法
- 14. 【トリビア】Railsのコントローラに出てくるparamsはハッシュじゃない
- 15. 待ち時間が長くなってきたら、95パーセンタイルの最適化を検討しよう
- 16. Progate +α メモず【Ruby on Rails ⑧⑨】
- 17. 【Ruby on Rails】投稿の更新に失敗したときにエラーメッセージを表示させたい
- 18. Rubyにおけるトランザクションについて調べてみた
- 19. Rubyにおける「~」記号の使い方(再投稿)
- 20. axios(ajax)でエラー時のレスポンスbodyが取得できなかったので調べてみた
`length` `size` `count`の使い分け【後編:Rails】
# はじめに
[`length` `size` `count`の使い分け【前編:Ruby】](https://qiita.com/kohki_takatama/items/c8236b6a2e267e2dad20)の続きですが、この記事だけでも完結した内容になっています。Rubyの`length` `size` `count`を調べてる間に気づいた、「Railsだと定義が違うぞ・・・・・・」
ということで、Railsでも`length` `size` `count`について調べていきます。
※注記しない限り、`count`は引数を与えないものとします。
## この記事のまとめです
### Rails (`ActiveRecord`) の`length` `size` `count`
正確には`AcriveRecord::Associations::CollectionProxy`です。
コレクションとは、配列やハッシュなど要素の集まりのことです。
– `length`:コレクションをメモリにロードし、要素数を取得します。
すでにメモリ上にあれば、その要素数を取得します。
– `
Ruby on RailsにおけるN+1問題
## 概要
N+1問題は、1つのクエリによって複数のレコードを取得した後、
各レコードに対して関連するデータを取得するために追加のクエリが必要になる状況を指します。N+1問題が発生すると、データベースへのアクセス回数が余計に多くなってしまいます、それはデータベースに対するクエリの数が大幅に増加するからです。
## N+1問題の原因
N+1問題が発生する原因は、データモデル間のアソシエーション・関連にあります。
Ruby on Railsでは、データモデル間にアソシエーションを定義することで、関連するデータを取得することができますよね?### 具体例
1.ブログアプリケーションで、すべての記事を取得し、
2.それぞれの記事に対して投稿者の情報を表示する必要があるとします。
一見、効率的に見えるこの操作が、実際には非効率的になることがあります。ステップ1: すべての記事を取得するためのクエリ。
ステップ2: 各記事に対して、投稿者情報を取得するための追加クエリ。
ここで問題となるのは、ステップ2での繰り返しクエリです。記事の数が多いほど、データベースへのクエリ数が増加し、
`length` `size` `count`の使い分け【前編:Ruby】
# はじめに
みなさん、Rubyの `length` `size` `count` の使い分け、気になりますよね??🤗
そう思って!公式リファレンスも含め調べたんですが、どれもいまいちしっくりこない。
以下、しっくりこなかったリスト
– `size`と`length`は全く同じ挙動をする(ほんとに?根拠は?)
– 条件付きなら`count`でそれ以外は`size` `length`(なぜ?)
– `count`は重い(なぜ?)なぜ ↑ のように言われるかがわかるようになっています。
なお、Railsの場合(ActiveRecord)は挙動が違うので後編で書きます。
(2024 / 01時点の言語仕様に基づいた情報です)
## この記事のまとめです
### Ruby の`length` `size` `count` の挙動
特に言及のない場合、`Array`クラスについて話しています。ただし、「`Enumerable`モジュールの`count`」を除き、どのクラスでも同様の挙動だろうと思います(`String`クラスなど)– `Array.length` `Array.size
初心者必見!ChatGPTとOSSで爆速プログラミング学習!〜もうつまらない本もプログラミングスクールもいらない〜
# はじめに
はじめまして。都内のSaaS企業でバックエンドエンジニアをしているハセガワカンタです。今回はプログラミング言語のおすすめの学習方法を書いていきます。
プログラミング言語の学習は大変ですよね。何をどう学べばいいのか、どんな資料が役に立つのか、気軽に質問できるエンジニアが周りにいればいいですが全員がそうとは限りません。
しかし今は令和、そんな時の強い味方、ChatGPTの話をしようと思います。ChatGPTは大学のレポートを書いてくれるだけではなく、プログラミングを学ぶ上でめちゃくちゃ便利なんです。コードを投げれば、分かりやすい解説をくれるし、具体的な例も出してくれるので、理解が深まります。
この記事では、ChatGPTがどうやってプログラミングの学習を助けてくれるのか、その魅力と使い方をお伝えします。さあプログラミング初心者の方も、新しい言語を覚えたいベテランの方も、ChatGPT大先生を使って爆速で学習を進めましょう。# プログラミング言語を学習することの難しさ
### 本やドキュメントを読んでも頭に入ってこない
プログラミングを学ぶとき、まず最初に本やドキュメントを
【AtCoder】AtCoder Beginner Contest 336 解法メモ【Ruby】
# はじめに
ABC336に参加しました。
今回、A~Dの4問完答できたのでD問題までメモしていきたいと思います。# [A – Long Loong](https://atcoder.jp/contests/abc336/tasks/abc336_a)
`Long`の`o`を指定の数だけ結合する問題。
文字列結合ができれば良いので特に問題はない。強いて言えば、文字をn個繋げる処理をどう実装するか、が問題になるが、Rubyには`String#*`が定義されているので難しくない。
自分の回答
“`ruby
puts “L#{“o” * gets.to_i}ng”
“`# [B – CTZ](https://atcoder.jp/contests/abc336/tasks/abc336_b)
整数を2進数表記したときに、末尾に連続する0の数を求める問題。
色々定義されているが、2進数表記に直して末尾から0の個数を数えるだけで良い。
自分の回答
Progate +α メモず【Ruby on Rails ⑩⑪】
# はじめに
Ruby on Railsラストです!!
いつものごとくメモの羅列なので、気になる見出しからお読みください。
# メモず
## 「いいね」を新しいテーブルで管理するワケ
– 既存のテーブル`users` `posts` じゃダメなの?
いいけど、それぞれのテーブルが「いいね」情報で肥大化して、パフォーマンスが落ちるかも。
– 「いいね」を新しいテーブルにするメリット
– コードロジックが整理され、理解しやすくなる。メンテナンス性も上がる。
– 例:`if Like.find_by(user_id:@current_user.id, post_id:@post.id)`の`if`文のみで、いいねしている場合、してない場合の挙動を設定できる。
– テーブルとして独立していると、スケーラビリティが向上する(読み書きの負荷分散・時間や地域によってサーバーを分割・クエリの最適化)。
## `link_to`メソッドの中でアイコンを使うには
“`erb
<%= link_to("URL") do %>
<%
Rubyの「*」記号ってなんなの、という疑問について調べた
Rubyにおいて、「*」記号は以下の用途で使われます
## 数値の乗算
Rubyでは、他の多くのプログラミング言語と同様に、「*」記号は数値の乗算に使用されます。“`ruby
result = 3 * 4 # resultは12になります
“`## 配列の繰り返し
「*」記号を使って、配列内の要素を指定した回数だけ繰り返すことができます。“`ruby
repeated_array = [1, 2, 3] * 3 # repeated_arrayは[1, 2, 3, 1, 2, 3, 1, 2, 3]になります
“`## 文字列の繰り返し
「*」記号を使って、文字列を指定した回数だけ繰り返すこともできます。“`ruby
repeated_string = “abc” * 2 # repeated_stringは”abcabc”になります
“`# 可変長引数
メソッド定義において、引数の前に「*」を付けることで、任意の数の引数を受け取ることができます。
これは「スプラット演算子」とも呼ばれます。可変長引数については別途まとめを作成する予定です。
rails勉強2日目
:::note info
インフォメーション
間違いがあるかもしれないです。
:::## 二日目です
ちゃんと二日目もさぼらずに投稿できてます!!
えらい!!!## どこまで勉強したのか
progate railsコース2まで終わりました。
## 何を学んだのか
rails consoleを使ったdb導入
“`
rails console
“`
post1に入れたいときは
“`
post1 = post.new(content:”ここに入れたい文字列を導入”)
“`
“`
<% posts.each do |post| %><%= post %><% end %>
“`
これで@postsに保存されているものが表示されます。【初学者向け】最速で実務に入るためのロードマップ Rails編
## はじめに
はじめまして、24卒の**どすこい**と申します!
現在内定先でRuby on Railsの機能開発やバグの修正などを行なっています!
記念すべき初投稿は、筆者が実務に入るまでに様々な勉強をしてきました。
その中で、「この教材はそんなに必要なかったなぁ〜」「この教材はまだ早いなぁ」「役に立ったなぁ〜」といったことが多々あります。
そんな筆者がもう一度勉強し直すならこれやる!と思った教材を紹介していきます!
筆者自身苦学生だったので、できるだけ費用を抑えています。
なお、今回のゴールは実務に入るまでです。実務経験をできるだけ早く積むことがエンジニアの成長につながると思っています。
## 想定読者
– 新卒でエンジニアになりたい方
– インターンに行きたい方
– エンジニア転職を行いたい方
– プログラミングに興味がある方## この記事で書かないこと
本記事では、以下のことは書きません。単純に教材だけを列挙していきます。
– マインド (質問力、コミットメッセージへのこだわり)
– Toolの紹介 (JiraやSlackの使い方)
– 他の技術内容[Ruby]optparseでコマンドラインから引数を受け取る
## optparseとは
Rubyのoptparseはコマンドラインのオプションを取り扱うためのライブラリです。
プログラム実行時に指定されたコマンドを解析し、フラグや引数をプログラム内で扱う事が出来ます。## 使い方
まずは基本的な使い方です。
“`ruby:test.rb
# 標準ライブラリを読み込む
require ‘optparse’# OptionParserクラスのオブジェクトを作成する
opt = OptionParser.new# onメソッドでオプションを定義する
# オプションが指定されていればブロックが実行される
opt.on(‘-m’) { |v| p v }# parseメソッドでコマンドラインの解析を行う
opt.parse(ARGV)
p ARGV
“`オプションを指定してプログラムを実行します。
“`bash:
# オプション付きで実行する
$ ruby test.rb -m 10true # vの出力
[“-m”, “10”] # ARGVの出力
“`– オプション付きでプログラムが実行された場合はブロックパ
コマンドでファイルを作成するジェネレーターの作成
## はじめに
本記事は[Rails ジェネレータとテンプレート入門](https://railsguides.jp/generators.html)を参考にしています。
勉強中のため、誤りやもっといいやり方があるかも知れません。
その場合は、ご指摘いただけますと幸いです。また、可能な限りわかりやすく記載するつもりですが、不明瞭な点、追記した方がいい点などがございましたら、合わせてご教授ください。
## この記事の目的
ジェネレーターの作成方法を備忘録を兼ねて残しておきます。
今回のジェネレーターでは、コマンドを叩いてテンプレートファイルからファイルを作成することを目標とします。
具体的には、下記のコマンドを叩いて、`controllers/hoge_hoge_controller.rb` を作成しようと思います。
“`console
bin/rails generate hoge hoge_hoge
“`## ジェネレーターとは
データやプログラムコードを自動的に生成するプログラムのことです。## テンプレートを作成
コピーするための雛形を下記のように作成しておきま【rails】rubyXLを使って別途用意したエクセルファイルを出力する機能を作成
### railsで別途用意したエクセルファイルを出力する機能を作成したので、備忘録用に簡単にまとめる。
rubyXLは初めて使い、エンジニア歴も浅いため至らないコードもあるかと思いますが、参考程度になればと思います。## 環境
railsのバージョン
`Rails 6.0.3.4`
rubyXLのバージョン
`rubyXL (3.4.25)`## Gemfileのインストール
まずはrubyXLをインストールします。
“`ruby:Gemfile
gem ‘rubyXL’
“`
“`
$ bundle install
“`## helperを作成していきます。
“` ruby:app/helpers/excel_helper.rb
module ExcelHelper
require ‘rubyXL’def generate_excel
template_path = Rails.root.join(‘public’, ‘files’, ‘template.xlsx’) ## 別途用意したエクセルファイルを配置し、そのパスを記述します。rubyXLで作成したエクセル出力機能を呼び出すとActionController::UnknownFormatが発生した時の対処法
#### エクセルファイル(.xlsx)を出力する機能をrubyXLを利用して作成したが、実行するとActionController::UnknownFormatが発生が発生する。
## 環境
railsのバージョン
`Rails 6.0.3.4`
rubyXLのバージョン
`rubyXL (3.4.25)`## 原因
原因はroutes.rbの設定でformatを指定していないことになる。
“`routes.rb
get ‘excel/generate’, to: ‘excel#generate’, as: ‘generate_excel’
“`xlsxのエクセルファイルを出力する場合は、
~~~ruby
get ‘excel/generate’, to: ‘excel#generate’, as: ‘generate_excel’, defaults: { format: :xlsx }
~~~
のように、
`defaults: { format: :xlsx }`
の箇所を追記するとエラーが解消される。
拡張子は出力したいファイル毎に変更してください。初歩的なこ
【トリビア】Railsのコントローラに出てくるparamsはハッシュじゃない
## はじめに
Railsに関するトリビア的なネタです。QiitaやZennを見ていると、ときどきRailsのコントローラに出てくるparamsをハッシュ(Hashオブジェクト)だと説明している記事を見かけます。
**しかし、paramsはハッシュではありません。**
## 確かめてみよう
こんな感じでparamsの中身をputsしてみましょう。
“`ruby
def show
puts params
end
“`うん、とてもハッシュっぽいですね。
“`
{“id”=>”1”, “controller”=>”projects”, “action”=>”show”}
“`では、こうするとどうでしょうか?
paramsがハッシュならどちらもtrueになるはずです。“`ruby
def show
# paramsがハッシュそのものならtrue
puts params.instance_of?(Hash)
# paramsがHashクラスを継承していればtrue
puts params.is_a?(Hash)
end
“`結果は
待ち時間が長くなってきたら、95パーセンタイルの最適化を検討しよう
飛行機でとても驚くべき体験をしました。
東京から北海道の札幌まで、日本の国内線を利用した時のことです。90分ほどのとても短いフライトです。
搭乗時、普段よりも搭乗にかかる時間が短いなとは感じていたものの、その理由は分かりませんでした。そのうち、搭乗グループが、ロイヤリティステータスや他の任意のグループに沿ってではなく、実際の機内での位置に従っていることに気づきました。これは、CGP Greyの[「飛行機に速く搭乗する方法」](https://www.youtube.com/watch?v=oAHbLRjF0vo)に関する優れた提案に従った方法です。
ですが、私がそれよりも本当に驚いたのは、降機の速さでした。ドアが開いてから全員が降機するまでの時間は、せいぜい90秒もかからなかったと思います。どうしてそんなことが可能だったのでしょうか?
まず、搭乗や降機は基本的にキューであると理解してください。搭乗や降機では、200名以上の人が1つの小さな隙間(ドア)を通らなければなりません。アルミニウム製の筒の中で座り続けるのはあまり楽しくありませんし、飛行機には行き先があるわけですから、どち
Progate +α メモず【Ruby on Rails ⑧⑨】
# はじめに
ユーザーログイン・ログアウトとアクセス制限!
難しそう!
記事はいつも通り箇条書き形式です!
気になった見出しがあればお読みください
# メモず
## 表示するエラーメッセージの種類
>1. **フォームのバリデーションエラー**:
> – 使用方法: `.errors.full_message`を使う。
> – 説明: Active Recordモデルのバリデーションに失敗した際、自動的に生成されるエラーメッセージ。これらは通常、フォームのビュー内で、個々のフォームフィールドに近い位置で表示されます。
>2. **サーバーエラー**:
> – 使用方法: インスタンス変数`@error_message`を使うか、エラーハンドリングメカニズムを使う。
> – 説明: 例外が発生した場合、`rescue_from`などを使用して特定のエラーをキャッチし、適切なメッセージをインスタンス変数`@error_message`などに格納してビューで表示します。または、500エラーページをカスタマイズすることもできます。
>3. **権限に関するエラー**:【Ruby on Rails】投稿の更新に失敗したときにエラーメッセージを表示させたい
# 初めに
こんにちは!@taisei_codeです。
Qiitaの投稿頻度を上げていけるように、日頃から直面した問題から背かないように課題解決を意識していきます。# 問題
今回は、ProgateのSNSアプリをローカル環境で実装していたときにエラーメッセージが表示できないことが課題としてありました。具体的には、投稿の詳細ページで空の投稿で更新して、「Contentを入力してください」のようなエラーメッセージを表示させたいです。
前提、ローカル環境とProgateで扱っているRuby on Railsのバージョンがこちらになります。
Progate : Rails5
ローカル : Rails7
### ソースコード
“`ruby
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
if @post.save
redirect_to(“/posts/index”)
else
render(“posts/Rubyにおけるトランザクションについて調べてみた
トランザクションは、一連の操作を単一の作業単位として扱うことを指します。
Rubyでは、データベースライブラリやORM(Object-Relational Mapping)ツールを使用してトランザクションを扱います。## トランザクションの基本概念
### トランザクションとは
トランザクションは、一連のデータベース操作が「全てまたは何も」(all-or-nothing)の原則に従って実行します。
これは、**複数の操作を含む処理が完全に成功する** か、あるいは **失敗した場合には何も変更せず元の状態に戻す** かのどちらかです。### ACID特性
トランザクションはACID特性というものに従っています、詳しくは別の記事を書く予定です。– 原子性(Atomicity):
トランザクション内の全ての操作は、単一の単位として扱われます。
全て成功するか、一つでも失敗すれば全てがロールバックされます。– 一貫性(Consistency):
トランザクションはデータベースを一貫した状態から別の一貫した状態へと変更します。
これにより、データの整合性が保たれます。– 隔
Rubyにおける「~」記号の使い方(再投稿)
Rubyで「~」記号は、主に否定演算子として、また正規表現のマッチング、特殊なメソッド名の一部として使用されます。
## 1. 否定演算子(Bitwise NOT)
否定演算子としての「~」は、ビット単位の否定を行うために使われます。これは、整数の各ビットを反転させる操作です。例:
“` ruby
a = 0b0101 # 5の二進数表現
~a # => -6
“`
:::note info
この例では、0b0101の各ビットが反転され、0b1010の補数が計算されます。Rubyでは整数は補数形式で保持されるため、結果は-6になります。
:::## 2. 正規表現マッチ演算子
「~」は正規表現と文字列のマッチングにも使用されます。この場合、正規表現オブジェクトに対して使用され、マッチした場合はその位置を、マッチしない場合はnilを返します。例:
“`ruby
“hello” =~ /e/ # => 1
/e/ =~ “hello” # => 1
“`
:::note info
注釈:
最初の例では、「hello」の中で「e」が最初に現れる位axios(ajax)でエラー時のレスポンスbodyが取得できなかったので調べてみた
## はじめに
RailsのAPIからデータを取得する際に、axiosを使用してエラーが発生した場合、レスポンスを取得することができずに困った## 問題点
Railsでエラーが発生した場合、通常はstatusコードとmessageをレスポンスボディとして返すので取得の仕方を変えないといけなかった### 例えば
“` ruby
if user.save
render json: { status: 200, data: user }
else
render status: :unprocessable_entity, json:{ messages: user.errors.full_messages }
end
“`
この場合、フロントでaxiosを使用してAPIを呼び出すと、エラーが発生した場合、以下のようなエラーが発生する“` JavaScript
axios
.post(process.env.API_URL + ‘/api/v1/users/signup’)
.then((res) => {
console.log(res)
}関連する記事
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関連のことを調べてみた