tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:GitHubをつかったApexコードの管理について - Part 4

GitHubをつかったApexコードの管理について - Part 4です。前回はGitHub Desktopの基本的な操作方法を確認して、GitHubとのやりとりを試してみました。

今回はSalesforceのプロジェクトをGitHubにアップしてApexコードの管理を試してみます。

リポジトリの作成

まずはSalesforce開発を管理するGitHubリポジトリを作成します。
f:id:tyoshikawa1106:20210111174643p:plain

リポジトリのクローン

次にリポジトリを配置するフォルダを用意します。今回はprojectフォルダ→salesforceフォルダ→workspaceフォルダと用意してその中にリポジトリをクローンします。(リポジトリ名はsalesforce-productにしました。)

f:id:tyoshikawa1106:20210111174957p:plain:w300

f:id:tyoshikawa1106:20210111175234p:plain:w300


クローンが成功するとsalesforce-productフォルダがworkspaceフォルダ内に格納されていると思います。


ローカルに追加されたリポジトリの中にSalesforceプロジェクトのテンプレートファイル一式を格納します。

f:id:tyoshikawa1106:20210111180325p:plain


テンプレートファイル一式はSalesforce CLIによるSFDXコマンドのCreate Project with manifestコマンドで生成できます。
f:id:tyoshikawa1106:20210111180540p:plain


生成されたプロジェクトからファイル一式をコピーしてリポジトリ内に格納する感じです。
f:id:tyoshikawa1106:20210111180632p:plain


ここまでできたら一旦GitHubにプッシュします。
f:id:tyoshikawa1106:20210111180842p:plain

Salesforceと接続

ここからはいつもどおりSFDXのAuthコマンドを実行してSalesforceと接続します。
f:id:tyoshikawa1106:20210111181527p:plain

f:id:tyoshikawa1106:20210111181604p:plain:w400

f:id:tyoshikawa1106:20210111181618p:plain:w400

認証ができたらpackage.xmlを開いて取得条件を確認し、右クリックからRitrieveコマンドでSalesforceのコードを取得取得します。
f:id:tyoshikawa1106:20210111181825p:plain


このようにclassesフォルダ内などにSalesforce側のソースコードがダウンロードされます。
f:id:tyoshikawa1106:20210111182134p:plain


Salesforce側のコードはGitHubにはまだ存在しないのですべてのコードをプッシュします。
f:id:tyoshikawa1106:20210111182309p:plain


これでGitHub側にSalesforceプロジェクトのファイル一式が格納されました。これをベースにApex開発の管理が可能になります。

Apexコードの追加とGitHubへのプッシュ

試しにApexクラスを新たに作成します。
f:id:tyoshikawa1106:20210111182650p:plain

f:id:tyoshikawa1106:20210111182849p:plain


GitHub Desktop側でApexクラスのファイルが追加されたことを確認できます。これをコミットして、GitHubにプッシュします。
f:id:tyoshikawa1106:20210111183018p:plain


GitHub側に作成したApexクラスが追加されていることを確認できました。このような感じでApexコードのバージョンを管理することができます。

まとめ

これでGitHubをつかったApexコードの管理の流れを確認することができたと思います。通常はブランチを作成してプルリクエストとレビュー、マージなどのあとにGitHubのmasterにマージする流れで開発を管理することになりますが、Salesforceでは本番のソースコードが「正」ということもあり、とりあえずは、本番のソースコードをRitrieveコマンドで取得してGitHubにアップしてソースコードの差分チェックに利用するところから始める形でも良いと思います。

イメージ
  1. GitHubにSalesforceプロジェクト用のリポジトリを作成
  2. RitrieveコマンドでSalesforce側のソースコードを取得
  3. SalesforceのソースコードをGitHubにプッシュ
  4. Salesforce側で開発を行い本番環境にデプロイ
  5. GitHubに最新のソースコードをプッシュ

とりあえずの手順ですが、バージョン管理していない状況からは抜け出せるのでやらないよりはやったほうが良いと思います。


もし、本格的に管理する場合はDev Hubやスクラッチ組織といったGitのバージョン管理と連携するソース駆動形の開発の仕組みがあるのでそちらを利用して開発していくことになると思います。


GitHubをつかったApexコードの管理についてはこんな感じです。より高度な使い方についてはまた今度時間を取って勉強しようと思います。

関連記事

SFDC:GitHubをつかったApexコードの管理について - Part 3

GitHubをつかったApexコードの管理について - Part 3です。前回はGitHubのページでコミットやプルリクエスト、リポジトリのクローンなど基本の機能を試してみました。

