「Mulesoft開発」あるある!よくある質問回答集(開発者向け)

こんにちは。株式会社VALGOエンジニアのヌマです。
地元秋田からリモートで東京や大阪など全国各地のお仕事をしています。

背景


多数のSaaSを導入していたり、社内システムが多い会社では、データの整合性やリアルタイムでのデータ連携が素早くできることがデータ活用の鍵となってきます。

Salesforce社の「Mulesoft」はデータの利活用を促進する目的で導入されることが多く、世界中の企業で導入が進んでいます。

ローコード開発でスムーズに導入していけるのが特徴ですが、開発者目線では詰まることが多々あります。

今回はAnypoint Studioを使っているときにつまずくポイントをまとめました。

質問回答集


Q1. Local環境でデプロイがうまく実行しない

このエラーに関しては、始めてからよく詰まるところになります。
よくみる原因をいくつか列挙します。

A1-1. Anypoint Platformへのログインセッションが切れている

エラーメッセージ

Failed to execute goal on project "projectName": Could not resolve dependencies for project "orgId:projectName:mule-application:version"...
Anypoint StudioでAnypoint Platformにログインする画面
ログインできているか確認する

Mule Paletteの「Search in Exchange」をクリックし、Add Account(もしくは再ログイン)することで依存関係にあるRAMLやコネクタを正常に読み込み、デプロイができるようなります。

ログイン画面

ログイン画面下の方にセッションが切れる日付を設定する項目があり、ここで最大値の15を入力しておくことで、15日間はこのエラーに怯えなくてもよくなります。

A1-2. Mavenリポジトリのローカルキャッシュがおかしくなっている

エラーメッセージ

Failed to execute goal on project "projectName": Could not resolve dependencies for project "orgId:projectName:version": Failed to collect dependencies "orgId:projectName:zip:raml:version": Failed to read artifact descriptor for "orgId:projectName:zip:raml:version": The following artifacts could not be resolved "orgId:projectName:pom:version"(absent): Could not transfer artifact "orgId:projectName:pom:version" from/to MuleRepository ("MuleRepositoryURL"): status code: 401, reason phrase: Unauthorized (401) -> [Help 1]

Anypoint PlatformのExchangeで公開したRAMLをダウンロードする際に不具合があった場合にMavenリポジトリのローカルキャッシュに不要なファイルが入ってしまうことがありました。

.m2フォルダの画像
ローカルキャッシュのイメージ

ユーザー > “ユーザー名” > .m2 > repository > “組織ID” > “API名” フォルダの中にそのAPIのバージョンごとにフォルダが作成されています。

デプロイを行いたかったバージョンのフォルダを削除してからデプロイを行うとローカルキャッシュに対して再度ダウンロードが走るため問題なくデプロイできるようになります。

A1-3. secure-properties configのkeyを設定し忘れている

エラーメッセージ

Couldn't find configuration property value for key ${runtime.property}

config.yamlファイルやconfig.propertiesファイルに入力している接続情報を暗号化している場合、デプロイ時に複合化キーを渡してあげる必要があります。

【参考】https://docs.mulesoft.com/jp/mule-runtime/latest/secure-configuration-properties

Anypoint Studioで複合化キーを渡すために「Run configurations」で設定をする必要があります。

Run configurations画面
Run configurations画面イメージ

画面イメージでは、runtime.propertyというグローバル変数に対して”xxx…”という複合化キーを渡しています。

Q2. Munitがうまく実行しない

A2-1. Local環境でデプロイがうまく実行できていない

こちらもデプロイ時と同じエラーが発生します。A1-1からA1-3の解決方法を試してみてください。

A2-2. Mock whenのPick processorで指定している先のコンポーネントを間違えている

Munit画面
Munit画面イメージ

モックしているコンポーネントやそのコンポーネントのdoc:idなどが間違えているとそのコンポーネントがうまくモックされず、エラーやfailuresになります。

A2-3. テストを行っているフローとは別のフローを動かすのにEnable Flow Sourcesに登録を行っていない

Munitフロー画面
Munitフロー画面イメージ

画面イメージはMunitフローの画面イメージですが、ここの一番下にある”Enable Flow Sources”に何も設定していないことが見えます。

Munitフロー例
Munitフローイメージ

もしこのMunitのMock whenでThen Callを使い、テスト用のフロー(図中ではstub-apiFlow)を呼び出したいときは、下図のように設定を行わなければいけません。

設定後のイメージ
Enable Flow Sources設定後のイメージ

A2-4. readUrlで読み込みを行っているjsonファイルのスペースの数や改行コードが違う

Munitを行う際に、MockからのResponseや判定に利用するJsonをsrc/test/resourcesに格納することで、readUrlというDataweave関数を使って参照することが可能になります。

格納したjsonファイルをAssert equalsで利用する際にPayloadとの差分がないはずなのにFailure判定になることがあります。

したがって、サクラエディタやVisual Studio Codeなどのエディタを使ってスペースと改行コードを修正することで解消する可能性がありますのでお試しください。

Q3. Runtime Managerへのデプロイがうまくできない

A3-1. Munitがうまく実行しない

A2-1からA2-4までの解決方法を試してみてください。

A3-2. pomファイルで設定するバージョンのアップができていない

エラーメッセージ

[An asset already exists with this version and publish lifecycle state.]
POMファイルイメージ
pomファイル画像イメージ

画像イメージの7行目に記載があるversionですが、以前上げたバージョンと同じバージョンだとデプロイが走った際にバージョン重複エラーが発生します。

バージョンアップしなければならない場合はバージョンアップをしましょう。

バージョンアップしたくない場合は以下の手順となります。

pomファイル画像

末尾に-SNAPSHOTと記載することで、同じバージョンでリリースできるようになります。

【参考】https://docs.mulesoft.com/jp/mule-runtime/4.6/using-maven-with-mule#%E6%8E%A8%E5%A5%A8%E4%BA%8B%E9%A0%85

まとめ


開発した資材をLocalにデプロイするところからRuntime Managerにデプロイするところまででつまずくポイントの解決方法をいくつか紹介いたしました。

ローコード開発ですので、新たにMulesoftを始める方も多くいらっしゃると思います。今回のブログでで少しでもMuleSoft初学者の手助けになれば幸いです。