Help us understand the problem. What is going on with this article?

自分用メモ: ウェブ設計チェックリスト

コードレビュー時に使う自分用のチェックリストを作りました。

データベースチェックシート

出典元:
SQLアンチパターン
「SQLアンチパターン」を避けるためのチェックリスト

データベース論理設計チェックシート

□ カンマ区切りフォーマットのリストを格納していないか?
□ 3世代以上の階層があるデータ構造を扱う場合に、直接の親子関係のみを参照する形にしていないか?
□ 主キー名を何も考えず id にしていないか?
□ 必要な外部キーは設定しているか?
□ 柔軟に「列」を増やすために、Attribute とその Value を表す列を作成してしまっていないか?
□ 複数の異なるテーブルに紐付く可能性があるテーブルを作成する場合に、xx_type といった列を見て紐付く先のテーブルを判断する設計になっていないか?
□ 1対Nで保持したいデータがある場合に、列を row1、row2、、、rowN のように増殖させる設計にしていないか?
□ 時間経過によってテーブルや列を増やすことを前提とした設計になっていないか?

データベース物理設計チェックシート

□ 精度が求められる値の型に FLOAT 型を採用していないか
□ CHECK や ENUM などの列定義の制約で、列に入る値を限定してしまっていないか
□ 「何が何でもファイルはDBの外側で保持しなくちゃ!」と考えていないか
□ インデックスは正しく定義されているか、あるいは、インデックスを活かした検索をしているか

SQLクエリ設計をする際のチェックポイント

□ NULLを一般値として使用していないか?一般値をNULLに相当するものとして扱っていないか?
□ GROUP BY句を使う場合、単一値の原則を満たすクエリとなっているか
□ ランダムにレコードを取得する場合、性能劣化しない方式を採用できているか
□ データ量が増える可能性のあるテーブルに、あいまい検索していないか
□ 複雑すぎるクエリを作っていないか
□ 必要のない列まで SELECT していないか

アプリケーション設計をする際のチェックポイント

□ パスワードを平文でテーブルに格納していないか
□ 動的に SQL 文を作成するときに SQL インジェクションへの対策をしているか
□ 連番主キーの欠番を頑張って埋めようとしていないか
□ DB接続している部分で例外処理しないプログラムはないか
□ バージョン管理されてない DB 関連リソースはないか
□ モデルがアクティブレコード化していないか
□ 発生しうる問題やそれに対する対応はまとまっているか

Web API チェックリスト

出典元: Web API: The Good Parts

□ URIが短く入力しやすくなっているか
□ URIが人間が読んで理解できるようになっているか
□ URIが小文字のみで構成されているか
□ URIが改造しやすくなっているか
□ URIにサーバ側のアーキテクチャが反映されていないか
□ URIのルールは統一されているか
□ 適切なHTTPメソッドを利用しているか
□ URIで利用する単語は多くのAPIで同い意味に利用されているものを選んでいるか
□ URIで使われている名詞は複数形になっているか
□ URI中にスペースやエンコードを必要とする文字列が入っていないか
□ URI中の単語はハイフンでつないでいるか
□ ページネーションは適切に設定されているか
□ ログインには Auth 2.0 を利用しているか
□ レスポンスのデータ形式はJSONがデフォルトになっているか
□ データ形式の指定にはクエリパラメータを使う方法をサポートしているか
□ 不要なJSONPに対応していないか
□ レスポンスのデータ内容はクライアントから指定できるようになっているか
□ レスポンスデータに不要なエンベロープが入っていないか
□ レスポンスデータの構造は可能なかぎりフラットになっているか
□ レスポンスデータが配列ではなくオブジェクトになっているか
□ レスポンスのデータ名として多くのAPIで同じ意味に利用されている一般的な単語を選んでいるか
□ レスポンスのデータ名はなるべく少ない単語数で表現しているか
□ レスポンスのデータ名として複数の単語を連結する場合、その連結方法はAPI全体を統一してあるか
□ レスポンスのデータ名として変な省略形を使用していないか
□ レスポンスのデータ名の単数形/複数形はデータの内容と合っているか
□ エラー時のレスポンスはクライアントが原因を切り分けられるような情報を含んでいるか
□ エラーの際にHTMLが返っていないか
□ 適切なステータスコードが返るようになっているか
□ メンテナンス時には503をお返すようになっているか
□ 適切なメディアタイプを返しているか
□ 必要な場合はCORSに対応しているか
□ クライアントが適切にキャッシュを行えるようにCache-Cntrol、ETag、Last-Modified、Varyなどのレスポンスヘッダを返しているか
□ キャッシュをさせたくないデータにはCache-Control: no-cacheが付けられているか
□ APIはバージョンで管理されているか
□ APIのバージョンはセマンティックバージョニングに沿ったものになっているか
□ メジャーバージョン番号がURLに入っており、ひと目でわかるようになっているか
□ APIの提供を終了する際のことを考慮に入れているか
□ APIの最低提供期間をドキュメントに明記しているか
□ HTTPSでAPIを提供しているか
□ jSONのエスケープはきちんと行っているか
□ JSONはX-Regueested-Withヘッダを認識するなど、SCRIPT要素では
読み込まないようになっているか
□ ブラウザからアクセスさせるAPIではXSRFトークンを利用しているか
□ APIが受け取るパラメータはきちんと不正値(マイナスの値など)チェックしているか
□ レスポンスにセキュリティ対策用の各種ヘッダをきちんと付けているか
□ レートリミットによる制限を行っているか
□ レートリミットの制限回数は想定されるユースケースに対して少なすぎないか

