Workiva スクリプトと Python 3.9 サポート終了のお知らせ
自動化を将来にわたって維持するために、Workiva では Python 3.13 のサポートを導入し、スクリプトごとにランタイムバージョンを選択できるスクリプトレベルの設定も用意しました。このガイドでは、3.9 から 3.13 へ安全に移動完了する方法、テストする内容、最小限の混乱で変更を展開する方法を説明します。
2025年10月 までは、Workiva ScriptingはPython Software Foundation の公式Python 3.9リリースに依存していました。
この変更に対応して、Workiva Scripting はAmazon Linux 2023 (AL2023) イメージを使用するように移行しました。この変更により、Python 3.9 は、アップストリームの Python リリースがオープンソースコミュニティによってパッチされなくなっても、アマゾンのアップデートサイクルを通じて継続的なセキュリティパッチ とメンテナンスを受けることが保証されます。
この移行の結果、Workiva Scripting はPython 3.9 2026 年 10 月 まで、安全にスクリプトを実行するサポートを継続します。
この移行について考えるべき人現在、Python 3.9で Workiva Scripting の自動化を実行している人 - 手動、チェーンから、または統合された自動化を介してトリガーされたかに関わらず。
何もしなければどうなりますか?あなたのスクリプトは 2026 年 10 月まで AL2023 パッチを通して安全ですが、最新のサポートされるランタイム (3.13) に整列するように移行することが推奨されます。
End-of-life timelines and supported versions の背景については、公式Python release status webpage をレビューしてください。
Workiva はどのようにこの変更をサポートしていますか?
Workiva は、スクリプトが使用する Python ランタイムを開発者がコントロールできるようにするためのアップデートを展開しています。この更新により、以下の変更が行われます:
- Python 3.13 サポート - すべての新規スクリプトは、最新の安定版である Python 3.13 がデフォルトになります。
- スクリプトごとのランタイム構成 - スクリプトごとに、スクリプトが使用する Python ランタイムバージョン (3.9 または 3.13) を選択できるようになりました。
- 下位互換性 - 既存のスクリプトは、アップデートするまで Python 3.9 を使用し続けます。
- 編集者とAPIのサポート - WorkivaスクリプトエディターまたはスクリプトAPIでランタイムを直接設定または更新できるようになります。
これにより、独自のスケジュールで移行し、安全にテストし、準備が整ったと確信したときにのみ本番スクリプトを切り替えることができます。
移行スケジュール
ヘルプはこちらです:
- WorkivaでPython 3.13が利用可能に(2025年9月) - すべてのお客様が、スクリプティングAPIまたはスクリプティングエディタを使用して、Python 3.9またはPython 3.13で実行するスクリプトを構成できます。
- Python 3.9 end of life (October 2025) - Python コミュニティ公式サポート終了。Workivaは2026年10月までAL2023によるサポートを継続しますが、移行を強く推奨します。
- 2026年10月 - Workivaは2026年10月にPython 3.9のサポートを終了する予定で、その後はすべてのスクリプトはPython 3.13で実行されます。
スクリプトのテストはできるだけ早く Python 3.13 で始めてください。Python 3.13 の使用に慣れたら、本番スクリプトを遅延なく Python 3.13 ランタイムに切り替えてください。
Python 3.13 へのスクリプトの切り替え
私たちの推奨するロールアウトパターン: コピーを作成し、バージョンを更新し、テストし、そして上げます。本番環境へのリスクを最小限に抑え、必要に応じて実行履歴を残すことができます。
ステップ1 - コピーの作成
- Workiva で、本番スクリプトのコピーを作成します。
コピーは Python 3.9 に設定されたままです。 - コピーのランタイムをPython 3.13に設定します。
ステップ2 - コピーのテストと適応
- コピーを安全/テストコンテキストで実行します。
- 変更点を修正します ("Common issues & fixes" を参照ください)。
- 出力、副作用、パフォーマンスを検証してください。
ステップ3 - 3.13への変更(2つのオプション)
オプション A - 実行履歴を保持します。
- コピー から更新されたコードをコピー&ペーストでオリジナル スクリプトに貼り付けます。
- オリジナルの スクリプトのランタイムをPython 3.13 に変更します。
- テスト中を再実行し、オリジナルの通常のスケジューリング/トリガーを再開します。
- (オプション)コピーをアーカイブ(または清算)します。
オプション B - これにより、プロダクション実行履歴は保持されません。
- プロダクション トリガー (つまり、チェーン トリガー) を、オリジナル スクリプトからコピー スクリプトを指すように変更します。
- コピー が新規プロダクション スクリプトになります (Python 3.13 で実行)。
- (オプション)オリジナルをアーカイブ(する)か清算 回収してください。
アクションを呼びかけます: どちらのオプションを選んでも、2025年10月までに、すべてのアクティブなスクリプトをPython 3.13 に移動してください。
Python ランタイムバージョンの更新
スクリプトAPIの使用
-
スクリプトのランタイムを決定します。
GET /v1/scripts/{script_id}レスポンスの
runtimeの値をチェックします。 -
スクリプトを Python 3.13 に更新します。
PATCH /v1/scripts/{script_id} Content-Type: application/json [{ "op": "replace", "path": "/runtime", "value": "python3.13" }] .
詳細については、Scripting Prototype API docs を参照してください。
例Python ランタイムバージョンの変更と読み込み
次のサンプルコードは、スクリプトAPIを使用してスクリプトのランタイムバージョン(3.9または3.13)を更新する方法と、現在構成されているバージョンを確認する方法を示しています。
import os import requests CLIENT_ID = os.environ.get("CLIENT_ID") CLIENT_SECRET = os.environ.get("CLIENT_SECRET") SCRIPT_ID = os.environ.get("SCRIPT_ID") VERSION = os.environ.get("VERSION") #VERSION = "python3.9".#VERSION = "python3.13" SCRIPTS_V1_URL = "https://api.app.wdesk.com/prototype/platform/scripts" AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" def change_version(clientId, clientSecret, scriptId, version): auth_header = get_auth_header(clientId, clientSecret) # Pythonバージョンの変更 req_body = [ { "op": "replace", "path": "/runtime", "value": version } ] resp = requests.patch( f"{SCRIPTS_V1_URL}/{scriptId}", json=req_body, headers=auth_header ) 名称 = resp.json().get("name") new_version = resp.json().get("runtime") print("Python version for '" + name + "' スクリプトが変更されました:" + new_version.replace("python", "")) def read_version(client_id, client_secret): auth_header = get_auth_header(client_id, client_secret) # Pythonバージョンの読み込み resp = requests.get( f"{SCRIPTS_V1_URL}/{SCRIPT_ID}", ヘッダー=auth_header ) 名称 = resp.json().get("name") configured_version = resp.json().get("runtime") print("Python version for '" + name + "' script:" + configured_version.replace("python", ""))# 与えられたクライアントIDとシークレットの認証ヘッダーを取得 def get_auth_header(client_id, client_secret): token_headers = {"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"} data_field = ( f "client_id={client_id}&client_secret={client_secret}" f"&grant_type=client_credentials" ) auth_resp = requests.post(f"{AUTH_URL}", data=data_field, headers=token_headers) auth_json = auth_resp.json() bearer_token = "ベアラ " + auth_json.get("access_token") return {"Authorization": bearer_token} change_version(CLIENT_ID, CLIENT_SECRET, SCRIPT_ID, VERSION) #read_version(CLIENT_ID, CLIENT_SECRET)スクリプト編集者の使い方
スクリプティングエディターでは、UIで直接ランタイムを構成できるようになります。Properties → Runtime Version に新規ドロップダウンが用意され、Python 3.9 と Python 3.13 を選択できます。
編集者でスクリプトを更新するには
- スクリプト エディタ でスクリプトを開きます。
- 右側のProperties パネルに移動します。
- Runtime Version の下で、ドロップダウンからPython 3.13 を選択します。
- 変更を保存します。
- 本番環境に上げる前に、安全/テスト環境でスクリプトを実行してください。
ヒント
- スクリプト内のサードパーティ製パッケージが Python 3.13 と互換性があることを確認してください。
-
requirements.txtファイルに固定されているパッケージのバージョンを更新してください (例えば、Python 3.9 とは異なり、requests==2.28は 3.13 では必要ありません)。 - Python バージョン3.10,3.11,3.12, and3.13, を含む、Python の主な変更に関する詳細については、Python の公式ドキュメントをお読みください:
- 構造的なパターン・マッチング、f-文字列の更新、エラー・メッセージの改善
- 大幅なパフォーマンスの向上(関数呼び出し、文字列操作、メモリ管理、JSONシリアライズ/デシリアライズ)
- パッケージの非推奨と特定のパッケージパラメータの削除 (
cgi,cgitb,distutilsなどが非推奨になりました;asyncio"loop" パラメータが削除されました)
3.9 から 3.13 への移動でよくある問題と修正
Python 3.9 から 3.13 にスクリプトを移動するときに直面するかもしれない一般的な問題と、それに対する修正案を示します:
- サードパーティライブラリ - いくつかのパッケージは Python 3.13 をまだサポートしていないかもしれません。
- 修正: 互換性のある最新バージョンにアップグレードするか、 代替に置き換えてください。固定されている要件は慎重にテストしてください。ライブラリのサポートはpyreadiness.org/3.13 で確認でき、詳細については "Supported scripting libraries and dependencies" ヘルプ記事をレビューしてください。
- Requests library version -
requestsライブラリは Workiva Scripting で最も一般的なサードパーティライブラリです。Python 3.9 の初期リリースでは、requestsバージョン 2.30.0 以降でスクリプトが分割されます。Python 3.13 に移行すると、最新版のリクエストを問題なく使えるようになります。 - Python 3.13 は文字列とバイトの扱いに違いがあります - より厳密なタイプチェックを行うことで、非表示の問題が表面化する可能性があります。
- 修正:
strとbytesを混在させるコードをチェックし、明示的なエンコード/デコードを確実にします。
- 修正:
- Datetime & timezone behavior - Python 3.13 では
zoneinfoライブラリに違いがあり、解析が厳しくなっています。- 修正: すべての日付/時間ロジック、特に書式設定とタイムゾーン変換をテストしてください。
- JSON シリアライズ - ルールが厳しくなったため、一部のオブジェクトのシリアライズに失敗することがあります。
- 修正: カスタムオブジェクトが
json.dumpsの前に変換されるようにするか、デフォルトのエンコーダを使うようにしました。
- 修正: カスタムオブジェクトが
- 非推奨 API - Python
stdlib関数の一部 (例えば、asyncio.get_event_loop,distutils, および特定のロケール API) が Python 3.9 で非推奨になりましたので削除しました。- 修正: サポートされている代替を使用するようにコードを更新しました。
- パフォーマンスの変更 - ループと非同期タスクの動作が異なることがあります。
- 修正 クリティカルパスの負荷テストを実行し、必要に応じて同時実行ロジックを更新します。
ヒント 本番用スクリプトのコピーを必ず最初にテストします。コントロールされたテスト環境で適用された修正は、本番環境での問題のリスクを減らします。
Python 3.13 の新規機能
Python 3.13 の変更点のハイライトです:
- 改良された対話型インタプリタ - 複数行編集、色、および色付きトレースバック。
- 実験的なフリースレッドビルドモード - 一部のプラットフォームで真の並列スレッド (GIL なし) を許可します。
- 実験的 JIT - パフォーマンス向上のための初期段階。
- より良いデバッグツール -
locals()変異が明確に定義されたセマンティクスで動作するようになりました。 - 新規メモリ割り当て器 - 修正 mimalloc を含み、サポートされていればデフォルトで有効になります。
- より小さいファイル - Docstrings は先頭の空白を除去し、メモリ使用量と .pyc ファイルサイズを削減します。
- 新規 dbm バックエンド - デフォルトで
dbm.sqlite3を使用します。 - プラットフォームの更新 - macOS minimum 10.13、iOS/Android Tier 3、WASI Tier 2。
- タイプ別改良 - タイプのデフォルト、絞り込み、読み取り専用アイテム、非推奨注釈。
- 削除 - 非推奨モジュールが削除されました (例えば
cgi,telnetlib,imghdr,lib2to3など)。
完全なリリースノートは Python.org の "What's New in Python 3.13" を参照してください。
3.9 から 3.13 の間に導入された具体的な変更点をレビューしたい場合は、以下を参照してください:
よくある質問
質疑応答/Q&A: 今すぐすべてのスクリプトを移行する必要がありますか?
いいえ。今すぐ Python 3.13 でスクリプトのテスト中で、本番環境は一時的に 3.9 のままにしておいてください。すべてのスクリプトは2026 年 10 月までに Python 3.13 に移行する必要があります 。
質疑応答/Q&A Python 3.9がサポート終了になると、既存のスクリプトは自動的に分割されますか?
いいえ。Workivaスクリプトは、2026年10月まで、セキュリティパッチを受け続けるAmazon Linux 2023 (AL2023)下のアマゾンのPython 3.9バージョンに依存します。あなたのスクリプトは Python 3.9 の公式サポート終了による影響を受けません。
質疑応答/Q&A:本番環境は 3.9 のまま、スクリプトを 3.13 でテストできますか?
はい。スクリプトのコピーを作成し、テスト用に Python 3.13 で実行するように更新してください。本番環境に上げる前に、コピーに問題があれば修正してください。互換性の喪失を避けるため、3.9用と3.13用の別々のバージョンを用意してください。
質疑応答/Q&A:スクリプティング・エディタはランタイムの変更をサポートしますか?
はい。Python 3.13の編集者サポートは、2025年9月のAPIサポートと同時に利用可能になる予定です。
質疑応答/Q&A ライブラリサポートに関する詳細はこちら。
pyreadiness.org/3.13 と " Supported scripting libraries and dependencies " Workiva ヘルプ記事を確認してください。
質疑応答/Q&A スクリプトを切り替えると、過去の実行データはどうなりますか?
元のスクリプトを上書きした場合、実行履歴は保持されます。コピーにトリガーをポイントした場合、オリジナルの実行履歴は古いスクリプトのまま残ります。
質疑応答/Q&A 2026年10月までに移行しないとどうなりますか?
WorkivaがAL2023のPython 3.9でのスクリプト実行のサポートを終了する2026年10月以降、スクリプトは自動的にPython 3.13に移行します。混乱を避けるため、2026年10月よりかなり前にPython 3.13にスクリプトをテストし、移行する必要があります。
Q: 移行時にチェーンや統合自動化を変更する必要がありますか?
チェーンと統合オートメーションは、基礎となるスクリプトがPython 3.13に更新されている限り、期待通りに実行されます。主なステップは、スクリプト自体を確実に移行することです。
質疑応答/Q&A 問題発生時にスクリプトを Python 3.13 から 3.9 にロールバックできますか?
ユーザーはスクリプトのランタイムを一時的にPython 3.9に戻すことができますが、Python 3.13に適応するために行われたコード変更は自動的に元に戻りません。スクリプトを再び 3.9 と互換性を持たせるためにマニュアルで調整する必要があります。より良いアプローチは、Python 3.9 用と Python 3.13 用のコピーを別々に維持することです。