SQLを生成するメソッドを呼ぶ順番は生成するSQLに影響しない

RailsでSQLを生成するメソッドの呼び出し順でSQLが変化するのか分からなかったのでコンソールで試して調べて見ました。 結論 SQLを生成するメソッドを呼ぶ順番は生成するSQLに影響しない。 下の2つのSQLは同一になる。 Book.all.order(:id) Book.order(:id).…

kaminari gemについての雑なまとめ

FBCのプラクティスでkaminari gemを使ってRailsアプリにページネーションを実装しました。 kaminari gemは使ったことが無かったので今後の為にまとめてみました。 karminari とは? ページング処理を実装できるgem。 amatsuda/kaminari: ⚡ A Scope & Engine …

i18nのhuman系メソッドはモデルだけでなくインスタンスからも呼び出せる

i18nでモデル名やカラム名を参照するhuman系メソッドはモデルからしか呼び出せないと思っていましたが、インスタンスからも呼び出せるようです。 human系メソッドとは? i18nでActiveRecordのモデル名、カラム名を参照するメソッド。メソッド名が長いので勝…

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

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

pgでPostgreSQLに接続する

SinatraのメモアプリをDB化するにあたりpg gemを使いPostgreSQLに接続しSQLを実行する方法を調べました。 結論 次の手順でpg gemでPostgreSQLへ接続しSQLを実行できる。 PostgreSQLに接続するためのPGオブジェクトを作成。 作成したPGオブジェクトからSQLを…

PostgreSQLのSQLインジェクションの対策

前回の記事ではPostgreSQLを使ったSinatraのメモアプリにSQLインジェクション攻撃ができることを確認したので、その対策について調べてみました。 環境 今回紹介するSQLインジェクションの対策は下記の環境で行いました。 DB: PostgreSQL フレームワーク: Si…

PostgreSQLの文字型の種類について

PostgreSQLのDB作成時の型指定に迷ったので調べました。 結論 PostgreSQLには3つの文字型がある。 CHAR 固定長文字列 ()で最大文字列長を指定 最大文字列に満たない場合は半角スペースが末尾に入る 大文字/小文字を区別する VARCHAR 可変長文字列 ()で最大文…

静的プレースホルダと動的プレースホルダの違い

静的プレースホルダと動的プレースホルダの違いが分からなかったので調べました。 結論 静的プレースホルダと動的プレースホルダは次のような違いがある。 静的プレースホルダ: SQL組み立てをDB側で行う 動的プレースホルダ: SQL組み立てをアプリ側で行う 他…

pg gem のexec系メソッドの使い分け

Sinatraのメモアプリでpg gemを使う機会がありました。 DBにSQLを実行するexec ~ 系のメソッドの選択に迷ったので調べてみました。 結論 exec、exec_params、exec_prepared の3つのメソッドは次のように使い分ける。 exec: 単純にSQLを実行したい。 exec_par…

SQLインジェクションを試してみる

SinatraのDB版のメモアプリの終了条件に「SQLインジェクションへの対策」が含まれていたのでSQLインジェクションできるのか実際に試してみました。 SQLインジェクションとは? 引数などのパラメタにSQL文を混ぜ込んでおき(インジェクション),プログラム内…

SQLファイルをコマンドラインから実行してテーブル定義する

Sinatraを使ったメモアプリのDB版を進めています。 テーブルを作成するDDL文を書いたSQLファイルを読み込み、PostgreSQLにテーブル定義したいと思ったので調べてみました。 結論 psql コマンドの-f オプションを使ってDDLを定義したSQLファイルを読み込んで…

SQLでCRUD処理を行う

SinatraのメモアプリをDB化するにあたってSQLでCRUD処理を行う必要が出てきました。 SQLコマンドでCRUD処理を行う方法について改めて整理しました。 結論 下記のSQLコマンドででCRUD処理ができる。 Create: INSERT Read: SELECT Update: UPDATE Delete: DELE…

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

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

PostgreSQLでDBとテーブルの作成と削除を行う

Sinatraで作成したメモアプリのDB化にあたりまずはPostgreSQLでのDBとテーブルの作成と削除する方法について調べた。 結論 psql でログインした状態で下記コマンドでDB/テーブルの作成/削除が行える。 DB作成: CREATE DATABASE DB名; DB削除: DROP DATABASE …

SQLの基礎

SQL

