karlley's tech blog

学習メモや記録とか

Ruby

ヒアドキュメントで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 で読み込んで出力してみます…