Rubyの X || = y みたいなコードの読み方

こんにちは!kossyです!




本日気になったニュースはこちら
thebridge.jp

いいサービスだな、と思ったら既に類似のビジネスが走っているのですね、、、
どんだけこの界隈に疎いんだよ自分、、、

しかしクラウドファンディングに成功してニュースとして取り上げてくれるのはいいですね。
まだサービスがローンチされてない中でこのようにメディアに取り上げてくれるのは、
ある程度の広告効果が期待できそうです。

サービスの提供開始前の広告戦略として参考になるかも。









さて、今回はRubyにおける自己代入のイディオムである、|| = の読み方について、
ブログに残して見たいと思います。





環境
Ruby 2.5.1




Ruby熟練者がよく書くらしい

最初見たときはなんじゃこりゃ、と思いましたが。
Rubyの熟練者の方がよく使うらしいです。
Railsチュートリアルにもこのイディオムは登場してますね。


|| = の解読

端的にまとめると、
「左辺の値がnilであれば、右辺の値を左辺に代入する。もし左辺に値が存在していれば、
右辺の値は評価されない」
と言うイディオムになります。

例えば、

@current_user ||= User.find_by(id: user.id)

というコードがあるとすれば、
「@current_userの値がnilであれば、Userモデルの中のidがuser.idであるレコードを検索して、
@current_userに値を代入する」
という流れになります。

使いこなせれば結構便利ですね。

ミュータブルとイミュータブル

こんにちは!kossyです!




本日気になったニュースはこちら
news.yahoo.co.jp

そこまでやるか、って感じですね、、、
インターネットや検索エンジンが人々の生活を豊かにしたのは間違いないですし、
規制の深化でテクノロジーの進歩が阻害されるようなことがあってはいけないと思ってます。











プログラミングを学んでいると、毎日必ず知らない単語に出会うのですが、
今日もご多聞に漏れずミュータブルとイミュータブルという単語に出会ってしまいました。

今回はミュータブルとイミュータブルとはなんぞや、ということで
ブログに残しておこうかと思います。



ミュータブルとは?

英語で書くとmutableって書くみたいですね。
bleで語尾が終わっていると(availableとかvariableとか)、「〜できる」とか「〜しやすい」って意味になります。
mutableも他のbleで終わる単語と同様に、「可変の」とか、「変更可能な」等の意味を持っています。

プログラミングの世界では、「破壊的な変更ができる」という意味で使われているみたいです。
Rubyで言うと!マークが付いているメソッドが適用できるってことですね。

例えば、Stringクラスはデフォルトでミュータブルなので、!が付いたメソッドを乱用していると、
意図せずバグを起こすということが起き得ます。

イミュータブルとは?

英語って(と言うか言語って)便利で、一つ単語を覚えてしまうと、
覚えようと思えば対義語や類義語、活用形なんかもすんなり覚えられちゃいます。

イミュータブル(immutable)もmutableと対を成しており、
「不変な」とか「変更不可の」等の訳し方をするみたいです。



余談ですが、im-とかin-で始まる単語は基本的に否定の接頭辞として使われてまして、例えば、
「immposible(不可能)」とか、incredible(信じられない)とかです。

immposibleの対義語はpossibleで、incredibleはcredibleですね。ちなみにcredibleの名詞形はcredit(信用)です。
こんな感じで一つ単語を覚えてしまうと枝のように広がることができるのが面白いですね。



話が逸れてしまいました。
プログラミングの世界では、immutableのことを、「破壊的変更が適用できない」という意味で用いられるみたいです。

Rubyではimmutableなクラスや値がいくつかあって、
・IntegerやFloat
・Symbol
・True/FlaseClass
Nil
等が有ります。



まぁ、「ミュータブルだから〜」とか言われたら、
「あぁ、ここの値変更できるのね」

「イミュータブルだから〜」だったら、
「変更できないのね、freezeすんのかな」

とか思っとけば良さそうです。

リンクを自動で生成してくれるgem 'rails_autolink'

こんにちは!kossyです!




本日気になったニュースはこちら
headlines.yahoo.co.jp

Twitter等のSNSを見ていても、「仮想通貨で大儲け!」のような人は
めっきり見かけなくなった気がします。
テレビ番組でも去年は特番なんかが組まれていましたが、
最近はほとんど見ません。

ちょうど昭和終わりー平成初期のバブルから30年くらい経ちましたし、
世代が変わるとバブルが起きる、ということの証明にはなったのではないでしょうか。









さて、今回はRailsでの開発において、自動でURLをリンク化してくれるgem 'rails_autolink'の使い方を
ブログに残してみたいと思います。




