Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AIを活用したモダナイズ/アップグレードおよび、シフトレフト推進について

 生成AIを活用したモダナイズ/アップグレードおよび、シフトレフト推進について

日本クラウドセキュリティアライアンスの勉強会での登壇資料です。AmazonQ Developerを題材に進めつつ、いくつか他のツールの紹介や 開発での活用、シフトレフトの推進に向けた活用方法などご紹介したものです。

toricky6

March 10, 2025
Tweet

More Decks by toricky6

Other Decks in Programming

Transcript

  1. Thoughtworks Technology Rador VOl31 Complacency with AI-generated code GitHub CopilotやTabnineのようなAIコーディングアシスタントは非常に人気が

    ある。以下によるとStackOverflowの2024年開発者調査によると、「全回答者 の72%が、開発用のAIツールに好意的または非常に好意的である」。と回答 している。我々もその利点を認めているが、中長期的にコード品質に与える影響 については警戒している。 また、AIが生成したコードに自己満足しないよう、開発者に注意を促している。AI が生成したコードに自己満足しないよう、開発者に注意を促したい。AIによる提案 をレビューする際、アシスタントを数回使っただけで、警戒心が薄れてしまうのはあま りにも魅力的だ。アシスタントを使ったポジティブな経験の後では、AIの提案を見直 す際の警戒心は薄れがちだ。GitClearによるこのような研究は、コードベースがより 速く成長する傾向を示している。 コードベースが急成長している傾向を示している。そして、GitHubによるこの研究 は、私たちに次のような疑問を抱かせている。プルリクエストのマージ率が15%上昇 したというのは、実際のところ良いことなのだろうか。それとも、AIの結果を信用しす ぎて、より大きなプルリクエストをより早くマージしているのだろうか?と考えてい る。私たちは、1年以上前に行った基本的な 「入門 」アドバイスをまだ使っている。 自動化バイアス、サンクコストの誤謬、アンカリングバイアス、レビュー疲労に注意す ることです。またプログラマーは、AIをいつどこで使い、いつ信用してはいけないか について、優れた精神的枠組みを開発することをお勧めする。 https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2024/10/tr_technology_radar_vol_31_en.pdf より著者訳 Techniques Platform Languages and Framework Tools
  2. State of DevOps Report DevOps Research and Assessment ✓ DevOps

    Research and Assessment (DORA)チームが2014年から公開している DevOps業界の年次調査レポート ✓ Google Cloudのチームで執筆 ✓ AI が生成したコードの信頼性 ・開発作業で使用されるものは複雑 ・回答者の大多数(87.9%) はある程度の 信頼を報告 ✓ AI が生成したコードの品質 回答者の全体的(39.2%)の信頼が低い ほとんど信頼していないか(27.3%) まったく信頼していません(11.9%) https://cloud.google.com/devops/state-of-devops より抜粋
  3. DORAレポート コードのデバッグ データ分析 コードレビュー コードの記述 情報の要約 不慣れなコードの説明 コードの最適化 コードの文書化 テストの記述

    セキュリティ分析 言語マイグレーション ✓ 個人レベルでは、回答者の 75. 9% が少なくとも右表のような、 彼らの日々の職業上の責任での 利用において、部分的には信頼 していることが分かりました。 ✓ 調査に含まれる、すべてのタスクの うち、最も一般的な使用例は、 ソフトウェア開発業務における コードの記述と情報の要約 ✓ ツールのインターフェース内訳 チャットボット(78.2%) WEB IF(73.9%) AIツール IF(73.9%) IDEに組み込み(72.9%) 内部Web IF (58.1%) CI/CDパイプライン(50.2%) コードベース モダナイゼーション https://cloud.google.com/devops/state-of-devops より抜粋
  4. DevOps ⚫DevOpsは、⾼品質を保ちつつ、システムに変更をコミットしてからその変更が通常の本番システ ムに組み込まれるまでの時間を短縮することを⽬的とした一連の実践である Tools 1. Automated infrastructure 2. Shared version

    control 3. One step build and deploy 4. Feature flags 5. Shared metrics 6. IRC and IM robots Culture 1. Respect 2. Trust 3. Healthy attitude about failure 4. Avoiding Blame 10 deploys per day dev & ops cooperation at Flickr DevOpsの大事なことは、だいたい原点に書いてある(後編) 〜 Developers Summit 2013 Summer(Public Key) Len Bass, et al. 「DevOps教科書」 https://www.slideshare.net/slideshow/10-deploys-per-day-dev-and-o ps-cooperation-at-flickr/1628368 より引用 https://www.publickey1.jp/blog/13/devops_developers_summit _2013_summer_1.html より引用
  5. DevSecOpsの6つの柱 DevSecOpsの6つの柱 ・集団的責任 ・コラボレーションと統合 ・実践的な実施 ・コンプライアンスと開発の橋渡し ・自動化 ・測定、監視、報告および行動 従来:セキュリティ要件の担保は、ほぼセキュリティテストのみ外部団体にて確認 ⇛

    DevSecOps:自分たちで実践する! https://www.cloudsecurityalliance.jp/site/wp-content/uploads/2023/11/The-Six-Pillars-of-DevSecOps-Achieving-Reflexive-Secur ity-Through-en_us-ja.pdf クラウドファーストの課題解決のためのDevSecOps DevSecOpsは、インフラストラクチャーと製品のライフサイクルがますます短くなっている、今日に おける相互接続され急速に変化するセキュリティ環境の課題に対処するアプローチのひとつです。 DevSecOpsのプラクティスは、クラウドファーストのソフトウェアから生じた課題を解決するための 対応策として作成されました。これは、DevOps の⽂化、プラクティスおよびワークフローに、継 続的なセキュリティの原則、プロセスおよび技術を統合することと、簡潔に定義できます。 Dev SecOpsはまた、従来はサイロ化されていた開発、インフラストラクチャー運用、情報セキュリティ の各業務を統合し、コントロールされた プロセスの下でセキュアなソフトウェアの開発を促進する、 全体的なフレームワークを提供することも意図しています。 本CSA DevSecOps ワーキング グループは再帰的セキュリティフレームワークで説明されている6つの柱に従って、DevSecOps を組織に統合するために重要な以下の6つの重点領域を定義しました。
  6. セキュア開発ツール外観(SCA/AST系) セキュアなコード・アプリ OSSリスク 安全なインフラ構築 開発段階での脆弱性の埋込防止と 検知テスト 導入OSS把握と脆弱性把握 (Log4j等) パッチや脆弱なシステム 設定への対応

    セキュア開発の要点 DAST、Web脆弱性評価 外部からの疑似攻撃を実施 SAST:ソースコードを静的に解析。 バグ・脆弱性を検知 SCA :ライブラリを分析し、OSSを検出、 脆弱性の照合。一部製品はソース内の コード、コンテナや商用ソフト(バイナリ)にも 対応 脆弱性検査ツール/CSPM/SSPM OSやMWの設定やパッチ状況を スキャンし結果を出力 セキュリティツール アプリ ライブラリ (OSS) インフラ (OS等) システム構造 業務アプリ全体 IAST IAST :プログラムの実行されたコードを スキャンし、バグ・脆弱性を検知
  7. 米国サプライチェーンマネジメントに関する大統領令 13 機能 概要(抜粋) 基本機能 • 提供されているOSSコンポーネントの既知の脆弱性を 特定する。(例:Software Composition Analysis

    [SCA]:ソフトウェア構成解析) 維持機能 • SCAソースコードベースのレビューをバイナリソフトウェア 構成解析で補完 • 信頼できる共有ソフトウェアリポジトリを設置する 強化された機能 • OSSコンポーネントの収集、保存、スキャンのパイプラ インを自動化 大統領令を受け、NISTは、「SP800-161 Rev.1」のAPPENDIX Fから参照させる先として、本ガイダンスを発表した。 図F-1:SBOM管理のためのソフトウェアライフサイクル例 (p243) OSSへのアプローチ (OSS Control p245~) 2021/5/12 バイデン大統領がサプライチェーンマネジメント強化に関する大統領令を発令し、NISTがアプローチを具体化 発令の背景:2020/12 SolarWinds社のソフトウェア(Orion)脆弱性により、アップグレードファイルにマルウェアが仕込まれ 1万7000以上の顧客に配布IDやパスワード情報を不正に抜き取り、今後の米国の経済安全保障に多大な影響を与えた ソフトウェア開発の各工程で順次OSS やライブラリが統合されるため それぞれの工程でSBOMを更新してい く仕組みを推奨 OSS名やライセンス名 を取得し管理する <大統領令 第四章>ソフトウェアサプライチェーンセキュリティの強化記載 • OSSの脆弱性等のソフトウェアサプライチェーン上で発生するリスクの存在を素早く把握できるようにするため、製品の任意の部分で使用される オープンソースソフトウェアの来歴を、実現可能な範囲で保証および証明できるようにする • 各製品のソフトウェア部品表(SBOM)を直接、または公開Webサイトに公開し、購入者に提供する等 【引用】Executive Order on Improving the Nation's Cybersecurity | The White House NIST SP-800-161 サイバーセキュリティ・サプライチェーンリスクマネジメント
  8. 4種類のシフトレフト(ウォーターフォール型) 所謂、V字型モデルにおいて「受入テストよりもシステムテスト」 「システムテストよりユニットテスト」と、 右側のVの中でシフトするもの。一般的に、この形態はいずれの開発でも採用されているとされている。 目的 ウォーターフォール型の開発プロセスにおいて、後半 フェーズに偏りがちなテスト工程を前倒しすることで、欠 陥を早期に発見し、修正コストを削減することが⽬的 です。 特に、要件や設計の段階でのレビューやテストを強化

    することに重点を置きます。 課題 従来のウォーターフォール型開発では、各工程が順序 立てて進むため、テストを初期に行うといっても制約が 多いのが現実。 また、要件が固定されていない状況では、テストの効 果が十分に発揮されないことが課題として挙げられる https://web.archive.org/web/20150905082941/https://insights.sei.cmu.edu/sei_blog/2015/03/four-types-of-shift-left-testing.html より一部引用
  9. 増分シフトレフト https://web.archive.org/web/20150905082941/https://insights.sei.cmu.edu/sei_blog/2015/03/four-types-of-shift-left-testing.html 大規模で複雑なソフトウェア依存システムを開発する多くのプロジェクトは、開発を少数のインクリメント(V)に分 解し、それに応じて期間を短縮。赤い破線の矢印で示されている左へのシフトは、1 つの大きなウォーターフォー ル V モデルのテストの種類 (灰色で表示) の一部が左にシフトされ、小さなインクリメンタル

    V モデルの対応す る種類のテストの増分になるために発生 目的 アジャイル開発や反復型プロセスにおいて、開発とテストをスプリ ント単位で反復し、製品が徐々に完成に近づく過程で段階的 に品質を⾼めていくことを⽬指す。 課題 スプリントごとに迅速なテスト計画と実行が求められる点 スプリント期間が短い場合、リソースや時間の不足が原因で テストが形骸化してしまうリスクもある。また、全体の整合性を 保つためには、テスト自動化の活用が不可欠。
  10. アジャイル・DevOpsシフトレフト https://web.archive.org/web/20150905082941/https://insights.sei.cmu.edu/sei_blog/2015/03/four-types-of-shift-left-testing.html より一部引用 増分シフトレフトよりもテストを開発プロセス全体に統合し、継続的な改善を実現することを⽬指す。特にCI/CD環境を活用し た自動化を強調。シフト レフトが発生するのは、これらの小さな V の最も初期の右側にあるテストの種類が、それらが置き換え る大きな V

    の右側にある対応するテストの種類よりも左側にあるため。 Agile テストは通常、開発テストに限定されており、システムが運用された後に行われる運用テストは含まれません 目的 フィードバックループを短縮し、不具合を迅速に検出・修正すること で、スピードと品質を両立させる。 テストプロセスを開発プロセス全体に組み込むことで、継続的な改 善を促進。 課題 DevOps⽂化の中では「すべての開発者がテストの責任を持つ」 という考え方が重視されますが、これは現場における文化や意識 の変革が必要であり、すぐに実現できるものではありません。また、 テストツールの導入や自動化スクリプトの構築には、初期コスト や学習コストが伴います。
  11. モデルベースシフトレフト https://web.archive.org/web/20150905082941/https://insights.sei.cmu.edu/sei_blog/2015/03/four-types-of-shift-left-testing.html 実行可能な要件、アーキテクチャ、および設計モデルをテストすることで、テストを Vsの左側に移動。このシ フトにより、V の右側のソフトウェアがテスト可能になるまで、長時間 (従来型)、中型 (増分)、または短時 間 (アジャイル/DevOps)

    を待つのではなく、ほぼすぐにテストを開始できます。この傾向は始まったばかり で、実行可能モデルと関連するシミュレーション/テストツールが広く利用可能になるにつれて、ますます人気 が高まる?? 目的 システム設計やアーキテクチャモデルを活用し、設計 段階で論理的な欠陥や要件の不整合を検出する ことを⽬的とします。これは、⾼度な信頼性が求めら れるプロジェクト(航空宇宙、医療機器など)で特 に重要 課題 モデル作成には⾼い専門知識とリソースが必要であ り、これを導入する組織が限られることが課題です。 また、モデルと実際のコードとの整合性を保つ仕組み が必要であり、その実現には継続的な努力が求めら れます。
  12. ソフトウェア開発分析データ集2022 Java 626 42.40% COBOL 240 16.30% Visual Basic.NET 137

    9.30% C# 112 7.60% C 83 5.60% VB 58 3.90% その他 58 3.90% C++ 50 3.40% PL/SQL 30 2.00% JavaScript 28 1.90% PHP 11 0.70% Pro*C 7 0.50% Shell スクリプト 8 0.50% PL/I 4 0.30% Perl 5 0.30% Delphi 5 0.30% HTML 5 0.30% ABAP 3 0.20% アセンブラ 1 0.10% Python 2 0.10% Ruby 1 0.10% XML 2 0.10% 1,476 100.00% ソフトウェア開発分析データ集 https://www.ipa.go.jp/digital/software-survey/metrics/hjuojm000000c6it-att/000102171.pdf 利用しているプログラミング言語
  13. TOIBE Index for January 2025 https://www.tiobe.com/tiobe-index/ 2つの興味深いことが起こりました。 C言語は多くの人気を失い、C ++とJavaに追 い抜かれました。

    これの主な理由は、多くの組み込みソフトウェア システムでCがC++に置き換えられているからで す。 JavaとC ++は現在、トップ2のポジションを 争っています。 もう一つ興味深いのは、PHPがトップ10に最後 の別れを告げ、トップ10のキーパーであるGoに 置き換えられたことです。 今年はRustとKotlinに多くの注⽬が集まってい ました. Paul Jansen Chief Executive Officer
  14. ライフサイクルは早まりつつある(特にJava) Vesion End of Full Support for OpenJDK version End

    of ELS-1 Support Phase OpenJDK 6 (1.6) December 2016 N/A OpenJDK 7 (1.7) June 2020 N/A OpenJDK 8 (1.8) Nov 2026* N/A OpenJDK 11 October 2024 October 2027 OpenJDK 17 October 2027 N/A OpenJDK 21 December 2029 N/A https://access.redhat.com/articles/1299013 OpenJDK Lifecycle Dates and RHEL versions Spring Boot の概要とサポート期間 - リファレンスドキュメント
  15. マイグレーションでよく見る光景・工程 RedHat MigrationToolkitforApplications IBM WebSphere Application Server Migration Toolkit ツールチェック

    リリースノート チェック テストで ざくざく・・・ ・Java8だとCookieクラスにemptyチェックが実施されていて、引数に空⽂字やNullを渡すとエラー ・CDIが変更となり、jax-rsがサービスクラスのインスタンスを取得すると、Wrapperクラス(Proxy)が取得 ・JavaSEより、JavaEEの方がやや多め。 製造工程
  16. Code Assistツールの動向 ⚫2023/11 AWS re:Invent2023 Amazon Q Developer(preview) ⚫2024/4 Amazon

    Q Developerローンチ ⚫2024/9 Oracle Cloud World Oracle Code Assist βバージョンリリース ⚫2024/10 Google gemini code assist enterprise ⚫2024/10 GitHub Universe GitHub Copilot upgrade assistant(preview) ⚫2024/12 AWS re:Invent2024 Amazon Q Developer update DORAレポート SCA・SAST・DAST・IAST 生成AIツール モダナイズの壁・トークン数 Amazon QDevelop er
  17. GitHub Copilot upgrade assistant https://devblogs.microsoft.com/java/technical-preview-github-copilot-upgrade-assistant-for-java/ Java アプリの更新を支援、Visual Studio Code拡張機能として導入。 ローカル

    Java プロジェクトから開始し、GitHub Copilot と連携してアップグレードの戦略を 作成し、アップグレード プロセスの大部分を GitHub Copilot が自律的に処理できる ・テクニカルプレビュー版 ・Java21へアップ可見込(動画より) ・Spring Boot などの依存関係やJUnit などの単体テスト フレームワークについて もプロジェクトを評価 ・タスク内のエージェントが実行するコマンド (OpenRewrite等のツールの実行など) や、選択された OpenRewite レシピなどの 詳細の表示、変更されたファイルとエラーの 詳細の確認、ステップごとのログの確認ができ る。 ・動的なビルド/修正AIループを通じて これらのエラーに対処
  18. Gemini CodeAssist Enterprise ローカル コードベースに対する詳細な認識を取得できます。大規模なコンテキスト ウィンドウを使用することで、ローカル コー ドベースと現在の開発セッションの詳細を考慮し、アプリケーションにより適したコードの生成または変換を行うことができます。 (中略) Code

    Assist Enterprise は、ローカル コードベースを理解するだけでなく、コード カスタマイズ機能により、組織のベスト プラクティ スと内部ライブラリに基づくコード提案をすることができます。この機能により、Code Assist はより正確で組織との関連性がより ⾼い、カスタマイズされたコード提案を生成できます。開発者はフロー状態により長くとどまることができるため、より多くの分析情 報を IDE に直接もたらすと同時に、複雑なタスク(リポジトリ全体の Java のバージョンをアップグレードするなど)を実行で きるようになります。つまり、開発者が創造的な問題解決に集中できるようになり、仕事の満足度が向上するだけでなく、製品 化までの期間が短縮され、競争力が⾼まるということです。 Gemini Code Assist Enterprise のコード カスタマイズ機能は、GitHub.com と GitLab.com のリポジトリをインデックス登録できま す。2025 年初頭には、その他のソース管理システムやセルフホスト型のオンプレミス リポジトリもサポートする予定です。 Gemini Code Assist Enterprise のコード カスタマイズ機能による AI を活用したアプリ開発 | Google Cloud 公式ブログ Gemini 1.5 Pro は、200 万トークンという史上最長のコンテキスト ウィンドウを持っています。I/O でお知らせしたように、この機能には、待機リスト経由で ご案内しておりました。本日より、すべてのデベロッパーが Gemini 1.5 Pro の 200 万トークンのコンテキスト ウィンドウを利用できるようになります。 コンテキスト ウィンドウが大きくなると、入力コストが⾼くなる可能性も大きくなります。そこで、複数のプロンプトで同じトークンを使い回すタスクのコストを削減できる ように、Gemini 1.5 Pro と 1.5 Flash の両方の Gemini API でコンテキスト キャッシュを開始します。 https://developers.googleblog.com/ja/new-features-for-the-gemini-api-and-google-ai-studio/
  19. 主な機能(2024/6時点) •会話のコンテキストで回答を取得する •一般的なコンソールエラーの診断 •ソフトウェアの開発 •コードに関するチャット •インラインコードの提案を取得する •コードを変換する •コードをスキャンしてセキュリティの脆弱性を確認する • AWS

    Supportとのコンタクト •AWS Chatbotとして利用 • AWS Console Mobile Applicationで利用 https://docs.aws.amazon.com/amazonq/latest/qdeveloper- ug/features.html#memory を基に作成 区分 概要 CREATE コード生成、コードの説明、改善 AWS動画ではCOBOLからJavaやPythonに 変換を実施。JSプロジェクト作る例も多数 Test and Secure 単体テストコードの生成、脆弱性のスキャン、 セキュリティスキャン(PII抽出なども可能) セキュリティ観点でのコード改善 Operate AWSコンソールからの障害診断 VPC Reachability、ネットワーク診断 トラブルシューティング(AWSコンソールなど) https://www.youtube.com/watch?v=XxntU9swqYI を基に作成 •一般的なライブラリとフレームワークを Java 17 と互換性のあるバージョンにアップグレードします。 これには、Spring、Spring Boot、Junit、JakartaEEMockito、Hibernate、Log4j を利用可能な最新のメジャー バージョンに更新することが含まれます。 •Java 17 の推奨事項に従って、非推奨のコードコンポーネントを更新する https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/how-CT-works.html
  20. re:Invent2024でのアップデート ⚫Amazon Q Developer が運用調査機能を追加 (プレビュー版) ⚫Amazon Q Developer でコードレビューの自動化が可能に

    ⚫Amazon Q Developer がソースコード内でドキュメントを生成可能に ⚫Amazon Q Developer が機能開発を加速させるユニットテスト自動生成を発表 ⚫Amazon Q Developer が.NET 移植用のコード変換機能 (プレビュー) を提供開始 ⚫メインフレームのモダナイゼーション向け Amazon Q Developer 変換機能を提供開始 (プレ ビュー版) ⚫VMware 向け Amazon Q Developer 変換機能の発表 (プレビュー版) ⚫GitLab Duo with Amazon Q (プレビュー) の発表 プロンプトベースでは以前からもある程度、実装されていた機能が大幅に強化 CEO KeyNoteにおいても、10分強の時間を割いてプレゼンテーション
  21. 機能概要(青字は昨年6月からの更新分(著者調べ)) 大項目 小項目 Migration & Transfer ✓ Amazon Q Developer

    transformation web experience Analytics ✓ Summarizing your data Management and governance ✓ Exploring nodes using text prompts ✓ Investigating operational issues (preview) ✓ Taking inventory of your AWS resources ✓ Use Amazon Q in the AWS Console Mobile Application ✓ Diagnosing console errors Compute ✓ Choosing Amazon Elastic Compute Cloud instances Databases ✓ Writing database queries with natural language Networking and content delivery ✓ Analyzing network troubleshooting Developer tools ✓ Developing code features ✓ Getting inline code suggestions ✓ Chatting about code ✓ Reviewing your code for security vulnerabilities and quality issues ✓ Transforming code ✓ Generating unit tests ✓ Developing software in Amazon CodeCatalyst ✓ Chatting about code in Amazon SageMaker AI Studio ✓ Interacting with command line and AWS CloudShell Application integration ✓ Writing scripts to automate AWS services ✓ Writing ETL scripts and integrating data Third-party tools ✓ Using GitLab Duo with Amazon Q Cloud Financial Management ✓ Understanding your costs Customer support ✓ Getting customer support directly from Amazon Q ✓ Creating a support ticket ✓ Amazon Q in AWS Chatbot
  22. サポート言語・内容(青字は昨年6月からの更新分(著者調べ)) インライン提案 コード変換 コードレビュー Detective Library 自動コード 修正 ドキュメント 生成

    Java ◎→◎ 8,11 →17 17以前 ◯ 17以前 ◯ Python ◎→◎ ー 3.11 以前、3 シリーズ内 ◯ 3.11 以前、3 シリーズ内 ◯ JavaScript ◎→◎ ー ECMAScript 2021 以前 ◯ ECMAScript 2021 以前 ◯ TypeScript ◎→◎ ー すべて ◯ すべて ◯ JSX React17以前 ー C ◯→◎ ー C11以前 ◯ ー C++ ◯→◎ ー C++17以前 ◯ ー C# ◎→◎ Win→Linux(*) すべて (.Net 6.0 以降を推奨) ◯ すべて (.Net 6.0 以降推奨) ー Go ◎→◎ ー 1.18 ◯ ー ー PHP ◎→◎ ー 8.2以前 ◯ ー ー Rust ◎→◎ ー ー ー ー ー Kotlin ◎→◎ ー 2.0.0以前 ◯ ー ー SQL ◎→◎ Javaアプリ 埋め込み Oracle→ PostgreSQL (DMS) ー ー ー ー AWSCloudForm ation ◯→◎ ー 2010-09-09 2010-09-09 2010-09-09 ー HCL (Terraform) ◯→◎ ー 1.62以前 ◯ 1.62以前 ー CDK (Typescript、 Python) ◯→◎ ー ◯ ◯ ◯ ー Ruby ◯→◯ ー 2.7、3.2 ◯ 2.7、3.2 ー シェル ◯→◯ ー ー ◯ ー ー Scala ◯→◯ ー 3.2.2以前 ー ー ー
  23. Javaアプリアップグレードの仕組み AWS が構築した生成系 AI を活用したコード変換に加えて、Amazon Q Code Transformation では OpenRewr

    ite の一部を使用して、お客様の Java アップグレードをさらに加速しています。AWS では、サービスの多くがオープンソースコ ンポーネントで構築されており、これらのコミュニティの長期的な持続可能性を促進することは、AWS とお客様にとって非常に 重要です。だからこそ、OpenRewrite のようなコミュニティに貢献し、業界全体がそのイノベーションの恩恵を受け続けるこ とができるようにすることが当社にとって重要なのです。AWS は、Amazon Q Code Transformation のオープンソースへの 移行の一環として開発された OpenRewrite レシピと改善に貢献する予定です。 「ソフトウェアがはるかに速いペースで適応できることは、どの企業にとっても最も基本的な利点の 1 つです。だからこそ、AWS がオープンソースの自動コードリファクタリング技術である OpenRewrite をサービスの構成要素として使用していることは喜ば しいことです」と、Moderne (OpenRewrite のスポンサー) の CEO 兼共同創設者である Jonathan Schneider 氏は 述べています。「AWS が OpenRewrite コミュニティに参加してくれたことを嬉しく思います。フレームワークの移行、脆弱性へ のパッチ適用、API の更新をさらに簡単にするために AWS が貢献してくれることを楽しみにしています」。 AWS BLOG(Amazon Q Code Transformation による Java アプリケーションのアップグレード(プレ ビュー)) https://aws.amazon.com/jp/blogs/news/upgrade-your-java-applications-with-amazon-q-code-transformation-preview/
  24. OpenRewriteとは ⚫ ソース コードの自動リファクタリング エコシステム ⚫ 一般的なフレームワークの移行、セキュリティ修正、およびスタイルの一貫性タスク用のパッケージ化された オープンソースのリファクタリング レシピを実行する自動リファクタリング エンジンで構成

    ⚫ 商用プラットフォームは、(米)Moderne社が提供 •Common static analysis issue remediation •Automatically fix Checkstyle violations •Migrate to Java 17 •Migrate to JUnit 5 from JUnit 4 •Migrate to Spring Boot 3 from Spring Boot 2 •Migrate to Spring Boot 2 from Spring Boot 1 •Migrate to Quarkus 2 from Quarkus 1 •Migrate to SLF4J from Log4J •Migrate to Jakarta EE 10 レシピの例 public class JUnit5Migration extends Recipe { // Standard recipes descriptions and names ... @Override public List<Recipe> getRecipeList() { return Arrays.asList( new ChangeType("org.junit.Test", "org.junit.jupiter.api.Test", false), new AssertToAssertions(), new RemovePublicTestModifiers() ); } } レシピの実装例
  25. Javaバージョンアップ概要 • Apache Commons IO • Apache HttpClient • bc-fips

    • Cucumber-JVM • Hibernate • jackson-annotations • JakartaEE • Javax • javax.servlet • jaxb-api • jaxb-impl • jaxen • jcl-over-slf4j • json-simple • jsr305 • junit • junit-jupiter-api • Log4j • Micronaut • Mockito • mockito-core • Okio • PowerMockito • Quarkus • slf4j • slf4j-api • Spring Boot • Spring Framework • Spring Security • Swagger • testng •Java 17 の推奨事項に従って、廃止されたコードコンポーネントを更新 •一般的なライブラリとフレームワークを Java 17 と互換性のあるバージョンにアップグレード 次のライブラリとフレームワークを最新の利用可能なメジャーバージョンへの更新を含む(*) https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/how-CT-works.html より抜粋
  26. .Netアプリケーションの変換(プレビュー) ⚫コードベースを分析し、アプリケーションを移植するために必要な更新を決定し、変換を開始する前に変換計 画を生成します。この分析中、Amazon Q は .NETまたはプロジェクトを変換プランで表示できるコードグ ループに分割します。 コードグループ:動的リンクライブラリ (DLL) や実行可能ファイルなどのビルド可能なコード単位を一緒に生成する

    プロジェクトとそのすべての依存関係すべて ⚫アプリケーションを変換した後、Amazon Q は変更の差分ビューで生成し、変更を受け入れる前に検証できま す。変更を受け入れると、Amazon Q は NETソリューションまたはプロジェクトを更新します https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/transform-dotnet-IDE.html ①言語バージョンをアップグレード – 古いC#バージョンのコードをLinux対応のC#バージョンに置き換え ②.NET Frameworkからクロスプラットフォームの.NETへの移行 – プロジェクトやパッケージをWindows依存の.NET Frameworkから Linux対応のクロスプラットフォーム.NETに移行します。 ③Linux互換性のためにコードを書き直す – 非推奨の非効率なコードコンポーネントをリファクタリングし、書き直します。 ④Linux互換性の準備レポートを生成 – コードをLinux上でビルドおよび実行するためにユーザーの介入が必要なオープンエンドのタスクにつ いて、Amazon Qは変換後にアプリケーションを設定するために必要なアクションの詳細なレポートを提供します。
  27. 業務利用だと気になるところ Amazon Q Developer は 公開されているコードに 似たコードを生成しますか? 生成 AI として、Amazon

    Q Developer は、基礎となるモデルがトレーニングされたコードと、 コードやコメントで提供されたコンテキストから学習した内容に基づいて、新しいコードを作成しま す。Amazon Q Developer はトレーニングデータからコードを再現するようには設計されていま せんが、まれに公開されているコードにほぼ一致するコードを生成する可能性があります。 Amazon Q Developer の出力が一般に公開されているコードと一致することを検出した場合、 組み込みのリファレンストラッカーは、ライセンスのタイプ (例: MIT や Apache) と、一般に 公開されているコードの URL へのリファレンスをユーザーに通知します。これにより、リファレンス 付きのコードを簡単に検索して確認し、別のプロジェクトのコンテキストでどのように使用されている かを確認してから、そのコードを使用するかどうかを決定することができます。コーディングフローが 妨げられていない状況を確実に維持するために、すべてのリファレンスはログ記録され、後で確認で きるため、中断することなくコーディングを続けることができます。 https://aws.amazon.com/jp/q/developer/faqs/ を基に作成
  28. AWSのサービス条件(2024/12/6版) AWSのサービス条件 50.10. 補償対象生成AIサービスに関する請求の防御と補償 AWSサービスは、生成AI機能を組み 込み、生成AIアウトプットを貴社に提供する場合があります。「生成AIアウトプット」とは、貴社によって 提供されたインプットまたはその他のデータに応じて生成 人工知能モデルによって生成されたアウト プットを意味します。「補償対象生成AIサービス」とは、Amazon Nova

    Micro、Amazon Nova Lite、 Amazon Nova Pro、Amazon Nova Canvas、Amazon Nova Reel、Amazon Titan Text Express、Amazon Titan Text Lite、Amazon Titan Text Premier、Amazon Titan Text Embeddings、 Amazon Titan Multimodal Embeddings、Amazon Titan Image Generator、AWS HealthScribe、 Amazon Personalize、Amazon Q(旧称Amazon CodeWhisperer ProfessionalであるAmazon Q Developer Proのインラインコード提案を含みますが、Amazon Q Developer Free Tierを除きます)、 Amazon Connect Contact Lens、および Amazon Lexの一般的に利用可能な機能を総称したもので す。補償対象生成AIサービスには、以下の条件が適用されます。 50.10.1 本第50.10条の制限に従い、AWSは、補償対象生成AIサービスによって生成された生成AI アウトプットが第三者の知的財産権を侵害または不正流用したと主張する第三者か らの請求に対して、 貴社、貴社の従業員、役員、および取締役を防御し、不利な最終判決または和解の金額を支払うもの とします 50.13. Amazon Q Amazon Qが最も関連性の⾼い情報を提供できるようにするため、当社は、プ ロンプトや応答など、Amazon Qによって処理されたAIコンテンツ(「Amazon Qコンテンツ」)を以下に記載 するサービス改善のために使用する場合があります。現在、本第50.13条はAmazon Q Developer Free TierおよびAmazon Q Developer の運用調査(プレビュー)にのみ適用 され、サービス開始に伴 い、当社は随時Amazon Qの機能またはサービスを追加する場合があります。本第50.13条は、上記 以外のAmazon Qの機能またはサービスには適用されません。 50.13.1. サービス改善 貴社は、当社がAmazon Qおよびその基礎技術を開発および改善するため にAmazon Qコンテンツを使用する場合があること、およびこの⽬的のために、貴社がAmazon Qを使 用している AWSリージョン以外のAWSリージョンにAmazon Qコンテンツを保存する場合があることに 同意し、そのように指示します。 50.13.2. その他のサービス改善 貴社は、当社が個人データを含まないAmazon QコンテンツをAWS および関連会社の機械学習および人工知能技術の開発および改善(機械学習モデルのトレーニン グを含む)にも使用する 場合があることに同意し、そのように指示します。 50.13.3. その他の指示 貴社は、(i) AWS Organizationsを使用してAIサービスオプトアウトポリシーを 設定する、(ii) IDEでAmazon Qを使用している場合は、IDEで設定を調整する、または (iii) Amazon Qの ⽂ 書に記載されているオプトアウトメカニズムを使用することにより、本第50.13条に記載されているサー ビス改善のためにAWSがAmazon Qコンテンツを使用および保存しないようにAWSに指示する ことがで きます。 https://d1.awsstatic.com/legal/awsserviceterms/AWS_Service_Terms_2024-03-27_JA_clean.pdf より抜粋
  29. Amazon Q Developer Free VS Pro 区分 概要 無料 Pro(19

    USD/月/ユーザー) IDE コード補完 含まれています 含まれています チャット (プロジェクト全体のコンテキスト) 50 回のチャットインタラクション/月 利用料に含まれる Amazon Q Developer Agent for Software Development (セキュリティ脆弱性とコード品質スキャンを含む)* 1 か月あたり 10 回の呼び出し 利用料に含まれる Java アップグレードのための Amazon Q Developer 向けトランスフォーメーション機能 ** 1,000 行のコード/月 1 ユーザーあたり毎月 4,000 行。追加のコード行は、送 信するコード 1 行につき 0.003 USD ご利用* Amazon Q Developer 向けインラインコードレコメンデーションとチャット応答をカスタマイ ズ 利用不可 利用料に含まれる コンソール 一般的な質疑応答 含まれています 利用料に含まれる EC2 インスタンスの選択 利用料に含まれる 含まれています 生成 SQL アカウントあたり 1,000 件のクエリ/月 利用料に含まれる コンソールでのよくあるエラーの診断 利用料に含まれる 含まれています ネットワーク到達可能性の分析 20 件のリクエスト/日 利用料に含まれる データ統合 含まれています 利用料に含まれる 運用調査 (プレビュー) 利用料に含まれる 利用料に含まれる AWS アカウントとリソースコンテキストでチャット 1 アカウントあたり 25 USD/月 利用料に含まれる コマンドライン パブリック CLI 補完 含まれています 含まれています チャット 50 回のチャット/月 含まれています Amazon CodeCatalyst Amazon Q Developer Agent for Software Development* 5 回/月 利用料に含まれる プルリクエストの要約 5 回/月 利用料に含まれる 機械学習 Amazon SageMaker Studio の Amazon Q Developer 利用料に含まれる 利用料に含まれる Amazon SageMaker Canvas の Amazon Q Developer (プレビュー) 利用料に含まれる 利用料に含まれる Amazon SageMaker Unified Studio の Amazon Q Developer (プレビュー) 利用料に含まれる 利用料に含まれる 管理 分析ダッシュボード/ユーザー管理/ポリシー なし あり セキュリティと プライバシー リファレンストラッキング・パブリックコードの提案の抑制 あり あり 認証 AWS ビルダー ID または IAM ユーザー IAM アイデンティティセンター データ収集 オプトアウト可能 自動的にオプトアウトされています IP 補償 いいえ 利用料に含まれる https://aws.amazon.com/jp/q/developer/pricing/ を基に作成
  30. インストール [参考] https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html 1.IDEにプラグインを追加(JetBrains、VSCode、 VisualStudio) 2.AWSの認証を設定 無料版:ビルダーIDにて可 有償版: IAM Identity

    Centerにユーザ・グループを作成 許可セットを作成し、アカウントに付与、 アプリケーションの割当を実施 Amazon Q Developer Proのサブスクを購入 3.IDEより認証 Amazon Q DeveloperのStartURLを基に認証 *認証がうまくいかない場合は、キャッシュクリア推奨(IntelliJ) *プレビュー版を使う場合はSettingsよりAmazon Q Developer: Transform settingsを有効に変更
  31. SpringBoot関連 @RequestMapping(method = RequestMethod.GET) String reserveForm(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @PathVariable("date") LocalDate

    date, @PathVariable("roomId") Integer roomId, Model model) { @GetMapping String reserveForm(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @PathVariable LocalDate date, @PathVariable Integer roomId, Model model) { @RequestMapping(method = RequestMethod.POST) String reserve(@Validated ReservationForm form, BindingResult bindingResult, @AuthenticationPrincipal ReservationUserDetails userDetails, @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @PathVariable("date") LocalDate date, @PathVariable("roomId") Integer roomId, Model model) { @PostMapping String reserve(@Validated ReservationForm form, BindingResult bindingResult, @AuthenticationPrincipal ReservationUserDetails userDetails, @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @PathVariable LocalDate date, @PathVariable Integer roomId, Model model) {
  32. Amazon Q Detector Library(Java) 各種のセキュリティルールについても、公開。 ✓ Reflected cross site scripting

    ✓ Mandatory method not called after object creatio n ✓ Process empty record list in Amazon KCL ✓ AWS object presence check ✓ Missing timeout check on CountDownLatch.await ✓ Unspecified default value ✓ Device Permission Usage ✓ Deserialization of untrusted object ✓ Preserve thread interruption status rule ✓ Missing check on the value returned by moveToF irst API ✓ Missing timeout check on ExecutorService.awaitT ermination ✓ Overflow when deserializing relational database objects ✓ Custom manual retries of AWS SDK calls ✓ Missing null check for cache response metadata ✓ Inefficient usage of Transaction library from AWS Labs ✓ Insecure connection using unencrypted protocol ✓ Inefficient additional authenticated data (AAD) a uthenticity ✓ Use of a deprecated method ✓ Error-prone AWS IAM policy creation ✓ Use of externally-controlled input to build connec tion string ✓ Inefficient Amazon S3 manual pagination ✓ Mutually exclusive call ✓ AWS Lambda client not reused ✓ Missing check on the result of createNewFile ✓ Sensitive data stored unencrypted due to partial encryption ✓ Missing statement to record cause of InvocationT argetException ✓ Misconfigured Concurrency ✓ Inefficient polling of AWS resource ✓ Improper Initialization ✓ Unexpected re-assignment of synchronized objec ts ✓ XPath injection ✓ AWS client not reused in a Lambda function ✓ Long polling is not enabled in Amazon SQS ✓ Insecure temporary file or directory ✓ HTTP response splitting ✓ Input and output values become out of sync ✓ Server-side request forgery ✓ Missing Authorization for address id ✓ Do not catch and throw exception ✓ Concurrency deadlock ✓ Not recommended aws credentials classes ✓ Path traversal ✓ Override of reserved variable names in a Lambda function ✓ Missing byte array length of JSON parser ✓ Usage of an API that is not recommended ✓ Hardcoded credentials ✓ Insecure JSON web token (JWT) parsing ✓ Not calling finalize causes skipped cleanup steps ✓ Unchecked S3 object metadata content length ✓ Untrusted data in security decision ✓ Permissive cors configuration rule ✓ Insecure cookie ✓ Resource leak ✓ XML External Entity ✓ Bad parameters used with AWS API methods ✓ Missing position check before getting substring ✓ LDAP injection ✓ Avoid reset exception in Amazon S3 ✓ Insecure hashing ✓ Backward compatibility breaks with error messag e parsing ✓ Inefficient map entry iteration ✓ Missing S3 bucket owner condition ✓ AWS DynamoDB getItem output is not null chec ked ✓ Invalid public method parameters ✓ Log injection ✓ Sensitive information leak ✓ Usage of multiple date time pattern formatter ✓ Synchronous publication of AWS Lambda metrics ✓ XML External Entity Document Builder Factory ✓ Improper use of classes that aren't thread-safe ✓ Incorrect null check before setting a value ✓ Insufficient use of name in Amazon SQS queue ✓ Missing check on the value returned by ResultSet. next ✓ Insecure TLS version ✓ Unsanitized input is run as code ✓ Use an enum to specify an AWS Region ✓ Improperly formatted string arguments ✓ Improper service shutdown ✓ Unrestricted upload of dangerous file type ✓ Untrusted AMI images ✓ Insecure SAML parser configuration ✓ Cross-site request forgery ✓ Case sensitive keys in S3 object user metadata ✓ Stack trace not included in re-thrown exception ✓ Region specification missing from AWS client initi alization ✓ Insufficient number of PBEKeySpec iterations ✓ URL redirection to untrusted site ✓ Use of externally-controlled input to select classe s or code ✓ Missing encryption of sensitive data in storage ✓ Ignored output of DynamoDBMapper operations ✓ Null pointer dereference ✓ Cross-site scripting ✓ Unauthenticated LDAP requests ✓ Use of inefficient APIs ✓ Low maintainability with old Android features ✓ Atomicity violation ✓ Missing handling of specifically-thrown exception s ✓ Weak obfuscation of web request ✓ Clear text credentials ✓ Session fixation ✓ Catching and not re-throwing or logging exceptio ns ✓ Missing check when launching an Android activity with an implicit intent ✓ Client constructor deprecation ✓ Inefficient use of stream sorting ✓ Arithmetic overflow or underflow ✓ Simplifiable code ✓ Loose file permissions ✓ Manual pagination ✓ Incorrect string equality operator ✓ Inefficient chain of AWS API calls ✓ OS command injection ✓ Internationalization ✓ Code clone ✓ SQL injection ✓ Missing check on method output ✓ Missing pagination ✓ Resources used by an Amazon S3 TransferManag er are not released ✓ Insecure cryptography ✓ Missing timezone of SimpleDateFormat ✓ Low maintainability with low class cohesion ✓ Oversynchronization ✓ Infinite loop ✓ Batch operations preferred over looping ✓ Object Input Stream Insecure Deserialization ✓ Weak pseudorandom number generation ✓ Insecure CORS policy ✓ Missing handling of file deletion result ✓ Amazon SQS message visibility changed without a status check ✓ State machine execution ARN is not logged ✓ Client-side KMS reencryption ✓ Use Stream::anyMatch instead of Stream::findFir st or Stream::findAny ✓ Batch request with unchecked failures https://docs.aws.amazon.com/codeguru/detector-library/java/ より引用
  33. ドキュメント生成(2/2) # Spring Framework Benchmarks This project contains a set

    of benchmarks for various components of the Spr ing Framework, focusing on performance testing and optimization. The benchmarks in this project are designed to measure the performance of specific Spring Framework components and utilities. These benchmarks use the Java Microbenchmark Harness (JMH) to provide accurate and repeatabl e performance measurements. ## Repository Structure ``` . └── java └── org └── springframework ├── core │ ├── codec │ │ └── StringDecoderBenchmark.java │ ├── convert │ │ └── support │ │ └── GenericConversionServiceBenchmark.java │ └── env │ └── CompositePropertySourceBenchmark.java └── util ├── ConcurrentLruCacheBenchmark.java ├── ConcurrentReferenceHashMapBenchmark.java ├── ReflectionUtilsUniqueDeclaredMethodsBenchmark.java └── StringUtilsBenchmark.java ``` The repository is organized into packages that correspond to the Spring Fra mework structure. Each benchmark class is located in its respective package based on the component it tests. ## Usage Instructions ### Prerequisites - Java Development Kit (JDK) 8 or higher - Maven or Gradle (for dependency management and building) ### Running the Benchmarks To run a specific benchmark, use the following command: ``` java -jar spring-core-jmh.jar [options] [benchmark-name] ``` For example, to run the ConcurrentReferenceHashMapBenchmark: ``` java -jar spring-core-jmh.jar -t 30 -f 2 ConcurrentReferenceHashMapBench mark ``` Options: - `-t`: Specifies the number of threads to use - `-f`: Specifies the number of forks (separate JVM instances) ### Benchmark Classes 1. **GenericConversionServiceBenchmark**: Tests the performance of conv erting collections using GenericConversionService. 2. **ConcurrentReferenceHashMapBenchmark**: Compares the performanc e of ConcurrentReferenceHashMap with Collections.synchronizedMap(Map). 3. **CompositePropertySourceBenchmark**: Measures the performance of r etrieving property names from CompositePropertySource. 4. **StringDecoderBenchmark**: Tests the performance of parsing Server-S ent Events (SSE) lines using StringDecoder. 5. **StringUtilsBenchmark**: Benchmarks various utility methods in StringUt ils, such as collectionToDelimitedString and cleanPath. 6. **ConcurrentLruCacheBenchmark**: Measures the throughput of the Con currentLruCache. 7. **ReflectionUtilsUniqueDeclaredMethodsBenchmark**: Tests the perform ance of finding unique declared methods using ReflectionUtils. ## Data Flow The benchmarks typically follow this general flow: 1. Setup: Initialize test data and benchmark state. 2. Execution: Run the benchmarked method or operation. 3. Measurement: JMH measures the performance metrics (e.g., throughput, average time). 4. Results: JMH outputs the benchmark results. ``` [Setup] -> [Execution] -> [Measurement] -> [Results] ``` ## Troubleshooting ### Common Issues 1. **OutOfMemoryError**: - Problem: JVM runs out of memory during benchmark execution. - Solution: Increase the heap size using the `-Xmx` JVM option, e.g., `java -Xmx4g -jar spring-core-jmh.jar ...` 2. **Inconsistent Results**: - Problem: Benchmark results vary significantly between runs. - Solution: Increase the number of measurement iterations and forks to re duce variability. Use options like `-i 10 -f 3`. ### Debugging To enable verbose logging for JMH: ``` java -jar spring-core-jmh.jar -v EXTRA [benchmark-name] ``` JMH log files are typically located in the current working directory with name s like `jmh-result.text` or `jmh-result.json`. ### Performance Optimization - Monitor CPU usage and memory consumption during benchmark execution. - Use profiling tools like VisualVM or YourKit to identify bottlenecks. - Consider warm-up iterations to stabilize JVM performance before measure ment. For specific performance issues, refer to the individual benchmark class doc umentation for tailored optimization strategies.
  34. まとめ ✓ 生成AIのトレンド、DevOps/DecSecOps、セキュリティ系製品の一部を紹介 ✓ 昨今の生成AIの、アップグレード機能につき紹介(AWSを皮切りに、各社順次リリース見込み) ✓ Amazon Q Developerによる、マイグレーションとセキュリティ機能、新規機能を紹介 ✓

    機能改修や言語サポート、セキュリティ機能は、当面、大幅拡張が続く見込み ✓ クラウド開発者はもとより、オンプレ技術者やメインフレーム開発者も、クラウドベンダー提供のツール活用 が予測される ✓ アプリケーション開発者・インフラ技術者も、利用するツールが、より集約されるものと思慮 (AWSの場合、Cloud 9 離れ、Amazon Qなど。) ✓ 最終的には、各社コンピューティングの場所と開発環境の場所が入り乱れ、 自然とマルチクラウド/ハイブリッドクラウドが進むものと予測(Platform engineeringはより⾼度化) ✓ セキュリティ担当は、より広範なアンテナ/知識が、求められる。