今回はローカル環境でコードの変更を変更を試してみたいと思います。

GitHub Desktop のインストール

GitHub DesktopはGUIでGitコマンドを実行できるツールです。個人的にはこうしたツールを使ったほうがやりやすいと思うのでこちらを利用します。
f:id:tyoshikawa1106:20210111160448p:plain

GitHub Desktopのドキュメント - GitHub Docs


f:id:tyoshikawa1106:20210111160950p:plain

GitHub Desktop | Simple collaboration from your desktop


インストールしてログインするとこんな感じ。
f:id:tyoshikawa1106:20210111161548p:plain


またPreferenceのメニューから細かい設定ができます。
f:id:tyoshikawa1106:20210111161655p:plain:w300

f:id:tyoshikawa1106:20210111161737p:plain


開発に使用するデフォルトのテキストエディタも設定しておくと良さそうです。
f:id:tyoshikawa1106:20210111163301p:plain

リポジトリの追加とクローン

まずはGitHubページでリポジトリを作成します。README.mdファイルも無いまっさらなリポジトリを作成しました。
f:id:tyoshikawa1106:20210111163659p:plain


続いてGitHub Desktopをつかってリポジトリのクローンを行います。FileメニューのClone Repositoryを選択すると設定画面が表示されます。(今回はprojectフォルダ内にあるappsフォルダを対象に選択しました。)
f:id:tyoshikawa1106:20210111164316p:plain

f:id:tyoshikawa1106:20210111164334p:plain:w300

これでappsフォルダ内にGitHubにあるdemoリポジトリがクローンされていることを確認できると思います。(「.git」など隠しファイルを表示して確認したい場合は「cmd」キー+「shift」キー+「.」キーで表示できるみたいです。)
f:id:tyoshikawa1106:20210111164717p:plain



クローン作業の詳細はこちら。

GitHub Desktopからのリポジトリのクローンとフォーク - GitHub Docs

GitHubに変更をプッシュする

エディタを開いてREADME.mdファイルを追加してみます。
f:id:tyoshikawa1106:20210111165239p:plain


するとGitHub Desktopに変更履歴が表示されました。
f:id:tyoshikawa1106:20210111165324p:plain


コミットコメントを入力してコミットボタンをクリックします。
f:id:tyoshikawa1106:20210111165415p:plain:w250


コミットの履歴はHistoryから確認できるみたいです。
f:id:tyoshikawa1106:20210111165521p:plain


この変更をGitHubにプッシュするにはPublish Brunchボタンをクリックします。これでGitHubに変更が反映されました。
f:id:tyoshikawa1106:20210111170042p:plain

GitHubの最新コードをローカルにダウンロード

次に他の開発者がアップしたGitHubのコードを自分のローカル環境に反映する方法についてです。今回はGitHubページで直接READMEファイルを編集する形で試してみます。
f:id:tyoshikawa1106:20210111170225p:plain


Fetch Originを選択すると差分チェックが行われて、変更がある場合はPull Originが選択できるようになります。
f:id:tyoshikawa1106:20210111170433p:plain


Pull Originが押せる状態になったのはこちら。
f:id:tyoshikawa1106:20210111170503p:plain


この操作でGitHub側の最新コードを自分のローカルにダウンロードできました。
f:id:tyoshikawa1106:20210111170525p:plain

ブランチの作成

上記ではmasterに直接プッシュしましたが、チーム開発でプッシュ時にレビューが必要な場合はブランチを作成してプルリクエストする流れとなります。


次のキャプチャのとおりNew Brunchボタンから新しいブランチを作成できます。
f:id:tyoshikawa1106:20210111171507p:plain

f:id:tyoshikawa1106:20210111171522p:plain:w300


作成後にPublish Brunchを実行することで、GitHub側に作成したBrunchの情報が反映されます。
f:id:tyoshikawa1106:20210111171805p:plain:w300


それではREADME.mdファイルを編集して作成したBrunchにコミットします。
f:id:tyoshikawa1106:20210111171941p:plain


続いてCreate Pull Requestボタンをクリックしてレビューを依頼します。
f:id:tyoshikawa1106:20210111172216p:plain


レビュー者はGitHubページ側で変更箇所を確認して問題がなければマージを行います。
f:id:tyoshikawa1106:20210111172344p:plain

f:id:tyoshikawa1106:20210111172442p:plain

f:id:tyoshikawa1106:20210111172453p:plain


