Amazon Web Services ブログ

SDV (ソフトウェア定義車両)向け AUTOSAR 開発を Amazon Q Developer で加速

自動車業界は、車両がメカ主体のシステムから高度なコンピューティングプラットフォームへと進化する中で、大きな変革期を迎えています。この進化の中心にあるのが、SDV (ソフトウェア定義車両) であり、ソフトウェア機能が業界のイノベーションと差別化を牽引し続けています。現代の車両には、安全システムからドライバー支援、インフォテインメント機能まで、複数の電子制御ユニット( ECU )にわたって1億行ものコードが含まれています。

自動車システムにおけるハードウェアとソフトウェアの関係性の管理は、特に安全性、セキュリティ、および AUTOSAR (AUTomotive Open System ARchitecture: 車載ソフトウェア開発の国際標準規格)などの業界標準への適合性を確保する際に課題となります。 AUTOSAR は車載組込みソフトウェアの標準化の基盤として機能し、ソフトウェアアーキテクチャ、通信プロトコル、開発手法を包括的なフレームワークとして提供しています。自動車メーカーは AUTOSAR 標準に準拠することで、厳格な機能安全要件を満たしながら、システムの相互運用性と拡張性を確保することができます。

これらの課題に対応するため、 Amazon Q Developer は、一般的な統合開発環境( IDE )および Amazon Web Services, Inc. (AWS) Management Console と連携する AI 駆動の専門的なコーディング支援ツールを提供しています。このツールは、コードスニペットの生成と説明、文脈に応じたドキュメンテーションの提供、コードの提案、リファクタリングと最適化の支援、デバッグとトラブルシューティングのサポート、そして C 、 C++ 、 Python を含む様々なプログラミング言語のサポートを通じて、自動車ソフトウェア開発者を支援します。顧客からは、初期開発が 25% 速くなり、開発者の生産性が最大 40% 向上したとの報告があります。

このブログでは、自動車ソフトウェア開発者が Amazon Q Developer を使用して AUTOSAR classic の C/C++ コードを生成する方法について、実践的な例を示します。さらに、 AUTOSAR ソフトウェアコンポーネントを定義する XML ( eXtensible Markup Language :拡張可能なマークアップ言語)モデルの作成を効率化するための Python の活用方法を探り、業界標準を維持しながら自動車ソフトウェア開発のワークフローを加速する方法をご紹介します。

前提条件:

このブログで説明されているデモを自身の IDE で実行するには、以下を確認してください:

  • インストールガイドに従って、お好みの IDE に Amazon Q Developer プラグインをインストールする。
  • 個人のコンピュータに Python と C のプログラミング環境をセットアップする。

**Amazon Q Developer は AWS アカウントがなくても利用可能で、無料利用枠に含まれています。 Amazon Q Developer ライセンスのアップグレードに関心のあるお客様は、こちらで詳細をご確認いただけます。

重要な注意点として、 Amazon Q Developer のコード生成は、ユーザー定義の標準への準拠を保証するものではなく、開発者は生成されたコードを確認し検証する必要があります。また、生成 AI の非決定論的な性質により、 Amazon Q Developer は以下の例で示すものとは異なる結果を生成する可能性があります。なお、以下のコード例は本番環境での使用を想定したものではありませんのでご注意ください。

AUTOSAR classic ソフトウェア開発の加速化 – ソリューション概要

Amazon Q Developer が開発者をどのように支援できるかを示すため、以下の3つの簡単な例を説明します:

  • ユースケース 1 – AUTOSAR の C/C++ を使った、 LED の点滅とユニットテストの生成
  • ユースケース 2 – AUTOSAR の C/C++ を使った、ECU から CAN メッセージの送信
  • ユースケース 3 – AUTOSAR の Python を使ったパッケージコンポーネントを定義

これらの例は、 AUTOSAR の開発における一般的かつ初心者にも分かりやすいユースケースを示しています。学習目的で簡略化されていますが、実際の自動車アプリケーションに直接対応しています。例えば、 LED の制御は、周囲光センサーに基づく自動ヘッドライト点灯などの量産車の照明システムで見られる論理パターンと類似しています。 CAN メッセージングの例は、トランスミッション ECU からメーター表示への速度情報の送信など、車両データの伝送方法を示しています。

