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.
    チームスピリットでの2GPの導⼊・効果・運⽤
    TeamSpirit
    佐藤 諒
    2021/11/26

    View Slide

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

    View Slide

  3. 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/

    View Slide

  4. Copyright © TeamSpirit Inc. All Rights Reserved.
    第二世代パッケージとは
    4

    View Slide

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

    View Slide

  6. Copyright © TeamSpirit Inc. All Rights Reserved.
    導入の効果
    6

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. Copyright © TeamSpirit Inc. All Rights Reserved.
    導入方法
    11

    View Slide

  12. 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

    View Slide

  13. Copyright © TeamSpirit Inc. All Rights Reserved.
    導入方法
    13
    いくつか問題が出ると思います。チームスピリットではこんな問題に遭遇しました。
    問題 解決策
    パッケージには含められないメタデータがある
    とエラー
    (開発用の承認プロセス, 未整理公開内のレポート etc..)
    フォルダを出荷パッケージ用、開発用、
    翻訳パッケージ用(ロック解除済)で分ける。
    翻訳がパッケージに含められない
    (グローバル翻訳セット)
    スクラッチ組織以外にデプロイできなくなる
    (DE組織にある既存のデータをそのまま利用できない)
    sfdx-project.json を上記と同様に分ける。

    View Slide

  14. Copyright © TeamSpirit Inc. All Rights Reserved.
    2GP導入後の運用
    14

    View Slide

  15. 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 ✅
    🌀

    View Slide

  16. Copyright © TeamSpirit Inc. All Rights Reserved.
    おまけ:Salesforceへの要望
    16

    View Slide

  17. 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 ✅
    🌀
    複雑になってる!
    なぜか?

    View Slide

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

    View Slide

  19. Copyright © TeamSpirit Inc. All Rights Reserved.
    おまけ:Salesforceへの要望
    19
    要望としては、リリースしていないパッケージに依存していたとしても、
    Promote可能なベータパッケージが作成できるようにして欲しい。
    Released!
    Unreleased…
    Dependency
    Dependency
    ✅ force:package:version:create -c
    ❌ → ✅ force:package:version:create -c

    View Slide

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

    View Slide

  21. Copyright © TeamSpirit Inc. All Rights Reserved.
    https://www.teamspirit.co.jp/

    View Slide