アプリケーション開発において、ユーザーに対して検証コード、通知、またはプロモーションキャンペーンをモバイルメッセージで送信する必要が生じることがあります。たとえば、ユーザー登録時の検証コードの送信や、注文ステータス更新に関する通知の送信などが該当します。本トピックでは、Short Message Service (SMS) API を自動的に呼び出してメッセージを配信するために、Alibaba Cloud SDK を迅速かつ安全に活用する方法について説明します。
アーキテクチャ
メッセージ送信は、お客様のアプリケーション、Alibaba Cloud SDK、Resource Access Management (RAM)、および SMS サービス間の安全な連携によって実現されます。
このプロセスは、開発者が Alibaba Cloud SDK をアプリケーションに統合することから始まります。セキュリティを確保するため、RAM を使用して、アプリケーションが SMS サービスにアクセスするために必要な権限を、一連の認証情報(AccessKey ペアなど)を通じて付与します。これらの認証情報を用いて、アプリケーションは SMS API への呼び出しを開始できます。Alibaba Cloud サーバーはリクエストを認証し、承認された場合、メッセージを SMS ゲートウェイへ転送して、通信事業者ネットワーク経由でユーザーのデバイスへ配信します。
本ガイドでは、SendMessageToGlobe を例として、SMS API の呼び出し手順を解説します。以下の内容を学習できます。
認証情報の構成
SMS リソースの管理権限を持つ RAM ユーザーを作成し、AccessKey ペア を作成します。
説明 セキュリティのため、Alibaba Cloud アカウントではなく、API 呼び出しおよび日常的な操作には RAM ユーザーをご利用ください。
RAM ユーザーの作成と権限付与
RAM ユーザーおよび AccessKey ペア の作成
ユーザーの作成ページへ移動し、ユーザー情報を設定します。永続的な AccessKey を使用してアクセス を アクセスモード として選択し、OK をクリックします。セキュリティ検証を通過すると、RAM ユーザーが作成されます。システムにより AccessKey ID および AccessKey Secret が表示されるため、安全な場所に保存してください。
RAM ユーザーへの権限付与
ユーザーページへ移動し、作成した RAM ユーザーを検索して、権限の追加 を 操作 列からクリックします。AliyunDysmsFullAccess を検索・選択し、権限の付与 をクリックして権限付与を完了します。
RAM ユーザーの AccessKey ペアを用いて、環境変数を構成します。本トピックでは、環境変数名として ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET を例として使用します。
説明 ハードコードによる認証情報の漏洩リスクを回避するため、AccessKey ペアは環境変数に格納してください。
環境変数の構成
Windows
Windows では、システムのプロパティ、コマンドプロンプト (CMD)、または PowerShell を通じて環境変数を構成できます。
システムのプロパティ
Windows デスクトップで Win+Q を押下し、「システム環境変数の編集」を検索して、システムのプロパティ ウィンドウを開きます。
[システムのプロパティ] ウィンドウで、[環境変数] をクリックします。[システム環境変数] セクションで、[新規] をクリックします。[変数名] に ALIBABA_CLOUD_ACCESS_KEY_ID を、[変数値] にご自身の AccessKey ID を入力します。同じプロセスを繰り返して ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定します。

