【アップデート情報】ver.2.34(2024年11月19日実施) SPIRAL ver.2 サポートサイト

ver.2サポートサイト

HOMEお知らせ【アップデート情報】ver.2.34(2024年11月19日実施)

【アップデート情報】ver.2.34(2024年11月19日実施)

2024年10月31日

2024年11月19日実施のver.2.34アップデートに関する主な内容は以下になります。

機能追加・改善

【アプリ】【サイト】

アプリパッケージのエクスポート/インポート機能追加

サイトパッケージのエクスポート/インポート機能追加

作成したアプリやサイトをそれぞれパッケージ化し、ローカル環境へエクスポートおよびアカウントへインポートできる機能を提供します。
作成したアプリを自アカウントおよび他アカウントへ複製できるようになることで、以下のようなユースケースが実現できるようになります。
 ・自アカウントでテンプレートとなるアプリやサイトを作成し、複数のアカウントへ複製することでアプリ開発生産性を向上させたい。
 ・作成したアプリやサイトの設定情報を一時的に保存しておきたい。(レコードは含まれません)

なお、エクスポートしたパッケージファイルはSPIRAL ver.2の異なるバージョンや環境には原則インポートできません。

例)Ver.2.x.yでエクスポートしたパッケージファイルは、バージョン(「x」部分)が上がった場合、原則インポートできなくなります。

  ベータ版環境でエクスポートしたパッケージファイルは本番環境のアカウントにはインポートできません。

パッケージファイルのセキュリティについて ・生成したパッケージファイルはエクスポート/インポート時にウィルススキャンを実施し、ウイルスを含んだサイト等が含まれていないかチェックします。
・生成したパッケージファイルは暗号化され、インポート時に改ざんを検知することができます。
アプリエクスポート/インポート時の注意事項 ・以下の設定はエクスポートされません。
 -アイコン
 -メール配信、PHP実行のログ情報
 -アプリ利用者
 -アプリ管理者
・アプリパッケージファイルにメール配信設定が含まれる場合、以下の設定はインポート先へ引き継がれません。
 インポート画面で指定した内容が一律反映されます。
 -宛先が固定メールアドレスのメール設定の宛先メールアドレス
 -差出人メールアドレス
 -差出人名
レコードおよびユーザはエクスポート対象外のため、レコードIDまたはユーザIDを指定して抽出している場合、意図しない抽出条件になります。
・メール配信において、クリックログインの差し替えキーワードは対象のサイトやページが存在しない場合、{{@_url.cl._unauthorized}} に変換されてインポートされるためメール配信がエラーになります。
・スケジュールトリガのメールアクションとPHP実行アクションはステータスが無効の状態でインポートされます。
・PHPのソースコード内でハードコードされているDBIDやAPIキーはそのままインポートされるためPHP実行時にエラーになる可能性があります。
・ユーザはエクスポート対象外のため、アプリロールのフィールド権限の選択ユーザ制限設定は「制限しない」という設定でインポートされます。
・グループはエクスポート対象外のため、アプリロールに利用グループが設定されない状態でインポートされます。
・インポート依頼の履歴はアプリ一覧の上部に表示されます。履歴の保持期間は3日間です。
サイトエクスポート/インポート時の注意事項 ・以下の設定はエクスポートされません。
 -アイコン
 -reCAPTCHA設定
 -メール配信、PHP実行のログ情報
 -サイトファイル
 -サイト管理者
 -サイト認証API利用者
 -外部アクセス制御
・サイトパッケージを他アカウントへインポートするには、先んじてアプリのインポートが必要です。
・サイトパッケージファイルにメール配信設定が含まれる場合、以下の設定はインポート先へ引き継がれません。
 インポート画面で指定した内容が一律反映されます。
 -差出人メールアドレス
 -差出人名
