The effect and workflow with 2nd generation package in TeamSpirit. 11/26 に Dreamforce Global Gathering で発表した資料です。
Copyright © TeamSpirit Inc. All Rights Reserved.チームスピリットでの2GPの導⼊・効果・運⽤TeamSpirit佐藤 諒2021/11/26
View Slide
Copyright © TeamSpirit Inc. All Rights Reserved.自己紹介2Sato Ryo です。仕事︓• 株式会社 チームスピリット で TeamSpirit EX を開発しています。• バックエンド( 業務処理の開発担当) です。• Salesforce 歴 2 年くらいの初⼼者です。趣味︓• ネコ• キャンプ• バイク
Copyright © TeamSpirit Inc. All Rights Reserved.What is the TeamSpirit EX?3TeamSpirit は勤怠・⼯数・経費の管理を⼀元管理できるソフトウェアです。TeamSpirit EX は従来の TeamSpirit に⽐べ、以下のような特徴があります。1. ⼤企業向けのユーザーで動作する2. 複雑な権限の管理が可能3. プロジェクト向けの管理に特化したアドオンが利⽤できる。https://www.teamspirit.com/ja-jp/lp/ex/
Copyright © TeamSpirit Inc. All Rights Reserved.第二世代パッケージとは4
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
Copyright © TeamSpirit Inc. All Rights Reserved.導入の効果6
Copyright © TeamSpirit Inc. All Rights Reserved.導入の効果7パッケージ作成時の手作業を自動化し省力化パッケージ作成失敗の事前検知2GPを導入することで以下のような効果を得ることができました。→エンジニアにとってはめっちゃ良いです。これまで人が1時間かけて手作業で行っていたタスクを10分に短縮パッケージ作成の手戻り3〜4時間のリスクを 0 にした
Copyright © TeamSpirit Inc. All Rights Reserved.導入の効果8パッケージ作成時の手作業を自動化第一世代パッケージでの手順①手元のPCでデプロイ実行②パッケージ作成組織でパッケージのバージョンなどの情報を手作業で入力③ Apexテスト実行後、パッケージが作成される。← 20分← 40分← 3時間(ほぼ待ち時間)エンジニアの人的リソース。ほとんどは待ち時間だが、最低でも人間が1時間は作業しなければならなかった。
Copyright © TeamSpirit Inc. All Rights Reserved.導入の効果9パッケージ作成時の手作業を自動化第一世代パッケージでの手順第二世代パッケージではこれら全てをCIで自動化。手順は Jenkins 実行する 10分 のみ。あとは待つだけ。← 20分← 40分← 3時間①手元のPCでデプロイ実行②パッケージ作成組織でパッケージのバージョンなどの情報を手作業で入力③ Apexテスト実行後、パッケージが作成される。
Copyright © TeamSpirit Inc. All Rights Reserved.導入の効果10パッケージ作成失敗の事前検知(リスク) Apexテストは 3〜5時間 ほどかかり、失敗した場合に再度 テストが必要。→これで6時間のロスが発生した。(リスク)デプロイの失敗→これによるやり直しで20分ほどロス&修正作業が発生第一世代パッケージでの手順とリスク2GPでは何回でもパッケージ作成可能。パッケージ組織に差分を都度同期する必要もありません。• 事前にApexテスト失敗をパッケージ作成可能レベルで検知。• CIを設定し毎日自動的にパッケージ作成を行うように設定。①手元のPCでデプロイ実行②パッケージ作成組織でパッケージのバージョンなどの情報を手作業で入力③ Apexテスト実行後、パッケージが作成される。
Copyright © TeamSpirit Inc. All Rights Reserved.導入方法11
Copyright © TeamSpirit Inc. All Rights Reserved.導入方法12既存の sfdx-project を 2GP化してトライ&エラーで解決するのが⼿っ取り早いです。→ざっくり 3ステップです。Name spaceorgDev huborg① 組織を2つ作り、それぞれをリンク• 名前空間を取得した組織• Dev hub有効化組織https://help.salesforce.com/s/articleView?id=sf.sfdx_dev_reg_namespace.htm&type=5sfdx projectsfdx-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:createhttps://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_dev2gp_create_pkg_base.htm$Dev huborgupdate
Copyright © TeamSpirit Inc. All Rights Reserved.導入方法13いくつか問題が出ると思います。チームスピリットではこんな問題に遭遇しました。問題 解決策パッケージには含められないメタデータがあるとエラー(開発用の承認プロセス, 未整理公開内のレポート etc..)フォルダを出荷パッケージ用、開発用、翻訳パッケージ用(ロック解除済)で分ける。翻訳がパッケージに含められない(グローバル翻訳セット)スクラッチ組織以外にデプロイできなくなる(DE組織にある既存のデータをそのまま利用できない)sfdx-project.json を上記と同様に分ける。
Copyright © TeamSpirit Inc. All Rights Reserved.2GP導入後の運用14
Copyright © TeamSpirit Inc. All Rights Reserved.2GP導入後の運用152GPを導⼊した後、以下のような運⽤に変更されました。開発(テストを強化) パッケージング(簡単に!) リリース(若干複雑になった)1GP2GPsfdxprojectチームメンバーで開発+ CIでの Apex テストsfdxprojectチームメンバーで開発+ CI で パッケージングテストApex test ✅Packaging ✅sfdx-project.jsonエンジニアがパッケージ組織を手動で操作。かなり複雑Packaging ✅Jenkins ジョブを実行。開発時と同じジョブを使える!QAテスト後、エンジニアがパッケージ組織を手動で操作QAテスト後、エンジニアがpromoteコマンドを手動で実行。実行後、翻訳パッケージを再ビルド+ promotePackaging ✅🌀
Copyright © TeamSpirit Inc. All Rights Reserved.おまけ:Salesforceへの要望16
Copyright © TeamSpirit Inc. All Rights Reserved.おまけ:Salesforceへの要望172GPを導⼊した後、以下のような運⽤に変更されました。開発(テストを強化) パッケージング(簡単に!) リリース(若干複雑になった)1GP2GPsfdxprojectチームメンバーで開発+ CIでの Apex テストsfdxprojectチームメンバーで開発+ CI で パッケージングテストApex test ✅Packaging ✅sfdx-project.jsonエンジニアがパッケージ組織を手動で操作。かなり複雑Packaging ✅Jenkins ジョブを実行。開発時と同じジョブを使える!QAテスト後、エンジニアがパッケージ組織を手動で操作QAテスト後、エンジニアがpromoteコマンドを手動で実行。実行後、翻訳パッケージを再ビルド+ promotePackaging ✅🌀複雑になってる!なぜか?
Copyright © TeamSpirit Inc. All Rights Reserved.おまけ:Salesforceへの要望18SFの仕様で、依存パッケージでpromote(リリース) 可能なパッケージを作成するためには、依存パッケージがリリースされている必要がある。そのため、本体パッケージをリリースした後に翻訳パッケージを再パッケージ作成していた。Released!Unreleased…DependencyDependency✅ force:package:version:create -c❌ force:package:version:create -c
Copyright © TeamSpirit Inc. All Rights Reserved.おまけ:Salesforceへの要望19要望としては、リリースしていないパッケージに依存していたとしても、Promote可能なベータパッケージが作成できるようにして欲しい。Released!Unreleased…DependencyDependency✅ force:package:version:create -c❌ → ✅ force:package:version:create -c
Copyright © TeamSpirit Inc. All Rights Reserved.まとめ20良い点• ⼿作業がなくなる︕• パッケージ作成時の⼿戻りがなくなる︕• 2GPにするのは意外に簡単。3ステップ︕• 運⽤を⼯夫することで開発⼿順を変更せずにテストのみを強化できる。考慮すべき点• パッケージに含めない物がある場合は別のフォルダに移動するなどの⼯夫が必要。• 依存パッケージがある場合は⼀度にリリースできないため、順番にリリースする必要がある。
Copyright © TeamSpirit Inc. All Rights Reserved.https://www.teamspirit.co.jp/