【Salesforce】ソース駆動開発で資料メンテ地獄から脱却!Node.js×CLIによる自動化の取り組み

こんにちは。BIGLOBEでSalesforceを利用した業務アプリケーション開発を担当している藤田です。

現在、BIGLOBEの開発チームでは「開発スピード2倍」を目標に掲げ、システム刷新や改善活動に取り組んでいます。

Salesforce開発に携わっている方なら共感していただけると思いますが、Salesforceはローコード/ノーコードの強みを活かし、画面上で設定を「ポチポチ」していくだけで素早く動くアプリケーションを作れるのが魅力のひとつです。

しかし、「作るのは簡単だが、その変更点を設計書に反映する作業が非常に面倒」という悩みはありませんか? 実装スピードが上がれば上がるほど、ドキュメントの更新が追いつかなくなったり、転記ミスが発生したりしがちです。

そこで私たちは、Salesforceが提唱する「ソース駆動型開発(Source-Driven Development)」の考え方を取り入れ、Salesforce上のデータ(メタデータ)から設計書を逆生成することに挑戦しました。今回はその一例として、バッチ一覧を自動生成する仕組みをご紹介します。

システム構成:Salesforce CLIをドキュメント生成に応用する

BIGLOBEでは、設計書をGoogleスプレッドシートで管理しています。そのため、Salesforceから取得した情報を最終的にスプレッドシートへ流し込むことがゴールとなります。

構築した自動化フローの全体像は以下の通りです。

画像:自動化フロー

1.データ取得(Node.js & Salesforce CLI): まず開発PC上でNode.js製の自作プログラムを実行します。ここでポイントとなるのが、Salesforce CLI (SFDX) の活用です。これは本来、Salesforceが推奨するソース駆動開発においてデプロイ等に使われるコマンドラインツールですが、今回はこれを介してSOQLを実行し、必要な定義情報をデータとして取得しています。

2.中間ファイル生成: 取得したデータを加工し、TSVファイルとしてGoogleドライブに保存します。

3.反映: Googleスプレッドシートに仕込んだGoogle Apps Scriptを実行(ボタンポチ)し、ドライブ上のファイルを取り込んでシートに展開します。

実践:バッチ一覧の自動生成

具体的な活用例として、「フローバッチの一覧」を生成するケースを紹介します。

Salesforceにはバッチ実行の方法がいくつかありますが、今回は「Scheduled(スケジュール済み)」タイプのフローを取得対象としました。Node.js側のツールでは、以下のようなSOQLを発行してフローの定義情報を取得しています。

SELECT Id, FlowLabel, ApiName, Description, Type
FROM FlowRecord
WHERE Type = 'Scheduled' 
SELECT Id, CronJobDetail.Name, CronJobDetail.JobType, State, NextFireTime, PreviousFireTime, StartTime, CronExpression
FROM CronTrigger
WHERE CronJobDetail.JobType IN ('6','7')

このようにメタデータへ直接クエリを投げることで、正確な定義情報を取得できます。これらを組み合わせ、スプレッドシートに出力した結果がこちらです。

画像:スプレッドシートに出力した結果

バッチ名(論理名・物理名)やCRON形式の実行スケジュールが一目でわかるようになりました。

こだわりの「リンク機能」

この自動化において、開発者体験(DX)を向上させるために工夫したのが「実装画面への直リンク」です。

出力結果のB列にはURLが生成されており、ここをクリックするだけでSalesforce上の該当フローの実装画面へ即座にジャンプできます。ソースコード管理のアプローチを取り入れつつも最終的な確認は人間が行うため、設計書と実環境をシームレスに行き来できるこの機能は非常に便利です。

導入効果と今後の展望

今回紹介したバッチ一覧以外にも、同様の仕組みを使ってオブジェクト定義一覧やレポート一覧なども自動生成しています。

手作業での更新を廃止したことで、設計書の記述ミスがなくなり、常に最新の実装状態がドキュメントに反映されるようになりました。なにより、エンジニアが「文書作成」という非生産的な時間から解放され、より本質的な開発業務に集中できるようになったことが最大の成果です。

また、今後はこの機能を応用して本番環境と開発環境のデータを取得・比較し、リリース前の変更箇所を洗い出す「環境間の差分チェック」にも役立てていきたいと考えています。さらにはこれをCI/CDパイプラインの一部として組み込み、ソースコードレベルでの変更管理を徹底することで、より堅牢なDevOps体制を築いていきたいと思います。

まとめ

BIGLOBEでは、このように「開発スピード2倍」という目標に向け、開発プロセスそのものの改善にも積極的に取り組んでいます。

Salesforce開発というと、SaaSの標準機能の枠組みの中での作業と思われがちですが、弊社ではCLIやスクリプト言語を組み合わせ、「自分たちの開発環境は自分たちでコードを書いて良くしていく」というエンジニアリング文化を大切にしています。

今後も、新しい技術やアイデアを積極的に取り入れながら、より効率的な開発環境を目指して改善活動を続けていきます。

掲載されている文章、イラストおよび写真は、BIGLOBE又は第三者が著作権を有しており、
権利者の許諾なく利用できません。

「BIGLOBE Style」は「はてなブログ」にて運用しており、
ブログ内でのCookie情報は株式会社はてなが収集します。

詳細は同社のプライバシーポリシーをご確認ください。
本サイトの商標についてはこちら