【Salesforceプロジェクト】仕事のフォーマット

# TODOフォーマットを準備する

* TODOフォルダを作成したか？
* プロジェクトメモを作成したか？

> フォルダ → お客様名_YYYYMMDD_概要_詳細
> XXXX_プロジェクト概要_プロジェクトメモ

# 依頼を解読する

* 音読したか？
* わからないところはないか？
* 成果物を分解したか？
* そもそも論で成果物を疑ったか？
* お客様を想定し、ストーリーを考えたか？（5W1H、セリフなど）
* 色分けしたか？
  → 赤（緊急）橙（セクション）薄橙（小セクション）質問（黄色）待ち（緑）水色（対応中）終了（灰色）除外（黒）
* 必要な場合、開発環境を用意、またはリフレッシュしたか？

# 既存仕様を確認する

* 要件定義書・設計書を確認したか？
* 開発環境でも再現性はあるか？
* 有識者からポイントを聞いたか？
* 開発環境と本番環境で差異は無いか？
* 開発環境(Sandbox)を更新する必要はあるか？
* System.Debugを差し込みまくったか？
* テスト設計書があればどのようなテストをしているか？

# 対応した場合の影響・ガバナ制限を確認する

* 作成・更新した場合、他のモジュールに影響はないか？
* プロセスビルダー、ワークフローは廃止予定だが使用するか？
* ガバナ制限に引っ掛からないか？
* DocumentオブジェクトをApexで作成する場合は5MB以下か？
* PDFを使用する場合、文字コードは「Arial Unicode MS」で外字は使用できないが問題ないか？
* データローダを使用する場合、外字は使用できないが問題ないか？
 ※「𠮷」「​䕃」など
* UTF-8からS-JISなど文字コード変換をするとヒープサイズエラーの可能性があるが問題ないか？
* ユーザを無効化する場合、所有しているレコードは誰に引き継ぐか？
* 項目の使用場所は確認したか？（数式などで使われてる可能性あり）
* VSCode上のCtrl＋Shift＋Fでキーワード検索したか？（renderas="pdf"など）
* 既存項目に対して必須やユニークのオプションを追加する場合、テストクラスに影響はないか？
* 大量レコードを操作する場合、HeapSize、データの容量など考慮したか？
* サブクエリはレコード数と項目数でエラーが出るが問題無いか？

[公式：実行ガバナと制限](https://developer.salesforce.com/docs/atlas.ja-jp.234.0.apexcode.meta/apexcode/apex_gov_limits.htm)

[公式：Visualforce の制限](https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_vf.htm)

[公式：ファイルのサイズおよび共有の制限](https://help.salesforce.com/s/articleView?id=sf.collab_files_size_limits.htm&type=5)

[Salesforceガバナ制限を回避するためにやってきたこと](https://qiita.com/comefigo/items/48f05d8fe4a3959911f4)

[フォント Arial Unicode MS 利用可能文字一覧](https://www.e-tax.nta.go.jp/tetsuzuki/mojiichiran.pdf)
※非公式

[サブクエリ使過ぎるとエラー](https://help.salesforce.com/s/articleView?id=000381135&type=1)

# リリースモジュール、資料を一覧化する

* 本番環境リリースに漏れはないか？
* 作成・更新する資料はどれか？

# 予定工数を計算する

* 予定工数は何時間か？

# 開発環境を準備する

* 本番環境との差異は無いか？
* 必要であればバックアップは取得したか？

# 開発する

* 車輪の再発明をしていないか？
* フォーマットはないか？
* 他で似たようなことをしていないか？

[【Salesforce】テンプレート集！](https://qiita.com/RyoheiKobayashi/items/b26cbdb1277fc9d64507)

[「なぜあなたの仕事は終わらないのか」](https://qiita.com/Suguru_Toyohara/items/66c27319a3602801da5f)

[仕事は15分単位で区切るべし。“朝令暮改”孫正義の元秘書に聞く「超効率仕事術」](https://r25.jp/article/606298706831849126)

[プログラミングでよく使う英単語のまとめ【随時更新】](https://qiita.com/Ted-HM/items/7dde25dcffae4cdc7923)

[【Windows版】VS Code キーボードショートカット一覧 （オススメ付き）](https://qiita.com/TakahiRoyte/items/cdab6fca64da386a690b)

# テスト設計書を作成する

* 使用想定のブラウザは何を使うか？
* 影響のあるユーザは誰か？
* デシジョンテーブルは必要か？

[現場で役立つテストの基本](https://qiita.com/y-some/items/a96ec6a6cfc01ce56879)

# テストする

# リリース一覧表をもとにお客様確認環境にリリースする

* URLをべた書きしている場合、環境にあっているか？
* メールアドレスをべた書きしている場合、環境にあっているか？
* IDをべた書きしている場合、環境にあっているか？
* ApexやVFのリリース時、セキュリティが有効になっているか？
* データ作成、更新系のモジュールをリリースする場合、既存のレコードに影響はないか？
* 項目レベルセキュリティは設定しているか？
* リリース先の組織は適切か？
* デバッグログは削除しているか？
* データローダで「Use Bulk API」を使用する場合、何かを更新する処理は走らないか？（UNABLE_TO_LOCK_ROWの観点）
* 選択リスト値を変えた場合、連動項目やレポートタイプも更新しているか？
* n.format().length()で桁数を取得していないか？（4桁以上だとカンマも含まれる）
* 選択リストの値を追加したら、レコードタイプも修正したか？

[【Salesforce】変更セットのリリース注意点](https://qiita.com/RyoheiKobayashi/items/0294ca246fc86881ed62)

# 開発環境のテストクラスをRunAllする

# テストクラスを作成・更新する

# 本番環境にリリースする

# 資料を作成・更新する

# GitHubなどを更新する

# 不要なSandboxを削除する
また、技術調査のみでリリースしない場合は開発前に戻すなど対応が必要

# 工数を報告・反映する

# Qiitaに忘備録を残す

# TODOフォーマットをクローズする

* TODO EXCELを別EXCELに出力、名前を「README」にしてTODOフォルダに配置したか？
* TODOフォルダをクラウドなどに配置したか？