これでレビュー後にmasterに変更が反映される流れでプッシュできました。
f:id:tyoshikawa1106:20210111172546p:plain


以上がGitHub Desktopの基本的な操作方法でした。

次の記事

SFDC:GitHubをつかったApexコードの管理について - Part 2

GitHubをつかったApexコードの管理について - Part 2です。前回はGitとGitHubの環境構築の話でした。

今回はGitHubでのリポジトリ作成を試してみます。

リポジトリの作成

GitHubにログインしてNew Repositoryをクリックすると作成ページが表示されます。
f:id:tyoshikawa1106:20210111133203p:plain:w250


あとはだいたいこんな感じで入力して最後にCreateボタンをクリックします。
f:id:tyoshikawa1106:20210111133343p:plain:w400


これでリポジトリの作成が完了です。
f:id:tyoshikawa1106:20210111133425p:plain

詳細はこちら。

リポジトリを作成する - GitHub Docs

ファイルの編集とコミット

あまりGitHubページ内でファイルの編集は行わないと思いますが、ドキュメントサイトに記載があったので動かしてみます。
f:id:tyoshikawa1106:20210111133837p:plain
※「:coffee」と記載してしまったけど、正しくは「:coffee:」でした。


編集後には下記の欄にコミットのタイトルと説明を入力できます。
f:id:tyoshikawa1106:20210111134107p:plain


また、「Create a new branch for this commit and start a pull request. Learn more about pull requests.」を選択するとコミット時にブランチを作成できるみたいです。

f:id:tyoshikawa1106:20210111134250p:plain


Propose file changeボタンをクリックすると保存されます。ここまでの詳細はこちら。

リポジトリを作成する - GitHub Docs

プルリクエストの作成とマージ

チーム開発の場合はプルリクエスト機能をつかって編集箇所のレビューを受けたあとに本番コードにマージする流れとなります。さきほど、コミット時にCreate a new branchを選択したので下記の画面が表示されました。

f:id:tyoshikawa1106:20210111134903p:plain


Create Pull Requestボタンをクリックするとプルリクエストが作成されます。

f:id:tyoshikawa1106:20210111135032p:plain


レビューの準備ができていればCreate Pull Requestで、まだ作業途中の場合はCreate draft Pull Requestを選択する感じでした。
f:id:tyoshikawa1106:20210111140405p:plain


プルリクエストが作成されたらレビュー者はcommitsタブからどのような変更が行われたかのチェックを行えます。
f:id:tyoshikawa1106:20210111135155p:plain


内容に問題がなければ「Merge pull request」ボタンで本番コードにマージします。
f:id:tyoshikawa1106:20210111135349p:plain

f:id:tyoshikawa1106:20210111135632p:plain


マージが完了すると次のメッセージが表示されます。この際に作業用に作成したブランチは削除できました。
f:id:tyoshikawa1106:20210111135658p:plain


これでコミット履歴とマージした人のログを残すことができました。
f:id:tyoshikawa1106:20210111135803p:plain

ここまでの詳細はこちらです。

プルリクエストの作成方法 - GitHub Docs

補足

対応中のプルリクエストについてはPull requestsタブでチェックできます。
f:id:tyoshikawa1106:20210111135442p:plain


Assignのところで、レビュー者を指定することもできるようです。
f:id:tyoshikawa1106:20210111140702p:plain

f:id:tyoshikawa1106:20210111140727p:plain


作成したブランチについても次のようにチェックできました。
f:id:tyoshikawa1106:20210111135528p:plain:w300

リポジトリのクローン

リポジトリのクローン機能をつかえばローカル環境にリポジトリをコピーできます。まずはGitHubのページでCodeボタンからクローン用のURLを取得します。

f:id:tyoshikawa1106:20210111142545p:plain


ターミナルを開いて作業用のディレクトリに移動します。
f:id:tyoshikawa1106:20210111142707p:plain


あとはGit Cloneコマンドを実行すればローカル環境にリポジトリが作成されます。

$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY

https://github.com/YOUR-USERNAME/YOUR-REPOSITORYの部分がGitHubページでコピーした値

f:id:tyoshikawa1106:20210111142943p:plain


この場合、「cd hello-world」でディレクトをしたあとに「git log」コマンドを実行するとGitHubページと同じコミットログが表示されることを確認できます。


以上がリポジトリクローンの流れです。この手順の詳細はこちら。

