# 開発におけるコーディングルール・規約

すべての開発において、ソースコードがスパゲッティ化にならないように気をつけるべきこと

  1. include 変数宣言は function の最初に行う
  2. Function の上にコメントで説明入れる
  3. グローバル変数できるだけ作らない
  4. 単一目的変数使う
  5. 肥大化しないように Block 外だしする
  6. 入れ子の階層は2階層まで

コーディングの速さ、メンテナンスのしやすさ、後継ぎのことを考えながらコーディングするのがプロである

# BASE

  • VSCode 使う
  • コードフォーマットは Prettier - Code formatter (opens new window) 使う
  • マジックナンバー使わないで定数明確化
  • 型のキャストは小文字
  • 文末の空白を除去
  • シングルクォートとダブルクォートは適切に使い分け

# 共有連絡必要な項目

  • 共通類:migration 追加・変更・削除
  • 設定類:設定変更、追加する必要がある env config など
  • コマンド類:コマンド実行する必要がある場合
  • 他のメンバーに影響する箇所がある場合
  • コードの読みやすさは賢さや短さより重要

# コーディング

  • インデントスタイルはスペース 4 つ
  • controller から model 直接引用しない、repository に集約管理
  • 定数はすべて大文字で、アンダースコア
  • すべてのブロックに対してブレース (波かっこ) を使用
  • elseifを使うelse ifは禁止
  • PHP ショートタグは禁止
  • 変数、アクションの名前は小文字でスネークケース使用

プレース使わない悪い例




 









 

  $i = 0;
  $k = 1;

  if( $i === 0 ):

  /*
   * 長い処理....
   */

    if( $k > $i ){
        echo $k;
    }

  endif;

# テーブル命名規則

  • テーブル名 小文字スネークケース
  • カラム名 小文字スネークケース

# 変数、定数、Payload Request Parameter の命名規則

  • できるだけテーブルカラム名に合わせる
  • 一時変数除いて3文字以内は非推奨
  • クラス名はパスカルケース MyControllerClass
  • PHP 変数名はスネークケース
  • JS 変数名はキャメルケース
  • 定数は全て大文字のスネークケース

# インデント

# DB マイグレーション

  • 不要なテーブルは名前の末尾にアンダーバーつけて時間置いて削除
  • テーブル構造はすべてマイグレーション化する

# コメントを大事にする

  • ファンクション毎にコメントで説明する
  • 重要箇所はコメント
  • 不安定箇所や今後変更される予定のある箇所は TODO つける

# ドキュメント残す

プロジェクトの規模にもよりますが、できればドキュメントをまとめてドキュメントサイトに管理した方がいい。

  • 検索機能
  • git 管理で変更履歴確認
  • ハイライト
  • 見出し

# エディター設定

.editorconfig

## EditorConfig is awesome: https://EditorConfig.org

## top-most EditorConfig file
root = true

## Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

## Matches multiple files with brace expansion notation
## Set default charset
[*.{js,php}]
charset = utf-8

## 4 space indentation
[*.php]
indent_style = space
indent_size = 4

## Tab indentation (no size specified)
[Makefile]
indent_style = tab

## Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

## Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

# キャメルケース スネークケース ケバブケース パスカルケース 命名規則

ケース名 説明 よく使うパターン
キャメルケース camelCase 先頭小文字、接続要素語先頭大文字にする命名規則 PHP JS などの関数名
パスカルケース PascalCase 先頭大文字、接続要素語先頭大文字にする命名規則 PHP JS などの関数名
スネークケース snake_case アンダーバーで要素語をつなぐ命名規則 DB カラム名、PHP 変数名
ケバブケース kebab-case ハイフンで要素語をつなぐ命名規則 ファイル名、HTML の class 名
  • キャメルケースはローワーキャメルケースともいいます
  • パスカルケースはアッパーキャメルケースともいいます。

言語ごとの命名規則

# Git ブランチ管理

ブランチ名

  • 開発環境 develop
  • 検証環境 staging
  • 本番環境 main
  • 課題があれば課題番号でブランチ切る

# .env ファイル

  • 環境変数追加した場合、.env.example に Key を追加
  • Key 追加後情報共有
  • 本番環境にリリースする前に開発環境、ローカル環境の.env差分確認
