サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今月の「かわいい」
qiita.com/jnchito
TL;DR(長いので最初にまとめ) scaffoldと全く同じ、もしくはscaffoldに限りなく近いコントローラが良いコントローラ fatコントローラは悪いコントローラ。その反対でskinnyなコントローラ(薄いコントローラとも言う)を目指す コントローラ内でtransactionやrescueを書かない(fatになるし、scaffoldからも乖離する) BlogsControllerならBlogクラスのインスタンスだけをインスタンス変数にセットする メールはコントローラで送信する(EメールはSMTPを通じて届けられるviewと考える) はじめに RailsはMVC(Model-View-Controller)アーキテクチャを採用しています。 しかし、ロジック自体はやろうと思えばモデルでもviewでもコントローラでも、どこでも書くことができます。 特に、プログラミング初心者の方はついつい
注意 この記事の実験は実際の運用を正確に反映していない恐れがあります(コメント欄の @hmatsu47 さんの投稿を参照)。 実務のアプリケーションでは異なる結果になる可能性もあるので、本記事の内容はあまり鵜呑みにせず参考程度に留めておいてください。 ※「実務に近い環境で実験してみた」という投稿もお待ちしています! はじめに データベース(この記事ではPostgreSQLを対象とします)の主キーは1,2,3のような連番の整数値を主キーにするSERIALと、"00009236-b73c-4338-8ebd-e1f6c4f4fdd8"のようなランダムな文字列を主キーにするUUIDがあります。 それぞれメリットとデメリットがありますが、パフォーマンスについてはどうでしょうか?なんとなくSERIALの方がシンプルなぶん、速そうなイメージがありますが、実際はどうなのか調べてみました。 実行環境 Ma
はじめに Rails 7.0が2021年の暮れにリリースされて以降、Deviseは長らくRails 7.0(というか、Hotwire/Turbo)に完全対応していない状態が続いていました。ですが、ようやく2023年2月17日にRails 7.0に対応したDevise 4.9.0がリリースされました🎉 rails-ujsではなく、Hotwire/Turboを使っているRails 7.0にDeviseを組み込んでいる(もしくはこれから組み込もうとしている)人は、以下の手順に従ってDevise 4.9.0を導入してください。 備考 もともとこの記事は「開発中のDeviseをインストールしてRails 7.0 (Hotwire/Turbo)のテストに協力する」というタイトルで公開していましたが、Devise 4.9.0が正式リリースされたことに伴い、タイトルと本文を修正しました。 前提条件 Ra
この記事は古いです!! Devise 4.9.0が正式リリースされたため、この記事の内容はすでに古くなっています。 Devise 4.9の導入方法は以下の記事で説明しています。ですので、こちらを読むようにしてください。 Devise 4.9をインストールしてRails 7.0 (Hotwire/Turbo)に対応する - Qiita はじめに Rails 7.0がリリースされて1年以上経ちましたが、Railsのメジャーな認証ライブラリであるDeviseは未だにRails 7.0に部分的にしか対応していません(参考)。 そのため、Rails 7.0でrails newしたRailsアプリケーション(つまり、Turboが有効になっている状態)だと、Deviseを使おうと思っても意図しない挙動になります。 そこで、この記事ではTurboを有効化したままRails 7.0でDeviseを使う方法を
はじめに Rubyは毎年12月25日にアップデートされます。 Ruby 3.2は2022年12月25日に3.2.0が正式リリースされました。 この記事ではRuby 3.2で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。 ただし、すべての変更点を網羅しているわけではありません。個人的に「Railsアプリケーションの開発時に役立ちそうだな」と思った内容をピックアップしています。本記事で紹介していない変更点も多数ありますので、以下のような情報源もぜひチェックしてみてください。 備考:本記事は以下の記事を「プロを目指す人のためのRuby入門 改訂2版」をお持ちでない方向けに再編集したものです。 動作確認したRubyのバージョン 本記事は以下の環境で実行した結果を記載しています。 フィードバックお待ちしています 本文の説明内容に間違いや不十分な点があっ
Ruby 3.2で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について(注目の新機能もあわせて紹介!) はじめに 2022年12月25日に、Rubyの新しいバージョンであるRuby 3.2がリリースされました。 一方、2021年12月2日に出版した書籍「プロを目指す人のためのRuby入門 改訂2版」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。 本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。 そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部
上のツイートを見て、どうやるのがいいか考えてみました。 以下がその方法です。 遅いテストに:slowタグを付けます(名前は:slowじゃなくても可)。
はじめに Herokuの無料プランが終了するので、ためしにRailsアプリからSupabaseのデータベース(PostgreSQL)に接続してみました。 そのときの話は以前こちらのブログに書いています。 ただし、無料版のSupabaseは1週間使用しないと自動停止します(paused状態になる)。 この記事では停止状態のSupabaseを再開する手順を説明します。 自動停止に至るまで 5日間アクセスがないとSupabaseから「もうすぐ自動停止するよ」という通知メールが届きます。 Hi Junichi Ito, To save on cloud resources I just did a scan of all our projects and identified those which have been inactive for more than 5 days. Your pro
はじめに:Ruby 2.7では動いていた奇妙なコード とあるRailsプロジェクトをメンテしていたら、こんな奇妙なコードに遭遇しました。 def sample data = { a: nil, b: { x: 1, y: 2 }, c: { x: 1 }, d: { y: 2 }, } data.map do |k, x: 0, y: 0| [k, x, y] end end
はじめに:単純なバリデーションならテストコードは不要(という私見) Railsでモデルスペックを書くとき、バリデーションのテストを書く人をよく見かけます。 たとえば以下のようなイメージです。 RSpec.describe User, type: :model do # こういうテストは書く?書かない?? describe 'validation' do example 'nameは必須' do user = User.new(name: '') expect(user).to be_invalid user.name = 'Alice' expect(user).to be_valid end end end 決して、バリデーションのテストを書くことが悪いことだとは言いませんが、個人的には単純なバリデーションであれば別に書かなくてもいいかな、と考えています。 単純なバリデーションにテストコ
この記事は何? DBにデータが保存されているのではなく、外部APIから取得したデータをあたかもDBから取得したデータのように扱うRailsアプリケーションを作る場合の、設計やテストの書き方を紹介する記事です。 詳しい内容は動画で解説しているので以下の動画をチェックしてください。 また、この記事で使ったサンプルコードはこちらにあります。 この記事では上の動画の簡単な概要を記述します。 アプリケーションの概要 今回作ったのは以下のようなデータを表示するだけのアプリケーションです。 ただし、このデータはDBではなく下記URL(外部API)から取得したJSONデータを表示しています。 https://samples.jnito.com/access-log.json [ { "request_id": "1", "path": "/products/1", "status": 200, "dura
はじめに 問題です。次のプログラムを保存して実行したとき、ターミナルにはどのような結果が表示されるでしょうか? # fromからtoまでの連続した整数を配列として返す def numbers(from: 0, to: 10) (from..to).to_a end def main p numbers numbers = numbers(from: 3, to: 7) p numbers p self.numbers p numbers() end main
Help us understand the problem. What are the problem?
はじめに HerokuにRailsアプリをデプロイすると、以下のようなトラブルがよく発生します。 ローカルでは表示されていた画像( app/assets/images/ に保存していた画像)が表示されない! 画像が表示されるはずのページで、"The page you were looking for doesn't exist."というエラー画面が出た! そこで「Heroku rails 画像 表示されない」のようなキーワードで検索すると、この問題の対処法が載ったページがたくさん表示されます。しかし、以下のような情報が載っているページは間違いです。 🚨これは間違い!! config/environments/production.rb を開き、 config.assets.compile = false の値を true に変更しましょう。 以下の対処法が載っている場合も多いですが、これ
def test_bit_length assert_equal((-2**12-1).bit_length, 13) assert_equal((-2**12).bit_length, 12) assert_equal((-2**12+1).bit_length, 12) assert_equal(-0x101.bit_length, 9) assert_equal(-0x100.bit_length, 8) assert_equal(-0xff.bit_length, 8) assert_equal(-2.bit_length, 1) assert_equal(-1.bit_length, 0) assert_equal(0.bit_length, 0) assert_equal(1.bit_length, 1) assert_equal(0xff.bit_length, 8) ass
Ruby on Rails Advent Calendar 2021の枠が空いていたので、あとから登録しました はじめに 個人的なプロジェクトになりますが、僕が翻訳しているRSpecの入門書「Everyday Rails - RSpecによるRailsテスト入門」を2022年前半にRails 7.0バージョンにアップデートしようと考えています。 そこでこの本の中で使っているサンプルアプリケーションをRails 7.0でゼロから作り直してみました。フロントエンド周りを中心に結構考え方が変わっている部分があったので、「ここでハマった!」とか「こういうポイントを押さえておくといいかも」という点をあれこれ書いてみます。 なお、Rails 7.0版のサンプルアプリケーションはまだ公開できる状態ではないので、公開はもうしばらくお待ちください🙏 今回作成したサンプルアプリケーションはこちらで公開してい
はじめに 🎄🎄🎄この記事はRuby Advent Calendar 2021 25日目の記事です🎄🎄🎄 Rubyは毎年12月25日にアップデートされます。 Ruby 3.1については2021年12月25日に3.1.0が正式リリースされました。 この記事ではRuby 3.1で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。 ただし、しっかり内容を確認する時間が取れなかった機能に関してはNEWS.mdの記載内容を転記するだけに留めています 本記事の情報源 本記事は以下のような情報源をベースにして、記事を執筆しています。 NEWS.md NEWS.mdに記載されている各種issueとそれに関連するdiff Ruby 3.1.0リリース プロと読み解く Ruby 3.1 NEWS - クックパッド開発者ブログ @pink_bangbi さん
この記事は僕が以前書いた「(あなたの周りでも見かけるかもしれない)インスタンス変数の間違った使い方」という記事の改訂版(というか、全面書き直し版)です。 はじめに:そのインスタンス変数、本当に必要ですか? 僕はフィヨルドブートキャンプでメンターをやっています。そこで提出物のコードレビューをしていると、間違ったインスタンス変数の使い方をよく見かけます。例を挙げるとこんな感じです(説明用のサンプルコードなので、処理自体に意味はありません)。 def run collect_data display_data end def collect_data # インスタンス変数にデータを詰める @data = ['a', 'b', 'c'] end def display_data # インスタンス変数を読み取って画面に出力する @data.each do |str| puts str.upcase
はじめに これはQiitaで開催されている「新人プログラマ応援 - みんなで新人を育てよう!」イベントの投稿記事です。 前回は「学習用のプログラムと仕事で書くプログラムは何が違うか」というタイトルで、お勉強用に作るプログラムと仕事で書くプログラムはこんなところが違うんだよ〜、というお話を書いてみました。 今回の記事ではみなさんが無事にプログラマとして就職できたと仮定して、「○○さん、このタスクお願いね」と開発タスクをアサインされたときの対応手順を説明してみます。 この記事を書いている人 仕事で20年近くプログラムを書いているプログラマ 現在は株式会社ソニックガーデンでRubyプログラマをやっている Rubyの入門書「プロを目指す人のためのRuby入門」を出版している プログラミングスクール「フィヨルドブートキャンプ」のメンターでもある 対象読者 新卒、または業界未経験の中途入社で最近プログ
はじめに これはQiitaで開催されている「新人プログラマ応援 - みんなで新人を育てよう!」イベントの投稿記事です。 今回は「先輩(ベテランから2年目社員、上級生)からのアドバイス」を書いてみようと思います。 この記事を書いている人 仕事で20年近くプログラムを書いているプログラマ 現在は株式会社ソニックガーデンでRubyプログラマをやっている Rubyの入門書「プロを目指す人のためのRuby入門」を出版している プログラミングスクール「フィヨルドブートキャンプ」のメンターでもある 対象読者 現在プログラミングを学んでいて、将来プログラマ(特にWeb系)として就職したいと考えている人 もしくはこの春から新人プログラマとして仕事でコードを書き始める人 いずれも業界未経験の初心者プログラマを想定 僕が普段Railsを使っているため、この記事ではRailsを使う開発の現場を想定していますが、大
class Parent < ApplicationRecord has_many :children end class Child < ApplicationRecord belongs_to :parent end そして、DBのデータが次のように登録されていたとする。 parent = Namihei child = Sazae child = Katsuo child = Wakame parent = Misae child = Shinnosuke child = Himawari この状況で以下のようなメソッドを作りたい。 require "test_helper" class ParentTest < ActiveSupport::TestCase test "zで検索" do # Sazaeが該当するのでNamiheiが返る parents = Parent.child
発生する問題 既存のRailsアプリケーションをRails 6やRails 6.1にアップグレードすると、テストを実行したりした際に次のような警告が出る場合がある。 DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper and ActionText::TagHelper. Being able to do this is deprecated. Autoloading during initialization is going to be an error condition in future versions of Rails. Reloading does not reboot the application, and therefore code execute
たとえば、RailsのViewファイルとして次のようなblogs/edit.html.erbがあったとします。 <h1>Editing Blog</h1> <%= render 'form', blog: @blog %> <%= link_to 'Show', blog_path(@blog) %> | <%= link_to 'Back', blogs_path %> 5行目のblog_path(@blog)は/blogs/10のようなパスを生成するヘルパーメソッドです。(ここでは@blog.idの値が10だった場合を想定) このようにblog_pathの引数には通常、@blogのようなActiveRecordのインスタンスを渡すと思います。 ですが、blog_pathは次のように引数無しで呼びだしてもエラーにはなりません。
はじめに 2020年12月25日に、Rubyの新しいバージョンであるRuby 3.0がリリースされました。 一方、2017年11月に出版した書籍「プロを目指す人のためのRuby入門」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 2.4.1を対象にしています。 本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。 そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。 というわけで、この記事ではRuby 3.0で発生する「プロを目指す人のた
DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper. Being able to do this is deprecated. Autoloading during initialization is going to be an error condition in future versions of Rails. Reloading does not reboot the application, and therefore code executed during initialization does not run again. So, if you reload PageDescription, for
はじめに この記事はRuby Advent Calendar 2020 19日目の記事です。 さて、突然ですが、最近僕の娘がハイキュー!!というアニメのカードを集めるのにハマり始めました。 このカードは1枚110円で、全部で55種類あります。 当然ながら娘は全種類集めたい!と言います。 僕が調べた範囲では特にレアカードの設定はないようなので、「どのカードも出てくる確率は同じ」と仮定した上でカードを買い続けたら、いったいどれくらいの枚数を買うことになるんだろう?と思いました。 そこでRubyを使って簡単なシミュレーションプログラムを作ってみました。 require 'set' class Simulator NUMBER_OF_TYPES = 55 def self.simulate set_of_cards = Set[] all_types = (1..NUMBER_OF_TYPES).
Rubyで型チェック!動かして理解するRBS入門 〜サンプルコードでわかる!Ruby 3.0の主な新機能と変更点 Part 1〜 はじめに Ruby 3.0ではRubyのコードに型定義情報を提供するRBSという仕組みが導入されます。 この記事では簡単なサンプルプログラムを通して、RBSとその周辺ツールの使い方や役割を説明します。 なお、説明する内容はあくまで初歩的な内容です。予めご了承ください。 動作確認時の実行環境 本記事の執筆時点ではまだRuby 3.0は正式にリリースされていません。 正式リリース時、または今後のバージョンアップによってこの記事の内容と実際の挙動が異なる可能性もあります。 本記事の執筆時に使用した実行環境は以下のとおりです。 Ruby 3.0.0dev (2020-11-13T16:46:08Z master 7826210541) [x86_64-darwin19]
アンチパターン ソフトウェア開発におけるアンチパターン (英: anti-pattern) とは、必ず否定的な結果に導く、しかも一般的に良く見られる開発方式を記述する文献形式を言う。 アンチパターン - Wikipedia はじめに ローカル環境(開発環境)でRuby on Railsアプリケーションの開発をするとき、エラー(例外)が発生すると以下のようなエラー画面が表示されます。 しかし、本番環境にRailsアプリをデプロイすると、ローカル環境のようなエラー画面は表示されず、デフォルトでは"We're sorry, but something went wrong."というようなエラーメッセージが表示されます。 ローカル環境のエラー画面では、エラーが発生した行やスタックトレース等の情報が豊富に表示されるので、デバッグに役立ちます。 一方、本番環境ではそういった情報がまったく表示されないた
はじめに Webアプリケーションの開発時やテスト時にはテスト用のユーザーを作成するために適当なメールアドレスとパスワードを登録することが多いと思います。 このとき、みなさんはこんなふうにデタラメなドメインをメアドに使ってないでしょうか? 「こんなデタラメなドメイン、あるわけないやろ!」と思うかもしれませんが、自分はデタラメに付けたつもりでも意外とかなりの高確率でそのドメインは実在します。 実際、上の例で挙げたドメインをブラウザに入力すると、いずれも何かしらページが表示されます。 つまり、そのドメインは現在誰かが使っているということがわかります。 https://hoge.com/ http://testmail.com/ https://www.bbb.org (bbb.com から転送される) 実在するドメインだと何が困るの? 何らかの間違いでその実在するドメインに向けてメールが送信され
次のページ
このページを最初にブックマークしてみませんか?
『@jnchitoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く