[https://docs.github.com/ja/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository:title]

リポジトリのアーカイブと削除

アーカイブもしくは削除をしたい場合はGitHubのSettingsのページで行えます。

f:id:tyoshikawa1106:20210111144100p:plain


アーカイブするとこんな感じになりました。
f:id:tyoshikawa1106:20210111144203p:plain

リポジトリのフォーク

クローンに似ている機能でリポジトリのフォーク機能があります。こちらは他のユーザのリポジトリをコピーしたいときに利用すれば良いようです。
f:id:tyoshikawa1106:20210111144445p:plain

リポジトリをフォークする - GitHub Docs


今回は不要そうなのでスキップ。


以上がGitHubをつかったリポジトリの作成やクローンなどの操作方法についてです。クローンしたあとのコードの変更などについては次回以降で試してみます。

次の記事

SFDC:GitHubをつかったApexコードの管理について - Part 1

2017年頃だったと思いますが、Salesforce DXということで新しい開発環境が提供されるようになった際にGitHubをつかったプロジェクト管理の話も公開されました。

その頃にGitHubの使い方を勉強したりしたのですが時間が経って忘れてしまったので、GitHubをつかったApexコードの管理についてもう一度勉強してみました。

GitHubのドキュメントサイト

GitHubの詳しい使い方については公式のドキュメントサイトが公開されています。ここを見れば環境構築手順などを確認できました。

f:id:tyoshikawa1106:20210103182149p:plain

GitHub Documentation

Git環境の構築

はじめにGitをインストールしてGitコマンドを実行できるようにします。
f:id:tyoshikawa1106:20210111120126p:plain:w400


Gitの最新版はこちらのサイトからインストールできます。
f:id:tyoshikawa1106:20210103182502p:plain


Macの場合はHomebrewをつかった方法が紹介されていたので、Homebrewをつかってインストールしました。
f:id:tyoshikawa1106:20210103182558p:plain


Homebrewはこちらのサイトからインストールできます。

macOS(またはLinux)用パッケージマネージャー — Homebrew


Homebrewをインストール後、下記のコマンドでGitをインストールできます。

$ brew install git


インストール後に最新のバージョンが適用されていない場合は、パスの設定が必要になるみたいです。下記の記事が参考になりました。

最新の Git を Mac にインストールする手順 - Qiita


コマンドラインを開いて次のコマンドを実行します。
f:id:tyoshikawa1106:20210111121639p:plain

$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshenv
$ source ~/.zshenv


これで「git --version」コマンドを実行するとインストールした最新バージョンが適用されていると思います。

Gitユーザ名とコミットメールアドレスの設定

最初にコマンドを実行してGitのユーザ名をセットします。

$ git config --global user.name "SAMPLE NAME"

正しく登録できたかの確認はこちらです。

$ git config --global user.name

同じくコミットメールアドレスもセットします。

$ git config --global user.email "email@example.com"

確認コマンドはこちらです。

$ git config --global user.email


これでGitの環境構築は完了です。上記の手順はこちらを参考にしました。

GitHub側の環境を用意

Gitの環境が準備できたらGitHub側の環境を用意します。


会社で管理する場合はそれぞれルールがあると思うので、個人用途として記載しますが普通のサービスと一緒にサインアップページで簡単にアカウントを作成できます。不明な点があればこちらで確認できると思います。

GitHub.com - GitHub Docs

SSHキーの設定

SSHキーの設定を行います。詳細はドキュメントサイトにまとめられています。
f:id:tyoshikawa1106:20210111124723p:plain

新しい SSH キーを生成して ssh-agent に追加する - GitHub Docs

SSHキー生成

ターミナルを開いて次のコマンドを実行するとSSHキーが作成されます。

$ ssh-keygen -t ed25519 -C "your_email@example.com"


Enter a file in which to save the keyというメッセージはファイルの保管場所を聞かれていて、エンターキーでデフォルト設定を反映します。その後にはパスフレーズを任意で決めて登録します。

SSH キーを ssh-agent に追加する

次のコマンドを実行します。ssh-agentが開始されるコマンドとのことです。

$ eval "$(ssh-agent -s)"


~/.ssh/config ファイルがデフォルトの場所にあるかどうかを確認します。

$ open ~/.ssh/config


does not exist.とメッセージが表示されてたらファイルが無い状態なので、次のコマンドでファイルを作成します。

$ touch ~/.ssh/config


再度、open ~/.ssh/configコマンドを実行するとファイルが開くので、下記の内容を追記します。

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519


最後にSSH 秘密鍵を ssh-agent に追加して、パスフレーズをキーチェーンに保存する作業を行います。

$ ssh-add -K ~/.ssh/id_ed25519


実行すると「Enter passphrase for XXXX」とメッセージが表示されるので、先程登録したパスフレーズを入力します。「Identity added: XXX」と表示されれば成功だと思います。

GitHubアカウントに新しいSSHキーを追加する

まずはSSH 公開鍵をクリップボードにコピーします。次のコマンドを実行すれば簡単にコピーできます。

$ pbcopy < ~/.ssh/id_ed25519.pub


GitHubにログインしてSettingsメニューのSSH and GPG keysから追加します。[New SSH key] または [Add SSH key] をクリックすると設定画面に移動できます。
f:id:tyoshikawa1106:20210111131031p:plain


Titleは任意です。どのPCかわかるような名前をつければ良さそうです。Keyの欄には先程のpbcopyでコピーした値を貼り付けます。Add SSH keyボタンを押せば登録完了です。(登録時にアカウントのパスワードを入力が必要になる場合もあります。)


上記の手順の詳細はこちら。

GitHub アカウントへの新しい SSH キーの追加 - GitHub Docs


ここまでの作業でSSHキーの作成とGitHubへの登録が完了しました。SSH接続が正しく動作するかは次のコマンドを実行すればチェックできます。

$ ssh -T git@github.com

「You've successfully authenticated」と表示されれば成功です。「but GitHub does not provide shell access.」というメッセージは気にしなくて良いみたいです。

次の記事

その他の参考サイト

SFDC:サイトゲストユーザについて

SalesforceサイトまたはExperience Cloudで外部に公開するサイト開発を行ったときに使用するサイトゲストユーザについてです。


SalesforceサイトとExperience Cloudを利用する場合は権限設定を注意して行う必要がありますが、権限設定ミスが原因でニュースになっていたので、誤って公開設定になっていないかのチェックは行っておいた方が良さそうです。

SFDC:Winter'21リリースノートを読んでみました

気づいたらリリースノートを読まなくなっていてこれは良くないなと思い、今更ですがWinter'21のリリースノートを読んでみました。

f:id:tyoshikawa1106:20201222123356p:plain

Salesforce リリースノート


今までリリースノートは専用サイトが用意されていましたが、ヘルプサイトと統合されることになったみたいです。
f:id:tyoshikawa1106:20201222123601p:plain


ヘルプサイト版のリリースノートですが、読んでみた感じ今までよりも内容を確認しやすくなった気がします。

Winter'21のリリースノートメモ

ざっくりした新機能を確認できるようにメモをつくりました。

おまけ - Summer'20リリースノートメモ

Winter'21と併せてSummer'20のリリースノートも読みました。すでにリリースからだいぶ経過しているので改めてチェックする機能はほとんどありませんでしたが、いくつか知れてよかった機能があったのでメモしてあります。


今回はただのメモですが、時間があれば詳細についてちゃんとチェックしようかなと思います。とりあえず次回のSpring'21のリリースノートの日本語版がでたらちゃんと読むようにしたいと思います。

SFDC:Summer'20 リリースノートメモ

Summer'20リリースノートのメモです。


リリースされてだいぶ経つので基本的には改めて意識する必要は無いと思いますが、ざっと読んだところ下記の内容は意識しておく必要がありそうでした。

  • 標準ナビゲーションの分割ビューを使用したリストの簡単な操作
  • Optimizer アプリケーションによる組織メンテナンスのスピードアップ
  • アプリケーション内トレーニングの複数ステップウォークスルーの作成
    • [設定] から、[クイック検索] ボックスに「アプリケーション内ガイダンス」と入力し、[アプリケーション内ガイダンス] を選択
  • 商談分割の効果を高めるための分割制限の引き上げ
  • Lightning Experience での大規模商談のアラートの設定
  • 価格表のない注文の有効化
  • お客様が新しいメールインサイトに関心がないときに把握
  • Kanban ビューでの会社のプロセスに関するガイダンスの取得
  • サポートに連絡せずに個人取引先の同期を有効化
  • 商談レコードでのエンゲージメントデータの確認
  • カスタムファイルの種類を添付ファイルとしてダウンロード可能
  • Salesforce モバイル Web ブラウザ環境の廃止
  • iOS で 1 回のタップでリンクを開く
  • 制限の緩和によるより多くのプッシュ通知の送信
  • Apex 型を逐次化および並列化する方法の制御
    • Apex クラスレベルで定義される新しい @JsonAccess アノテーションは、クラスのインスタンスが逐次化または並列化できるかどうかを制御します。