LoginSignup
3
5

More than 3 years have passed since last update.

【Salesforce】コーディング規約!

Last updated at Posted at 2020-02-14

良いコードとは?

いい名前をつける。
適切なコメントを書く。
意味のある単位に分割する。
キレイに整形する。
こうした基本的なことを着実にやればいい。

 - リーダブルコード -

保守性が高い
すばやく効率的に動作する
正確に動作する
無駄な部分がない

 - 良いコードを書く技術 -

事前準備

開発環境

・VisualStudioCodeで統一する
・Prettierなどのコードフォーマットを開発者に共有する
・インデントをスペース4で統一する

Salesforce環境

・単語や文言をConstantクラス、カスタム設定、カスタム表示ラベルで管理するのか統一する
・ネーミング規約を作成する(キャメル、スネークなど)

Apex

アクセス修飾子

3つの叫び

  • 書かないのはNG!明示的に書いて!
  • 何でもかんでもpublicはNG!ちゃんとprivateも使い分けて!
  • protectedは使ってるところ見たことない!なんで!?

private

定義されたApexクラスで使用するメソッドや変数はprivate

public

Pageに紐づけるControllerとか別のControllerから呼ばれるメソッドや変数はpublic

global

アプリケーション外 (SOAP API 内、または別の Apex コード) から呼ばれるメソッドや変数はglobal

メソッド

コンストラクタ

3つの叫び

  • コンストラクタに700行とかまじでやめて!
  • 長くなりそうならメソッド追加しよ!
  • てかコンストラクタ内はシンプルにしといて!保守しづらい!
// 見やすいコンストラクタ
public HogeController(){
    // 取引先レコードの取得
    getAccount();
    // 取引先責任者レコードの取得
    getContact();
    // 取引先の更新
    updateAccount();
    // 取引先責任者の更新
    insertContact();
}

// 見づらいコンストラクタ
public HogeController(){
    // 上記の処理が全部コンストラクタに記載している('Д')
}

変数

インスタンス変数

3つの叫び

  • 適当なところに追加しないで!まとめとかないと運用・保守しずらい!
  • ローカルでいいものはローカルで書いて!なんでインスタンス変数で書いたの!?
  • 使わなくなったら削除して!気持ちはわかる!ここ忘れやすいよね!
//// 画面表示用取引先属性 // こうやってグルーピングしておくとインスタンス変数がバラバラにならなくていいかも!
// 取引先ID
public Id displayAccId {get; private set;} // 表示だけなのにprivate setにしてないの多くない?
// 取引先名
public String displayName {get; private set;} // 画面に表示する項目が取引先だけだったら「Acc」はいらないかな
// 取引先有無フラグ(true: 有 false: 無) // この説明いる?
public Boolean accFlag; // existsAccとかのほうが良くない?「Accountが存在しているか?」だからtrueだったら「存在している」じゃない?

これ自体が見づらい

SOQL

3つの叫び

  • SELECT句などはすべて大文字!見ずらい!
  • インデント多様!項目が多い場合は共通クラスで用意して!
  • WHERE句ごちゃっとすると見づらいので考えて!
List<Account> accList = [ // こうやっておくとリスト変数名変えた時に他のインデントも調整しなくていい、あとVSCodeで閉じれる
    // 複数行は下げる、1行はそのまま
    SELECT
        Id
        ,Name // 項目追加しやすい、先頭に,を置くことで,忘れ防止
    FROM Account
    WHERE
        Name = '小林' // 条件が追加しやすい
        AND ・・・
        OR ・・・など
    ORDER BY AccountNumber DESC
    LIMIT 100
];

// やだ!
List<Account> accList = [select DandbCompanyId, DunsNumber, Jigsaw, Fax, NaicsDesc, NaicsCode, Website, IsCustomerPortal, ChannelProgramLevelName, ChannelProgramName, IsPartner, Ownership, ShippingAddress, BillingAddress, CreatedById, OwnerId, Site, AccountSource, Name, AccountNumber from Account where Name = '小林' order by AccountNumber limit 100];

Visualforce

Lightning

3
5
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
3
5