古いコードフレームワークを安全にアップグレード
単発 · 永久にあなたのもの制作期間 1〜3日古いフレームワークや言語バージョンから抜け出せないソフトウェアチーム向けです。AIエージェントがコードを少しずつアップグレードし、変更のたびにテストを実行して合格したものだけを残し、チームがレビューできる小さな変更単位で進めます。
ソフトウェアの最新状態を維持し、テストと安全な変更をサポートします。
古いフレームワークや言語バージョンから抜け出せないソフトウェアチーム向けです。AIエージェントがコードを少しずつアップグレードし、変更のたびにテストを実行して合格したものだけを残し、チームがレビューできる小さな変更単位で進めます。
コードを実行する前に、開発者がある種のミス全般について警告を受けられるようになります。小規模でレビュー済みの変更として型をコード全体に追加し、それによって見つかった実際のバグを修正し、二度と後戻りしないようチェックを設定します。
ソフトウェアの一部が他のすべての足を引っ張っている場合、それを独立したサービスとして切り出します。まず実際のトラフィックに対してバックグラウンドでテストし、その後、各段階で元に戻せる状態を保ちながら利用者を段階的に移行します。
コードが多くのリポジトリに分散している場合、履歴を一切失わずにそれらを1つにまとめ、変更された部分だけが再ビルド・テストされるようにビルドを設定します。
アプリが受け取る実際のリクエストから個人情報を除いたサンプルを取り、リリース前に新しいバージョンごとにリプレイします。本来変わるべきでない応答が新バージョンで変わった場合、リリースを止めます。
開発者が変更のたびにテストを長く待っている場合、各ファイルがどのテストに影響するかをビルドシステムに学習させ、それらを先に実行するようにします。安全策として、全テストは毎晩引き続き実行します。
最大級のデータベーステーブルが全体を遅くし始めたり、ID番号が足りなくなりそうになったりした場合、アプリを稼働させたままバックグラウンドで再構築し、入れ替えます。
データベースのコストが高すぎる、または足かせになっている場合、アプリをより適したデータベースに移行します。新しいほうが完全に同じ結果を返すようになるまで、実際のトラフィックで両方を並行して稼働させ、その後切り替えます。
アプリが注文を保存したのに、次のシステムへのメッセージが届かない、または2回届くことがあります。コードがメッセージを送る方法を修正して確実に届くようにし、欠落を見つけるチェックを追加します。
誰かが「購入」を2回タップしたり、スマートフォンの電波が途切れたりすると、注文が2件になってしまうことがあります。繰り返されたリクエストを認識して1回だけ処理するようシステムを変更し、自動でテストします。
運用しているすべてのソフトウェアとその担当者を把握し、テスト、デプロイ、監視が設定済みの新しいサービスを始められる、エンジニア向けの社内ウェブサイトを構築します。
アプリのホスティングプラットフォームのコストが高くなった、または制約が多くなった場合、アプリ、データベース、バックグラウンドジョブを自社のクラウドアカウントに移し、チームはこれまでと同じ簡単な方法でデプロイを続けられます。
ほとんど変化しない処理のためにクラウドの請求額が増え続けている場合、お客様がレンタルする専用サーバーへ移行し、バックアップとフェイルオーバーを維持します。すべてお客様ご自身のアカウントのサーバー上で稼働します。
クラウドが画面操作で構築された場合、誰も安全に変更や再構築ができません。稼働中の内容と完全に一致するコードとしてすべてを書き起こすので、今後の変更は事前にレビューされます。
コードリポジトリで承認された内容をサーバーが自動的にそのまま実行するよう設定します。誰も自分のノートPCから変更を反映することはなく、すべての変更にレビュー済みの記録が残ります。
古いクラスターのバージョンは修正の提供が止まります。壊れるものをすべて見つけて修正し、コピーで練習したうえで、アプリを稼働させたままクラスターを1段階ずつアップグレードします。
監視の請求額はログが増えるたびに膨らみます。チームが実際に使っているデータを見極めてそれを残し、残りは移動または削減するので、アラートとダッシュボードを機能させたまま請求額を減らせます。
多くのクラウドでは、より安価になりうるARMサーバーが提供されています。アプリをARM上でビルド・実行できるようにし、それぞれを公平にテストして、良い結果が出たものだけを移行します。
アプリケーション全体をパッケージ化し、どの開発者もサンプルデータ込みで、1つのコマンドで自分のパソコンやブラウザ上で起動できるようにします。
古いコードは積み重なり、あらゆる変更を遅くします。稼働中のシステムが実際に実行しているコードを数週間にわたって観察し、まったく使われていないものを安全に削除します。
ランダムに発生して再現できないバグは、多くの場合、処理が同時に起こることが原因です。それを検出する特別なビルドを実行し、修正を証明するテスト付きで1つずつ修正します。
サーバーを毎晩再起動する必要がある、またはしばらくするとクラッシュする場合、何かが少しずつメモリを消費しています。稼働中のシステムで原因を見つけて修正し、今後のすべてのリリースでその問題をテストします。
コードのどの部分が最もサーバーの処理能力を使っているかを常時測定し、最も問題のある箇所を修正し、新たに遅い箇所が現れたらすぐにわかるよう監視を続けます。
Pythonソフトウェアの一部が遅い場合、その部分だけを、はるかに高速な言語であるRustで書き直し、まったく同じ結果を返すことをテストしたうえで、他には一切手を加えずに組み込みます。
コードが大きくなるにつれ、本来分かれているべき部分が絡み合い、あらゆる変更がリスクを伴うようになります。それらを解きほぐし、分離を保つ自動チェックを追加します。
お客様のコード上にAIコーディングアシスタントを設定し、印を付けたタスクを取り上げて変更を書き、すべてのテストを実行して、開発者にレビューを依頼します。まず過去の作業でテストするので、その実力を把握できます。
メール送信や注文の同期などのバックグラウンド処理が失敗すると、気づかれないまま積み上がります。失敗をまとめ、その理由を示し、安全に再試行できる1つの画面をチームにお渡しします。
時計が切り替わると予約が1時間ずれる、またはレポートの締めが誤った時刻になる場合、ソフトウェアが時刻を誤って扱っている箇所をすべて見つけて修正し、再発を防ぐテストを追加します。
わずかな丸め誤差で請求書や合計が合わなくなります。ソフトウェアが金額を計算しているすべての箇所を見つけて正確にし、数字が常に合うことを証明する自動テストを追加します。
更新をリリースするたびに顧客がエラーに遭遇する場合、更新時のサーバー間の引き継ぎ方を修正し、トラフィックがある状態で繰り返しリリースしてもエラーが出ないことをテストで証明します。
アプリが依存している外部サービスが遅くなると、アプリ全体が止まってしまうことがあります。そうした呼び出しすべてに制限と代替処理を追加し、安全なコピー環境で意図的に障害を起こしてテストします。
ゲームスタジオ向けに、誰かが変更を加えるたびに全プラットフォーム向けにゲームをビルドし、起動してプレイできることを確認して、テスターに送るマシンを設定します。
販売したデバイス向けに安全なリモート更新を設定します。更新は段階的に配信され、正常に起動しなかったデバイスは自動で以前のバージョンに戻ります。
チームがまだ古いシステムでコードを保管している場合、すべてを全履歴とともにGitに移し、ビルドをそれに合わせて設定し、旧システムは読み取り専用のアーカイブとして残します。
コードのビルドとテストを行うシステムを置き換える場合、すべてのパイプラインを変換し、結果が一致するまで新旧を並行して実行してから切り替えます。
アプリが依存しているサービスが値上げした場合、コードに切り替え口を設け、新しい提供元を接続し、両者を並べて比較し、機能ごとに1つずつ移行します。
ソフトウェアがチームで管理しきれないほど多くの部品に分かれている場合、ダウンタイムなしで1つずつ、よく整理された1つのアプリに統合し直します。
社内の他部分とシステムを共有している製品を売却または分社化する場合、そのコード、サーバー、データ、ユーザーアカウントを分離し、完全に単独で稼働できるようにします。
コードの一部を公開したい場合、それを切り離し、過去のすべてのバージョンから機密情報や社内情報を除去し、クリーンな状態が保たれるようリリースを設定します。
ロボットを開発している企業向けに、仮想テストコースを設定し、すべてのソフトウェア変更をまずシミュレーション上のロボットで試し、記録によって何が問題だったかを正確に示します。
オンラインゲーム向けに、ゲームサーバーをお客様自身のクラウドアカウントで運用し、試合開始時にプレイヤーのいる地域で起動し、終了後に停止し、誰も追い出さずに更新できるようにします。
多くのサーバークラスターにWebトラフィックを振り分けるソフトウェアの提供が終了しました。お客様の構成を保守されている後継ソフトウェアに移行し、切り替え前にWebアドレスごとにテストします。
サーバークラスター内では、通常、サービス同士が暗号化されずに通信し、どこでも呼び出せる状態です。コードを変更せずにその通信を暗号化し、アプリが実際に必要とする接続だけを許可します。
バックグラウンドジョブのサーバーを、作業が積み上がったときに増やし、落ち着いたときに減らすので、ジョブが遅れることがなく、遊んでいるマシンに費用を払わずに済みます。
ある顧客が大規模なインポートを実行すると、他の全員のタスクがその後ろで待たされることがあります。顧客間で処理能力を公平に分け合うようシステムを変更します。
外部サービスに依存するテストは、ランダムに失敗し、実行も遅くなります。それらのサービスの現実的な代替を構築し、テストを高速かつ安定して実行できるようにします。
顧客が自社のサーバーにソフトウェアをインストールしている場合、さまざまな古いバージョンからアップグレードが行われます。リリース前に、すべてのアップグレード経路を自動でテストします。
多数のサーバーを連携させるソフトウェアでは、最も厄介なバグはまれなタイミングでしか現れません。そうした状況を膨大な数試すシミュレーターを構築し、どんな失敗も正確に再現します。