・レコードおよびユーザはエクスポート対象外のため、レコードIDまたはユーザIDを指定して条件抽出している場合、意図しない抽出条件になります。
・レコードがエクスポート対象外のため、参照フィールドの自動登録で値タイプ:固定を指定している場合、指定したレコードが存在せず、レコード登録時にエラーになります。
フォームブロックの完了ステップ表示・認証エリアのログアウト時のリダイレクト先URLやページの外部サイトへの埋め込みを一部許可にしてURLを設定している場合、URLは https://example.com に変換されてインポートされます。
・メール配信設定において、クリックログインの差し替えキーワードは対象のサイトやページが存在しない場合、{{@_url.cl._unauthorized}} に変換されてインポートされるためメール配信がエラーになります。
・メールアクションはステータスが無効の状態でインポートされます。
・サイト内ページリンクにおいて、遷移先のページのIDが変わるため、意図しないページに遷移したり、リンク切れになることがあります。
・ページのIPアドレス制限で設定されているIPアドレスは 192.168.x.x に変換されてインポートされます。
・PHPのソースコード内でハードコードされているDB IDやAPIキーはそのままインポートされるためPHP実行時にエラーになる可能性があります。
・reCAPTCHA設定はエクスポート対象外のため、使用しているブロックではreCAPTCHAが機能しなくなります。
・PHP環境変数の値は * に変換されてインポートされます。

詳細はアプリパッケージ/サイトパッケージエクスポート・インポートをご参照ください。(2024/11/19追記)

 

【アカウント管理】

メール差出人ドメインの有効化/無効化対応

認証済みのメール差出人ドメインについて、無効化/有効化を選択できるようになります。
使用しなくなったメール差出人ドメインを無効化に設定することで、配信設定時に差出人ドメインを選択するプルダウンから表示されなくなります。
無効化に設定されたメール差出人ドメインを使用して配信を行なうことはできないため、誤配信を防止できます。

なお、無効化したメール差出人ドメインを使用したメール配信は利用ユーザ起因の配信失敗として扱います。

詳細はメール差出人ドメインをご参照ください(2024/11/19追記)

※ユーザ起因の配信失敗が発生した場合、設定不備となり次回以降も配信失敗となるため、メールアクションのステータスが「有効」から「停止中」に切り替わる仕様となっています。

ユーザ起因の配信失敗が発生した場合の対応方法については、配信失敗時のエラーコードをご参照ください。

 

【アプリ】

レコード一括登録時のエラー情報拡張

レコード一括登録において、エラー処理方式「スキップ」を選択して登録エラーになったレコードがある場合、アップロードファイル内のエラーとなった行数(ヘッダ行を除く)をダウンロードファイルで確認することができますが、加えてエラー理由も確認できるようになります。
※エラー理由が表示されるレコード数は、登録エラーとなったレコード20行分までが表示されます。
 また、1レコードで複数のエラーが存在する場合、最初のエラー箇所のみ表示されます。

 

【API】

APIリファレンス(レコード一覧を取得API)追記

レコード一覧を取得APIにおいて、検索結果の対象件数を取得するクエリパラメータ「enableTotalCount」をfalseにしてリクエストした場合、レスポンスで「prevOffset」「nextOffset」「totalCount」はnullを出力することをAPIリファレンスに追記いたします。

詳細はAPIリファレンスをご参照ください。(2024/11/19追記)

仕様変更

【アプリ】

レコード一括操作に関する仕様変更

レコード一括登録、一括更新、一括更新登録において、登録/更新を行うリストのファイル名(拡張子を含む)が128文字を超えた場合に「ファイル名が128文字を超えています」というエラーを表示させ「登録依頼」ボタンを無効化するように仕様を変更します。

 

DBへのフィールド追加に関する仕様変更

フィールド一括編集画面から既存DBへフィールド追加する際、識別名を入力必須にするよう仕様を変更します。

 

【サイト】

登録フォームブロック複製時のブロック追加画面の仕様変更

登録フォームブロック複製する際の登録フォームブロック追加(基本設定)画面において、設置認証エリアを表示するよう仕様を変更します。

 

ブロック(ソース設定)のデフォルトソースの仕様変更

・登録、更新、削除、ログイン、パスワード再登録、レコード照合フォームブロック、レコード検索ブロック、レコードリストブロック、レコードアイテムブロックの新規作成時のデフォルトソースから行末の半角スペースを削除します。

・登録、更新、削除フォームブロック、レコード検索ブロック、レコードアイテムブロックにおいて、ブロック新規作成時のデフォルトソースと、フィールドおよび引用値表示パーツ追加時のデフォルトソースのインデックスを統一するよう変更します。

デフォルトソース変更差分 ※各フィールドタイプの前後のdivタグなど、一部ソースは省略して記載しています。
※メールアドレスフィールドを例に記載しております。
※f0Xの箇所は適宜変更してください。

