サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
qiita.com/jnchito
はじめに 自動テストを整備しておくと大量のテストを自動実行してくれるので大変便利です。 ですが、テストコードが増えてくると「パスするはずなのに、なぜかたまに失敗する」というテストが出てきます。 このような不安定なテストを「フレーキー(flaky)なテスト」と呼びます。 フレーキーなテストの問題点 フレーキーなテストは「たまに失敗するだけ」なので、何度かやり直せばパスします。 なので、GitHub ActionsのようなCIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがちです。 しかし、フレーキーなテストを放置するのはよくありません。 理由は以下の通りです。 本当はバグのせいで失敗しているのに「きっとフレーキーなテストだからに違いない」と思い込んで、そのままリリースしてしまうから(いわゆる「狼少年」状態) 実務レベルの巨大なテストコー
はじめに Railsに関するトリビア的なネタです。 QiitaやZennを見ていると、ときどきRailsのコントローラに出てくるparamsをハッシュ(Hashオブジェクト)だと説明している記事を見かけます。 しかし、paramsはハッシュではありません。 確かめてみよう こんな感じでparamsの中身をputsしてみましょう。
はじめに Rubyは毎年12月25日にアップデートされます。 Ruby 3.3は2023年12月25日に正式リリースされました。 この記事ではRuby 3.3で導入された変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。 ただし、すべての変更点を網羅しているわけではありません。個人的に「Railsアプリケーションの開発時に役立ちそうだな」と思った内容をピックアップしています。本記事で紹介していない変更点も多数ありますので、以下のような情報源もぜひチェックしてみてください。 動作確認したRubyのバージョン 本記事は以下の環境で実行した結果を記載しています。 フィードバックお待ちしています 本文の説明内容に間違いや不十分な点があった場合はコメント欄から指摘 or 修正をお願いします🙏 それでは以下が本編です! 言語仕様の変更→なし Ruby 3.3では言語
はじめに Railsはとても便利なwebアプリケーションフレームワークです。 gitも非常に便利なソースコード管理ツールです。 この2つのツールがあれば、初心者でも効率良くwebアプリケーションを開発できます。 ただし、学習用の小さなアプリケーションを一人で開発しているときはブランチはひとつかふたつで十分ですが、業務などで大きなアプリケーションを複数人で開発する場合は、複数のブランチで並行して開発が進める必要が出てきます。 こういうケースではデータベースマイグレーションを正しく理解し、正しく扱わないと、開発環境やソースコードが混沌としてきます。 Rails初心者の多くはこうした知識を持たないまま、チーム開発に参加しがちです。 この記事では「学習用の小さなRailsアプリケーション」を卒業し、「チームで開発する大きなRailsアプリケーション」に足を踏み入れる前に知っておくべき、データベース
はじめに Railsアプリケーション開発に必要不可欠なツールのひとつがBundlerです。 Railsを学習している人なら必ず一度はbundle installコマンドを実行したことがあるでしょう。 Railsの学習書などに従って指示されたコマンドを入力するだけなら簡単ですが、実務ではbundle install以外にも必要な知識が出てきます。 しかし、Bundlerは意外とクセがあるというか、使っているうちに徐々に「あー、そういうことね」と経験から使い方や仕様の理解が進むような印象があります。筆者の場合はそうでした。 そこでこの記事では、Rails初心者を対象に「実務でRailsを使うなら知っておくと役立つBundlerの知識」を説明します。 題して「Bundlerチョットワカルマニュアル」です! 本記事の対象読者 本記事では以下のような読者を想定しています。 Railsアプリケーション
Webdrivers::VersionError: Unable to find latest point release version for 115.0.5790. You appear to be using a non-production version of Chrome. Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html # ./spec/system/tasks_spec.rb:24:in `go_to_project' # ./spec/system/tasks_spec.rb:14:
はじめに Ransack 4.0.0では「検索可能な列」や「検索可能な関連モデル」をモデル内に予め定義しておかないと、以下のようなエラーが発生します。 RuntimeError in Users#index Ransack needs User attributes explicitly allowlisted as searchable. Define a `ransackable_attributes` class method in your `User` model, watching out for items you DON'T want searchable (for example, `encrypted_password`, `password_reset_token`, `owner` or other sensitive information). You can u
print 'input number 1:' a = gets.to_i print 'input number 2:' b = gets.to_i puts "answer = #{a + b}" これをVS Codeの用デバッガ(VSCode rdbg Ruby Debugger)を使ってデバッグ実行する方法を説明します。 実行環境 以下の環境で動作確認しています。 Ruby 3.2.2 debug.gem 1.8.0 VSCode rdbg Ruby Debugger v0.2.1 VS Code Version: 1.80.0 (Universal) Commit: 660393deaaa6d1996740ff4880f1bad43768c814 Date: 2023-07-04T13:39:33.766Z Electron: 22.3.14 ElectronBuildId: 2
はじめに:sudo gem install railsは実行するな! 初心者さんが新しいMacにRailsの開発環境をセットアップすると、rails -sやrails -vを実行したときに以下のようなメッセージが表示されることがあります。 $ rails -v Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command.
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版」との差異について(注目の新機能もあわせて紹介!)Rubyプロを目指す人のためのRuby入門 はじめに 2022年12月25日に、Rubyの新しいバージョンであるRuby 3.2がリリースされました。 一方、2021年12月2日に出版した書籍「プロを目指す人のためのRuby入門 改訂2版」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。 本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。 そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するように
フィヨルドブートキャンプのコードレビューでよく指摘してるシリーズです。 コードレビューをしていると、次のように2つ(もしくは2つ以上)の配列を作って、それらをシンクロさせながらループ処理するロジックをよく見かけます。 # 配列を2つ用意する names = ['Alice', 'Bob', 'Carol'] points = [90, 98, 85] # 2つの配列から同じindexの要素を取得しながらループさせる names.size.times do |i| name = names[i] point = points[i] puts "#{name}さんは#{point}点です" end #=> Aliceさんは90点です # Bobさんは98点です # Carolさんは85点です names = ['Alice', 'Bob', 'Carol'] points = [90, 98,
上のツイートを見て、どうやるのがいいか考えてみました。 以下がその方法です。 遅いテストに: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
Webdrivers::NetworkError: Net::HTTPServerException: 404 "Not Found" with https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_mac64_m1.zip
はじめに: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
はじめに Rubyではif文の戻り値を変数に代入することができます。その場合、大きく分けて次のような2つのスタイルがあると思います。
はじめに 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 に変更しましょう。 以下の対処法が載っている場合も多いですが、これ
そこで、expected, actualの順で引数が並ぶのには何か理由があるのか、ちょっと調べてみました。 調査方法 "unit test assert equal argument order why" みたいなキーワードでググってみました。検索の上位に毎度お馴染みのStack Overflowのリンクが上がってきたので、いくつか回答を覗いてみました。 Kent Beck氏は何と言っているか? JavaのJUnitやRubyのtest-unit/minitestなど、いわゆるxUnit系のテスティングフレームワークはKent Beck氏が始祖の一人であると言われています。 1997年に、Smalltalk のためのユニットテストのフレームワークであるSUnitをもとにして、エーリヒ・ガンマと、SUnitの開発者のケント・ベックが中心となって開発された。 JUnit - Wikipedia
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
次のページ
このページを最初にブックマークしてみませんか?
『@jnchitoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く