サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
qiita.com/jnchito
はじめに 僕はフィヨルドブートキャンプ(以下FBC)というプログラミングスクールでメンターをやっています。そこでよく生徒さんが書いたプログラム(課題の提出物)のコードレビューをよくやるのですが、5人に4人ぐらいの割合でコメントの書き方について同じような指摘をしています。 コメントの書き方ついては、すでにネットや書籍で同じような議論が山ほどありますが、この記事ではあらためて僕の考える「不要なコメントと必要なコメントの違い」について書いてみようと思います。 動画があります! この記事は以下の動画の内容を雑にテキストとして書き起こしたものです。動画で見たいという方は、以下の動画をご覧ください。(FBCの生徒さん向けに作った動画ですが、大半の内容はFBCの生徒さん以外にも役立つはずです) 不要なコメント=説明的なコメント(見ればわかるコメント) 「コードを見ればわかる内容」をわざわざコメントで説明
はじめに これはQiitaで開催されている「新人プログラマ応援 - みんなで新人を育てよう!」イベントの投稿記事です。 今回はメソッドの定義順に関する小ネタを書いてみようと思います。 なお、この記事はRuby版とJavaScript版の2部構成になっています。 JavaScriptを使ったコード例はRuby版のあとに載せています。 👉JavaScript版を読む おことわり この記事ではメソッドの定義順を変えてもエラーが出ないケースを議論の対象とします。 文法の制約上、特定の定義順で書かないと動かないケースは議論の対象としません。 Ruby版 メソッドの定義順は基本的に自由、だが・・・ メソッドの定義順は基本的に自由です。
はじめに これは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】Initialization autoloaded the constants ActionText::ContentHelper and ActionText::TagHelper 警告の解決パターンRubyRails 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 appl
たとえば、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で発生する「プロを目指す人のた
Rails 6に上げると”DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper.”のような警告が出るRubyRails 2021-2-18追記:新しく記事を書き直しました この警告に対処する最新の知見を以下のページに書き直しました。 今後はこちらのページを参照してください。 【Rails】Initialization autoloaded the constants ActionText::ContentHelper and ActionText::TagHelper 警告の解決パターン - Qiita ここから下の内容はRails 6.0リリース当初に書いた古い知見なので、これを参考にするのは筆者として推奨しません。
はじめに この記事は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〜RubyrbsSteepTypeProf はじめに Ruby 3.0ではRubyのコードに型定義情報を提供するRBSという仕組みが導入されます。 この記事では簡単なサンプルプログラムを通して、RBSとその周辺ツールの使い方や役割を説明します。 なお、説明する内容はあくまで初歩的な内容です。予めご了承ください。 動作確認時の実行環境 本記事の執筆時点ではまだRuby 3.0は正式にリリースされていません。 正式リリース時、または今後のバージョンアップによってこの記事の内容と実際の挙動が異なる可能性もあります。 本記事の執筆時に使用した実行環境は以下のとおりです。 Ruby 3.0.0dev (2020-11-13T16:46:08Z master 782621054
アンチパターン ソフトウェア開発におけるアンチパターン (英: 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 から転送される) 実在するドメインだと何が困るの? 何らかの間違いでその実在するドメインに向けてメールが送信され
DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :name attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator. (翻訳) 非推奨の警告: UniquenessバリデータはRails 6.1で「強制的に大文字小文字を区別する比較」をしなくなります。Userモデルの:name属性について引き続き「大文字小文字を区別する比較」を使い続けたい場合は、uniquenessバリデータに対して明示的にcase_
(2020.7.30追記) RubyMine 2020.2からはアンチエイリアス設定がGreyscaleモードかNo antialiasingモードの2つしかなくなりました。 Subpixelモードがなくなったことにより、この問題が発生する可能性が低くなったものと思われます。 ちなみにSubpixelモードがなくなったのは「このモードをAppleがサポートしなくなったから」とのことです。 参考情報 IntelliJ IDEA 2020.2 EAP2 Is Here with Advanced Exception Stack Trace Analysis, Emoji Support on Linux, and More – IntelliJ IDEA Blog | JetBrains のコメント欄 Subpixel(LCD) text is slow with UI font in 202
はじめに RubyのPathname#joinメソッドを使うと2つのパスを連結することができます。 pathname = Pathname.new('/pen/pineapple') pathname.join('apple/pen').to_s #=> "/pen/pineapple/apple/pen" 上の結果を見ると、Pathname#joinは2つのパスを/で連結してくれるメソッドのように見えます。 しかし、joinメソッドの引数が/で始まっていると、少し直感に反した動きになります。 pathname = Pathname.new('/pen/pineapple') # "/"で始まるパスを指定すると、引数そのものを表すパスが戻り値になる pathname.join('/apple/pen').to_s #=> "/apple/pen"
僕はふだん前者のパターンで書いています。その理由は以下のとおりです。 後者のパターンより短く書けるから 'spec/fixtures/sample.csv'のようなパスが、プロジェクトルートから見た相対パスとして、ぱっと認識しやすいから 一方、後者のパターンで書く人の理由を聞いてみると、「実行環境によってはパスの区切り文字が/と限らないから」と答える人が多かったです。 これはおそらく、Windows環境でパスの区切り文字が\になることを意識しているんだと思います。 検証:"/"でパスを区切っても、Windows環境でちゃんと動く しかし、後者のパターンで書く理由が「Windows環境を意識しているから」なのであれば、その心配はおそらく無用です。 Windows環境のrails consoleで、先ほどのようなRails.root.joinの2つの書き方を比較した結果を以下に載せます。 (僕
対応は以上です。 Rails 6.1以上の場合(2022.5.27追記) Rails 6.1からはSameSite=Laxがデフォルト値になった関係でgemをインストールするだけでは機能しなくなりました(参考)。 Rails 6.1以降でも引き続き使う場合は、config/initializersなどで以下の設定も追加する必要があります。 rails_same_site_cookie gemがやってくれること rails_same_site_cookie gemをインストールすると、自動的に全cookieにSameSite=None; Secure属性が追加されます。 ただし、iOS 12とmacOS 10.14のSafariなど、SameSite=None; Secure属性を付けると不具合が発生するブラウザ(参考)に対してはこの属性を付与しません。 rails_same_site_co
はじめに テストコードを書くことは重要です。 テストコードがないアプリケーションよりもテストコードがあるアプリケーションの方が望ましいことは間違いありません。 ですが、テストコードも書き方を間違えると、アプリケーションが壊れているのに正しく検知できないテストを書いてしまう可能性があります。 この記事ではそんな「アプリケーションが壊れているのに正しく検知できないテスト」のコード例を「〜するべからず(〜してはいけない)」の形式で紹介し、その修正方法を説明していきます。 サンプルコードはRSpecで書いてます(でも他の言語でも考え方は同じはず) サンプルコードはRailsアプリケーションをRSpecでテストする場合を想定したものになっていますが、基本的な考え方自体は他の言語やテスティングフレームワークでも適用可能なはずです。 RSpecのイロハについて先に学んでおきたいかたは「使えるRSpec入
warning: URI.escape is obsolete warning: URI.encode is obsolete この警告の直し方を見ていきましょう! 歴史について少しだけ Ruby 2.7.0ではURI.escapeまたはエイリアスメソッドのURI.encodeを呼びだしたときに警告が出ます。これはあたかも新しく追加された警告のように見えますが、実際はなんと・・・10年以上も非推奨とされ続けていたのです!どうしても今までこの警告を目にしなかったんだろう?と不思議に思っている方へ。答えはこうです。これまではverboseモードでスクリプトを実行したときだけ表示されていました。そして、この仕様が最近変わりました。これがその理由です。 じゃあなんでURI.escapeは非推奨メソッドなの? 「URIをエスケープする」という概念は実はやっかいです。なぜならURIは多数の要素(pat
はじめに Bundler 2.1ではBundler 3で使えなくなる機能に対して警告が表示されるようになりました。 参考:【翻訳】Bundler 3アップグレードガイド - Qiita この関係でBundler 2.1ではbundle installに--pathオプションを付けると以下のような警告が発生します。 $ bundle install --path vendor/bundle [DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set pat
はじめに Rubyのパッケージ管理ツールであるBundlerはバージョン 3で後方互換性が失われる様々な変更点が導入される予定になっています。 そして、バージョン 3への移行を容易にするため、バージョン 2.1ではバージョン 3で使えなくなる機能を使うと警告が出ます。 これらの内容については公式リポジトリのアップグレードガイドで詳細が説明されています。 この記事は上記のアップグレードガイドの日本語訳です。 翻訳したアップグレードガイドの版について この記事で翻訳したのは2019年10月3日に更新された以下の版です。 (翻訳時点のBundlerの最新バージョンは2.1.4) 今後更新される可能性もあるため、必要に応じて最新の版を参照するようにしてください。 2020.1.15追記 2020年1月14日更新の版に追従しました。 この版における主な変更点は以下のとおりです。cf. rubygem
「よいサンプルコード」ってどんなサンプルコード? 〜Qiitaや技術ブログを書くときに気を付けること〜QiitaRuby はじめに Qiitaやブログに技術記事を書く場合は多かれ少なかれ、サンプルコードを書くと思います。 たかがサンプルコード、されどサンプルコード。 技術記事に書くサンプルコードはどうあるべきなのでしょうか? いろいろな観点があると思いますが、この記事では僕が考える「よいサンプルコード」について語ってみようと思います。 なお、この記事のサンプルコードはRubyで書いていますが、記事の内容自体はRubyに限らずどんな言語にも適用できるものです。 どういったサンプルコードが理想的なのか(大雑把なレベルで) 細かいポイントの説明に入る前に、大雑把なレベルで理想的なサンプルコードについて確認しておきましょう。 以下は僕が考える理想的なサンプルコードです。 読み手(=見知らぬ第三者)
サンプルコードでわかる!Ruby 2.7の主な新機能と変更点 Part 3 - 新機能と変更点の総まとめRuby はじめに Rubyは毎年12月25日にアップデートされます。 Ruby 2.7については2019年12月21日にrc2がリリースされました。 Ruby 2.7.0-rc2 リリース この記事ではRuby 2.7で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。 ただし、Ruby 2.7は多くの新機能や変更点があり、1つの記事に収まらないのでいくつかの記事に分けて書いていきます。 番号指定パラメータ、パターンマッチ構文、キーワード引数に関する仕様変更についてはすでに他の記事で説明したので、本記事ではそれ以外の変更点を説明しています。 すでに説明したRuby 2.7の新機能や変更点はこちら Ruby 2.7の新機能や変更点は非常に多いの
はじめに 2019年12月25日に、Rubyの新しいバージョンであるRuby 2.7がリリースされました。 一方、2017年11月に出版した書籍「プロを目指す人のためのRuby入門」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 2.4.1を対象にしています。 本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。 そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。 というわけで、この記事ではRuby 2.7で発生する「プロを目指す人のた
どうですか?想像通りの結果になりましたか? それではまた。ごきげんよう。 ・・・ではなくて、上のコードに出てきた3連引用符(""")ってみなさん知ってましたか? Rubyを長年やってる人もあまり見たことはないんじゃないでしょうか。 というか僕も最近知りました。 """ の種明かし 「Rubyに """ なんていう構文はあったっけな〜?🤔」と思ってネットや書籍を調べても、たぶんそんな構文はどこにも載っていないと思います。 これ、実は""" = "" + "の意味になっているだけなんです。 つまり、先ほどのコードはこう書いているのとほぼ同じです。
はじめに Homebrewでrbenvとruby-buildの組み合わせでRubyをインストールしている場合は、以下のコマンドで最新版のインストールパッケージを取得することができる。 ただし、最新のruby-buildがHomebrewに反映されるまでには数日かかることがあるため(※)、最新バージョンのRubyがリリースされてもすぐにインストールできないことがある。 ※ 参考情報 ruby-buildの更新に時間がかかるのは、HomebrewへのPull request(以下PR)の作成とマージが必要になるから。 → 例:ruby-build 20191205のPR Homebrewの更新を待たずにすぐにインストールしたい場合は、以下の手順で自力で最新版のインストールパッケージをセットアップすることができる。(2019.12.26追記:@sakuroさんのコメントを参考にして以下の手順を全
サンプルコードでわかる!Ruby 2.7の主な新機能と変更点 Part 2 - キーワード引数に関する仕様変更Ruby はじめに Rubyは毎年12月25日にアップデートされます。 Ruby 2.7については2019年11月23日にpreview3がリリースされました。 Ruby 2.7.0-preview3 リリース この記事ではRuby 2.7で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。 ただし、Ruby 2.7は多くの新機能や変更点があり、1つの記事に収まらないのでいくつかの記事に分けて書いていきます。 本記事で紹介するのはキーワード引数に関する仕様変更です。 キーワード引数以外のRuby 2.7の新機能や変更点はこちら Ruby 2.7ではパターンマッチ以外にもさまざまな新機能や変更点があります。 それらについては以下の記事で紹介
はじめに 本記事はRuby 2.7の新機能であるパターンマッチ(もしくはパターンマッチング)を紹介する記事です。 パターンマッチは説明する内容が多いので、次のように前編と後編の2部構成になっています。 前編 = パターンマッチの概要、case文っぽい使い方、配列やハッシュとのマッチ、変数への代入 後編 = 自作クラスをパターンマッチで活用する方法、パターン名の整理 この記事は後編ですので、まだ前編を読んでいない方は先に前編を読んでからこの記事に戻ってきてください。 サンプルコードでわかる!Ruby 2.7の新機能・パターンマッチ(前編) - Qiita それでは以下が後編です。 Step 3. 自作のクラスをパターンマッチに対応させる ここまでは配列やハッシュなど、Rubyで元から用意されているオブジェクトをパターンマッチで使用してきました。 ですが、自分で定義した自作のクラスをパターンマ
次のページ
このページを最初にブックマークしてみませんか?
『@jnchitoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く