Ruby

配列同士の比較はSetを使うと順序の考慮が不要になる

バリデーションの実装で配列同士の比較で要素の順序を考慮せず比較する方法としてSetを教えてもらいました。 結論 Rubyでは集合を表すSetを使うことで配列の順序の考慮が不要になる。 class Set (Ruby 3.2 リファレンスマニュアル) Set(集合)とは? RubyのSe…

Rubyの&:の意味

結論 ブロック処理をより完結に書ける記法。 インスタンス.{ |ブロックパラメータ| ブロックパラメータ.メソッド名 } を(&:メソッド名) で書ける &:メソッド名 で記述するには特定の条件がある 通称は「あんころ」らしい。 記述例 文字列の入った配列をupcas…

RubyとRailsの?系メソッドのまとめ

メソッド名の末尾に?が付くメソッド(勝手に?系メソッドと呼びます)がたくさんありすぎてよく分からなくなったのでまとめました。 Ruby Rubyのメソッド。true/falseを返します。 nil?: オブジェクトがnilか? empty?: インスタンス(配列、ハッシュ、文字列等)…

M1 macでRubyインストール時のBUILD FAILEDエラーの解決法

RubyをM1 macにインストールする際にBUILD FAILED が表示されインストールできなかったので解決法を調べました。 結論 下記コマンドでインストールできる。 $ RUBY_CFLAGS="-w" rbenv install x.x.x 原因とエラー詳細は後述します。 環境 今回インストールし…

【Ruby】ぼっち演算子とは?

ぼっち演算子の使い方をすっかり忘れていたのでまとめておきます。 結論 ぼっち演算子&. とはレシーバーがnil だった場合にNoMethodError ではなくnil を返すRubyのメソッド呼び出しの演算子です。 メソッド呼び出しで .の代わりに &.を使うことができます。…

VSCodeにsolargraphを導入する

曖昧だったVSCodeへのsolargraphの導入について整理したのでまとめておきます。 結論 VSCodeでsolargraphを使うにあたって以下の2つが必要。 VSCode拡張機能Ruby Solargraph solargraph gem 下記手順で導入、設定する。 VSCode拡張機能Ruby Solargraph の導…

ヒアドキュメントでSQLを読み易くする

Sinatraを使ったメモアプリを開発中です。 rubyファイル内の長くて読みにくいSQLを読み易く記述する方法を調べました。 結論 ヒアドキュメントを使うと長いSQLの可読性が上がるかもしれません。 rubyファイル内のSQLは次のように書き換えることができます。 …

RubyのSecureRandom.uuidで生成した文字列の長さについて

FBCのSinatraとDBを使ったメモアプリの開発に取り組んでいます。 DBに保存するレコードのRPIMARY KEYとしてSecureRandom.uuid で生成した文字列をCHAR型のカラムに保存しようと考えています。 最大文字列長をCHARに設定しようと思ったのですが、SecureRandom…

ディレクトリ・トラバーサルとは

Sinatraのメモアプリのプルリクでディレクトリ・トラバーサルの危険性があると指摘されました。 初めて聞く言葉だったのでディレクトリ・トラバーサルについて調べました。 結論 ウェブアプリケーションの中には、外部からのパラメータにウェブサーバ内のフ…

メソッド名は動詞で始めなくても良い

Sinatraのメモアプリのレビューの中でhelperに定義してメソッド名に対してアドバイスを頂きました。 「メソッド名は動詞で始める」と思い込んでいましたが、間違いだったと気付くことができたので良かったです。 結論 次のような処理内容のメソッド名は動詞…

XSSとその対策

Sinatraのメモアプリの終了条件であるXSS対策について調べました。 結論 文字コード指定とエスケープ(サニタイジング)を行うとXSS対策できる XSSとは 悪意あるクライアントサイドのコードをウェブサイトに挿入するセキュリティ攻撃です。 引用: Cross-site s…

nil?とempty?の違い

値の有無で真偽値を返すようなメソッドを作る際にnil? とempty? の違いが分からなかったので調べました。 結論 nil? は存在しているか、empty? は空かどうかで真偽値を返す nil? 当たり前だけどnil のみtrue を返す。 ''.nil? => false [].nil? => false fal…

requireとrequire_relativeの使い分け

Sinatraのメモアプリでhelper 読込の際にrequire とrequire_relative の使い分けが分からかったので調べました。 結論 gemなどのライブラリの読込にはrequire、helperなどの自前で用意したファイルの読込にはrequire_relative を使う。 相違点 参照方法が異…

vscodeでerbファイルをフォーマットする

Sinatraを使ったメモアプリの開発時にerbがフォーマットされなかったので設定しました。 結論 vscodeの拡張機能のBeautifyを使う。 なぜBeautifyなのか 似たようなフォーマッタとして拡張機能のPrettierがあるがerbファイルが上手くフォーマットされないらし…

複数のファイルを取得して作成日時で並び替える

フィヨルドブートキャンプの課題、Sinatraを使ったメモアプリの開発はまだまだ終わらないです メモ一覧は表示できましたが作成順に並んでいないのが非常に気持ち悪い。 複数のファイルを取得して作成日時で並び替えたいなと思ったので調べてみました。 結論 …

Ruby でID用のユニークな文字列を生成する方法

引き続き、フィヨルドブートキャンプの課題としてSinatraを使ったメモアプリの開発に取り組んでいます。 今回の課題では作成したメモのデータの管理にDBを使わず、ファイルに読み書きしてデータを管理しなければなりません。 そこで今回は他の受講生の日報を…

Sinatra のルーティングの* と: の違い

フィヨルドブートキャンプの課題としてSinatraを使ったメモアプリの開発に取り組んでいます。 Sinatra のルーティングに使われる: と* の理解がいまいちすっきりしなかったのでメモ。 結論 : は名前付きパラメータ、* はワイルドカード : の値はparams['パラ…

JSONファイルから取得したハッシュのキーをシンボルにする

JSONファイルから取得したハッシュのキーがデフォルトで文字列だったのでシンボルにしたい。 結論 JSON.load、JSON.parse 共にsymbolize_names オプションをtrue にする JSON.load のみ追加でproc をnil、create_additions オプションをfalse にする JSONフ…

JSON.load とJSON.parse の違い

RubyのJSONライブラリのJSON.load とJSON.parse の違いを調べた。 結論 引数によって使い分ける。 JSON.load: 引数がJSONファイル JSON.parse: 引数がJSON文字列 JSONファイルをRubyで読み込む 読み込み用のdata.json をmain.rb で読み込んで出力してみます…