Twilio、Go言語ヘルパーライブラリをリリース!

Person on a call on the computer using headphones
October 06, 2022
執筆者
レビュー担当者

TwGoHelperLibJP

この記事はGareth Paul Jonesこちらで公開した記事(英語)を日本語化したものです。

Twilioを使ってプロダクトを初めて開発する場合でも、提供プロダクトを拡大する場合でも、使用するプログラミング言語や開発環境といったツールにアクセスする必要があります。今回、すべてのTwilio APIを対象として、Go言語ヘルパーライブラリをリリースしたことをご報告いたします。(OpenAPI 仕様を使用して構築。)

弊社ではこれまでも、多くの開発者が使用するプログラミング言語と開発環境を対象としてヘルパーライブラリとツールを提供し、そのサポート・維持を行ってきました。今回、その範囲をGo言語用のTwilioヘルパーライブラリを提供し拡大しました。

スタートガイドをご確認のうえ、早速使ってみてください!

Twilio Go言語ヘルパーライブラリの意義

Go言語ヘルパーライブラリは新しい機能を提供し、最新の言語機能を活用しています。また、皆さまからいただいた開発者フィードバックを基に、ボトムアップに構築した点も特徴です。

Twilio Go言語ヘルパーライブラリを使用することで、Twilio APIを使ったアプリケーション開発について下記の点においてより安全で効率的になると考えています。

  • 自動的なシリアライズ・デシリアライズ - エラー、リターン、リクエストタイプはすべてSDKに含まれており、生の文字列・バイトコンテンツをオブジェクトに変換する必要はありません。
  • 認証ロジック - TwilioのAPIを利用する際に簡単に認証できるロジックを提供します。
  • Twilio API エンドポイント - ヘルパーライブラリを通してすべてのTwilio APIを活用でき、アプリケーションの拡張に合わせてTwilioの機能を統合しやすくなります。
  • リクエストの正当性検証 - 受信したリクエストが実際にTwilioインフラから来たものであり、未知のソースからのものではないことを確認するのに役立ちます。
  • ページネーションのサポート - コレクション(メッセージやコールなど)のページネーションを自動的に処理します。

使用例

Go言語を使い始めるために、いくつかの簡単な例を以下に挙げてみます。

SMSの送信

package main

import (
    "encoding/json"
    "fmt"
    "github.com/twilio/twilio-go"
    twilioApi "github.com/twilio/twilio-go/rest/api/v2010"
    "os"
)

func main() {
    from := os.Getenv("TWILIO_FROM_PHONE_NUMBER")
    to := os.Getenv("TWILIO_TO_PHONE_NUMBER")

    client := twilio.NewRestClient()

    params := &twilioApi.CreateMessageParams{}
    params.SetTo(to)
    params.SetFrom(from)
    params.SetBody("Hello from the Twilio Go Helper Library")

    resp, err := client.Api.CreateMessage(params)
    if err != nil {
        fmt.Println(err.Error())
    } else {
        response, _ := json.Marshal(*resp)
        fmt.Println("Response: " + string(response))
    }
}
package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/twilio/twilio-go/twiml"
)

func main() {
    r := gin.Default()

    r.POST("/sms", func(c *gin.Context) {
        var msg = &twiml.MessagingMessage{}

        // Get the message the user sent our Twilio number
        body := c.PostForm("Body")

        // Determine the right reply for the message
        if body == "hello" {
            msg.Body = "Hi!"
        } else if body == "bye" {
            msg.Body = "Goodbye"
        }

        // Generate and return our TwiML response
        twiml, _ := twiml.Messages([]twiml.Element{msg})
        c.Header("Content-Type", "text/xml")
        c.String(http.StatusOK, twiml)
    })

    r.Run()
}
package main

import (
    "fmt"
    "os"

    "github.com/twilio/twilio-go/client"
)

func main() {
    // You can find your Auth Token at twilio.com/console
    // For this example: authToken := "12345"
    authToken := os.Getenv("TWILIO_AUTH_TOKEN")

    requestValidator := client.NewRequestValidator(authToken)

    // Twilio's request URL
    url := "https://mycompany.com/myapp.php?foo=1&bar=2"

    // Post variables in Twilio's request
    params := map[string]string{
        "CallSid": "CA1234567890ABCDE",
        "Caller":  "+12349013030",
        "Digits":  "1234",
        "From":    "+12349013030",
        "To":      "+18005551212",
    }

    // X-Twilio-Signature header attached to the request
    signature := "0/KCTR6DLpKmkAf8muzZqo1nDgQ="

    // Validate GET request
    fmt.Println(requestValidator.Validate(url, params, signature))

    // Example of the POST request
    Body := []byte(`{"property": "value", "boolean": true}`)
    theUrl := "https://mycompany.com/myapp.php?bodySHA256=0a1ff7634d9ab3b95db5c9a2dfe9416e41502b283a80c7cf19632632f96e6620"
    theSignature := "y77kIzt2vzLz71DgmJGsen2scGs="

    // Validate POST request
    fmt.Println(requestValidator.ValidateBody(theUrl, Body, theSignature))
}

その他の例については、ドキュメントをご確認ください。

なぜGo言語なのか?

Go言語は、小規模から大規模まで、開発者のチームにとって重要なニーズを解決します。静的な言語が持つスピード、安全性、スケーラビリティに加え、動的な言語の持つ使いやすさを提供するプログラミング言語です。

Twilioにおいても実際にGo言語を使用した結果、高レベルと低レベルの両方のプログラミングに役立つことがわかりました。Go言語ではポリモーフィズムと抽象化の両方を実現することができます。また、コードを適切にリファクタリングすることで、データ構造体のメモリレイアウトを最適化し、コンパイラがその構造体をどこに割り当てるべきかについても影響を与えることができます。さらに、高レベルのチャネルに加え、高いパフォーマンスが重要な場合にミューテックスを使用できるという特長を備えています。

ぜひお試しください

TwilioのGo言語ヘルパーライブラリを使って、クールなアプリケーションを構築されるのを楽しみにしています。🚀

お使いいただく中でフィードバックを思いついた際には、ぜひ gjones[at]twilio.comまでご連絡ください。