LimeSurvey 7 フィールド名のリファクタリング
From LimeSurvey Manual
フィールド名と回答テーブルのリファクタリング - LimeSurvey 7
LimeSurvey 7 では、回答テーブルとフィールド名の生成方法が大幅に整理されました。 このアップデートにより、長年使われてきた内部の命名規則が刷新され、プラグイン、連携機能、今後の開発にとって、より予測しやすく堅牢な基盤が整います。
このページでは、回答テーブルとフィールド名のリファクタリングについて説明します。
これは構造的な変更であるため、従来の命名に依存しているカスタム開発では更新が必要になる場合があります。 このページでは、何が変わるのか、安全にテストする方法、アップグレードの準備方法について説明します。
1. 変更点
1.1 新しいテーブル名
LimeSurvey では、回答関連のテーブルに一貫した命名規則を使用するようになりました。
| 旧テーブル名 | 新テーブル名 |
|---|---|
old_survey_<sid>_<timestamp>
|
old_responses_<sid>_<timestamp>
|
old_survey_<sid>_timings_<timestamp>
|
old_timings_<sid>_<timestamp>
|
survey_<sid>
|
responses_<sid>
|
survey_<sid>_timings
|
timings_<sid>
|
これらのテーブルを参照している SQL クエリ、連携機能、プラグインは、調整が必要になる場合があります。
1.2 新しいフィールド名の構造
フィールド名は、予測しやすく一貫した形式になりました。例:
Q<questionId>- ルート質問Q<questionId>_S<subquestionId>- サブ質問Q<questionId>_C<suffix>- コメントなどのフィールド- 順位付けフィールド:
Q<questionId>_S<subquestionId>- 順位付けの項目はサブ質問になりました(1.3 を参照) - タイミングフィールド: 状況に応じて質問レベルまたはグループレベル
これにより、従来の sidXgidXqid に基づく命名は置き換えられます。
1.3 順位付け質問
順位付け質問は、他のサブ質問ベースの質問タイプと同様に動作するようになりました。
- 項目はサブ質問です。 順位を付ける項目は、選択肢ではなくサブ質問(タイプ
R)として保存されます。 - フィールド名 には、標準のサブ質問形式
Q<questionId>_S<subquestionId>を使用します(順位付けされる項目ごとに1つ)。 - 回答 は、単一の JSON 列
Q<questionId>に、項目コードの順序付き配列として保存されます。位置が順位を表します。例:["3", "1", "2"]
2. なぜ重要なのか
この整理は、長年にわたり正式に定義され使用されてきた命名パターンを見直し、今後の開発の土台となる、一貫性のある堅牢な構造にするものです。
このような構造的な変更は、簡単ではないことがほとんどです。多くのプラグインや連携機能が依存しているシステムの部分に影響するため、複雑さから先送りされがちです。しかし、一貫性と予測しやすさを保つことは、長期的な安定性のために重要です。
今回この変更に取り組むことで、表面上はほとんど見えない変更ではあっても、LimeSurvey はよりすっきりとして拡張しやすくなります。
3. 新しいフィールド名をプレビューする方法
既存のフィールド名が LS7 の新しい構造にどのように対応付けられるかを確認するには、次の手順を実行します。
- データベースのバックアップを作成します。変更は元に戻せないため、問題が発生した場合に備えて、変更前のデータベースがあると復元に役立ちます
- develop-major ブランチをチェックアウトします:
git checkout develop-major
または、このブランチのプロジェクトを https://github.com/LimeSurvey/LimeSurvey/tree/develop-major から直接クローン/ダウンロードします - 管理ページを読み込んで、変更スクリプトを実行します
- 変更スクリプトの実行中にエラーが発生した場合は報告してください
- 新しいテーブル名とフィールド名を確認します
- プラグインやテーマをテストし、テーブル名やフィールド名に関連するエラーを修正します
旧フィールド名を新しいフィールド名に変換するために使用される関数は次のとおりです。
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
パラメータ
- $tableName - 元のテーブル名
- $fieldName - 元のフィールド名
- $questions - ルート質問とそのサブ質問
- $sid - アンケートID
- $gid - グループID
- $cd - 条件設定のロジックを適用するかどうか
結果
この関数は、その回答フィールドに対応する LS7 の新しいフィールド名を返します。
4. 変更を安全にテストする方法
本番システムをアップグレードする前に、専用の環境で LS7 をテストすることを強くお勧めします。
4.1 別の環境に LS7 をインストールする
最新の LS7 を次の場所からダウンロードします。
https://community.limesurvey.org
現在の環境とは別にインストールしてください。
4.2 既存の資産をインポートする
以下を使用してテストします。
- アンケート
- アンケートテーマ
- 管理画面テーマ
- 質問テーマ
- プラグイン
- カスタム JavaScript
- 独自に構築したカスタム連携
新しいテーブル名とフィールド名の命名規則で、すべてが期待どおりに動作することを確認してください。 旧来の命名に依存しているコードは更新してください。
4.3 移行を実行するには
テスト環境で移行ロジックをプレビューするには、次の手順を実行します。
- データベースをバックアップします。
- LS7 をインストールします。
- 任意の管理ページを読み込み、移行スクリプトを実行します。
- テーブル名とフィールド名の変更内容を確認します。
- アプリケーションをテストします。
- 必要に応じて、カスタムコードを更新します。
4.4 問題を報告する
早い段階でのテストにご協力いただきありがとうございます。 コア部分に不審な点を見つけた場合は、できるだけ早く修正できるよう報告してください。
5. 更新が必要になる可能性があるもの
次のものは調整が必要になる場合があります。
- 旧フィールド名またはテーブル名を参照しているプラグイン
- 独自に構築したカスタム連携
- フィールド名ベースのセレクターを使用している JavaScript
- 回答関連の識別子を扱うカスタムテーマ
- 従来の命名規則に依存している連携
- アンケート、テーマ、質問テーマなど、旧バージョンのエクスポートデータのインポート
これは想定されたことであり、アップグレード作業の一部です。
6. 概要
- LS7 では、回答テーブルとフィールド名の命名が全面的に整理されます
- これは LS7 における主要なバックエンドの構造変更です
- 別環境でのテストを強く推奨します
getFieldName()を使うと、新しい命名をプレビューできます- 必要に応じて、カスタムコードを更新してください
- 最終リリースの安定化のため、問題は早めに報告してください