自由帳

既に知っていることも含めて再アウトプット用に書きます✍️

福岡旅行

有給消化のため、急遽一人で福岡へのグルメ旅行をしてきました。 たまたまピーチでセールだったのもあり、片道3500円ぐらいで行けたのでかなりラッキーでした。

今回は、その旅の記録を備忘録として雑に残したいと思います。

旅行前に最低限「ごま鯖」、「鯛めし」、「モツ鍋」は必ず食べると決めて行きました。

海鮮屋はじめの一歩 博多本店

ごまさば定食を注文しました。 人気店らしく、料理美味いです。 カウンター席もあり、お店は一人でもおすすめです。

水産卸直営酒場 ぎんりん

目的のお店と間違って何故か入ったお店。 とりあえず、ビールとごま鯖とごまカンパチを注文

真ん中に厨房があって円卓みたいな感じで回りのお客さんが見えるつくり。 目的のお店じゃないし、一人飲みするには落ち着かないお店だったので、さっさと退店。

居酒屋 真侍 (まことざむらい)

ビール、ごま鯖、鯛めしを注文。 ここはごま鯖のタレが味噌ベースだった。ここで味噌ベースと醤油ベースがあることを知る。 鯛めしがめちゃくちゃ美味い。 海産物がメインで他にも美味しそうな料理がめちゃくちゃありました。 カウンターがあり、一人飲みにおすすめ。人におすすめできるお店。

博多 ごまさば屋

ごま鯖にハマっていたので、ごま鯖メインのお店に訪問。 ごま鯖と炙りごま鯖を注文。炙りごま鯖がめちゃくちゃ美味い。 鯖の南蛮漬けは食べ放題です。ごま鯖食べたい人は訪問しても良いかも。

博多ごまさば丼専門店「竜宮の鯖」

博多駅からバスで30分の場所。 ごま鯖丼を注文。ご飯の量は「小盛、並盛、大盛」で選べます。 さば味噌がバリ美味い。〆に鯛のだし汁を入れて茶漬けにできるが個人的には好みではなかった。 おすすめのお店。