ユースケース 1 – AUTOSAR の C/C++ で LED の点滅とテストケースおよびユニットテストの生成

まず、 Amazon Q Developer のインラインコード補完と推奨機能が、機能的なコードと対応するユニットテストを自動的に生成することで、ソフトウェア開発者の AUTOSAR 開発をどのように効率化できるかを実証します。基本的な LED 点滅アプリケーションを例として使用し、このツールが AUTOSAR タスクを作成し、機能を検証するためのユニットテストを生成する方法を示します。

始めるには、「前提条件」セクションで説明したように、 Amazon Q Developer プラグインをインストールしたIDEを開きます。 Amazon Q Developer で認証した後、プロジェクトで「 examplec1.c 」という新しい C ファイルを作成し、以下のサンプルコードをコピーします。このコードには、 AUTOSAR 基盤の LED 点滅アプリケーションに必要なヘッダーと LED ピン設定が含まれており、 Amazon Q Developer に生成すべきコードの種類とユースケースのコンテキストを提供します。

サンプルコードの開始:

#include "Dio.h" /* AUTOSAR DIO (Digital Input/Output) module header */
#include "Os.h" /* AUTOSAR OS (Operating System) module header */

/* AUTOSAR RTE (Runtime Environment) generated headers */
#include "Rte_Main.h" 

/* LED pin configuration */
#define LED_PIN 0x01U

これで基本的な LED ピン設定のセットアップができたので、 Amazon Q Developer を使用して LED を点滅させる AUTOSAR タスクを作成しましょう。 IDE で、前のステップで example1.c ファイルにコピーしたサンプルコードの下の新しい行に以下のコメントをコピーしてください(図 1 に示すとおり)。 サンプルコメント:

/* Create an AUTOSAR task for a LED blinking */

カーソルをこのコメントの末尾に置いて Enter キーを押してください。 Amazon Q Developer はこのコメントを解釈し、 LED 点滅タスクに適した AUTOSAR 準拠のコードを生成します。

**注意: Amazon Q Developer は非決定論的であり、以下に示す推奨コードと同じものが生成されるという保証はありません**

図 1 : Amazon Q Developer を使用して LED 点滅タスクの生成を支援

コード推奨を受け入れるには、 Tab キーを使用します。すると、ファイルは以下のコードのようになります:

更新されたサンプルコード:

#include "Dio.h" /* AUTOSAR DIO (Digital Input/Output) module header */
#include "Os.h" /* AUTOSAR OS (Operating System) module header */

/* AUTOSAR RTE (Runtime Environment) generated headers */
#include "Rte_Main.h" 

/* LED pin configuration */
#define LED_PIN 0x01U

/* Create an AUTOSAR task for a LED blinking*/
TASK(LedBlinkTask) {
    static boolean led_state = FALSE;

    /* Toggle LED state */
    led_state = !led_state;

    /* Set LED pin state */
    Dio_WriteChannel(LED_PIN, led_state);
}

これで AUTOSAR タスクが定義できましたので、次に必要なモジュールを初期化し、 LED 点滅タスクの周期実行をセットアップするメイン関数を作成する必要があります。適切なコードの生成のため、以下のコメントを Amazon Q Developer に入力してください:

サンプルコメント:

/* Create the AUTOSAR main function */

上記と同様に、コメントの末尾にカーソルを置いて Enter キーを押すことで、 Amazon Q Developer のインラインコード補完を起動します。

図 2 :メイン関数の開発

図 2 に示されているように、 Amazon Q Developer は開発者のレビュー用に必要な AUTOSAR の初期化とスケジューリングコードを正常に生成しました。メイン関数には、 AUTOSAR を初期化するための StartOS() 、 LEDBlinkTask との統合、そして LED 点滅用の 500ms タイマーの設定が含まれています。

更新されたサンプルコード:

#include "Dio.h" /* AUTOSAR DIO (Digital Input/Output) module header */
#include "Os.h" /* AUTOSAR OS (Operating System) module header */

/* AUTOSAR RTE (Runtime Environment) generated headers */
#include "Rte_Main.h" 