【変更前】

<div class="sp-form-data">
   < input type="email" class="sp-form-control" th:name="${fields['fXX'].name}" th:placeholder="${fields['fXX'].placeholder}" th:value="${inputs['fXX']}">
  <div th:if="${fields['fXX'].collation}">

【変更後】

<div class="sp-form-data">
 <input type="email" class="sp-form-control" th:name="${fields['fXX'].name}" th:placeholder="${fields['fXX'].placeholder}" th:value="${inputs['fXX']}">
 <div th:if="${fields['fXX'].collation}">

・登録フォームブロックの引用値表示パーツのクエリパラメータ引用において、参照先フィールドの値がnullだった場合、エンドユーザがページを表示させた際にnullの状態で表示されていましたが、「値なし」と表示されるよう仕様を変更します。
 この変更に伴い、一部フィールドのデフォルトソースも変更します。

 ※2.34.0までにデフォルトソースを用いてブロックを作成している場合は、nullの状態で表示されます。

デフォルトソース変更差分 ※各フィールドタイプの前後のdivタグなど、一部ソースは省略して記載しています。
※XXXXXの箇所は適宜変更してください。
テキストフィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">Example</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">Example</span>
</div>

テキストエリアフィールド
【変更前】

<div class="sp-form-data">
 <th:block th:if="${dbs[XXXXX]}" th:each="line, stat : ${dbs[XXXXX].record[X]?.lines}">
  <th:block th:text="${line}">
   Example
  </th:block>
  <br th:unless="${stat.last}">
 </th:block>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX] != null}">
  <th:block th:each="line, stat : ${dbs[XXXXX].record[X]?.lines ?: '値なし'}">
   <th:block th:text="${line}">
    Example
   </th:block>
   <br th:unless="${stat.last}">
  </th:block>
 </span>
</div>

メールアドレスフィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">spiral@example.com</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">spiral@example.com</span>
</div>

セレクトフィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]?.label}">Item</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[177233] != null} ? (${dbs[177233].record[4]?.label} ?: '値なし')">Item</span>
</div>

マルチセレクトフィールド
【変更前】

<div class="sp-form-data">
 <div class="sp-form-selection-vertical">
  <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:each="option : ${dbs[XXXXX].record[X]}" th:text="${option.label}">Item</span>
 </div>
</div>

【変更後】

<div class="sp-form-data">
 <div class="sp-form-selection-vertical" th:if="${dbs[XXXXX] != null}">
  <span class="sp-form-embedded" th:if="${dbs[XXXXX] != null}" th:each="option : ${dbs[XXXXX].record[5]}" th:text="${option.label}">Item</span>
  <span class="sp-form-embedded" th:unless="${dbs[XXXXX].record[X] != null}" th:text="'値なし'"> Item </span>
 </div>
</div>

整数フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">12345</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">12345</span>
</div>

数値フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">3.1415</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">3.1415</span>
</div>

電話番号フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">+81 03-1234-5678</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">+81 03-1234-5678</span>
</div>

日付フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">2000/01/01</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">2000/01/01</span>
</div>

月日フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">01/01</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">01/01</span>
</div>

時刻フィールド
【変更前】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:if="${dbs[XXXXX]}" th:text="${dbs[XXXXX].record[X]}">12:00:00</span>
</div>

【変更後】

<div class="sp-form-data">
 <span class="sp-form-embedded" th:text="${dbs[XXXXX] != null} ? (${dbs[XXXXX].record[X]} ?: '値なし')">12:00:00</span>
</div>

ファイルフィールド
【変更前】

<div class="sp-form-data">
 <div th:if="${dbs[XXXXX]}" th:each="file, stat: ${dbs[XXXXX].record[X]}" class="sp-form-group sp-file-info sp-auth-file-info">
  <div class="sp-text-truncate">
   <a class="sp-form-file-bold-link"
    th:title="|${file.fileName} (${file.fileSize})|" th:text="${file.fileName}" th:href="${file.fileUrl}">
   </a>
   <span class="sp-form-file-size-label sp-ml-2" th:text="|(${file.fileSize})|"> Example </span>
  </div>
 </div>
</div>

【変更後】