FBCのプラクティスであるSinatraで作成したメモアプリをDB化するにあたってSQLの基礎を復習しました。 SQLとは Structured Query Language リレーショナルデータベース(RDBMS)を操作する為の言語 標準SQL: ISO(国際標準化機構)で定められた標準規格を満たし…

PostgreSQLでDB作成する2つの方法

SinatraでメモアプリをDB化するにあたってPostgreSQLで新規でDB作成することになったのでメモ。 PostgreSQLのインストールはHomebrew経由で行った。 結論 PostgreSQLでDBを作成する方法は2つある。 方法1: psql にログインしてCREATE DATABASE を実行 方法2:…

PostgreSQLの基本操作

Sinatraで作成したメモアプリのDB化に伴いPostgreSQLを使うことになったので最低限の基本操作を復習しました。 基本操作 DB一覧表示 DBへの接続 psql の抜け方 バックスラッシュコマンド DB一覧表示 psql -l でデータベース一覧を表示できます。 $ psql -l L…

psqlコマンド実行時にFATAL: database "db_name" does not exist が出た時の対処

前回の記事でHomebrew経由でPostgreSQLをmacにインストールしました。 Postgresqlインストール直後にpsql コマンドで以下のエラーが発生したので対処についてのメモです。 $ psql psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed:…

PostgreSQLをHomebrewでmacにインストールする

FBCのSinatraを使ったプラクティスでPostgreSQLを使うのでHomebrewでのインストールから起動までをメモ。 PostgreSQL: macOS packages 環境 macOS 12.3.1 Homebrew 3.5.3 手順 インストールからパス確認。 # インストール $ brew update $ brew install post…

i18nで多言語化する

前回の記事ではi18nを使った多言語化用の設定を行いました。 i18_generaor gemを使った方が簡単に生成できそうでしたが理解を深める為に今回はあえて手動で翻訳情報を追加します。 tメソッドについて t メソッドはi18nに用意されているtranslate メソッドの…

Railsのフォームのsubmitをhelpers.submit.createで翻訳できる理由を調べた

FBCのRailsのi18nのプラクティスを進めています。 _form.html.erb 内のフォーム内のsubmitボタンの翻訳情報をhelpers.submit.createやhelpers.submit.update などで参照できるのか分からなかったのでソースコードを読んで調べてみました。 ちなみにVSCodeで…

RailsのコードをVSCodeで読むための設定

Railsの仕様について気になる部分があったのでRails gemのソースコードを読んでみようと思いました。 gemのソースコードをVSCodeで読むための設定について調べました。 結論 bundle open gem_name で開くデフォルトエディタをVSCodeに設定すると便利。 設定…

i18nで多言語化する設定

前回の記事でi18nの概要は掴んだつもりなので、実際に多言語化する設定を行います。 多言語化する方法はいくつかありますが、一番シンプルそうなparamsで言語を切り替える方法を行います。 結論 下記手順で多言語化の設定を行う。 デフォルト言語設定、ロケ…

i18nとは

Railsのプラクティスに入りました。 Railsを国際化するために必要なi18nについて調べました。 結論 i18nとは国際化(多言語化)するためのgem。 アプリケーションの文言を英語以外の 別の1つの言語に翻訳 する機能や 多言語サポート 機能を簡単かつ拡張可能な…

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

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

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

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

rails s でPlease run rails webpacker:install と表示されて起動しない

Railsの教科書の手順で進めていましたがrails sでアプリが起動しなかったので調べてみました。 結論 node.jsをインストールしてwebpaderをインストールする。 環境 macOS 12.3.1 ruby 3.0.3 Rails 6.1.6 Railsの必要rubyバージョンの確認 下記ページでrails …

バージョン指定してrails new

最新のrails7系ではなくrails6系でrails new したかったのでバージョン指定する手順を調べました。 結論 指定したいRailsをgem経由でインストール rails _バージョン_ new アプリ名 でバージョンを指定してnewする インストールされているrails gemのバージ…

Rails6の開発環境の構築

ついにRailsのプラクティスまで進むことができました。 久しぶりにRailsの環境構築を行ったので備忘録です。 結論 下記ツールをインストールする。 xcode homebrew rbenv yarn Ruby Rails xcode 開発用コマンドラインツール $ xcode-select --install $ xcod…

README用のgifアニメーションを作る方法

README内にコマンドラインやアプリケーションのアニメーション画像を貼る際のgifアニメーションの作り方について調べました。 結論 mac純正のキャプチャソフト、gif変換ソフトffmpeg を使って作る。 キャプチャソフトを使ってアニメーション用のキャプチャを…