LoginSignup
29
28

More than 5 years have passed since last update.

Rubyコーディング規約

Last updated at Posted at 2014-07-26

規約に限らず自分でコーディングする際に気を付けていることです.

事前準備: チュートリアル

ブランチ管理

コーディング規約

  • 基本的にCookpadのRuby コーディング規準に準拠します
    • ただしHashの空白囲みはしません
  • 不要なselfは記述しません
  • 不要なreturnは記述しません
  • 不要なバックスラッシュは記述しません
  • ファイルの末尾は改行1個で終わらせます
  • 委譲の際はForwardableを利用します
  • 変数名、メソッド名ではどのような場合でも省略形を使いません
  • 一般的な法則に準拠します
    • SOLID
      • SRP: Single Responsibility Principal
      • OCP: Open Closed Principal
      • LSP: Liskov Substitution Principle
      • ISP : Interface Segregation Principle
      • DIP : Dependency Inversion Principle
    • デメテルの法則(最小知識の法則)
    • 驚き最小の原則
    • ボーイスカウトの規則
    • YAGNI: You ain't gonna need it
    • DRY: Don't Repeat Yourself
    • KISS: Keep it simple, stupid

RSpec

  • Better Specs に従います
  • Shared Contextをうまく利用します
  • Ajaxのテストではコントローラテストでxhrメソッドを利用します
  • FactoryGirlではDB saveが不要な場合はbuildを使います
  • shoulda-matchersを積極的に利用します
  • Cucumberは記述コストが高いので使いません. 代わりにカスタムマッチャをうまく利用します. http://railstutorial.jp/chapters/sign-in-sign-out?version=4.0#sec-cucumber
  • Sexy Validationを利用します
  • カスタムマッチャを適切に利用する
  • privateなメソッドのテストは書かない
    • テストが必要ならクラスを分けてpublicにする

Module

  • ヘルパーモジュールの場合は-ableという名前にします

Rails

  • 規約通りの設定は省略する

MySQL

  • テンポラリテーブルは'CREATE TEMPORARY TABLE'で作成する
  • 特に理由がなければCREATE TABLEでCHARSETとCOLLATEは設定しない
  • インデックス
    • カーディナリティを考慮
    • カバリングインデックスを考慮

Model

  • スキーマ定義

    • 外部キーにはintegerではなくreferencesを利用します
    • null: falseでnot null制約を設定します
    • 1カラムのインデックスはindex: trueで設定します
    • 1行文字列はstring型に, 複数行文字列はtext型にします
    • natural keyにはadd_index :items, [:key1, :key2], unique: trueでUNIQUE制約を設定します
  • 階層化する場合はtable_name_prefixメソッドを定義する

  • パラメタの変数名はモデルではattributes、コントローラではparamsと名付けする

SQL

  • INSERT INTO table(c1, c2)でカラムを省略しない

View

  • render model, render modelsでの_modelパーシャル呼び出しを積極的に利用します

Controller

Locale

  • エラーメッセージの末尾には句点(。)をつける
  • ネストした設定はネスト先のモデルでまとめて設定する

フォーム

  • collection_check_boxにはappend_hiddenオプションを設定
  • 「〜」「未満、以下、以上」はどちらかに揃えます
  • placeholderは積極的に設定します
  • ラジオボタンにはラベルを設定します
label
  = f.radio_button :blood_type, :a, checked: f.object.blood_type
  | A型
  • 入力不備のアラートは空の場合には基本的に出しません
  • 未選択状態の場合は「▼項目名」のように選択肢と異なることがわかるようにします
  • 必須項目には必須マークを表示します

ワークフロー

  • チケットへのコメントの際は前のコメントを再確認します

プルリクエスト

  • プルリクエスト作成前に各コミットを自分でレビューします

Github

  • インデントの差分確認ではw=1を指定する
29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28