システムのプロパティ設定ページを閉じるため、3 つのウィンドウそれぞれで OK をクリックします。これで環境変数の構成が完了します。
CMD または PowerShell ウィンドウを開き、以下のコマンドを実行して環境変数が正しく設定されているか確認します。
CMD
永続的な環境変数の追加
現在のユーザー向けに、すべての新規セッションで API キーの環境変数を利用可能にするには、以下の手順を実行します。
CMD で以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
setx ALIBABA_CLOUD_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
新しい CMD ウィンドウを開きます。
以下のコマンドを実行して、環境変数が正しく設定されているか確認します。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
一時的な環境変数の追加
現在のセッションでのみ環境変数を使用する場合は、CMD で以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
set ALIBABA_CLOUD_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET
現在のセッションで以下のコマンドを実行し、環境変数が正しく設定されているか確認します。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
PowerShell
永続的な環境変数の追加
現在のユーザー向けに、すべての新規セッションで API キーの環境変数を利用可能にするには、以下の手順を実行します。
PowerShell で以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
[Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
[Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
新しい PowerShell ウィンドウを開きます。
新しい PowerShell ウィンドウで以下のコマンドを実行し、環境変数が正しく設定されているか確認します。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的な環境変数の追加
現在のセッションでのみ環境変数を使用する場合は、PowerShell で以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"
現在のセッションで以下のコマンドを実行し、環境変数が正しく設定されているか確認します。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
Linux
永続的な環境変数の追加
現在のユーザー向けに、すべての新規セッションで API キーの環境変数を利用可能にするには、永続的な環境変数を追加します。
以下のコマンドを実行し、環境変数の設定を ~/.bashrc ファイル末尾に追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
また、~/.bashrc ファイルを手動で編集することも可能です。
手動編集
以下のコマンドを実行して ~/.bashrc ファイルを開きます。
nano ~/.bashrc
ファイルに以下の内容を追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
nano エディターで Ctrl + X、次に Y、さらに Enter を押下してファイルを保存・閉じます。
以下のコマンドを実行して変更を適用します。
source ~/.bashrc
新しい端末ウィンドウを開き、以下のコマンドを実行して環境変数が正しく設定されているか確認します。SDK を使用する前に、IDE および端末セッションを再起動してください。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的な環境変数の追加
現在のセッションでのみ環境変数を使用する場合は、一時的な環境変数を追加します。
以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
以下のコマンドを実行して、環境変数が正しく構成されているか確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
macOS
永続的な環境変数の追加
現在のユーザー向けに、すべての新規セッションで API キーの環境変数を利用可能にするには、永続的な環境変数を追加します。
ターミナルで以下のコマンドを実行し、デフォルトのシェルタイプを確認します。
echo $SHELL
デフォルトのシェルタイプに応じて、以下の手順を実行します。
Zsh
以下のコマンドを実行し、環境変数の設定を ~/.zshrc ファイル末尾に追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
また、~/.zshrc ファイルを手動で編集することも可能です。
手動編集
以下のコマンドを実行してシェル設定ファイルを開きます。
nano ~/.zshrc
設定ファイルに以下の内容を追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
nano エディターで Ctrl + X、次に Y、さらに Enter を押下してファイルを保存・閉じます。
以下のコマンドを実行して変更を適用します。
source ~/.zshrc
新しい端末ウィンドウを開き、以下のコマンドを実行して環境変数が正しく構成されているか確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Bash
以下のコマンドを実行し、環境変数の設定を ~/.bash_profile ファイル末尾に追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
また、~/.bash_profile ファイルを手動で編集することも可能です。
手動編集
以下のコマンドを実行してシェル設定ファイルを開きます。
nano ~/.bash_profile
設定ファイルに以下の内容を追加します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
nano エディターで Ctrl + X、次に Y、さらに Enter を押下してファイルを保存・閉じます。
以下のコマンドを実行して変更を適用します。
source ~/.bash_profile
新しい端末ウィンドウを開き、以下のコマンドを実行して環境変数が正しく構成されているか確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
一時的な環境変数の追加
現在のセッションでのみ環境変数を使用する場合は、一時的な環境変数を追加します。
以下のコマンドは Zsh および Bash の両方で有効です。
以下のコマンドを実行します。
# YOUR_ACCESS_KEY_ID をご利用の AccessKey ID に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# YOUR_ACCESS_KEY_SECRET をご利用の AccessKey Secret に置き換えます
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
以下のコマンドを実行して、環境変数が正しく構成されているか確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
システム環境変数を変更した後は、変更を有効にするために、IDE や端末セッションを含むアプリケーションを再起動してください。
SDK のインストール
本トピックでは Java を例として説明します。異なるプログラミング言語を使用する場合は、「SDK リファレンス」をご参照ください。
Java 8 以降のバージョンがインストール済みであることを確認します。
Java 環境の構成
ターミナルで以下のコマンドを実行し、Java 環境を確認します。
java -version
# Maven を使用して Java プロジェクトを管理・ビルドする場合、Maven が開発環境に正しくインストールされていることを確認してください。
mvn --version
CMD(Windows)での実行例:

出力の最初の行から Java のバージョンを確認できます。たとえば、openjdk version "16.0.1" 2021-04-20 は、現在の Java バージョンが 16 であることを示しています。Java が未インストールの場合、またはバージョンが 8 より低い場合は、Java ダウンロードからダウンロード・インストールを行ってください。
Maven 依存関係を構成することで SDK をインストールします。the-latest-version を 最新のバージョン番号 に置き換えてください。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20180501</artifactId>
<!-- 'the-latest-version' を最新のバージョン番号に置き換えます:https://mvnrepository.com/artifact/com.aliyun/dysmsapi20180501 -->
<version>the-latest-version</version>
</dependency>
Maven 設定
Maven プロジェクトの pom.xml ファイルを開きます。
上記の依存関係情報を <dependencies> タグ内に追加します。
pom.xml ファイルを保存します。
プロジェクト名を右クリックし、「Maven > プロジェクトの再読み込み」を選択して依存関係を更新します。Maven が自動的に SMS SDK をダウンロードし、プロジェクトに追加します。

SDK の使用
1. クライアントの初期化
Alibaba Cloud SDK では、クライアント初期化のためのさまざまな認証情報タイプがサポートされています。その他の方法については、「アクセス認証情報の管理」をご参照ください。本トピックでは、AccessKey ペアを使用してクライアントを初期化します。
package com.aliyun.sample;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
public class Sample {
public static Client createClient() throws Exception {
Config config = new Config()
// AccessKey ID を構成します。実行環境で ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// AccessKey Secret を構成します。実行環境で ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// System.getenv() メソッドはシステム環境変数を取得します。AccessKey 情報をハードコードしないでください。
// エンドポイントを構成します。
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
}
2. リクエストオブジェクトの構築
ビジネス要件に応じて、API リクエストを構築し、パラメーターを渡します。
説明 リクエストオブジェクトの命名規則は {API-Name}Request です。たとえば、SendMessageToGlobe API のリクエストオブジェクトは SendMessageToGlobeRequest です。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");
3. リクエストの送信
SendMessageToGlobe を使用して API リクエストを完了します。
説明 応答オブジェクトの命名規則は {API-Name}Response です。たとえば、SendMessageToGlobe API の応答オブジェクトは SendMessageToGlobeResponse です。
SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);
コード例
完全なコード例は以下のとおりです。
package com.aliyun.sample;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
import com.aliyun.dysmsapi20180501.models.SendMessageToGlobeRequest;
import com.aliyun.dysmsapi20180501.models.SendMessageToGlobeResponse;
import static com.aliyun.teautil.Common.toJSONString;
public class Sample {
public static Client createClient() throws Exception {
Config config = new Config()
// AccessKey ID を構成します。実行環境で ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// AccessKey Secret を構成します。実行環境で ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// エンドポイントを構成します。
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
public static void main(String[] args) throws Exception {
// リクエストクライアントを初期化します。
Client client = Sample.createClient();
// リクエストオブジェクトを構築します。リクエストパラメーターの値を入力します。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");
// 応答オブジェクトを取得します。
SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);
// 応答にはサーバーからの本文およびヘッダーが含まれます。
System.out.println(toJSONString(sendSmsResponse));
}
}
コードを実行すると、以下の出力が返されます。
{
"headers": {
"date": "Tue, 24 Oct 2023 07:47:17 GMT",
"content-type": "application/json;charset=utf-8",
"content-length": "263",
"connection": "keep-alive",
"keep-alive": "timeout=25",
"access-control-allow-origin": "*",
"access-control-expose-headers": "*",
"x-acs-request-id": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"x-acs-trace-id": "29c11fe4c778b74774d5f5602f0e7975",
"etag": "2a+mcDRTDkXqx9VF7b6U57Q3"
},
"statusCode": 200,
"body": {
"ResponseCode": "OK",
"NumberDetail": {
"Region": "台湾",
"Country": "中国台湾省",
"Carrier": "遠傳電信"
},
"RequestId": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"Segments": "1",
"ResponseDescription": "OK",
"To": "88691567****",
"MessageId": "191921698133637273"
}
}
API エラーコードと対応策
詳細については、エラーコードをご参照ください。