Pythonのバージョンアップを行った話


バックエンド担当の山田です。

過去にDjangoの紹介をしている通り、弊社が提供しているサービスであるクロスオーダーのAPI側の言語はPythonを利用しています。

特にクロスオーダーのAPIは(というか弊社で数ある稼働中の製品の中でも)言語のバージョンを大きくアップデートする作業は初だったということもあり、今回記事にしてみました。

なぜPythonバージョンアップをするの?

「今あるものを今まで通り使うなら時間を掛けてバージョンアップをする必要無いじゃん…」という声に答えますと、この作業をするのには理由があります。

  • 放置することでセキュリティリスク、ひどい場合は突然動作しなくなる問題が発生してしまう。
  • 負荷軽減&処理高速化の一環として。
  • 開発環境の福利厚生として。
セキュリティリスクの問題

Pythonは約1年ごとに1回のメジャーアップデート、約2ヶ月ごとにマイナーアップデートが行われ、原則的に「セキュリティサポートはメジャーアップデートの公開から5年間」*1までとなります。
つまり言語レベルでセキュリティを万全にする場合は少なくとも「5年に1回は必ずバージョンアップを実施する」必要があります。

"ひどい場合"というのはインフラ側で用意されている環境が「セキュリティサポートの終了に合わせて強制的に取り下げられてしまう(古いバージョンが使えなくなってしまう)」というケースになります。この場合、突然サービスが止まってしまう為かなりびっくりします。

負荷軽減&処理高速化

Pythonはメジャーアップデートの度に"某ワイン*2"のようなキャッチコピーを掲げて、毎年のように処理性能を上げてきています。

なので、バージョンアップを行うことで程度はあれど処理負荷の軽減や処理の高速化を実施出来るという訳です。

開発環境の福利厚生

「開発者が最新のバージョンが動作している環境でストレス無く開発を実施出来る環境」を福利厚生と言っています。

最新のバージョンを使うことで今まで出来なかったことが出来るようになったり、やろうとすると時間を掛けなくては行けなかったことが短時間で出来るようになります。結果として開発者はより良いもの作る時間をこれまで以上に得ることが出来ます。

(そんな素晴らしい環境の元で共に働くエンジニアを募集中ですw 詳しくはこちら

バージョンを上げてみてどうだった?

これまで作ってきた自動テストが大部分を助けてくれた

バージョンアップを行うと、アプリケーションが実施出来る全ての動作をチェックして、正しく動作しない箇所を修正する必要がある*3のですが、それを1つ1つ手作業でチェックするのは非常に大変です。

クロスオーダーは自動テストが充実しているので、手作業で確認する箇所が少数で済んだことでバージョンアップの作業の時間短縮になりました。

部内の調整作業がやや手間だった

実際にユーザーが利用している環境に反映を行う前にテスト用の環境に対して反映を行い本当に問題が無いか?を確認するのですが、このテスト用環境が部内共通のものが1つだけしか用意がなかった為、

「自分がバージョンアップの対応をテスト用環境にすると、他の開発者が全員巻き添えを食らって確認ができなくなる」という傍迷惑な状態になってしまいました(大変申し訳ありませんでした…)。

そのため確認の時間を事前に告知したり、稼働時間を普段より少しずらして誰もテスト環境を利用していない時間帯で確認作業をしていました。

この経験から環境レベルで変わってしまう大きなアップデートの際には専用のテスト環境の用意を行う必要があると感じました。これは次回のアップデート作業を行うまでに改善したいことの1つです。

負荷軽減&処理高速化について

セキュリティに関わる為、具体的にどのバージョンにアップデートしたのかは伏せますが、変更前後の差分で最大20%ほど改善されていました

「バージョンアップの作業は大変だからサポート終了のタイミングで実施すればいいや…。」と思っていましたが、想像以上の効果が得られたのでサポート終了に関係なく継続的に実施していきたいと感じました。

 

最後に

クロスマートではエンジニア(バックエンド・フロントエンド・サーバーサイド、etc...)を募集中です!

継続的にバージョンアップしているクロスマートの開発環境で一緒に働きましょう!!

www.wantedly.com

*1:例えばPHPは3年でセキュリティサポートが打ち切られるので、それと比べるとPythonのサポート期間はかなり長い。

*2:"ここ数年で最高の出来"って毎年のように言っていますが…。毎年同じ味に感じます…。

*3:バージョンアップをすると今まで動いていたものが廃止されて動かなくなる場合があります。今までPS1で遊んでいたソフトがあるが、PS5ではソフトの起動も出来ない。といったイメージです。