BOAT RACE 福岡(福岡ボートレース場

勝率を参考に予想してみましたが、全然当たらなかった。ムズい。 施設きれいでした。 入場料100円。緑茶飲み放題。

☆牛もつ鍋 宗家 赤門屋☆

南福岡駅にある居酒屋。 ☆ここはめちゃくちゃおすすめ。 とにかく料理美味い、お酒美味い、店員の対応も良きのお店。 めちゃくちゃ良すぎて、久しぶりにベロベロになるまでお酒を飲んだ。 店主の人が利き酒師らしく、メニューにない日本酒とかも出してもらって最高でした! カウンター席ありで、一人飲みにおすすめです。

モツ鍋の通販をやっているらしく、沖縄の人からの注文が多いらしい。

エスペリアホテル博多

2泊したホテル。部屋のWifiが弱い以外は良かったです。

中洲ぜんざい

ミルクぜんざいを注文。

大濠公園

岩盤浴の施設がメンテンナンスで休館になって時間ができたので寄ってみた。 綺麗な公園で、日本庭園や美術館、おしゃれなカフェとかあるし、ジョギングレーンみたいなのもあって近所にあると嬉しい公園。

でかい鯉多い。

[行けなかった]照葉スパリゾート 本店

ここの岩盤浴を楽しみにしていたのに、運悪くメンテンナンスで行けなかった。 沖縄にスーパー銭湯みたいなのが(たぶん)ないので行きたかった。


この旅は、ただ単に有給消化の一人旅だったはずが、美食の都・福岡の魅力に引き込まれ、次回訪れるのが今から待ち遠しいと感じるほどでした。 美味しい食事とともに、自分一人の時間を楽しむことができました。

Ruby on Railsの設定: config.active_record.migration_error の利用法

Ruby on Railsは設定可能なオプションが多く、それぞれが異なるシチュエーションにおいて重要な役割を果たします。 この記事では、特にconfig.active_record.migration_errorという設定に焦点を当てています。この設定はデータベースのマイグレーション状況によってアプリケーションがどのように振る舞うかを制御します。

config.active_record.migration_errorとは何か

config.active_record.migration_errorは、Railsアプリケーションがデータベースのマイグレーションエラーに対処する方法を指定する設定です。これはRails 5.2で導入されました。この設定には以下の4つの値を設定できます。

  1. :page_load - デフォルトの設定。マイグレーションが実行されていない場合、ページロード時にエラーが発生します。
  2. :warn - マイグレーションが実行されていない場合、ログに警告が記録されます。
  3. :raise - マイグレーションが実行されていない場合、アプリケーションは即時にエラーを発生させます。
  4. :none - マイグレーションが実行されていない場合でも何も行われません。この設定はデバッグや特殊な状況下で有用です。

config.active_record.migration_errorの使用方法

この設定は、config/application.rbファイルまたは環境固有の設定ファイル(config/environments/development.rbconfig/environments/production.rbなど)に追加することで使用できます。 以下にそれぞれの値を設定する例を示します。

config.active_record.migration_error = :page_load
config.active_record.migration_error = :warn
config.active_record.migration_error = :raise
config.active_record.migration_error = :none

どの設定値を選ぶべきか

どの設定値を選ぶべきかは、開発フェーズとアプリケーションの運用状況によります。

  • 開発中は:page_load:warnを使うとよいでしょう。これにより、マイグレーションを忘れている場合に気づくことができます。
  • 本番環境では:raiseを使うことをおすすめします。これにより、未実行のマイグレーションがある場合にすぐにエラーが発生し、問題を即座に把握できます。
  • :noneはデバッグや特殊な状況下で有用です。しかし、マイグレーションの状況を無視するため、通常の運用状況下では使用すべきではありません。

まとめ

config.active_record.migration_errorRuby on Railsの強力な設定オプションであり、適切に使用することでアプリケーションの安全性と信頼性を向上させることができます。 それぞれの値の使用法とユースケースを理解することで、あなたのアプリケーションにとって最も適切な選択を行うことができるでしょう。

全角スペースを処理するヘルパーメソッドの実装

全角スペースを処理するヘルパーメソッド

まず、全角スペースを半角スペースに変換し、文字列の先頭と末尾から半角・全角スペースを除去するヘルパーメソッドを作成します。

def process_fullwidth_space(str)
  # 全角スペースを半角スペースに変換(この処理はなくてもOK)
  str = str.gsub(/\u{3000}/, ' ')

  # 文字列の先頭と末尾から半角・全角スペースを除去
  str.strip.gsub(/^[[:space:]]+|[[:space:]]+$/, '')
end

Railsプロジェクトでの実装

Railsプロジェクトでは、このような文字列操作を行うヘルパーメソッドは、app/helpersディレクトリ内に作成したヘルパーモジュールに追加することが一般的です。

例えば、app/helpers/string_helper.rbというファイルを作成して、以下のようにメソッドを定義することができます。

module StringHelper
  def process_fullwidth_space(str)
    # 全角スペースを半角スペースに変換(この処理はなくてもOK)
    str = str.gsub(/\u{3000}/, ' ')

    # 文字列の先頭と末尾から半角・全角スペースを除去
    str.strip.gsub(/^[[:space:]]+|[[:space:]]+$/, '')
  end
end

そして、app/controllers/application_controller.rbファイルで、このヘルパーモジュールをインクルードして、すべてのビューで利用可能にします。

class ApplicationController < ActionController::Base
  include StringHelper
end

これで、Railsプロジェクト内のすべてのビューでprocess_fullwidth_spaceメソッドが使えるようになります。ただし、コントローラーやモデルで使用したい場合は、適切な場所でヘルパーモジュールをインクルードする必要があります。また、ヘルパーメソッドが特定のコントローラやビューに関連する場合は、そのコントローラに対応するヘルパーファイルにメソッドを定義することもできます。

まとめ

本記事では、全角スペースを処理するヘルパーメソッドをRailsプロジェクトで実装する方法を説明しました。全角スペースを半角スペースに変換し、文字列の先頭と末尾から半角・全角スペースを除去するprocess_fullwidth_spaceメソッドを作成し、Railsプロジェクトのapp/helpersディレクトリにヘルパーモジュールとして追加することで、アプリケーション全体で使用できるようになります。

ただし、Rubyの組み込みクラスを拡張する方法も存在しますが、予期しない問題や競合が発生する可能性があるため、特別な理由がない限り避けるべきです。代わりに、ヘルパーメソッドを作成して利用することが推奨されます。

これで、Railsプロジェクトにおいて全角スペースを適切に処理できるようになり、より柔軟な文字列操作が可能となります。今後も、Railsプロジェクトの品質向上に役立つヘルパーメソッドや拡張機能を積極的に活用していきましょう。


Railsプロジェクトで、Stringクラスを拡張する場合、config/initializersディレクトリ内に新しいファイルを作成してその中に記述することが一般的です。このディレクトリにあるファイルは、Railsアプリケーションの起動時に自動的に読み込まれます。

例えば、config/initializers/string_extensions.rbというファイルを作成し、以下のように拡張を記述できます。

class String
  def fullwidth_strip
    self.gsub(/^[[:space:]]+|[[:space:]]+$/, '')
  end
end

このファイルを作成した後、Railsアプリケーションを再起動することで、fullwidth_stripメソッドがStringクラスに追加され、アプリケーション全体で使用できるようになります。

ただし、Rubyの組み込みクラスを拡張することは、予期しない問題や競合が発生する可能性があるため、特別な理由がない限り避けるべきです。代わりに、前述のようにヘルパーメソッドを作成して利用することをおすすめします。

[お試し]TerraformによるAWSインフラの構築

この記事では、Terraformを使ってAWS上にインフラを構築する方法を、具体的なコードとともに解説します。ここでは、EC2インスタンスと、それに接続するセキュリティグループを作成する例を紹介します。

前提条件

  • Terraformがインストールされていること
  • AWS CLIがインストールされていること
  • AWSアカウントが作成されていること
  • AWSのアクセスキーとシークレットキーが用意されていること

1. Terraform設定ファイルの作成

まず、main.tfという名前のTerraform設定ファイルを作成します。

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c94855ba95b798c7" # Amazon Linux 2 AMI
  instance_type = "t2.micro"

  tags = {
    Name = "example-instance"
  }

  vpc_security_group_ids = [aws_security_group.example.id]
}