/* LED pin configuration */
#define LED_PIN 0x01U

/* Create an AUTOSAR task for a LED blinking*/
TASK(LedBlinkTask) {
    static boolean led_state = FALSE;

    /* Toggle LED state */
    led_state = !led_state;

    /* Set LED pin state */
    Dio_WriteChannel(LED_PIN, led_state);
}

/* Create the AUTOSAR main function */ 
MAIN(void) {
    /* Initialize AUTOSAR modules */
    StartOS(MainOsInstConst);

    /* Create periodic task for LED blinking */
    GetTaskID(&LedBlinkTaskId);
    SetRelAlarm(LedBlinkTaskId, 500, 500); /* 500ms period */

    return 0;
}

わずか数分で、シンプルなインラインコメントを使用して、 Amazon Q Developer で LED 点滅タスクの AUTOSAR コードを生成することができました。この例は、 Amazon Q Developer がワークスペースのコンテキストに基づいてタスクを自動化することで、自動車ソフトウェア開発を加速できることを示しています。現代のソフトウェア定義車両( SDV )には、ハザードライトからダッシュボードインジケーターまで、数多くの LED が搭載されています。それぞれが特定のタイミングとパターンを必要とし、自動車メーカーが満たさなければならない厳格な安全基準に準拠する必要があります。 Amazon Q Developer は、コードを生成することで自動車メーカーのソフトウェア開発を加速し、反復的なタスクを削減しながら迅速なプロトタイピングを可能にし、 AUTOSAR 標準を維持することを支援します。

テストケースの作成

Amazon Q Developer のもう一つの価値ある機能は、ユニットテストを生成する能力です。これにより、ソフトウェア開発者はコードが必要な仕様を満たし、エッジケースを効果的に処理することを確認できます。この機能を実証するために、先ほど生成した LED 点滅コードを基に、包括的なユニットテストを作成します。このプロセスでは、 LEDBlinkTask とメイン関数の両方をカバーします。この機能を活用するために、 Amazon Q Developer のチャット機能を使用します。これにより、より対話的でコンテキストを意識したコード生成が可能になります。既存のコードとテスト要件を Amazon Q Developer に提供することで、様々なシナリオやエッジケースをカバーする関連性の高いユニットテストを迅速に生成することができます。

Amazon Q Developer のチャット機能を使用するには、前のステップで生成したコードを選択して右クリックします。ドロップダウンメニューから、図 3 に示すように Amazon Q → Send to prompt を選択します。

図 3 : Amazon Q Developer チャットへのコード送信

チャットで以下のプロンプトを入力して Enter を押します:

Create unit test cases for the functions in this file

図 4 : Amazon Q Developer チャットで生成されたテストケース

Amazon Q Developer は、 LedBlinkTask とメイン関数のテストケースを生成することができます。以下は、 Amazon Q Developer が生成したメイン関数のテストケースとユニットテストの更新されたコードです:

Generate AUTOSAR classic code which will make the ECU send a CAN message with the 4th bit set to 1 when the voltage on pin 1 drops

ユースケース 2 – ECU から CAN メッセージの送信

この例では、 Amazon Q Developer を使用して、現代の車両で電気部品の健全性を監視するために一般的に必要とされる電圧監視システムを作成します。具体的には、定期的にピンの電圧を確認し、レベルが閾値を下回った場合に Controller Area Network ( CAN )メッセージを送信する AUTOSAR C コードを生成します。この種の機能は、電気部品の健全性を監視し、潜在的な問題を検出するために自動車システムで一般的に使用されています。

新しい Amazon Q Developer チャットウィンドウを開き、以下のプロンプトを入力してください(別の方法として、 AWS Command Line Interface (CLI) を使用することもできます):

図 5 :新しいチャットウィンドウを開き、 Amazon Q にプロンプト入力

シンプルなプロンプトを使用するだけで、 Amazon Q Develope rは電圧監視のための完全な AUTOSAR classic アプリケーションを生成します。サンプルコードは必要ありません。生成されたコードは、ピンの監視から CAN メッセージの送信まですべてを処理し、 Amazon Q Developer の AUTOSAR アーキテクチャと自動車システムに関する深い理解を示しています。以下のコード構造をご覧ください:

図 6 : Amazon Q Developer チャットで生成されたコード

新しい C ファイルを作成し、コードをコピー・ペーストしてください:

/* Include necessary AUTOSAR headers */
#include "Std_Types.h"
#include "Can.h"
#include "CanIf.h"
#include "Com.h"
#include "Dio.h"
#include "Adc.h"

/* Define constants */
#define PIN_1_ADC_CHANNEL 0
#define VOLTAGE_THRESHOLD 2000 // Assuming 2V threshold, adjust as needed
#define CAN_MESSAGE_ID 0x100
#define CAN_MESSAGE_DLC 1

/* Global variables */
static uint8 g_canMessageData = 0x00;
static boolean g_voltageDropDetected = FALSE;

/* Function prototypes */
void InitializeModules(void);
void CheckVoltage(void);
void SendCanMessage(void);

/* Main function */
void MainFunction(void)
{
    InitializeModules();
    
    while(1)
    {
        CheckVoltage();
        if (g_voltageDropDetected)
        {
            SendCanMessage();
        }
    }
}

/* Initialize required modules */
void InitializeModules(void)
{
    /* Initialize ADC */
    Adc_Init(NULL);
    
    /* Initialize CAN */
    Can_Init(NULL);
    CanIf_Init(NULL);
    Com_Init(NULL);
}

/* Check voltage on pin 1 */
void CheckVoltage(void)
{
    Adc_ValueGroupType adcResult;
    
    /* Start ADC conversion */
    Adc_StartGroupConversion(PIN_1_ADC_CHANNEL);
    
    /* Wait for conversion to complete */
    while (Adc_GetGroupStatus(PIN_1_ADC_CHANNEL) == ADC_BUSY) {}
    
    /* Read ADC result */
    Adc_ReadGroup(PIN_1_ADC_CHANNEL, &adcResult);
    
    /* Check if voltage has dropped below threshold */
    if (adcResult < VOLTAGE_THRESHOLD)
    {
        g_voltageDropDetected = TRUE;
    }
    else
    {
        g_voltageDropDetected = FALSE;
    }
}

/* Send CAN message with 4th bit set to 1 */
void SendCanMessage(void)
{
    PduInfoType pduInfo;
    
    /* Set the 4th bit (index 3) to 1 */
    g_canMessageData |= (1 << 3);
    
    /* Prepare PDU info */
    pduInfo.SduDataPtr = &g_canMessageData;
    pduInfo.SduLength = CAN_MESSAGE_DLC;
    
    /* Send CAN message */
    Com_SendSignal(CAN_MESSAGE_ID, &pduInfo);
}

Amazon Q Developer が生成したコードを確認すると、変数定義、メイン関数、電圧確認と CAN メッセージ送信のための専用関数を含む包括的な構造が見られます。この例は、 Amazon Q Developer がコード推奨を提供することで、自動車ソフトウェア開発者のイノベーションを促進できることを示しています。このコードは本番環境での使用準備が整っているわけではなく、ユニットテスト、不正な応答のチェックなど、開発者による調整が必要ですが、開発者に強固な起点を提供します。これにより、初期開発時間を大幅に削減し、自動車ソフトウェア開発チームが特定の車両要件に合わせたカスタマイズと最適化に集中できるよう支援します。

ユースケース 3 – AUTOSAR の Python でのパッケージコンポーネント定義

最後のユースケースでは、 Python を使用した AUTOSAR XML ファイルの作成における Amazon Q Developer の活用を探ります。これらの XML ファイルは、 AUTOSAR Classic コンポーネントの構成要素を定義するため重要です。 ‘os’ と ‘autosar.xml’ ライブラリをインポートする簡単な Python スクリプトから始めて、 Amazon Q Developer が AUTOSAR コンポーネントの設定という煩雑なプロセスの自動化をどのように支援できるかを実証します。サンプルコードには “AUTOSAR” リポジトリを使用します。

Amazon Q Developer をインストールした IDE で新しい Python ファイルを開きます。必要な Python ライブラリをインポートすることから始めましょう:

サンプルコード:

import os
import autosar.xml

次に、以下のサンプルコメントを使用して、 AUTOSAR ワークスペースとパッケージを作成することでコードのエントリーポイントを作成できます。

サンプルコメント:

# Create workspace and packages

前のユースケースと同様に、上記のコメントをコピーして Enter を押し、 Amazon Q Developer のコード提案を確認します。 Tab を押して、提案されたコードを採用してください。

図 7 : uint8 基本型定義のためのコメント部分を Amazon Q が補完

更新されたサンプルコード:

import os
import autosar.xml
# Create workspace and packages
ws = autosar.xml.Workspace()
ワークスペースのセットアップが完了したので、コードを以下のように更新します:
import os
import autosar.xml
# Create workspace and packages
ws = autosar.xml.Workspace()
# Create a package map with parameters base types and implementation data types
ws.create_package_map({"BaseTypes": "DataTypes/BaseTypes",
                            "ImplementationDataTypes": "DataTypes/ImplementationDataTypes"})
print(ws.get_package("BaseTypes").name)
このコードにより、基本型と実装データ型のパッケージマップを作成しました。残りの機能の開発を加速するため、基本型を出力表示しています。これにより Amazon Q Developer が既存コードのパターンを学習し、実装データ型の新しい出力文を自動補完できるようになります。

図 8 : Amazon Q Developer が前のコードから学習し、 uint8 基本型定義のコメント部分を補完することで、反復的なタスクとプロセスを加速化

更新されたサンプルコード:

import os
import autosar.xml
# Create workspace and packages
ws = autosar.xml.Workspace()
# Create a package map with parameters base types and implementation data types
ws.create_package_map({"BaseTypes": "DataTypes/BaseTypes",
                            "ImplementationDataTypes": "DataTypes/ImplementationDataTypes"})
print(ws.get_package("BaseTypes").name)
print(ws.get_package("ImplementationDataTypes").name)

この例は、デモンストレーション目的で簡略化されていますが、 Amazon Q Developer が Python での AUTOSAR XML ファイル作成を自動車ソフトウェア開発者にとってどのように効率化できるかを示しています。特に注目すべきは、 Amazon Q Developer のパターン認識能力です。既存のコードから学習することで、 Amazon Q Developer は類似の操作に対して適切な提案を行い、開発時間を大幅に削減できます。本番環境での使用にはさらなる拡張が必要ですが、 Amazon Q Developer が AUTOSAR コンポーネント設定という複雑なプロセスの効率化をどのように支援できるかを示しています。

クリーンアップ

Amazon Q Developer には、毎月最大 50 回までの IDE 操作が可能な無料利用枠があります。このデモンストレーションは無料枠の制限内ですが、今回作成したものをクリーンアップする場合は、以下の手順に従ってください:

  • お使いの IDE で作成したファイルを削除
  • お使いの IDE の手順に従って Amazon Q Developer 拡張機能をアンインストール

結論

このブログ記事では、 Amazon Q Developer が AI 駆動のコード推奨機能を通じて、自動車メーカーのソフトウェア開発プロセスをどのように加速できるかを探りました。実践的な例として、3 つの主要アプローチを実証しました: (a) インラインコメントを使用した AUTOSAR コードの生成支援、 (b) Amazon Q チャットを使用した包括的なユニットテストの作成、 (c) Python での AUTOSAR パッケージコンポーネントの定義です。これらの例は Amazon Q Developer の開発時間削減における強力な機能を示していますが、生成されたコードは本番環境での使用前に徹底的なレビューとカスタマイズが必要であることを忘れないことが重要です。 Amazon Q Developer は開発サイクルを加速し、反復的なコーディング作業を削減する知的なアシスタントとして機能しますが、専門的なソフトウェア開発者の判断と自動車業界のベストプラクティスを補完するものであり、置き換えるものではありません。

Amazon Q Developer の詳細については、 Amazon Q Developer 入門ページをご覧いただくか、 AWS チームまでお問い合わせください。

このブログの翻訳はソリューションアーキテクトのショーン・セーヒーが担当しました。原文は「 Helping Accelerate AUTOSAR development for Software Defined Vehicles with Amazon Q Developer 」です。