環境
Rails 5.2.1
Ruby 2.5.1
MacOS Mojave




実装方法

まずはgemの導入です。

Gemfile

gem 'rails_autolink'


$ bundle install

これでauto_linkメソッドが使えるようになるので、
任意のビュー内に記述します。

= auti_link(simple_format(h(@content.description), {}, sanitize: false, wrapper_tag: "div"))

これで自動でリンクが生成されるはずです。

開発環境でのActive_Storageの使い方

こんにちは!kossyです!




本日気になったニュースはこちら
thebridge.jp

インターネットの登場で情報の非対称性はかなり緩和されたと思うのですが、
それでもなお一定数は存在していると思います。

この企業の事業は情報の非対称性の緩和にかなり貢献するのではないでしょうか。










さて、今回はRails5.2系から新しく導入されている、Active_Storageの開発環境での使い方について、
ブログに残してみたいと思います。



環境
Rails 5.2.1
Ruby 2.5.1
MacOS Mojave




尚、Active_Storageについて絞って記述するので、
routing、controllerの設定、細かなビューの記述については割愛しています。



Active_Storage利用準備

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

$ rails active_storage:install

=> Copied migration 20181122043208_create_active_storage_tables.active_storage.rb from active_storage


$ rails db:migrate


画像を添付できるようにモデルを編集

任意のモデルファイルにhas_one_attahedメソッドを用いて、
1つのコンテンツに1つの画像を紐づけることを、
その画像をコンテンツモデルからimageと呼ぶことをRailsに伝えています。

app/models/任意のモデルファイル(ここではContentとしておきます)

Class Content < ApplicationRecord

has_one_attached :image(任意)

end


ビューファイル編集

任意のビューファイル(ここではapp/views/contents/new.html.slimとします)
* bootstrapを使っています


= form_with model: content, local: true do |f|
  - if task.errors.present?
    ul#error_explanation
      - task.errors.full_messages.each do |message|
        li= message
   .form-group
    = f.label :image
    = f.file_field :image, class: 'form-control'
= f.submit '登録する', class: 'btn btn-primary'

show.html.slimにimage_tagを追加
動作確認のためにshow.html.slimを変更します。
任意の位置にimage_tagを追加します。

= Content.human_attribute_name(:image)
= image_tag @content.image if @content.image.attached?

これでファイルの保存ができます。

Mailerの動作確認ができるgem 'mailcatcher'

こんにちは!kossyです!




本日気になったニュースはこちら
www.tv-tokyo.co.jp

最近は小規模のM&Aがサラリーマンの間で話題になっているみたいですね。
TRANBIというM&Aマッチングプラットフォームの会社で、
会社の売買や事業承継なんかができるそうです。

普通のサラリーマンの方が会社を持つ手段として、起業だけではなく、
M&Aという手段もこれからどんどん注目されていきそうです。










さて、今回はRailsにおいて、ActionMailerでのメール送信機能の動作確認が
開発環境でできるmailcatcherというgemの使い方をブログに残したいと思います。




環境
Rails 5.1.6
Ruby 2.5.1
MacOS Mojave





mailcatcherのインストール

bundlerでインストールすると不具合が発生するらしいので(開発者が言ってます)、
ターミナルで、

$ gem install mailcatcher

と記述し実行します。

その後、config/environments/development.rbに、
「mailcatcherのSMTPサーバを利用する」という設定をアプリケーション側に追加します。

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025 }

次に、mailcatcherを起動します。

$ mailcatcher



Starting MailCatcher
==> smtp://127.0.0.1:1025
---省略---
==> http://127.0.0.1:1080
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

サーバーサイド側のMailerのコードは
Action Mailerの使い方 | 酒と涙とRubyとRailsと
Action Mailer の基礎 - Rails ガイド

こちらを参考にしてみてください。

Railsにおけるurlとpathの使い分け

こんにちは!kossyです!




本日気になったニュースはこちら
www.itmedia.co.jp

YouTuberを起用している点は非常にいいと思います。
知名度があるだけで信用度がないタレントさんだと
コケるような気がします。









さて、今回はurlとpathの使い分けについて
ブログに残してみたいと思います。




環境
Rails 5.2.1
Ruby 2.5.1
MacOS Mojave



使い分け

基本は以下で良さそうです。

・リダイレクトを伴うならurl
・それ以外はpath


実例を示すと、コントローラでリダイレクト先を指定する時にはurlで、
ビューでリンクを生成する時はpath



みたいな感じですね。
ただ、コーディング規約が定められているのであれば、そちらに従った方が無難でしょう。





参考にさせていただいた記事
_pathメソッドと_urlメソッドの使い分け - Qiita