resource "aws_security_group" "example" {
  name        = "example"
  description = "Example security group for EC2 instance"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

この設定ファイルでは、以下のリソースが定義されています。

  • AWSプロバイダ: AWSを操作するためのプロバイダを設定しています。リージョンはap-northeast-1(東京リージョン)を指定しています。
  • EC2インスタンス: Amazon Linux 2 AMIを使用したt2.microタイプのEC2インスタンスを作成します。名前タグにexample-instanceという名前を付け、セキュリティグループとしてaws_security_group.example.idを指定しています。
  • セキュリティグループ: EC2インスタンスに適用するセキュリティグループを作成しています。インバウンドルールとして、TCPポート22(SSH)を全てのIPアドレス(0.0.0.0/0)から許可しています。

2. 初期化とプランの作成

Terraform設定ファイルが作成されたら、次に以下のコマンドを実行してプロジェクトを初期化します。

$ terraform init

初期化が完了したら、以下のコマンドで実行計画を作成します。

$ terraform plan

3. インフラの作成

実行計画が正しく作成されたら、以下のコマンドでインフラを作成します。

$ terraform apply

terraform applyコマンドを実行すると、Terraformは設定ファイルに記述されたリソースをAWS上に作成します。コマンドが正常に終了すると、EC2インスタンスとセキュリティグループが作成されていることが確認できます。

4. インフラの削除

作成したインフラを削除する場合は、以下のコマンドを実行します。

$ terraform destroy

terraform destroyコマンドを実行すると、Terraformは設定ファイルに記述されたリソースをAWSから削除します。コマンドが正常に終了すると、EC2インスタンスとセキュリティグループが削除されていることが確認できます。

まとめ

この記事では、Terraformを使ってAWS上にインフラを構築する方法を、具体的なコードとともに解説しました。Terraformは、インフラストラクチャーをコードとして管理し、構築や変更を簡単に行える強力なツールです。この記事で紹介した例を参考に、ぜひ自分のプロジェクトにもTerraformを導入してみてください。

WHEREでレコードを取得できなかった場合に例外を発生させる

後置ifとかの条件を使う方法を多く見るが、個人的にはfindを使うほうが便利じゃないかなーと思ってる。

where

User.where(id: [4,2,6])
User Load (3.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (4, 2, 6)
=> []

find

User.fid([4,2,6])
User Load (1.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (4, 2, 6)
ActiveRecord::RecordNotFound: Couldn't find all Users with 'id': (4, 2, 6) (found 0 results, but was looking for 3)

ログ読むときにたまに忘れるのでX-Forwarded-Forのメモ

構文

X-Forwarded-For: <client>, <proxy1>, <proxy2>

ディレクティブ

<client>
クライアントの IP アドレス
<proxy1>, <proxy2>
要求が複数のプロキシを通して行われる場合、それぞれの通過するプロキシの IP アドレスが書き出されます。つまり、最も右の IP アドレスが最も後のプロキシであり、最も左の IP アドレスが元のクライアントの IP アドレスです。

developer.mozilla.org