<div class="sp-form-data" th:if="${dbs[XXXXX] != null}">
 <div th:if="${dbs[XXXXX] != null}" th:each="file, stat: ${dbs[XXXXX].record[X]}" class="sp-form-group sp-file-info sp-auth-file-info">
  <div class="sp-text-truncate">
   <a class="sp-form-file-bold-link"
    th:title="|${file.fileName} (${file.fileSize})|" th:text="${file.fileName}" th:href="${file.fileUrl}">
   </a>
   <span class="sp-form-file-size-label sp-ml-2" th:text="|(${file.fileSize})|"> Example </span>
  </div>
 </div>
 <span class="sp-form-embedded" th:unless="${dbs[XXXXX].record[12] != null}" th:text="'値なし'"> Example </span>
</div>

 

【アカウント管理】

IPアドレスグループ削除に関する仕様変更

セキュリティのIPアドレス制限で使用されているIPアドレスグループを削除できないように仕様を変更いたします。
 なお、IPアドレスグループを削除する等して、セキュリティのIPアドレス制限で「一部許可」または「個別設定」が選択されていてIPアドレスグループやIPアドレスが「なし」になっている場合、操作画面、API共通、APIエージェントへアクセスができなくなります。

 

【API】

DBを作成API、DBを変更APIのデフォルト値の仕様変更

DBを作成API、DBを変更APIのパスワードフィールドにおいて、使用する文字の種類の数を制限する「minCharTypes」が指定されずリクエストされた場合、使用する文字の種類の数が「1」で設定されるよう仕様を変更します。

 

不具合修正

アプリ利用

・レコード一括登録、レコード一括更新、レコード一括更新登録において、登録するレコードの先頭に「"」が付与された登録エラーのエラーメッセージが表示されない不具合を修正します。
 また、登録するレコードの先頭に「"」がついていることでエラーになった場合、エラーメッセージ項目にインフォメーションマークを表示させエラー原因がわかるように修正します。

 

アプリ管理

・1つのDBにデフォルト値(自動生成値及びレコード作成者)を6つ以上設定しようとした場合に表示されるエラーメッセージの内容を修正いたします。

・1DBに自動生成値が設定されているフィールドを6つ以上設定しようとした場合、フィールド詳細設定画面保存時にエラーが表示されない不具合を修正いたします。

・DBのフィールド一括編集において、デフォルト値を変更し設定を保存する際に表示される確認モーダルが、一部ブラウザでは正常に表示されない不具合を修正いたします。

・フィールド削除において、レコードリストのフィルタに指定した参照先DBのフィールドを削除できてしまう不具合を修正します。

・フィールド削除する際、DBトリガのレコードアクション(登録トリガの他DB更新)において、アクション元DBのフィールドマッピングの格納値に選択されているフィールドIDと一致する場合、フィールドを削除できない不具合を修正いたします。

・レコード照合フォームブロックの照合フィールドに指定したフィールドについて、レコード照合フォームブロックを削除しても、DBから削除できない不具合を修正いたします

・DBトリガのメールアクションにおいて、既存のメールアクションを編集する際、クリックログインURLを挿入できない場合がある不具合を修正いたします。
・スケジュールトリガおよびDBトリガのPHP実行アクションの作成/編集/詳細画面、PHPモジュール作成/編集/詳細画面において、インフォメーションマークの文言に誤りがある不具合を修正いたします。

 

サイト管理

ページのソース設定において、「${cp.XXXX}」の前に引用符がある状態で設定を保存しようとすると、「参照しているプロパティがありません」というエラーが表示され保存ができない不具合を修正します。

・登録フォームブロック、更新フォームブロック、削除フォームブロックにて、参照フィールド(複数レコード)を引用値表示パーツ(認証レコード値)でページ上に表示させている場合、エンドユーザがページを表示した際、レコードIDとその他のフィールドとで表示されるレコードの順番が異なる不具合を修正します。

・登録、更新フォームブロックにおいて、DBに設定された以下のフィールドの入力制限の条件を満たさない値を、自動登録の値として設定保存できる不具合を修正します。
 -数値フィールドの桁数制限の小数部桁数
 -参照フィールド(複数レコード)の最小参照数

・登録フォームブロックおよび更新フォームブロックの自動登録において、ラベルIDが0または301-999のセレクトフィールド・マルチセレクトフィールドの値を固定値に設定しようとするとエラーとなり保存できない不具合を修正いたします。