リーダブルコードチェックリスト

出典元:
リーダブルコード ――より良いコードを書くためのシンプルで実践的なテクニック
リーダブルコード適用 チェックリスト

□ コードは理解しやすくなければならない。
□ コードは他の人が最短期間で理解できるように書かなければならない。
□ tmp,retval,resultなどの汎用的すぎる変数を使っていないか。
□ 変数名の英単語を省略して理解しずらいものになっていないか。
□ 変数名が長くなるのを恐れて短くしすぎて理解しずらいものになっていないか。
□ 限界値を示す変数に min_ max_を使っているか。
□ 範囲を示す変数に first_ last_を使っているか。
□ getXXXXメソッドをアクセッサー以外で定義していないか。
□ インデントが整っており見やすいコードになっているか。
□ 意味のないコメントを書いていないか。
□ コードから読み取れる事をコメントに書いていないか。
□ 定数にはコメントが書かれているか。
□ クラスの使用方法など高レベルのコメントが必要なファイルには、ファイルの先頭にコメントが書かれているか。
□ ヨーダ記法を使用していないか。
□ 三項演算子を使った結果、コードが理解しずらいものになっていないか。
□ do~whileループを使用していないか。
□ 関数内で早めに処理が抜けられるものはreturnで適切にガード節が作られているか。
□ ifのネストが深くなっていないか。
□ 説明変数を使って改良できるコードが残っていないか。
□ 要約変数を使って改良できるコードが残っていないか。
□ 短絡評価を悪用、乱用していないか。
□ ループ処理の中で不要な中間結果を保持する変数を使用していないか。
□ ループ処理の中で不要な制御変数を定義して使用していないか。
□ グローバルなスコープが必要ないグローバル変数を定義していないか。
□ クラス変数のスコープが必要ないクラス変数を定義していないか。
□ JavaScriptで変数がグローバル領域にはみ出していないか。
□ 古いC言語のルールに沿って意味もなく変数の定義を全て関数の先頭に書いていないか。
□ 変更の必要ない変数には積極的にfinalがついているか。(C++, java)
□ メソッドの抽出が必要なコードは残っていないか。
□ ひとつの関数内に複数のタスクが書かれていないか。
□ 関数名を逸脱した複数のタスクがひとつの関数内に書かれていないか。
□ 標準APIにある機能をオレオレ実装していないか。
□ 広く使われている外部ライブラリ(Apache CommonsやBoost)にあるような機能をオレオレ実装していないか。
□ テストコードが理解しづらいものになっていないか。

設計・アンチパターン資料

書籍

ucan-lab
Backend Developer at ROLO. I love PHP and I'm focusing on Laravel, Docker, GraphQL.
https://u-can.pro
miraito-inc
システムデザインを中心に置いた開発により高品質で使いやすいシステムを提供いたします。業務システム構築、アプリ開発、コンサルティングまで幅広く手がけています。
https://miraito-inc.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした