Ruby関連のことを調べてみた2021年03月02日

Ruby関連のことを調べてみた2021年03月02日

マジックナンバーとrailsにおける定数管理gem “config”

## この記事の目的

開発中に「マジックナンバー」と言う聞き慣れない(恥ずかしながら)言葉を耳にし、その意味と問題点を調べたのでまとめました。また、Railsにおける「マジックナンバー」への対応策の一つを紹介したいと思います。

この記事で以下のことが分かると思います。

– マジックナンバーとは何か
– 開発におけるマジックナンバーの問題点
– その解決策の一つであるrailsのgem “config”の扱い方

## 1. マジックナンバーとは

マジックナンバーとは、ハードコーディングされた数値のことです。

ハードコーディングとは、**固有名詞・固有値**をソースコード内に**直接**埋め込んだコードのことです。
ソースコードとは、開発者がコーディングしているファイルの内容のことです(index.html, stylesheet.cssなど大体そうかと)。

ハードコードの中でも数値のことを、プログラミングにおいて「マジックナンバー」と呼びます。

“`erb:index.html.erb

# ハードコードの例

  • 山田太郎

    2

  • 元記事を表示

    Ruby Gold試験前に読むとほんの少しだけ点数が上がる記事(2020/12〜2021/03)

    # はじめに
    約2ヶ月間(2020年12月末〜2021年3月頭)でRuby Silver試験(2.1)とRuby Gold試験(2.1)に合格しました。点数的にはどちらもギリギリだったので、もう少しなんとかなったかな、と思っており、これを読んでいていただいた方の少しでもためになればと思って書き始めてます。主にGold中心に書いてますが、見ておけば+2~4点くらいできるようになれれば幸いです。

    ## 目次
    ・そもそもRuby Silver とRuby Goldって?
    ・当日苦戦した問題(Gold)
    ・直前で学んだ内容で、出てきた問題(Gold)
    ・参考にしたサイト、記事(Silver/Gold)
    ・勉強していてなんだかなと思ったポイント(Silver/Gold)
    ・最後に

    ## そもそもRuby Silver とRuby Goldって?
    [こちらの公式サイト](https://www.ruby.or.jp/ja/certification/examination/)をご参照ください。また、[とある出典](https://www.ssug.jp/docs/isv/ISVMapVer10

    元記事を表示

    Rubyのincludeを理解したい①

    #書くこと
    Rubyのincludeについて、メソッド探索について学んだ結果見えた事実
    こちらの記事を参考にさせていただきました。ありがとうございました。

    [【ruby】 メソッド探索から見る、モジュール・特異メソッド・特異クラス](https://at-grandpa.hatenablog.jp/entry/2016/02/14/090544)

    自分なりに、こちらの記事を設計図と車で喩え直してみました。

    (こちらの記事は、2部構成になっているうちの、第一部です。)
    次の記事はこちら→

    ##クラスとインスタンス
    本題は、Rubyのincludeについてですが、この記事では後に理解がしやすくなるようにクラスとインスタンス、それに伴う変数とメソッドについて掘り下げていきます。

    Rubyには、クラスとインスタンスと言う概念があります。
    車を作る時で考えてみましょう。

    ####- クラスは、設計図です。
    ####- インスタンスは、その設計図をもとに作られた実際の車です。

    もう少し理解してみましょう。クラスとインスタンスには、それぞれメソッドなるものが存在します。

    ####-

    元記事を表示

    【Rails】世界一簡単なcreated.at(updated.at)日本語表記

    #はじめに

    railsではロンドン?の時刻表示がデフォになっていますが、簡単に日本語表記で表すことができます。

    本記事では簡単にやる方法を簡潔に書きます。

    #開発環境

    – Ruby2.6.6

    #実際のコード

    まずは、`application.rb`に以下を記述します。

    “`ruby:config/application.rb
    config.i18n.default_locale = :ja
    “`
    次に、config/locateの中に`ja.yml`のファイルを作り、以下を記述します。

    “`ruby:config/locate/ja.yml
    ja:
    datetime:
    distance_in_words:

    less_than_x_minutes:
    one: “1秒”
    other: “%{count}秒”
    x_minutes:
    one: “1分”
    other: “%{count}分”
    about_x_hours:
    o

    元記事を表示

    [Ruby on Rails] No template for interactive request

    なんか色々と長い内容のエラーに出くわした。
    備忘録と言うよりは打つ間違いに気をつけろ!ってことで
    自身への反省をこめて書きます。

    ##No template

    なら、いつもの記述間違いか?ってなる所、
    今回のエラーはいつもより長かった…

      

    **エラー内容↓**
    ##No template for interactive request
    CatsController#show is missing a template for request formats: text/html
    NOTE!


    訳**(インタラクティブリクエスト用のテンプレートはありません
    CatsController#showにリクエスト形式のテンプレートがありません:text / html
    注意!)** 

    ###解決方法?
    なのかは、分からないが**show.html**のファイルを作った時にコンマが一個多かったorz
    **show..html.erb** となっていた。
    ただそれだけ。
     

    ###まとめ
    たまたま早期発見できたものの、今後templateエラーが出たら
    コードとファイルの

    元記事を表示

    Rails Slackへメッセージを送信

    前提条件

    ・ruby 2.6.6
    ・Rails 6.0.3.2
    ・macOS Catalina バージョン10.15.7

    概要

     webアプリ内で特定のアクションが起きた時にSlackへ通知する機能を実装したいと思い
    実装の備忘録としてここに記す。
     思ったよりかなり簡単だったので、ぜひご自身のwebアプリに活用していただけると幸いです。

    gem ‘slack-notifier’の導入

     slackへ通知を送るにはgemを導入する必要があります。

    “`ruby:Gemfile
    gem ‘slack-notifier’
    “`
    “`ruby:ターミナル
    bundle
    “`
    これでgemの導入が完了します。

    Slack側準備

     まずチャンネルのWebhook URLを取得するために、下記のURLにアクセスします。 

     https://slack.com/services/new/incoming-webhook

     ここでRailsからの通知を受け取るチャンネルを設定します。既存のチャンネル、もしくは新

    元記事を表示

    単体テストコードでエラ〜メッセージすら出なかった話

    こんばんは。

    本日は初投稿です。
    今回の内容は単体テストコードで発生してしまったあるトラブルについてです。

    ## WHAT

    まずは下の画像をご覧ください。
    ![単体テストコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692330/c4f7e84b-e332-1f11-ca8d-c68d0127c50b.png)

    カード情報に不備があるとき、「Token」がないとしたテストコードでエラーが発生していますね。
    これは何が発生しているのかというとエラーを期待する私に対してコンピュータが「エラーなんて発生していない」と返答をしているのです。

    医者と患者を例にすると患者が「私風邪っぽいです」と申告したとします。

    “`
    Failure/Error: expect(@address_form.errors.full_messages).to include(“Token can’t be blank”)
    「ウチ風邪っぽいねん」
    “`

    それに対して

    “`
    expected [] t

    元記事を表示

    【Rails】 バッチ処理でのエラー「sudo: systemctl: command not found」

    はじめに

    今回は、とあるスクールのカリキュラムを参考に、初めてバッチ処理を実装していた時の話です。
    cronを利用して削除プログラムを定時処理として実行させようとしていたところ、エラーが発生してしまいました。
    自身の備忘録として、また同じようなエラーに遭遇された方の参考になればと思い投稿させて頂いております。

    (参考)
    ・crontabコマンド

    crontabコマンド

    ・CentOSのバージョン確認
    https://ja.stackoverflow.com/questions/66504/centos%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%A2%BA%E8%AA%8D

    開発環境

    ruby 2.6.3
    Rails 5.2.4.4
    AWS Cloud9(Amazon Linux)

    エラーの内容

    推奨されていたコマンドがこちらですが、どちらも同じエラーで弾かれてしまいます。

    “`terminal.
    # cr

    元記事を表示

    A server is already running. 対処方法

    前提条件

    ・ruby 2.6.6
    ・Rails 6.0.3.2
    ・macOS Catalina バージョン10.15.7

    概要

    ローカル環境でrails sを走らせようとしたが
    “A server is already running”
    というエラーが発生した。その対処法を記述する。

    1.再起動をする

    ターミナルを全て閉じ再起動する。
    これで解決する場合もあるみたい。私はやったことはない。

    2.tmp/pids/server.pid.を削除する

    私はこの方法で毎回解決している。
    ターミナルで”A server is already running”の後に
    Check /Users/・・・・/tmp/pids/server.pid.
    と出ている。
    サーバーを落とす際にこのファイルが消されるはずなのだが、何らかの不具合で
    消されていない状況が発生するようだ。
    Finderからアクセスし、直接”server.pid.”を削除
    これで解決。

    元記事を表示

    「action_args」Gemから学ぶ「Ruby」④ ソース分析3日目

    ## 本日はabstract_controller.rb分析
    「action_args」Gem分析3日目です。
    [abstract_controller.rb](https://github.com/asakusarb/action_args/blob/e5e4f3e10e410b34cc7dfbf0056b6d3d289ef96d/lib/action_args/abstract_controller.rb)を見てみます〜

    ### **学習ポイント1**
    “`:params_handler.rb
    module ActionArgs
    module ParamsHandler
    refine AbstractController::Base do

    end
    end
    end
    “`

    “`:abstract_controller.rb
    require_relative ‘params_handler’
    using ActionArgs::ParamsHandler
    “`

    [Kernel.#require_relative](https://

    元記事を表示

    Boolean型の記述方法について

    orangeを2倍にした数がappleの数以上であった場合にのみ
    trueを返しそれ以外はfalseを返したい時、以下のように記述できる。

    “`
    def fruit(apple, orrange)
    orrange * 2 <= apple end ``` このような書き方は冗長になる。 ``` def fruit(apple, orange) if orange*2 <= apple true else false end end ```

    元記事を表示

    ActiveRecord includesとselectの別名カラム

    # 概要
    ActiveRecord includesを使う際、selectに別名カラムの記述があると
    その別名カラムの参照ができない事象があったので、記事にしました。

    # 開発環境
    * ruby 2.6.5
    * Rails 5.2.4.4

    # ActiveRecordクラス 定義
    “`ruby
    class User < ApplicationRecord has_one :house end class House < ApplicationRecord belongs_to :user belongs_to :house_info end class HouseInfo < ApplicationRecord has_one :house end ``` # 問題ない場合のincludes構文 * 問題なくuserインスタンスが取得できた (preloadの挙動になる) ```ruby User.includes(house: :house_info).select('users.id, users.created_at as u

    元記事を表示

    【Rspec】Error: raise WrongScopeError の解消【原因:rspec_railsのバージョン】

    Rspecを初めて書こうと思い、色んな記事を参考にrspec_rails をインストールしてテストを書きました。いざRspecを走らせてみると、以下の様なエラーが発生しました。

    “`
    Failure/Error:
    raise WrongScopeError,
    “`#{name}` is not available from within an example (e.g. an ” \
    “`it` block) or from constructs that run in the scope of an ” \
    “example (e.g. `before`, `let`, etc). It is only available ” \
    “on an example group (e.g. a `describe` or `context` block).”

    `name` is not available from within an exam

    元記事を表示

    作品を評価し合うwebアプリ作ってみた[個人開発]

    ##今回作ったもの

    https://www.prorp.net/

    タイトルにもある通り、絵や音楽、プログラムなどの作品を評価し合うコミュニティサイト「**PRORP**」です。

    ![4598734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480294/65cd29dd-9a94-ba01-0bc4-c7338faa3195.png)

    ##なぜ作ったか

    ヤフー知恵袋でこんな質問を見つけました。

    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1396515328

    塾に通ってるなら他人からの評価は簡単に受けれますが、独学の場合なかなかしっかりと評価を受けるときってありません。
    以外に他人の評価って欲しがってる人が多いのかなと思い作りました。

    ##工夫した点

    **投稿一覧ページをなくした**
    公開したばかりでユーザーも投稿も少ないのでユーザーが投稿が見る方法は検索だけにしました。
    使いずらいですが最初はしょうがないんで

    元記事を表示

    【超かんたん】Fakerを使ってダミーデータを作成しよう!

    Fakerを利用してアプリにダミーデータ生成します。
    今回は、deviseで作成したusersテーブルにダミーデータを投入していきます。

    ##Fakerとは
    Fakerとはランダムな値を生成してくれるGemです。人名、メールアドレス、パスワードの生成はもちろんのことゲームのタイトルやアニメのキャラクター名なども生成してくれる遊び心がいっぱい詰まったGemです。[公式ドキュメント](https://github.com/faker-ruby/faker)

    では、さっそく使って行きましょう!

    ##Fakerの導入
    ####gamのインストール

    “`:Gemfile
    gem ‘faker’
    “`

    “`:ターミナル
    bundle install
    “`

    導入完了。

    ##ダミーデータの生成

    今回は、deviseで生成されるemailとpasswordの他にnameカラムを追加しています。

    deviseで生成されるemailカラムには一意性制約があるので**Faker::Internet**と**free_email**の間に**unique**と記述しています。

    pas

    元記事を表示

    Ruby 出力について

    #出力について

    Rubyには処理の結果を目に見える形で出力するためのメソッドとして様々な出力系メソッドが存在します。

    それぞれの違いを調べ、必要な場面で使いこなせるようにまとめておきます。

    ・printメソッド:改行を入れずに引数に指定した値をそのまま出力する。

    “`
    print 123
    print ‘あいう’
    “`

    “`
    【実行結果】
    123あいう
    “`

    ・putsメソッド:末尾に改行が入る形で引数に指定した値をそのまま出力する。

    “`
    puts 123
    puts ‘あいう’
    “`

    “`
    【実行結果】
    123
    あいう
    “`

    ・pメソッド:出力する値と共に型情報(文字列や数値型など)分かりやすい形で出力します。数値はそのまま表示、文字列はダブルクォートで挟んだ状態で表示されます。

    “`
    p 123
    p ‘あいう’
    “`

    “`
    【実行結果】
    123
    “あいう”
    “`

    元記事を表示

    ruby silverに無事合格したので、体験記をまとめてみる(2021/02)

    無事ruby silverに合格したので
    他、数多くの合格体験記がありますが
    私もその例に倣って書いてみることにします。

    2021年2月の最終週に初受験。88点で合格しました。
    12問までミスしても大丈夫だ!というのが、心理的には大分安心材料で
    多少答えに自信がない問題があったとしても、ペースを崩さずに進められました。

    ##前提
    私のrubyとの関わり具合です

    + ちょうど業務でrubyを使い始めて1ヶ月くらい(railsに苦戦中)
    + 会社で取得を推奨されたので、重い腰をあげてトライしました
    + 以前からrubyの勉強はちまちましていたが、udemy1,2講座と、所謂チェリー本を少し読んだ程度
    + プログラマー歴自体は3年弱
    + あまり意識は高くない方のプログラマーです。勉強は好きじゃないです(白目)

    ##勉強時間

    + 約1ヶ月くらい前から準備し始めました
    + 平日は基本勉強らしい勉強はせず。休日メインで学習を進めました。
    + 合計学習時間は30時間くらい
    + 集中してガッツリ取り組むより、ながら勉強が多かったです。

    ##勉強に使用したもの
    ① ruby技術者認定試験合格

    元記事を表示

    basic認証を導入する

    **basic認証をアプリケーションへ導入する**

    controllers/application_controller.rb にて以下の記述を行う。

    “`ruby
    class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] # 環境変数を読み込む記述に変更 end end end ``` 環境変数を使って、ユーザー名とパスワードの設定を行う。 heroku上で管理を行うため以下の記述でセットする。 ```terminal % heroku config:set BASIC_AUTH_USER='aaaa'

    元記事を表示

    【Ruby on Rails】deviseの導入

    Ruby on Railsの便利機能であるdeviseの導入手順をまとめます。

    ## 環境

    | | Version |
    |:—————|————:|
    | MacOS Catalina | 10.15.7 |
    | Ruby | 2.6.5 |
    | Rails | 6.0.3.5 |

    ## Gemfile

    Gemfileの一番下に下記を記述します。

    “`Ruby:Gemfile
    gem ‘devise’
    “`

    ターミナルで下記コマンドを実行しgemを読み込みさせます。

    “`Ruby:ターミナル
    bundle install
    “`

    ターミナルで下記コマンドを実行しdeviseを導入します。

    “`Ruby:ターミナル
    rails g devise:install
    “`

    下記のようなメッセージが出てそれぞれファイルが生成されます。

    “`
    create config/initializers/devise.rb
    crea

    元記事を表示

    [ruby] Google Firebase Storageの簡単な使い方

    # Spark プラン 無料枠 Storage

    https://firebase.google.com/pricing
    ![Firebase_Pricing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16757/9eb039d7-680a-0c35-ca7d-d3a11213b910.png)

    # プロジェクトID
    ![clouds_–_Project_settings_–_Firebase_console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16757/cc3cd796-c89b-26ac-8dd2-d458ef45f351.png)

    # バケットID
    複数のバケットは持てないので、ここに表示されるドメイン名がそれ(`gs://`以下)

    ![clouds_–_Storage_–_Firebase_console.png](https://qiita-image-store.s3.ap-north

    元記事を表示

    OTHERカテゴリの最新記事