・登録フォームブロック、更新フォームブロックのフィールド設定のエラーメッセージにおいて、128文字を超える値を入力しようとした際に、本来であれば128文字までしか入力できないのに、「512文字以内で入力してください」」とエラーがでてしまう不具合を修正します。

・登録、更新、削除、ログイン、パスワード再登録、レコード照合フォームブロック、レコード検索ブロック、フリーコンテンツブロックにテキストリンクを設定した場合、プレビュー画面でリンク先にアクセスできる不具合を修正します。

・登録フォームブロックの入力ステップにおいて、重複した入力フィールドを追加し保存ボタンを押した際に表示されるエラーモーダルにステップ名、エラーメッセージ、重複したフィールドが表示されない不具合を修正します。
・登録フォームブロックの入力ステップにおいて、全ての入力フィールドを削除し保存ボタンを押した際に表示されるエラーモーダルにステップ名が表示されない不具合を修正します。

・登録フォームブロックおよび削除フォームブロックの同意チェックにおいて、チェックボックスと同意のための確認文言の高さがが合っていない不具合を修正いたします。

・登録フォームブロック(ソース設定)において、参照先DBのレコード公開範囲設定のエリア認証時公開範囲に登録フォームブロックの設置認証エリアと異なる認証エリアを選択している場合、登録フォームブロックに引用値表示パーツのクエリパラメータ引用のソースを含めた状態でブロックの設定を保存する際に表示されるエラーメッセージに誤りがある不具合を修正します。

・ページのPHPタブ、PHPモジュールの作成/詳細画面において、インフォメーションマークの文言に誤りがある不具合を修正いたします。

・設置認証エリアが設定されている登録フォームブロック(ビジュアル設定)を複製した場合、複製先の登録フォームブロックの自動登録が追加できない不具合を修正します。

・レコードリストブロックにおいて、フィルタにアクセス日を設定している場合、レコードリストブロックを編集し保存しようとしてもエラーが表示され保存できない場合がある不具合を修正いたします。

・レコードリストブロックのフィールド条件抽出 (簡易) において、参照先DBのフィールドを指定しすると、レコードリストの作成・変更ができない不具合を修正いたします。

・本番環境のレコードリストブロックのリストパーツ>カラム詳細設定のリンク設定において、リンク設定したページをテスト環境から削除した場合、本番環境にはリリースしていないのにリンク設定したページが「削除済み」と表示されてしまう不具合を修正します。

・認証エリア削除時に表示される確認モーダルにおいて、認証エリア削除に伴い登録フォームとフリーコンテンツが削除される旨が明記されていない不具合を修正します。

・レコード公開範囲のエリア認証時公開範囲において、リリースを一度も行っていないサイトである場合、リリースしていない認証エリアが「リリース済み」と表示されてしまう不具合を修正します。
・2つのサイトに同じ設定内容のレコード公開範囲を設定している場合、一方のレコード公開範囲を除外しようとしても、もう一方のレコード公開範囲のブロックとの依存関係を参照してしまい除外できない場合がある不具合を修正いたします。

 

メール

一斉配信およびスケジュールトリガのメールアクションにおいて、宛先メールアドレスに参照先DBのメールアドレスを指定し、参照先レコードの値が指定した値と一致する条件抽出を設定するとメール配信が失敗する不具合を修正します。

 

API

APIリファレンスのレコード一覧を取得APIのクエリパラメータにおいて、フィールドを横断して検索する際の検索文字列を指定する「query」、「queryFields」が記載されていない不具合を修正します。

クエリパラメータ詳細 query
string
Example: query=AAA
フィールドを横断して検索する際の検索文字列を指定する
検索は部分一致検索となる
128文字まで指定可能で、129文字以上指定するとエラーとなる
queryFieldsで検索対象のフィールドを指定する
queryFieldsを指定しない場合、エラーとなる

 

queryFields
Array of strings
Example: queryFields="1,2,5,100"
フィールドを横断して文字列検索する際の検索対象のフィールドIDを指定する
テキスト型、テキストエリア型、メールアドレス型が指定可能
複数フィールドを指定する場合はカンマ区切りで指定し、OR検索となる
参照先のフィールドは指定不可
queryで検索対象の文字列を指定する
queryを指定しない場合、エラーとなる