ターゲットするER図 belongs_to, has_many で関連付けを行う 参考 ターゲットするER図 belongs_to, has_many で関連付けを行う 上記のER図において、『日報は投稿者しか更新削除できない』というようにしたい。そのためには日報にユーザ情報が必要なので、日…
ターゲットするER図 belongs_to, has_many で関連付けを行う 参考 ターゲットするER図 belongs_to, has_many で関連付けを行う 上記のER図において、『日報は投稿者しか更新削除できない』というようにしたい。そのためには日報にユーザ情報が必要なので、日…
N+1問題は、SQLクエリを大量に発行してしまう事象のことを言う。例えば下のようなWebサイトがあるとする。Webサイトのデータは、ユーザ情報のテーブルと、ユーザIDと画像を紐づけた画像テーブルの2つから構成される。 上記のサイトにアクセスすると、下記の…
Active Strorage 概要 Active Storage の環境構築 Active Storage のセットアップ パラメータに許可を与える ファイルをレコードに添付する ビューを設定する variant で画像を変形する 参考 Active Strorage 概要 Active Storageはクラウドストレージサービ…
part1:overview ルーティング情報ファイルについて Active Recordとは バリデーション(検証)とは コールバックとは ビューのレンダリング 参考 part1:overview ルーティング情報ファイルについて config/routes.rb でモデルに対して CRUD 操作を定義してい…
devise gem 概要 devise gem の導入 ビュー構成変更 Strong Parameter設定 ユーザ一覧ページの追加 ユーザ詳細ページの追加 参考 devise gem 概要 devise は Warden に基づく Rails 用の柔軟な認証ソリューション。パスワードはハッシュしてデータベースに保…
RailsのI18nとは Ruby on Rails におけるI18n 国際化とローカライズ Active Recordモデルの翻訳を使う 式展開で渡す 参考 RailsのI18nとは I18n は internationalization の略で、国際化・多言語化を意味する。 一般に、アプリケーションの国際化では、『国…
SQLインジェクションの対策として、根本的なものとしては、プレースホルダの方で対応するのが最善。(参考:安全なウェブサイトの作り方 - 1.1 SQLインジェクション) 今回は、保険的な対策の『データベースアカウントに適切な権限を与える』に取り組んだ。 …
SQLインジェクション攻撃とは 発生しうる脅威 注意すべきページの特徴 根本的な解決方法 SQL文の組み立ては全てプレースホルダで実装する なぜ『文字列連結処理』が安全でないのか 『動的プレースホルダ』の使用時には注意が必要 SQL文のリテラルを正しく…
XSSの具体例 エスケープ処理は出力要素に対して行う なんでエスケープ処理は出力要素? XSSの具体例 とりあえず現状の自分のサイトに対して、悪意あるコンテンツを作成してみた。下記コードを入れると、悪意あるコンテンツが作成される。 他サイトへリダイレ…
発生しうる脅威 XSSの種類 注意すべきページの特徴 対策の種類 HTMLテキストの入力を許可しない場合の対策 HTMLテキストの入力を許可する場合の対策 全てのウェブアプリケーションに共通の対策 参考サイト XSSはクロスサイトスクリプティング(Cross Site Sc…
少しずつerbファイルの書き方がわかってきた😅どうやら、<% %>で括った部分がruby コードと判定され、変数については<%= %>で括ってあげると認識されるっぽい。 それ以外の部分についてはhtmlとして扱われる。 例えば、下にerbのコード例を示す。 <% require '…
Sinatraのサーバ部分はruby、Webページはhtmlというハイブリッド型? Sinatraの構成にまだ慣れていなくて、『どう書けばいいねん』て感じでしたが、とりあえず手を動かしてみるとだんだん見えてきました 自分の感覚的には、『サーバっぽい部分をrubyで処理…
PRGは、Post/Redirect/Getの略で、フォーム送信後に表示されるページを再読み込み、共有、ブックマークしても、再度フォームを送信するなどの悪影響がないようにするためのウェブ開発デザインパターンのことらしい。 例えば、herokuのサンプルページ(New Ar…
リソース設計のアプローチ(読み取り専用) Webサービスで提供するデータを特定する データをリソースに分ける リソースにURIで名前をつける クライアントに提供するリソースの表現を設計する リンクとフォームを利用してリソース同士を結びつける イベント…
HTTPメソッド概要 8つのメソッド べき等性と安全性 ステータスコード HTTPでの認証 キャッシュ用ヘッダ 参考 HTTPメソッド概要 8つのメソッド メソッド名 役割 GET リソースの取得 POST ・子リソースの作成・リソースへのデータ追加・そのほかの処理 PUT ・…
アジャイルサムライを読んでみたので、大事だなと思った内容をまとめる。 大雑把にいうと『アジャイル開発のやり方』を具体的に学べる。いくつか読んだアジャイル本(SCRUM BOOT CAMP THE BOOK, いちばんやさしいアジャイル開発の教本)の中で、一番具体的な進…
URIを変わりにくくする プログラミング言語に依存した拡張子やパスを含めない メソッド名やセッションIDを含めない URIリソースは表現を名詞にする リダイレクトとは URI設計のテクニック 拡張子で表現を指定する マトリクスURI 参考 URIを変わりにくくする …
URIとは URIの構文 URIで使える文字 URI実装での注意点 参考 URIとは URI(Uniform Resource Identifier)は、英語の意味の通り『リソースを統一的に識別するID』のこと。URIを使うことで、Web上に存在するすべてのリソースを一意に示せる。 URIは、URL(Uni…
HTTP、URI、HTMLの関係 アーキテクチャスタイルとデザインパターン リソースとは RESTの構成 参考 HTTP、URI、HTMLの関係 Webを支える基本的な技術のHTTP、URI、HTMLの関係は下図のようになる。今までそこまで意識していなかったので、この関係図は『確かに…
RESTとは RESTの特徴 REST API設計の勘どころ HTTP API Design 参考 RESTとは 最近Web系を学んでいると、目にすることが多くなった『REST』ですが、これまでは『休憩?残り?』とかイメージしていましたが、ようやく出会えました と、そんなことは置いておい…
違法すれすれの『ライン上』に位置する設計 代理キー:主キーが役に立たない時 ケース1:入力データに主キーになるような一意キーが存在しない ケース2:一意キーはあるが、サイクリックに使いまわされる ケース3:一意キーはあるが、途中で指す対象が変…
論理設計の『やってはいけない』 非スカラ値(第一正規形未満) ダブルミーニング 単一参照テーブル テーブル分割 水平分割 垂直分割 テーブル分割の代替手段 不適切なキー ダブルマスター 参考 論理設計の『やってはいけない』 戦略の失敗を戦術で取り返す…
RDBMSの論理設計の基本の概念は正規化であり、それは『データ整合性を保持する』ために行っている。一方で正規化による背反として、『SQLのパフォーマンス劣化』を引き起こす。 正規化を行うと基本的にテーブルが増えていく。よって、SQL文を実行する際には…
テーブルの関連のパターン ER図の描き方 参考 テーブルの関連のパターン 同じ意味の列を持つテーブル同士の間には、通常次の3パーンの関連がある。 1対1(1:1) 『1対1』というのはほぼ見ないらしい。理由は2つのテーブルのレコードが1対1に対応するという…
表とテーブルの違い キーの種類 制約の種類 正規化とは 概要 正規化のポイント 正規化のメリット、デメリット どの程度すべきか 正規形のレベル 第1正規形の定義:スカラ値の原則 第2正規形の定義:部分関数従属 第3正規形:推移的関数従属 ボイス-コッド…
テーブル設計の流れ ガスの請求書 メインとなるテーブル名を出す(イベント系エンティティを洗い出す) 「誰が・何が」、「誰を・何を」を考えてテーブル名を出す(リソース系エンティティを洗い出す) 各テーブルのカラムを出す 表現できていない情報を、テ…
テーブル設計の流れ 病院の領収書 メインとなるテーブル名を出す(イベント系エンティティを洗い出す) 「誰が・何が」、「誰を・何を」を考えてテーブル名を出す(リソース系エンティティを洗い出す) 各テーブルのカラムを出す 表現できていない情報を、テ…
テーブル設計の流れ 病院の受付伝票 メインとなるテーブル名を出す(イベント系エンティティを洗い出す) 「誰が・何が」、「誰を・何を」を考えてテーブル名を出す(リソース系エンティティを洗い出す) 各テーブルのカラムを出す 表現できていない情報を、…
SCRUM BOOT CAMP THE BOOKを読んだので、大事だなと思ったことをまとめる。 他に読んだアジャイル本(アジャイルサムライ, いちばんやさしいアジャイル開発の教本)の中では、スクラムに特化した内容。具体的なストーリーを通して学べるため、より現実を感じな…