移行ガイド
v30.0 での変更点
以下は、ライブラリのバージョンに加えられた互換性のない変更のリストと、変更に対応するためにコードを更新する方法です。
これは、v30.x の新着情報およびv30.0 のリリースノートで発表された互換性のない変更を対象としています。
CMake サブモジュールからフェッチされた依存関係への置き換え
以前は、デフォルトの CMake の動作として Git サブモジュールを使用して固定された依存関係を取得していました。-Dprotobuf_ABSL_PROVIDER=package
を指定すると、CMake の設定が Abseil のローカルインストールを検索するように切り替わりました(jsoncpp と gtest にも同様のオプションがあります)。これらのオプションは廃止され、デフォルトの動作は、まずすべての依存関係のインストールを検索し、必要に応じて GitHub から固定バージョンをフェッチするようにフォールバックします。
フォールバックフェッチを防止するには(以前の package
の動作と同様)、CMake を次のように呼び出します。
cmake . -Dprotobuf_LOCAL_DEPENDENCIES_ONLY=ON
依存関係を固定バージョンから_常に_フェッチするには(以前のデフォルトの動作と同様)、CMake を次のように呼び出します。
cmake . -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON
string_view 戻り値の型
以下の記述子 API の戻り値の型が absl::string_view
になり、メモリを節約できるようになりました。
MessageLite::GetTypeName
UnknownField::length_delimited
FieldDescriptor::full_name
など、記述子 API の名前関数
今後の互換性のないリリースでは、さらに多くの API が absl::string_view
に移行される予定です。
ほとんどの場合、安全な場合は型を absl::string_view
を使用するように更新するか、必要な場合は明示的に元の型にコピーするようにしてください。この型が関数で返される場合は、呼び出し元も更新する必要がある場合があります。
影響を受ける API メソッドによって返される文字列が次のように使用されている場合
型 | 移行 |
---|---|
| 既存の動作を維持するために、明示的に または、よりパフォーマンスの高い |
|
実行不可能な場合(多数の依存関係のためなど)、 |
| ヌル許容の場合は、 そうでない場合は、
|
一般的なコンテナやその他の API の場合、absl::string_view
と互換性のあるバリアントに移行できる場合があります。以下に一般的な例をいくつか示します。
カテゴリ | 移行前 | 移行 |
---|---|---|
std::vector<std::string> への挿入 |
|
|
マップまたはセットへの挿入 |
|
|
マップまたはセットのルックアップ |
| Abseil コンテナに移行します。 または、透過的な比較演算子を定義します。
https://abseil.io/tips/144 を参照してください。 |
文字列連結 |
|
これらはパフォーマンス上の理由からいずれにしても推奨されます。https://abseil.io/tips/3 を参照してください。 |
absl::string_view
の使用に関する一般的なヒントについては、https://abseil.io/tips/1 も参照してください。
MSVC + Bazel のポイズニング
Windows の Bazel ユーザーは、この例のように、プロジェクトに以下を追加して clang-cl を使用するように切り替える必要があります。
.bazelrc
common --enable_platform_specific_config build:windows
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl
--extra_execution_platforms=//:x64_windows-clang-cl
MODULE.bazel
bazel_dep(name = "platforms", version = "0.0.10")
bazel_dep(name = "rules_cc", version = "0.0.17")
# For clang-cl configuration
cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
use_repo(cc_configure, "local_config_cc")
WORKSPACE
load("//:protobuf_deps.bzl", "PROTOBUF_MAVEN_ARTIFACTS", "protobuf_deps")
protobuf_deps()
load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies", "rules_cc_toolchains")
rules_cc_dependencies()
rules_cc_toolchains()
BUILD
Bazel 8 のみとの互換性が必要なユーザー向け。
platform(
name = "x64_windows-clang-cl",
constraint_values = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
"@bazel_tools//tools/cpp:clang-cl",
],
)
Bazel 7 および 8 との互換性が必要なユーザー向け。
platform(
name = "x64_windows-clang-cl",
constraint_values = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
# See https://github.com/bazelbuild/rules_cc/issues/330.
"@rules_cc//cc/private/toolchain:clang-cl",
],
)
ユーザーは、次の互換性のないリリースまで、オプトアウトフラグ --define=protobuf_allow_msvc=true
を設定することで、一時的にエラーを抑制することもできます。
あるいは、MSVC を使い続けたいユーザーは、CMake に切り替えることもできます。Visual Studio を使用するか、CMake コマンドラインに MSVC ジェネレーターを指定することで実行できます。例:
cmake -G "Visual Studio 17 2022" -A Win64 .
FieldDescriptor オプションから ctype を削除
FieldDescriptor
オプションから ctype
を公開するのをやめました。代わりに、v28 リリースで追加された FieldDescriptor::cpp_string_type()
API を使用できます。
機密フィールドを削除するようにデバッグ API を変更
Protobuf C++ デバッグ API(Protobuf AbslStringify、proto2::ShortFormat
、proto2::Utf8Format
、Message::DebugString
、Message::ShortDebugString
、Message::Utf8DebugString
を含む)は、debug_redact
で注釈付けされた機密フィールドを削除するように変更されました。これらの API の出力にはプロセスごとのランダムなプレフィックスが含まれており、Protobuf TextFormat パーサーによって解析できなくなりました。ユーザーは、人間が読める出力が必要なほとんどの場合(ログ記録など)には新しい削除されたデバッグ形式を採用するか、シリアル化およびデシリアル化にはバイナリ形式に切り替えることを検討する必要があります。古いデシリアル化可能な形式が必要なユーザーは TextFormat.printer().printToString(proto)
を使用できますが、これは機密フィールドを削除しないため、注意して使用する必要があります。
この件については、2024 年 12 月 4 日にリリースされたニュース記事で詳しく読むことができます。
非推奨 API の削除
少なくとも 1 つのマイナーまたはメジャーリリースで非推奨(ABSL_DEPRECATED
など)とマークされ、廃止または置き換えられた以下の公開ランタイム API を削除しました。
API: Arena::CreateMessage
代替: Arena::Create
API: Arena::GetArena
代替: value->GetArena()
API: RepeatedPtrField::ClearedCount
代替: Arenaに移行してください(移行ガイド)。
API: JsonOptions
代替: JsonPrintOptions
C++14 のサポート終了
このリリースでは、Foundational C++ Support matrix に従って、C++ 14 の最小サポートバージョンを廃止し、C++ 17 に引き上げました。
ユーザーは C++17 にアップグレードする必要があります。
Arena 上の Oneof メッセージをクリアした後の ASAN ポイズニングの導入
この変更により、Arena を使用する C++ Protobuf に影響する強化チェックが追加されました。Protobuf Arena に割り当てられた Oneof メッセージは、デバッグモードではクリアされ、ASAN モードではポイズニングされます。クリアした後、メモリ領域を使用しようとすると、use-after-free エラーとして ASAN でクラッシュが発生します。
この実装には C++17 が必要です。
C++ CocoaPods リリースの終了
v4.x.x 以降機能していなかった C++ CocoaPods リリースは廃止されました。C++ ユーザーは、代わりに当社の GitHub リリースを直接使用する必要があります。
Pythonでの変更
Python のメジャーバージョンが 5.29.x から 6.30.x に上がりました。
Python 3.8 のサポート終了
最小サポート Python バージョンは 3.9 です。ユーザーはアップグレードする必要があります。
bazel/system_python.bzl エイリアスの削除
従来の bazel/system_python.bzl
エイリアスを削除しました。
system_python.bzl
への直接参照を削除し、代わりに protobuf_deps.bzl
を使用してください。直接参照が必要な場合は、v5.27.0 で移動された python/dist/system_python.bzl
を使用してください。
フィールドセッターの検証に関する変更
Python と upb のフィールドセッターは、エディション 2023 のクローズド列挙型を検証するようになりました。無効な値で更新されたクローズド列挙型フィールドはエラーを生成します。
非推奨の py_proto_library マクロの削除
protobuf.bzl
内の非推奨の内部 py_proto_library
Bazel マクロが削除されました。これは、v29.x で protobuf の bazel/py_proto_library
に移動された公式の py_proto_library
に置き換えられました。この実装は、v29.x より前は rules_python
で利用可能でした。
非推奨APIの削除
少なくとも 1 つのマイナーまたはメジャーリリースで非推奨とマークされていた以下の公開ランタイム API を削除しました。
リフレクションメソッド
API: reflection.ParseMessage
, reflection.MakeClass
代替: message_factory.GetMessageClass()
RPCサービスインターフェース
API: service.RpcException
, service.Service
, service.RpcController
, および service.RpcChannel
代替: バージョン2.3.0以降、RPC実装はこれらをベースに構築しようとせず、代わりに特定のRPC実装に固有のコードを生成するコードジェネレータプラグインを提供すべきです。
MessageFactoryおよびSymbolDatabaseメソッド
API: MessageFactory.GetPrototype
, MessageFactory.CreatePrototype
, MessageFactory.GetMessages
, SymbolDatabase.GetPrototype
, SymbolDatabase.CreatePrototype
, および SymbolDatabase.GetMessages
代替: message_factory.GetMessageClass()
および message_factory.GetMessageClassesForFiles()
。
GetDebugString
API: GetDebugString
代替
代替はありません。これはもはやリリースされていないPython C++にのみ存在します。Pure PythonやUPBではサポートされていません。
Python のマップフィールドに対する setdefault の動作変更
setdefault
は ScalarMap
の dict
と似ていますが、キーと値の両方を設定する必要がある点が異なります。MessageMaps
の setdefault
は拒否されます。
Python のネストされたメッセージクラスの __qualname__ が外側のメッセージ名を含むように
Python ネストされたメッセージクラス __qualname__
は、外側のメッセージ名を含むようになりました。以前は、__qualname__
はネストされたメッセージの __name__
と同じ結果で、外側のメッセージ名は含まれていませんでした。
例:
message Foo {
message Bar {
bool bool_field = 1;
}
}
nested = test_pb2.Foo.Bar()
self.assertEqual('Bar', nested.__class__.__name__)
self.assertEqual('Foo.Bar', nested.__class__.__qualname__) # It was 'Bar' before
Objective-Cでの変更
これは Objective-C の最初の互換性のないリリースです.
Objective-C はメジャーバージョンを 3.x.x から 4.30.x に引き上げました。
未知フィールド処理 API の見直しと既存 API のほとんどの非推奨化
GPBUnknownFieldSet
を非推奨とし、GPBUnknownFields
に置き換えました。新しい型は、元の入力または API 呼び出しからの未知フィールドの順序を保持し、メッセージが書き出される際に順序に関する意味論的意味が維持されるようにします。
これに伴い、GPBUnknownField
型も API の変更があり、既存の API のほとんどが非推奨となり、新しい API が追加されました。
非推奨のプロパティAPI
varintList
fixed32List
fixed64List
lengthDelimitedList
groupList
非推奨の変更API
addVarint
addFixed32
addFixed64
addLengthDelimited
addGroup
非推奨のイニシャライザ initWithNumber:
。
新しいプロパティAPI
type
varint
fixed32
fixed64
lengthDelimited
group
この型は、特定のフィールド番号のすべての値を_グループ化_するのではなく、その値に単一のフィールド番号をモデル化します。新しいフィールドを作成するための API は、GPBUnknownFields
クラスの add*
API です。
また、-[GPBMessage unknownFields]
も非推奨としました。代わりに、メッセージの未知フィールドを抽出および更新するための新しい API があります。
非推奨 API の削除
少なくとも 1 つのマイナーまたはメジャーリリースで非推奨とマークされていた以下の公開ランタイム API を削除しました。
GPBFileDescriptor
API: -[GPBFileDescriptor
syntax]
代替: 廃止されました。
GPBMessage mergeFrom:extensionRegistry
API: -[GPBMessage mergeFrom:extensionRegistry:
]
代替: -[GPBMessage mergeFrom:extensionRegistry:error:
]
GPBDuration timeIntervalSince1970
API: -[GPBDuration timeIntervalSince1970
]
代替: -[GPBDuration timeInterval
]
GPBTextFormatForUnknownFieldSet
API: GPBTextFormatForUnknownFieldSet()
代替: 廃止 - 未知フィールドを含む GPBTextFormatForMessage()
を使用してください。
GPBUnknownFieldSet
API: GPBUnknownFieldSet
代替: GPBUnknownFields
GPBMessage unknownFields
API: GPBMessage unknownFields
プロパティ
代替: -[GPBUnknownFields initFromMessage:
], -[GPBMessage mergeUnknownFields:extensionRegistry:error:
], および -[GPBMessage clearUnknownFields
]
古い gencode の非推奨ランタイム API の削除
このリリースでは、3.22.x リリース以前の Objective-C gencode をサポートしていた非推奨のランタイムメソッドが削除されました。また、古い生成されたコードが起動すると、ライブラリはランタイムでログメッセージを発行します。
API: +[GPBFileDescriptor allocDescriptorForClass:file:fields:fieldCount:storageSize:flags:]
代替: ライブラリの最新バージョンで再生成してください。
API: +[GPBFileDescriptor allocDescriptorForClass:rootClass:file:fields:fieldCount:storageSize:flags:]
代替: ライブラリの最新バージョンで再生成してください。
API: +[GPBEnumDescriptor allocDescriptorForName:valueNames:values:count:enumVerifier:]
代替: ライブラリの最新バージョンで再生成してください。
代替: ライブラリの最新バージョンで再生成してください。
API: -[GPBExtensionDescriptor initWithExtensionDescription:]
代替: ライブラリの最新バージョンで再生成してください。
ポイズンピルの警告
毒薬(poison pills)を更新し、新しいローリングアップグレードポリシーの下で機能するものの、_次の_メジャーバージョンアップで互換性がなくなる古い gencode と新しいランタイムの組み合わせについて警告を発するようにしました。たとえば、Python 4.x.x gencode は 5.x.x ランタイムに対して機能するはずですが、6.x.x ランタイムに対しては今後の互換性破壊について警告を発します。
C#とRubyにおけるUTF-8強制の変更
UTF-8 エンフォースメントを言語間で一貫させるための修正を加えました。文字列フィールドに不正な非 UTF-8 データを持つユーザーは、UTF-8 エンフォースメントエラーがより早期に表面化する可能性があります。
JSON 解析における Ruby と PHP のエラー
JSON 仕様に従い、数値フィールド内の文字列の JSON 解析における非適合性を修正しました。
この修正はメジャーバージョンアップを伴いませんが、Ruby と PHP は数値フィールド内の非数値文字列(""
、"12abc"
、"abc"
など)に対してエラーを発生させるようになりました。v29.x には、これらのエラーケースに対する警告が含まれています。
v22.0 でのコンパイラの変更
JSON フィールド名の競合
JSON マッピングに関するフィールド名の競合の処理方法を微妙に変更しました。proto3 では、制限を部分的に緩和し、フィールド名が大文字と小文字を区別する JSON マッピング(元の名前のキャメルケース)を生成する場合にのみエラーを発生させます。また、json_name
オプションもチェックし、大文字と小文字を区別する競合に対してエラーを発生させるようになりました。proto2 では、制限を少し厳しくし、2 つの json_name
指定が競合する場合はエラーを発生させます。暗黙的な JSON マッピング(キャメルケース)に競合がある場合は、proto2 で警告を発生させます。
レガシーな動作を復元するためのメッセージ/enum オプションを一時的に提供しました。競合するフィールドの名前変更をすぐに実行できない場合は、特定のメッセージ/enum に deprecated_legacy_json_field_conflicts
オプションを設定してください。このオプションは今後のリリースで削除されますが、移行のための時間を稼ぐことができます。
v22.0 での C++ API の変更
4.22.0 には、8月に発表されたC++ ランタイムと protoc の互換性のない変更が含まれています。
Autotools の停止
変更のソース: PR #10132
v22.0 では、protobuf コンパイラと C++ ランタイムからすべての Autotools サポートを削除しました。これらのいずれかをビルドするために Autotools を使用している場合は、CMake または Bazel に移行する必要があります。CMake で protobuf をセットアップするための専用の手順がいくつかあります。
Abseil 依存関係
変更のソース: PR #10416
v22.0 では、Abseil に明示的に依存するようになりました。これにより、以前は Abseil になった古い内部コードから分岐したスタブのほとんどを削除できました。いくつかの微妙な動作変更がありますが、ほとんどのユーザーには透過的であるはずです。注目すべき変更点は次のとおりです。
string_view -
absl::string_view
は、多くの API でconst std::string&
に置き換えられました。これは入力引数で最も一般的に使用され、ユーザーには目立った変更はないはずです。いくつかのケース(仮想メソッド引数や戻り値の型など)では、新しいシグネチャを使用するために明示的な変更が必要になる場合があります。tables - STL のセット/マップの代わりに、Abseil の
flat_hash_map
、flat_hash_set
、btree_map
、btree_set
を使用するようになりました。これらはより効率的で、異種ルックアップを可能にします。これはほとんどのユーザーには見えないはずですが、テーブルの順序に関連する微妙な動作変更を引き起こす可能性があります。logging - Abseil のロギングライブラリは、古いロギングコードと非常によく似ており、わずかに綴りが異なるだけです(例:
GOOGLE_CHECK
の代わりにABSL_CHECK
)。最大のGは、例外をサポートせず、FATAL
アサーションが失敗すると常にクラッシュするようになったことです。(以前は、例外に切り替えるためのPROTOBUF_USE_EXCEPTIONS
フラグがありました。)これらは深刻な問題が発生した場合にのみ発生するため、無条件のクラッシュが適切な応答であると考えています。ロギング変更のソース: PR #11623
ビルド依存関係 - 新しいビルド依存関係は、常に下流のユーザーに互換性の問題を引き起こす可能性があります。ビルドには Abseil LTS 20230125 以降が必要です。
Bazel ビルドの場合、
WORKSPACE
からprotobuf_deps
が実行されると、Abseil は自動的にダウンロードされ、固定された LTS リリースでビルドされます。これは透過的であるはずですが、古いバージョンの Abseil に依存している場合は、依存関係をアップグレードする必要があります。CMake ビルドの場合、まずトップレベルの CMake 設定によって取り込まれた既存の Abseil インストールを検索します(手順を参照)。それ以外の場合、
protobuf_ABSL_PROVIDER
がmodule
(デフォルト)に設定されている場合は、Git サブモジュールから Abseil をビルドしてリンクしようとします。protobuf_ABSL_PROVIDER
がpackage
に設定されている場合は、事前にインストールされた Abseil のシステムバージョンを検索します。
GetCurrentTime メソッドの変更
Windows では、GetCurrentTime()
はシステムが提供するマクロの名前です。v22.x より前では、Protobuf は GetCurrentTime()
のマクロ定義を誤って削除していました。そのため、Windows 開発者は <protobuf/util/time_util.h>
をインクルードした後、このマクロを使用できませんでした。v22.x 以降、Protobuf はマクロ定義を保持します。これにより、以前の動作に依存している顧客コード(たとえば、google::protobuf::util::TimeUtil::GetCurrentTime()
式を使用している場合など)が壊れる可能性があります。
アプリを新しい動作に移行するには、コードを次のいずれかに変更してください。
GetCurrent
マクロが定義されている場合、GetCurrentTime
マクロを明示的に未定義にする(google::protobuf::util::TimeUtil::GetCurrentTime)()
または同様の式を使用してマクロ展開を防止する
例: マクロの未定義化
Windows からマクロを使用しない場合は、このアプローチを使用してください。
前
#include <google/protobuf/util/time_util.h>
void F() {
auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}
後
#include <google/protobuf/util/time_util.h>
#ifdef GetCurrentTime
#undef GetCurrentTime
#endif
void F() {
auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}
例2:マクロ展開の防止
前
#include <google/protobuf/util/time_util.h>
void F() {
auto time = google::protobuf::util::TimeUtil::GetCurrentTime();
}
後
#include <google/protobuf/util/time_util.h>
void F() {
auto time = (google::protobuf::util::TimeUtil::GetCurrentTime)();
}
C++20 サポート
変更のソース: PR #10796
C++20 をサポートするため、C++ で生成される Protobuf コードで新しい キーワードを予約しました。他の予約済みキーワードと同様に、フィールド、enum、またはメッセージにこれらを使用した場合、有効な C++ にするためにアンダースコアの接尾辞を追加します。たとえば、concept
フィールドは concept_()
ゲッターを生成します。これらのキーワードを使用する既存のプロトがあるシナリオでは、それらを参照する C++ コードを更新して、適切なアンダースコアを追加する必要があります。
Final クラス
変更のソース: PR #11604
Protobuf ライブラリで行われている仮定を強化するための大規模な取り組みの一環として、継承されることを意図していなかった一部のクラスを final
とマークしました。これらのクラスから継承する既知のユースケースはなく、そうすると問題が発生する可能性があります。コードがこれらのクラスから継承している場合、回避策はありませんが、使用している継承に正当な理由があると思われる場合は、課題をオープンできます。
コンテナの静的アサーション
変更のソース: PR #11550
Protobuf ライブラリで行われている仮定を強化するための大規模な取り組みの一環として、Map
、RepeatedField
、および RepeatedPtrField
コンテナに静的アサーションを追加しました。これにより、ドキュメントに記載されているように、これらのコンテナが期待される型でのみ使用されていることが保証されます。これらの静的アサーションに遭遇した場合、コードを Abseil または STL コンテナを使用するように移行する必要があります。std::vector
は RepeatedField コンテナの優れたドロップイン代替品であり、std::unordered_map
または absl::flat_hash_map
は Map
の代替品です(前者は同様のポインタ安定性を提供し、後者はより効率的です)。
クリアされた要素の非推奨化
「クリアされたフィールド」に関する RepeatedPtrField
API は非推奨となり、後の互換性のないリリースで完全に削除されます。これは元々、クリアされた要素を再利用するための最適化として追加されましたが、うまくいきませんでした。この API を使用している場合は、より良いメモリ再利用のためにアリーナへの移行を検討する必要があります。
UnsafeArena の非推奨化
変更のソース: PR #10325
アリーナセーフではない API を削除する大規模な取り組みの一環として、RepeatedField::UnsafeArenaSwap
を非表示にしました。これはこれまでに削除した唯一の API ですが、今後のリリースでは引き続き削除し、アリーナ間で効率的な借用パターンを処理するためのヘルパーを提供します。単一のアリーナ内(またはスタック/ヒープ)では、Swap
は UnsafeArenaSwap
と同じくらい効率的です。異なるアリーナ間で誤って呼び出した場合に無効なメモリ操作を引き起こさないという利点があります。
マップペアのアップグレード
変更のソース: PR #11625
v22.0 では、Map
API を Abseil と STL との整合性を高めるために整理し始めました。特に、MapPair
クラスを std::pair
のエイリアスに置き換えました。ほとんどのユーザーには透過的であるはずですが、クラスを直接使用していた場合はコードを更新する必要があるかもしれません。
新しい JSON パーサー
変更のソース: PR #10729
このリリースで C++ JSON パーサーを書き直しました。ほとんどの変更は隠されていますが、必然的に文書化されていない動作が変わっている可能性があります。それに応じてテストしてください。有効な RFC-8219 JSON ではないドキュメント(引用符がない、非標準のブール値を使用しているなど)の解析は非推奨となり、今後のリリースで削除されます。フィールドのシリアル化順序は、以前は非決定論的だったのに対し、フィールド番号の順序と一致することが保証されるようになりました。
この移行の一環として、util/internal の下のすべてのファイルが削除されました。これらは古いパーサーで使用されており、外部で使用されることは意図されていませんでした。
Arena::Init
変更のソース: PR #10623
Arena
の Init
メソッドは何も行わないコードであり、削除されました。このメソッドを呼び出していた場合は、おそらく ArenaOptions
のセットで Arena
コンストラクタを直接呼び出すことを意図していたはずです。呼び出しを削除するか、そのコンストラクタに移行してください。
ErrorCollector 移行
変更のソース: PR #11555
Abseil 移行の一環として、const std::string&
から absl::string_view
に移行しています。当社の 3 つのエラーコレクタクラスの場合、既存のコードを壊さずにこれを行うことはできません。v22.0 では、両方のバリアントをリリースし、メソッド名を AddError
と AddWarning
から RecordError
と RecordWarning
に変更することにしました。古いシグネチャは非推奨とマークされ、効率は少し低下します(文字列コピーのため)が、それ以外は引き続き機能します。Add*
メソッドは後の互換性のないリリースで削除されるため、これらを新しいバージョンに移行する必要があります。