開発環境で本番環境のエラー画面を出したい

こんにちは!kossyです!




さて、今回は開発環境で本番用のエラー画面を出したいときのやり方を
ブログに残してみたいと思います。



環境
Rails 5.1.6
Ruby 2.5.1
MacOS Mojave




app/config/environments/development.rbの、

  # Show full error reports.
  config.consider_all_requests_local = true

ここの記述をfalseにすれば本番用のエラー画面を出力できます。



2020/09/17 追記

Ruby界隈で著名なプログラマーである@jnchitoさんが以下の記事を書かれていらっしゃいました。



う、、、完全にアンチパターン踏んどるやん、、、
と思ったので追記しております。

本番環境でエラーログを確認したい場合は、上記の記事で記載のあるやり方の他には
Airbrakeやrollbarといったエラー通知サービスを扱うのがいいのではないかと思います。

どちらも無料で使えるプランがありますので、
私のようにアンチパターンを踏まないようにするために、お試しで利用してみることを推奨します。

Github desktopにログインできない問題

こんにちは!kossyです!




最近これを買いました。
book.mynavi.jp

初歩的なことから現場を意識したことまで一貫して網羅されており、
今まで買ったRails関係の技術書の中で一番良いと思います。

残りのニート期間中にやりきります。










さて、今回はGithub desktopにログインできなくなるという事象に
遭遇してしまったので、解決策をブログに残してみたいと思います。

Github desktopからのアラート文

GitHub Desktop was unable to store the account token in the keychain. 
Please check you have unlocked access to the 'login' keychain. 

なんでアラートが出たのかわかりませんが、
これがないと開発にならないので、対応しました。

1. MacのFinderを開き、アプリケーションディレクトリのユーティリティの中にある、
「キーチェーンアクセス」を開く

2. 画面左側にある「ログイン」を右クリックし、「"キーチェーンログイン"をロック」をクリック

3. 再度ログインを右クリックし、ロックを解除する


この手順でアラートが出なくなりました。



参考にさせていただいた記事
GitHub for Desktopのエラー : とあるエンジニにゃーのblog

バリデーションヘルパー早見表

こんにちは!kossyです!




さて、今回はRailsにおいてDBに値を保存するときの検証に用いる
バリデーションヘルパーの早見表をブログに残したいと思います。




環境
Rails 5.2.1
Ruby 2.5.1
MacOS Mojave





バリデーションヘルパー早見表


・データが存在しているか

validates :name, presence: true

・数値がきちんと入っているか

validates :int, numericality: true

・(数値の)範囲が期待通りか

validates :int, inclusion: { in: 0..9 }

・文字列の長さが指定した数を上回っていないか

validates :name, length: { maximum: 30 }

・フォーマットに適合しているか

validates :email, format: { with: /\A[a-zA-Z0-9_\#!$%&`'*+\-{|}~^\/=?\.]+@[a-zA-Z0-9][a-zA-Z0-9\.-]+\z/}

・データが一意か

validates :name, uniqueness: true

・確認用のものと一致しているか

validates :password, confirmation: true

(備忘録)Docker用語まとめ

自分用Docker用語まとめです



MovyLinux
Dockerをインストールすると、自動で導入される、
軽量なLinuxマシン

コンテナ
実行環境を立ち上げた際にMovyLinux上に作成される仮想環境のこと

Docker Hub
作成したコンテナをクラウド上で共有できるサービス

イメージ
コンテナの元になるファイルをまとめたものの名前

Dockerfile
イメージの元になるコードを記述するところ
このファイルをbuildするとDcoker Image(コンテナ仮想環境の雛形が作成される)



ターミナルコマンド

docker-compose run web rails new . --force --database=mysql
Railsのコンテナ上で、rails new ~ を実行することを示すコマンド
コンテナ上の作業ディレクトリである/appディレクトリにプロジェクトファイルを作成する

    • force 既存ファイルを上書きするオプション
    • database=mysqlMySQLを使用するためのオプション

docker-compose build
作成されたファイルをコンテナ内に取り込むためのコマンド

docker-compose up -d
database.ymlに基づきコンテナを起動するコマンド

docker-compose ps
コンテナが起動しているかを確認

docker-compose run web bundle exec rake db:create
DBを作成

docker-compose stop
コンテナを停止させるコマンド

docker-compose down
コンテナを削除するコマンド

rm tmp/pids/server.pid
ctrl + c 等で強制終了した際に残ってしまうpidファイルを削除するコマンド

bundle installしたい場合
docker-compose build -> docker-compose up -d

attach状態から抜けたい時
ctrl + p q

docker-compose exec web rails db:seed
seedファイルに記載したデータを生成したいとき