テスト駆動開発の基本

テスト駆動開発(Test Driven Development:TDD)とは TDDのゴール TDDが指す『テスト』の意味 TDDの目的 TDDの基本サイクル TDDのスキル 参考 テスト駆動開発(Test Driven Development:TDD)とは テストファーストによって開発を進める開発手法。 TDDのゴ…

テスト技法

ソフトウェアテストの概要 ソフトウェアテストの目的 ソフトウェアテストの種類 ホワイトボックステスト ブラックボックステスト 同値分割 境界値分割 デシジョンテーブル 参考 ソフトウェアテストの概要 ソフトウェアテストの目的 ソフトウェアテストの目的…

Ruby on Rails:save と save! メソッドの違い

save と save! は、インスタンスを生成した後に使う。どちらもデータのバリデーション(データベースに保存する前に、データ自体の妥当性を検証する仕組み)と、データベースへの保存を行うメソッド。 def create @report = current_user.reports.new(report_p…

Ruby on Rails:ポリモーフィック関連付け

ポリモーフィック関連づけ ポリモーフィックなモデルを生成する 参考 下記のようなモデルを実装するとする。 上記は、bookモデルとreportモデルはそれぞれcommentモデルと関連があり(本と報告書に対してコメントする機能)、commentは共通モデルで対応する…

Ruby on Rails:belongs_to, has_many で関連付けを行う

ターゲットするER図 belongs_to, has_many で関連付けを行う 参考 ターゲットするER図 belongs_to, has_many で関連付けを行う 上記のER図において、『日報は投稿者しか更新削除できない』というようにしたい。そのためには日報にユーザ情報が必要なので、日…

Ruby on Rails:belongs_to, has_many で関連付けを行う

ターゲットするER図 belongs_to, has_many で関連付けを行う 参考 ターゲットするER図 belongs_to, has_many で関連付けを行う 上記のER図において、『日報は投稿者しか更新削除できない』というようにしたい。そのためには日報にユーザ情報が必要なので、日…

Ruby on Rails:N+1問題とは

N+1問題は、SQLクエリを大量に発行してしまう事象のことを言う。例えば下のようなWebサイトがあるとする。Webサイトのデータは、ユーザ情報のテーブルと、ユーザIDと画像を紐づけた画像テーブルの2つから構成される。 上記のサイトにアクセスすると、下記の…

Ruby on Rails:ActiveStorage で画像アップロード

Active Strorage 概要 Active Storage の環境構築 Active Storage のセットアップ パラメータに許可を与える ファイルをレコードに添付する ビューを設定する variant で画像を変形する 参考 Active Strorage 概要 Active Storageはクラウドストレージサービ…

パーフェクトRuby on Rails

part1:overview ルーティング情報ファイルについて Active Recordとは バリデーション(検証)とは コールバックとは ビューのレンダリング 参考 part1:overview ルーティング情報ファイルについて config/routes.rb でモデルに対して CRUD 操作を定義してい…

Ruby on Rails:devise gem で認証機能を導入する

devise gem 概要 devise gem の導入 ビュー構成変更 Strong Parameter設定 ユーザ一覧ページの追加 ユーザ詳細ページの追加 参考 devise gem 概要 devise は Warden に基づく Rails 用の柔軟な認証ソリューション。パスワードはハッシュしてデータベースに保…

Ruby on Rails:Rails の i18n

RailsのI18nとは Ruby on Rails におけるI18n 国際化とローカライズ Active Recordモデルの翻訳を使う 式展開で渡す 参考 RailsのI18nとは I18n は internationalization の略で、国際化・多言語化を意味する。 一般に、アプリケーションの国際化では、『国…

PostgreSQL:データベースアカウントに適切な権限を与える

SQLインジェクションの対策として、根本的なものとしては、プレースホルダの方で対応するのが最善。(参考:安全なウェブサイトの作り方 - 1.1 SQLインジェクション) 今回は、保険的な対策の『データベースアカウントに適切な権限を与える』に取り組んだ。 …

SQLインジェクション攻撃とは

SQLインジェクション攻撃とは 発生しうる脅威 注意すべきページの特徴 根本的な解決方法 SQL文の組み立ては全てプレースホルダで実装する なぜ『文字列連結処理』が安全でないのか 『動的プレースホルダ』の使用時には注意が必要 SQL文のリテラルを正しく…

XSS対策:サニタイジング(エスケープ)処理

XSSの具体例 エスケープ処理は出力要素に対して行う なんでエスケープ処理は出力要素? XSSの具体例 とりあえず現状の自分のサイトに対して、悪意あるコンテンツを作成してみた。下記コードを入れると、悪意あるコンテンツが作成される。 他サイトへリダイレ…

XSSとは

発生しうる脅威 XSSの種類 注意すべきページの特徴 対策の種類 HTMLテキストの入力を許可しない場合の対策 HTMLテキストの入力を許可する場合の対策 全てのウェブアプリケーションに共通の対策 参考サイト XSSはクロスサイトスクリプティング(Cross Site Sc…

Sinatra:erbファイルはrubyコードが書ける

少しずつerbファイルの書き方がわかってきた😅どうやら、<% %>で括った部分がruby コードと判定され、変数については<%= %>で括ってあげると認識されるっぽい。 それ以外の部分についてはhtmlとして扱われる。 例えば、下にerbのコード例を示す。 <% require '…

Sinatra:PRGパターンを実装してみた

Sinatraのサーバ部分はruby、Webページはhtmlというハイブリッド型? Sinatraの構成にまだ慣れていなくて、『どう書けばいいねん‍』て感じでしたが、とりあえず手を動かしてみるとだんだん見えてきました 自分の感覚的には、『サーバっぽい部分をrubyで処理…

PRGパターンとは

PRGは、Post/Redirect/Getの略で、フォーム送信後に表示されるページを再読み込み、共有、ブックマークしても、再度フォームを送信するなどの悪影響がないようにするためのウェブ開発デザインパターンのことらしい。 例えば、herokuのサンプルページ(New Ar…

Webを支える技術:リソース設計とは

リソース設計のアプローチ(読み取り専用) Webサービスで提供するデータを特定する データをリソースに分ける リソースにURIで名前をつける クライアントに提供するリソースの表現を設計する リンクとフォームを利用してリソース同士を結びつける イベント…

Webを支える技術:HTTP概要

HTTPメソッド概要 8つのメソッド べき等性と安全性 ステータスコード HTTPでの認証 キャッシュ用ヘッダ 参考 HTTPメソッド概要 8つのメソッド メソッド名 役割 GET リソースの取得 POST ・子リソースの作成・リソースへのデータ追加・そのほかの処理 PUT ・…

アジャイルサムライを読んでみた

プロジェクトがダメになる理由 インセプションデッキ インセプションデッキ概要 我々はなぜここにいるのか? エレベーターピッチ パッケージデザイン やらないことリスト 「ご近所さん」を探せ 解決案を描く 夜も眠れない問題 期間を見極める 何を諦めるのか…

Webを支える技術:URI設計のポイント

URIを変わりにくくする プログラミング言語に依存した拡張子やパスを含めない メソッド名やセッションIDを含めない URIリソースは表現を名詞にする リダイレクトとは URI設計のテクニック 拡張子で表現を指定する マトリクスURI 参考 URIを変わりにくくする …

Webを支える技術:URI概要

URIとは URIの構文 URIで使える文字 URI実装での注意点 参考 URIとは URI(Uniform Resource Identifier)は、英語の意味の通り『リソースを統一的に識別するID』のこと。URIを使うことで、Web上に存在するすべてのリソースを一意に示せる。 URIは、URL(Uni…

Webを支える技術:REST概要

HTTP、URI、HTMLの関係 アーキテクチャスタイルとデザインパターン リソースとは RESTの構成 参考 HTTP、URI、HTMLの関係 Webを支える基本的な技術のHTTP、URI、HTMLの関係は下図のようになる。今までそこまで意識していなかったので、この関係図は『確かに…

RESTとは

RESTとは RESTの特徴 REST API設計の勘どころ HTTP API Design 参考 RESTとは 最近Web系を学んでいると、目にすることが多くなった『REST』ですが、これまでは『休憩?残り?』とかイメージしていましたが、ようやく出会えました と、そんなことは置いておい…

データベース設計:グレーノウハウ

違法すれすれの『ライン上』に位置する設計 代理キー:主キーが役に立たない時 ケース1:入力データに主キーになるような一意キーが存在しない ケース2:一意キーはあるが、サイクリックに使いまわされる ケース3:一意キーはあるが、途中で指す対象が変…

データベース設計:設計のバッドノウハウ

論理設計の『やってはいけない』 非スカラ値(第一正規形未満) ダブルミーニング 単一参照テーブル テーブル分割 水平分割 垂直分割 テーブル分割の代替手段 不適切なキー ダブルマスター 参考 論理設計の『やってはいけない』 戦略の失敗を戦術で取り返す…

データベース設計:正規化の背反

RDBMSの論理設計の基本の概念は正規化であり、それは『データ整合性を保持する』ために行っている。一方で正規化による背反として、『SQLのパフォーマンス劣化』を引き起こす。 正規化を行うと基本的にテーブルが増えていく。よって、SQL文を実行する際には…

データベース設計:ER図の基本

テーブルの関連のパターン ER図の描き方 参考 テーブルの関連のパターン 同じ意味の列を持つテーブル同士の間には、通常次の3パーンの関連がある。 1対1(1:1) 『1対1』というのはほぼ見ないらしい。理由は2つのテーブルのレコードが1対1に対応するという…

データベース設計:正規化の種類

表とテーブルの違い キーの種類 制約の種類 正規化とは 概要 正規化のポイント 正規化のメリット、デメリット どの程度すべきか 正規形のレベル 第1正規形の定義:スカラ値の原則 第2正規形の定義:部分関数従属 第3正規形:推移的関数従属 ボイス-コッド…