最初のロック解除済みパッケージの構築
学習の目的
- パッケージ化のための CLI コマンドに慣れる。
- 基本的なパッケージ化の使用事例を説明する。
- DreamHouse サンプルアプリケーションをパッケージ化して、Trailhead Playground にインストールする。
パッケージ開発が優れている理由
パッケージ化は、Salesforce Platform 開発者にとって、最も画期的な新機能の 1 つです。スライスした食パンや、携帯電話、ホームビデオサービスのような、よく知られた衝撃的なイノベーションと同じようなものです。それでは説明が足りないという方のために、これまでに学習した主要な利点をまとめましょう。パッケージ開発には、次のことがあてはまります。
- ソフトウェア開発ライフサイクルに関するベストプラクティスに従う。Salesforce DX の新しい機能との互換性があり、プロジェクト、ソース駆動型開発コマンド、およびスクラッチ組織は、特にパッケージ化を考慮して構築されています。
- ライフサイクルフェーズ間で追跡しているすべての変更を、バージョン管理されたアーティファクトにカプセル化する。
- 新しい機能の要求への対応を簡単にする。パッケージでコンポーネントを追加、更新、削除するだけです。
- 監査履歴が改善されて、本番組織で実施した変更を簡単に追跡、確認できるようになる。
- ソースを整理する。どのコンポーネントがどのアプリケーションおよび機能に属するのかを非常に簡単に確認できます。
- 反復型およびモジュール形式開発を促進する。
- ロック解除済みパッケージ間の相互連動関係をサポートする。1 つのロック解除済みパッケージは、複数のロック解除済みパッケージおよび従来のパッケージと連動できます。
- CLI コマンドをパッケージ化すると、リリースパイプラインの各ステップを完全に自動化できるようになるため、継続的インテグレーションと継続的配信をサポートする。
パッケージ開発の利点についてわかったところで、ロック解除済みパッケージの作成方法を説明します。
簡単なパッケージ化の使用事例
ロック解除済みパッケージは、社内用のビジネスアプリケーションに非常に適しています。たとえば、次のような場合です。
- 従業員が経由を提出するために使用できるアプリケーションを構築するように、財務ビジネスグループが IT チームに望んでいる場合。チームは、ロック解除済みパッケージを使用して、アプリケーションを開発、配信することを決定します。
- 従業員が採用候補者を参照するために使用できるアプリケーションを構築するように、人事チームが IT チームに望んでいる場合。従業員は、求人掲載、知り合いの紹介、紹介ボーナスの取得のために紹介アプリケーションを使用します。チームは、ロック解除済みパッケージを使用して、アプリケーションを開発、配信することを決定します。
これらそれぞれで、まったく新しいプロジェクトを開始します。すべてのソースは、Salesforce DX プロジェクト形式で含まれます (また、バージョン管理システムにコミットされます)。これらのアプリケーションいずれかを配信する準備ができたら、スクラッチ組織または Sandbox でテストできるロック解除済みパッケージを作成した後、本番組織にインストールします。また、チームが新しい機能を必要とするときは、機能を追加して、新しいパッケージバージョンを作成できます。簡単です。ですね。
環境の設定
本題の前に、今後の課題を乗り越えるために必要なすべてが準備完了していることを確認しましょう。
DreamHouse ソースコードの取得
デモのために、ビジネスチーム向けに DreamHouse アプリケーションを構築および配信していると仮定します。
現在、Salesforce DX の機能とツールを使用している場合は、すでに DreamHouse サンプルリポジトリについて知っているでしょう。DreamHouse は、Salesforce Platform で使用できる多くの機能が組み込まれたスタンドアロンアプリケーションです。Lightning コンポーネント、Apex、通知、Einstein、プロセスビルダーなどを使用します。ユーザは、物件を閲覧し、不動産ブローカーにオンラインで連絡できます。
では、パッケージ化に集中しましょう。DreamHouse ソースコードと、すでに作成した Salesforce DX プロジェクトファイルを取得します。この例では 1 つのパッケージを使用しますが、Salesforce DX プロジェクトは複数のパッケージを確保できます。ディレクトリ構造に基づいて異なるパッケージを分離できますが、コンポーネントは合理的な場所で共有してください。
このアプリケーションのパッケージを作成すると、開発ライフサイクルを通じて反復するときに、スクラッチ組織、UAT Sandbox、本番組織に簡単にパッケージをインストールできます。
パッケージ開発向けに特化して設計されたツールを使用するプロセス全体を説明します。
DreamHouse アプリケーションのソースコードを取得しましょう。
- DreamHouse GitHub リポジトリからソースをダウンロードします。
- [Clone or download (クローンまたはダウンロード)] をクリックします。
- リポジトリへの HTTPS リンクをコピーします。
- コマンドウィンドウで、ソースコードを配置するディレクトリに変更して、このコマンドを実行します。
git clone https://github.com/dreamhouseapp/dreamhouse-sfdx.git
ソースが Salesforce DX プロジェクトの構造になっており、DX プロジェクトファイルとスクラッチ組織定義を含んでいることがわかります。DreamHouse リポジトリは継続的に更新されるため、あなたのプロジェクトのバージョンが少し違っても、心配は不要です。