2019-06-01
  • php
  • javascript
  • 開発ルール

関連記事

Javascript 非同期処理 async と await のメモ
Laravel メンテナンスモード
Laravel でカテゴリー作成 テーブル構築と再帰クエリ
Laravel を API サーバーとしての初期設定
Nuxt.js と Ant Design Vue 2 テーマカスタマイズ
Laravel リクエストログ出力
JavaScript ライブラリ aos.js 使ってスクロール連動アニメーション
Carbon で php date 日付の日数・月数差を計算
Laravel 429 Too Many Requests
Laravel Email バリデーションについて
Laravel Sanctum 使って API トークン JWT 認証と SPA 認証
Laravel logger でエラーログを chatwork に自動送信
php CSV データ取得は fgetcsv 使う
Laravel tinker 使って DB データベース接続とコマンド
Laravel Test についてのメモ
Laravel Log の基本設定&使い方
Exception: Class 'ZipArchive' not found
Cookie localStorage sessionStorage の違い
Laravel Sail で Docker 環境構築
PHP 文字列長さ・文字列の幅を取得方法
Codeigniter 画像アップロードとリサイズ
Laravel Lumen Faker 日本語設定
大きいファイルをスライス分割してアップロード
Javascript DataTables で excel 風 table 作る
javascript 配列 重複排除
laravel method の基本 get post put options
bootstrap vuejs 使って generate する際に babel が icons ファイル max 500KB エラー
Laravel schedule 設定
Class 'Imagick' not found Error
Laravel eloquent model の規約
PHP mbconvertkana 全角半角英数カナ変換
Codeigniter APPPATH BASEPATH FCPATH 各種パスと URL 取得
Laravel timestamp() auto update 有効化無効化
Lumen8 で JWT ユーザー認証
Laravel toSql パラメータ付きで出力
Lumen8 で API 開発
php Exception エラーキャッチでメール送信
Smarty HTTP URL 取得できるサーバー関数
Laravel blade foreach loop と current url
laravel session を制する
PHP empty isset is_null の違い
PHP 8 リリース新機能と変更
FlattenException deprecated
php.ini 初期設定のいろいろ
Laravel 5.1 から 8.1 にバージョンアップ
PHP 7.4 にアップグレードして使えなくなる機能
開発時によく使うゼロ埋めパディング作業まとめ
解決!phpMyAdmin テーブル構造の内容が表示されない問題
Composer コマンドとオプション
爆速軽量フレームワーク codeigniter PHP 開発
nuxtjs と codeigniter で jwt システム構築
Lumen と Laravel 違い比較
HTML から PDF に変換 PHP ライブラリ mPDF の設定
twig 3 人気 PHP テンプレートエンジンがバージョンアップ
javascript 日本語 shift-js 対応 CSV ダウンロード
Laravel Error についてのメモ
laravel に vuejs 使うための初期設定
php curl 使って クリックなしで POST 送信
allowurlinclude の設定で ftp_connect()エラー
javascript  指定場所にスムーズにスクロールする方法
react 強制的にレンダリングする方法
Code review コードレビューの自分なりの考え
Jsconfig と Tsconfig
Javascript var let const 変数宣言の違い
Javascript 電話番号フォーマット
国際化 i18n と地域化 L10N
javascript 文字列と配列検索 indexOf findIndex find some includes 関数の違い
vuejs back to top button component 作成
Nuxtjs 動的なルーティング静的ページ自動生成
キーコード取得 & キーコード一覧
Sweet Alert swal に複数 content
moment.js 使って日本語曜日対応
javascript 開発で出会った TypeError
ReferenceError: location is not defined
vuejs で omisejapan の決済フォーム作成した時のメモ
ブラウザーで動く javascript のクッキー操作ライブラリ js-cookie
codeigniter email ライブラリでメール送信 日本語対応
javascript reduce 連想配列の合計計算覚えよう
nodejs 使う時のエラーたち
javascript で作る html から PDF 変換 pdfmake の日本語対応
javascript 楽しく遊ぼう!メッセージつぶやくウシ cowsay
Javascript vuejs の validation 正規表現でフォームチェック作ったときのメモ
正規表現一覧 よく使う検索・置換のパターン
javascript password generator ランダム文字列パスワード作成
Apache 初期設定メモ