karlley's tech blog

学習メモや記録とか

Railsで特定のアクションのみバリデーションをかけたい

FBCのRailsのdeviseのプラクティスで特定のアクションのみバリデーションをかけたかったので方法を調べました。 結論 特定のアクションのみバリデーションをかけるにはon: オプションでアクションを指定する。 バリデーションはデフォルトでレコード作成、更…

Railsで作成したカラム名を変更する

FBCのdeviseプラクティスで作成したアプリのカラム名を変更したかったので方法を調べました。 結論 作成済みのカラム名の変更は以下手順で行う。 カラム名変更用マイグレーションファイル作成 マイグレーションファイルにカラム名変更の記述を追加 マイグレ…

Railsで整数のみ、桁数指定でバリデーションを追加する

FBCのdeviseプラクティスで郵便番号に整数のみ、桁数指定でバリデーションを追加したかったので方法を調べました。 結論 バリデーションで以下を指定することで整数のみ、桁数指定を追加できます。 整数のみ: numericality: { only_integer: true } 桁数指定…

deviseをdevise-i18nを使って多言語化する

前回の記事ではRailsにdeviseでメール認証を使ったパスワード再設定を実装しました。 今回はアプリ全体の表示をdevise-i18n gemで多言語化します。 tigrish/devise-i18n: Translations for the devise gem 実装対象のアプリはRailsにdeviseを使ってログイン…

Railsにdeviseでメール認証を使ったパスワード再設定を実装する

前回の記事ではRailsアプリにdeviseを使ってユーザーページを追加しました。 今回はdeviseが用意してくれているrecoverble モジュールを使ってメール認証を使ったパスワード再設定機能を追加します。 実装対象のアプリはdeviseを使ってログイン機能を実装す…

Railsにdeviseを使ってユーザーページを追加する

前回の記事ではRailsアプリにdeviseでログイン機能を実装しました。 今回はプラクティスの終了条件である次の3つのページを追加します。 ユーザー詳細: users#show ユーザー編集: users#edit ユーザー一覧: users#index 実装対象のアプリはdevise gemのイン…

Railsにdeviseを使ってログイン機能を実装する

前回の記事ではRailsアプリにdevise gemをインストールしてセットアップしました。 今回は実際に認証機能付きモデルを追加し、ログイン機能を実装します。 実装は下記の手順で行います。 認証機能付きモデルの作成 認証機能用ビューの作成 認証機能用コント…

Railsにdeviseをインストールしてセットアップする

FBCのRailsでdevise gemを使ったプラクティスに入りました。 devise gemのインストールとセットアップについて調べました。 追加設定は基本的には行わず、動作確認が行える最低限のdeviseの機能が使える状態を目標にしました。 devise gemを追加するアプリケ…

dotenv gemの使い方

GitHubにアップしたくないAPIキーやパスワード等を環境変数として設定するgem。 bkeepers/dotenv: A Ruby gem to load environment variables from `.env`. インストール Gemfile に追記後bundle install するだけ。 # Gemfile ... # 追記 gem 'dotenv-rails…

ERB Lintについて

FBCのRailsのプラクティスにERB Lintの導入が必須になったので概要を調べてみました。 結論 ERB LintとはrubocopではチェックできないERBファイルのスタイルをチェックしてくれるツール。 Shopify/erb-lint: Lint your ERB or HTML files インストール Gemfi…

Railsでテーブルにカラムを追加する

FBCのdevise gemを使ったプラクティスを進行中です。 今回作成するRailsアプリではdevise gemを使った認証機能とプロフィールページの作成が終了条件になっています。 このプロフィールページにはdeviseのデフォルトで設定されるメールアドレスに加えて、郵…

Gitで未追跡のファイルやディレクトリを削除したい

FBCのRailsのdevise gemを使ったプラクティスを進めています。 RailsやGemが自動生成したファイルを削除したくなる状況が度々あったので、Gitで未追跡のファイルやディレクトリを削除する方法を調べてみました。 結論 git clean コマンドを使うとgit未追跡の…

rails g controller で不要なルーティングの追加をスキップしたい

FBCのRailsのプラクティスでdevise gemの使い方を学んでいます。 ログイン機能とプロフィールページの追加にUserモデルのcontrollerが必要になりました。 既にに必要なルーティングは追加済みだったのでrails g コマンドでcontrollerを作成する際にルーティ…

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…