PR

Rust で reqwest を使ってSlack APIに送信

1. はじめに

Slack API にメッセージを送信するために、Rust で reqwest を使ってみました。
Incoming Webhooks を使って、Slack にメッセージを送信します。
Webhook URL が取得できていることが前提となりますがこちらの説明は割愛します。

2. Cargo.toml に reqwest を追加

Cargo.tomlreqwest を追加します。
serdeserde_json も追加します。

reqwest は非同期処理がデフォルトのため同期処理を使うよう指定します。blockingのところです。

[dependencies]
reqwest = { version = "0.12.9", features = ["blocking", "json"]}
serde = "1.0.215"
serde_json = "1.0.133"

3. reqwest を使ってSlack APIに送信

以下のコードは、Slack API にメッセージを送信するコードです。
reqwest を使って、Slack API にメッセージを送信します。

Result 型を使ってエラーハンドリングをしています。
let url の XXXX... のところは適宜変更してください。
Err 処理は、res.error_for_status().unwrap_err() でエラーを取得しています。

use reqwest::blocking::Client;
use serde_json::json;

fn main() -> Result<(), reqwest::Error> {
    let message = "Hello, world!";
    let url = "https://hooks.slack.com/services/XXXXXXXXXXX/XXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX";
    let client = Client::new();
    let res = client.post(url)
        .json(&json!({ "text": message }))
        .send()?;
    if res.status().is_success() {
        Ok(())
    } else {
        let err = res.error_for_status().unwrap_err();
        Err(err)
    }
}

3. まとめ

送信する message は日本語にしても問題なく送信できています。
C++ の時は、boost を使っていろいろと細かく書いていましたが、Rust はとてもシンプルに書けるのがいいですね。

今回の記事も、Github Copilot が7割くらい書いてくれました。

A. 参考サイト

Slack API を使ったメッセージ投稿
[同期処理]Rust のコードで外部APIを実行する
Rust初学者がReqwestの使い方でハマってしまったので備忘録
Reqwest: read body text and return reqwest::Error

B. 参考書籍

コメント