Upgrade to Pro — share decks privately, control downloads, hide ads and more …

チームスピリットでの2GPの導入効果と運用方法

TS_SatoRyo
December 17, 2021

 チームスピリットでの2GPの導入効果と運用方法

The effect and workflow with 2nd generation package in TeamSpirit.
11/26 に Dreamforce Global Gathering で発表した資料です。

TS_SatoRyo

December 17, 2021
Tweet

Other Decks in Technology

Transcript

  1. Copyright © TeamSpirit Inc. All Rights Reserved. 自己紹介 2 Sato

    Ryo です。 仕事︓ • 株式会社 チームスピリット で TeamSpirit EX を開発しています。 • バックエンド( 業務処理の開発担当) です。 • Salesforce 歴 2 年くらいの初⼼者です。 趣味︓ • ネコ • キャンプ • バイク
  2. Copyright © TeamSpirit Inc. All Rights Reserved. What is the

    TeamSpirit EX? 3 TeamSpirit は勤怠・⼯数・経費の管理を⼀元管理できるソフトウェアです。 TeamSpirit EX は従来の TeamSpirit に⽐べ、以下のような特徴があります。 1. ⼤企業向けのユーザーで動作する 2. 複雑な権限の管理が可能 3. プロジェクト向けの管理に特化したアドオンが利⽤できる。 https://www.teamspirit.com/ja-jp/lp/ex/
  3. Copyright © TeamSpirit Inc. All Rights Reserved. 第二世代パッケージ(以下2GP)とは 5 •

    Salesforce でパッケージを作成するための新しい技術です。 • バージョン管理システムが信頼できる情報源となるため、パッケージ組織やパッチ 組織は存在しません。 以前は・・・パッケージ組織を使⽤していたため、⼀度デプロイしてしまうとやり直しが困難である。 • Salesforce CLI で実⾏したり、スクリプトを使⽤して⾃動化したりできます。 以前は・・・パッケージ組織にログインして⼿動でパッケージ作成を⼿作業で⾏う必要があった。 • 新たなパッケージを作成するにあたり、最新の2GP技術を⽤いて作成を⾏いまし たのでその効果を報告します。 https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_dev2gp.htm
  4. Copyright © TeamSpirit Inc. All Rights Reserved. 導入の効果 7 パッケージ作成時の手作業を

    自動化し省力化 パッケージ作成失敗の事前検知 2GPを導入することで以下のような効果を得ることができました。 →エンジニアにとってはめっちゃ良いです。 これまで人が1時間 かけて手作業で行っていた タスクを10分に短縮 パッケージ作成の手戻り 3〜4時間のリスクを 0 にした
  5. Copyright © TeamSpirit Inc. All Rights Reserved. 導入の効果 8 パッケージ作成時の手作業を自動化

    第一世代パッケージでの手順 ①手元のPCでデプロイ実行 ②パッケージ作成組織でパッケージ のバージョンなどの情報を手作業で 入力 ③ Apexテスト実行後、パッケージが 作成される。 ← 20分 ← 40分 ← 3時間(ほぼ待ち時間) エンジニアの人的リソース。 ほとんどは待ち時間だが、最低でも人間が1時間は作業しなけ ればならなかった。
  6. Copyright © TeamSpirit Inc. All Rights Reserved. 導入の効果 9 パッケージ作成時の手作業を自動化

    第一世代パッケージでの手順 第二世代パッケージ ではこれら全てをCIで自動化。 手順は Jenkins 実行する 10分 のみ。 あとは待つだけ。 ← 20分 ← 40分 ← 3時間 ①手元のPCでデプロイ実行 ②パッケージ作成組織でパッケージ のバージョンなどの情報を手作業で 入力 ③ Apexテスト実行後、パッケージが 作成される。
  7. Copyright © TeamSpirit Inc. All Rights Reserved. 導入の効果 10 パッケージ作成失敗の事前検知

    (リスク) Apexテストは 3〜5 時間 ほどかかり、失敗した 場合に再度 テストが必要。 →これで6時間のロスが発生 した。 (リスク)デプロイの失敗 →これによるやり直しで20分 ほどロス&修正作業が発生 第一世代パッケージでの手順とリスク 2GPでは何回でも パッケージ作成可能。 パッケージ組織に差分を都度 同期する必要もありません。 • 事前にApexテスト失敗をパッケ ージ作成可能レベルで検知。 • CIを設定し毎日自動的にパッケ ージ作成を行うように設定。 ①手元のPCでデプロイ実行 ②パッケージ作成組織でパッケージ のバージョンなどの情報を手作業で 入力 ③ Apexテスト実行後、パッケージが 作成される。
  8. Copyright © TeamSpirit Inc. All Rights Reserved. 導入方法 12 既存の

    sfdx-project を 2GP化してトライ&エラーで解決するのが⼿っ取り早いです。 →ざっくり 3ステップです。 Name space org Dev hub org ① 組織を2つ作り、それぞれをリンク • 名前空間を取得した組織 • Dev hub有効化組織 https://help.salesforce.com/s/articleView?id=sf.sfdx_dev_reg_namespa ce.htm&type=5 sfdx project sfdx- project.json ② sfdx-project.jsonを更新 • 名前空間の指定 • バージョン番号の指定 https://developer.salesforce.com/docs/atlas.ja- jp.230.0.sfdx_dev.meta/sfdx_dev/sfdx_dev2gp_config_file.htm ③ パッケージ作成コマンド実⾏ • force:package:create • force:package:version:create https://developer.salesforce.com/docs/atlas.ja- jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_dev2gp_create_pkg_base. htm $ Dev hub org update
  9. Copyright © TeamSpirit Inc. All Rights Reserved. 導入方法 13 いくつか問題が出ると思います。チームスピリットではこんな問題に遭遇しました。

    問題 解決策 パッケージには含められないメタデータがある とエラー (開発用の承認プロセス, 未整理公開内のレポート etc..) フォルダを出荷パッケージ用、開発用、 翻訳パッケージ用(ロック解除済)で分ける。 翻訳がパッケージに含められない (グローバル翻訳セット) スクラッチ組織以外にデプロイできなくなる (DE組織にある既存のデータをそのまま利用できない) sfdx-project.json を上記と同様に分ける。
  10. Copyright © TeamSpirit Inc. All Rights Reserved. 2GP導入後の運用 15 2GPを導⼊した後、以下のような運⽤に変更されました。

    開発(テストを強化) パッケージング(簡単に!) リリース(若干複雑になった) 1GP 2GP sfdx project チームメンバーで開発 + CIでの Apex テスト sfdx project チームメンバーで開発 + CI で パッケージングテスト Apex test ✅ Packaging ✅ sfdx- project .json エンジニアがパッケージ組織を 手動で操作。かなり複雑 Packaging ✅ Jenkins ジョブを実行。 開発時と同じジョブを使える! QAテスト後、エンジニアが パッケージ組織を手動で操作 QAテスト後、エンジニアが promoteコマンドを手動で実行。 実行後、翻訳パッケージを再ビルド + promote Packaging ✅ 🌀
  11. Copyright © TeamSpirit Inc. All Rights Reserved. おまけ:Salesforceへの要望 17 2GPを導⼊した後、以下のような運⽤に変更されました。

    開発(テストを強化) パッケージング(簡単に!) リリース(若干複雑になった) 1GP 2GP sfdx project チームメンバーで開発 + CIでの Apex テスト sfdx project チームメンバーで開発 + CI で パッケージングテスト Apex test ✅ Packaging ✅ sfdx- project .json エンジニアがパッケージ組織を 手動で操作。かなり複雑 Packaging ✅ Jenkins ジョブを実行。 開発時と同じジョブを使える! QAテスト後、エンジニアが パッケージ組織を手動で操作 QAテスト後、エンジニアが promoteコマンドを手動で実行。 実行後、翻訳パッケージを再ビルド + promote Packaging ✅ 🌀 複雑になってる! なぜか?
  12. Copyright © TeamSpirit Inc. All Rights Reserved. おまけ:Salesforceへの要望 18 SFの仕様で、依存パッケージでpromote(リリース)

    可能なパッケージを作成するためには、 依存パッケージがリリースされている必要がある。 そのため、本体パッケージをリリースした後に翻訳パッケージを再パッケージ作成していた。 Released! Unreleased… Dependency Dependency ✅ force:package:version:create -c ❌ force:package:version:create -c
  13. Copyright © TeamSpirit Inc. All Rights Reserved. おまけ:Salesforceへの要望 19 要望としては、リリースしていないパッケージに依存していたとしても、

    Promote可能なベータパッケージが作成できるようにして欲しい。 Released! Unreleased… Dependency Dependency ✅ force:package:version:create -c ❌ → ✅ force:package:version:create -c
  14. Copyright © TeamSpirit Inc. All Rights Reserved. まとめ 20 良い点

    • ⼿作業がなくなる︕ • パッケージ作成時の⼿戻りがなくなる︕ • 2GPにするのは意外に簡単。3ステップ︕ • 運⽤を⼯夫することで開発⼿順を変更せずにテストのみを強化できる。 考慮すべき点 • パッケージに含めない物がある場合は別のフォルダに移動するなどの⼯夫が必要。 • 依存パッケージがある場合は⼀度にリリースできないため、順番にリリースする必要がある。