パッケージとパッケージバージョンの作成
これまでのプロセスの中で、おそらく Dev Hub 組織にログインしているはずです。
- コマンドウィンドウで、Dev Hub 組織が接続されていることを確認しましょう。
sfdx force:org:list
このコマンドの出力は、Dev Hub、Trailhead Playground、スクラッチ組織を含む、接続されているすべての組織を挙げます。(D) は、デフォルトの Dev Hub 組織を示します。(U) と表示されている場合、すべての CLI コマンドが、デフォルトでそのユーザ名に対して動作します。=== Orgs ALIAS USERNAME ORG ID CONNECTED STATUS ─── ────────── ─────────────────────────────── ────────────────── ──────────────── (D) DevHub myDevHub@example.com 00DB0000000Ige5MAC Connected MyTP myName@cunning-bear-311000.com 00D6A000000fH8CUAU Connected TestingOrg name@example.com 00DB0000000Im58MAC Connected ALIAS SCRATCH ORG NAME USERNAME ORG ID EXPIRATION DATE ──────── ──────────────── ─────────────────── ────────────────── ──────────────── Scratch1 myAcme test@example.com 00DZ000000N8ItoMAF 2018-03-01
「Salesforce DX を使用したアプリケーション開発」モジュールを完了している場合、Trailhead Playground 組織に接続されていることを確認できます。また、ハンズオン Challenge を完了するために作成したスクラッチ組織も表示されているでしょう。Dev Hub が接続されていない場合、次のようにログインします。sfdx auth:web:login -d -a DevHub
- dreamhouse-sfdx ディレクトリに変更します。
- sfdx-project.json を開きます。DreamHouse はオープンソースプロジェクトで、多くの人々が作成に関与します。この Challenge を確実に完了させるために、開始時のプロジェクトファイルを次のようなものにします。
{ "packageDirectories": [ { "path": "force-app", "default": true } ], "namespace": "", "sfdcLoginUrl": "https://login.salesforce.com", "sourceApiVersion": "44.0" }
- 必要に応じて、id、versionName、versionNumber など既存のパラメータをいくつか削除します。Salesforce CLI のバージョンと一致するように sourceApiVersion を更新します。忘れずに保存しましょう。
この例で名前空間を使用しない理由
パッケージ名前空間はロック解除済みパッケージの場合省略可能ですが、パッケージ名前空間を含めることで、パッケージコンポーネントの整理の維持に役立ちます。ただし、名前空間にはいくつか追加の設定と事前の計画が必要であるため、この単元では扱いません。
パッケージの作成
GitHub から DreamHouse アプリケーションをダウンロードしたとき、すべてのソースファイルをプロジェクトディレクトリに取得しました。これで、ベースパッケージを作成できます。
- 名前空間なしでロック解除済みパッケージを作成し、デフォルトとして設定されていなければ、Dev Hub 組織に別名またはユーザ名を提示します。
sfdx force:package:create --name dreamhouse --description "My Package" --packagetype Unlocked --path force-app --nonamespace --targetdevhubusername DevHub
- --name は、パッケージ名です。この名前は別名で、後続のパッケージ化コマンドを実行するときに使用できます。
- --path は、パッケージのコンテンツが含まれるディレクトリです。
- --packagetype は、作成しているパッケージの種類を示します (この場合はロック解除済み)。
=== Ids NAME VALUE ───────────────────── ────────────────── Package Id 0Hoxxx
- sfdx-project.json を開きます。これで、packageDirectories に、定義したパッケージ名が表示されますが、バージョン名とバージョン番号はプレースホルダになっています。また、このコマンドによって packageAliases セクションが作成され、パッケージ名 (別名) がその関連するパッケージ ID (0Ho) に対応付けられます。
{ "packageDirectories": [ { "path": "force-app", "default": true, "package": "dreamhouse", "versionName": "ver 0.1", "versionNumber": "0.1.0.NEXT" } ], "namespace": "", "sfdcLoginUrl": "https://login.salesforce.com", "sourceApiVersion": "44.0", "packageAliases": { "dreamhouse": "0Hoxxx" } }
ヒント: パッケージの別名またはパッケージ ID を忘れても、sfdx force:package:list を実行すれば、Dev Hub で作成したすべてのパッケージをリストできます。
パッケージバージョンをテストするスクラッチ組織の作成
スクラッチ組織を作成しましょう。MyScratchOrg という別名を使用して、そこにロック解除済みパッケージをインストールします。スクラッチ組織でテストすれば、パッケージ化開発ライフサイクルの単体テストフェーズを簡便に実行できます。
sfdx force:org:create --definitionfile config/project-scratch-def.json --durationdays 30 --setalias MyScratchOrg -v DevHub
デフォルトのスクラッチ組織定義を使用します。これは、Trailhead Playground と同じエディションである Developer Edition のスクラッチ組織を作成します。期間は 30 日に設定し、開発の作業を完了 (またはこの Trailhead モジュールを完了) するために十分な時間を用意します。
パッケージバージョンの作成とスクラッチ組織へのインストール
パッケージをリリースする準備ができたら、パッケージバージョンと呼ばれるスナップショットを作成します。パッケージバージョンのインストールは、メタデータのリリースと同様です。パッケージバージョンは、一度作成されると、特定のメタデータセットを含む不変のアイテムとして機能します。
- 任意のテキストエディタで sfdx-project.json を開き、パッケージバージョンオプションを更新します。
- versionName を Version 1.0 に、versionNumber を 1.0.0.NEXT に変更します。force-app ディレクトリは、デフォルト (かつ、唯一の) パッケージディレクトリです。このため、そこに含まれるすべてのソースはパッケージに含まれます。更新すると、sfdx-project.json ファイルは次のようになります。
{ "packageDirectories": [ { "path": "force-app", "default": true, "package": "dreamhouse", "versionName": "Version 1.0", "versionNumber": "1.0.0.NEXT" } ], "namespace": "", "sfdcLoginUrl": "https://login.salesforce.com", "sourceApiVersion": "44.0", "packageAliases": { "dreamhouse": "0Hoxxx" } }
- sfdx-project.json ファイルを保存します。
- dreamhouse-sfdx ディレクトリでパッケージバージョンを作成します。これは、メタデータをパッケージに関連付けます。
sfdx force:package:version:create -p dreamhouse -d force-app -k test1234 --wait 10 -v DevHub
- -p は、パッケージ ID に対応付けらるパッケージの別名です。
- -d は、パッケージのコンテンツが含まれるディレクトリです。
- -k は、不正にインストールされないようにパッケージを保護するインストールキーです。
Successfully created the package version [08cxxx]. Subscriber Package Version Id: 04txxx. Package Installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04txxx As an alternative, you can use the "sfdx force:package:install" command.
- sfdx-project.json の packageAliases セクションに新しいエントリがあります。
"packageAliases": { "dreamhouse": "0Hoxxx", "dreamhouse@1.0.0-1": "04txxx" }
- パッケージバージョンの別名を使用して、先ほど作成したスクラッチ組織にパッケージバージョンをインストールします。
sfdx force:package:install --wait 10 --publishwait 10 --package dreamhouse@1.0.0-1 -k test1234 -r -u MyScratchOrg
新しく作成したパッケージバージョンがスクラッチ組織で使用できるようになるまでに、数分かかることがあります。パッケージバージョンが使用可能になると、インストールが開始します。 - パッケージをインストールしたら、スクラッチ組織を開いて、パッケージを表示します。
sfdx force:org:open -u MyScratchOrg
- [Setup (設定)] から、[Quick Find (クイック検索)] ボックスに「Installed Packages」と入力し、[Installed Packages (インストール済みパッケージ)] を選択します。
これはロック解除済みパッケージであるため、スクラッチ組織で直接変更して、更新されたメタデータを取得して、新しいパッケージバージョンを作成できます。ここでは、DreamHouse アプリケーションにはすでに必要な要素がそろっているため、先に進んで、パッケージをリリースします。
パッケージバージョンのリリース
まだ説明していない機能に、パッケージ状態があります。パッケージは、最初に作成したときはベータ状態です。ベータパッケージは本番組織にインストールできません。これは、リリースするパッケージバージョンが本番用に準備完了であることを保証するための予防策です。バージョンの公開準備が完了したら、パッケージバージョンをリリース済みに昇格できます。
sfdx force:package:version:promote -p dreamhouse@1.0.0-1 -v DevHub
組織へのパッケージバージョンのインストール
重要な点ですが、最後に、パッケージバージョンを組織にインストールします。ベータパッケージバージョンは、スクラッチ組織、Sandbox、Trailhead Playground (DE 組織) にインストールできます。リリース済みパッケージバージョンは、すべての組織にインストールできます。
- Trailhead Playground にパッケージバージョンをインストールするには、ログインします。
sfdx auth:web:login -a MyTP
Trailhead Playground 用の別名を作成することをお勧めします。この例では MyTP です。組織にログインすると、CLI がログイン情報を記憶します。以降のコマンド発行時に必要となるのは、組織の別名を覚えておくことのみです。Trailhead Playground のユーザ名とパスワードがわからない場合は、「ユーザ名を取得してパスワードをリセットする。」を参照してください。 - Trailhead Playground にパッケージバージョンをインストールします。
sfdx force:package:install --wait 10 --publishwait 10 --package dreamhouse@1.0.0-1 -k test1234 -r -u MyTP
- Trailhead Playground を開きます。
sfdx force:org:open -u MyTP
- Trailhead Playground で、[Setup (設定)] から、[Quick Find (クイック検索)] ボックスに「Installed Packages」と入力し、[Installed Packages (インストール済みパッケージ)] を選択します。また、ロック解除済みパッケージを正常にインストールしたことを確認するメールが送信されます。
-
[dreamhouse] をクリックして、[View Components (コンポーネントを表示)] をクリックします。
- アプリケーションランチャーから [DreamHouse] アプリケーションを見つけて選択し、機能をいくつか確認します。
