Momento Elixir SDKがリリースされました

2023.06.26

Introduction

現時点でもJavaScript、PHP、Rustなどいろいろな言語で使用できるMomemtoですが、
10個目のSDKとしてMomento Elixir SDKがリリースされました。
現在のところまだベータ版という扱いですが、
基本的な機能はひととおり使えるようになっています。

Elixir?

Elixirは、並行性・分散処理機能を持つ関数型プログラミング言語です。
Erlangで実装されているので、Erlang VM上で動作します。

その高い並行性と分散処理能力により、リアルタイム性が要求されるシステムや
複数のサーバーで処理を分散するようなネットワークアプリの開発に適しているといわれます。
また、スケーラビリティにも優れ、大規模なシステムで採用されている例もあります。

Environment

今回試した環境は以下のとおりです。

  • MacBook Pro (13-inch, M1, 2020)
  • OS : MacOS 13.0.1

ElixirのインストールはHomebrewを使います。

Setup

Momentoのセットアップ

まずはサンプル用のMomentoを準備します。
Momento Consoleをつかって
Momentoの認証トークンを取得し、MOMENTO_AUTH_TOKEN環境変数に設定しておきます。
あとで使用するキャッシュも適当な名前で作成しておきましょう。

% export MOMENTO_AUTH_TOKEN=<Momento 認証トークン>

Elixirのセットアップ

% brew install erlang

% brew install elixir

elixir --version
Erlang/OTP 25 [erts-13.2.2.1]  [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace]

Elixir 1.15.0 (compiled with Erlang/OTP 25)

Elixirがインストールできたので、次はHex(パッケージマネージャ)をインストールします。
Hexは、Elixirのプロジェクトで使用するライブラリやパッケージを管理するためのツールで、
nodeでいうnpmみたいなやつです。
↓のようにしてHexをインストール。

% mix local.hex
Are you sure you want to install "https://builds.hex.pm/installs/1.14.0/hex-2.0.6.ez"? [Yn] Y
* creating /・・・/.mix/archives/hex-2.0.6

次にプロジェクト作成。

mix new elixir_momento

生成されたmix.exsにMomento用ライブラリを追記しましょう。
ここをみるとtls_certificate_checkも
必要みたいなので書いておきます。

  defp deps do
    [
      {:gomomento, "~> 0.4.0"},
      {:tls_certificate_check, "~> 1.19"}
    ]
  end

そしてlib/elixir_momnento.exにプログラムを記述します。
cache_nameにはさきほど作成したMomentoのキャッシュ名を設定しましょう。

alias Momento.CacheClient

defmodule ElixirMomento do


  def run do

    cache_name = "<キャッシュ名>"

    config = %Momento.Config.Configuration{
      transport_strategy: %Momento.Config.Transport.TransportStrategy{
        grpc_config: %Momento.Config.Transport.GrpcConfiguration{
          deadline_millis: 5000
        }
      }
    }

    credential_provider = Momento.Auth.CredentialProvider.from_env_var!("MOMENTO_AUTH_TOKEN")
    default_ttl_seconds = 60.0
    client = CacheClient.create!(config, credential_provider, default_ttl_seconds)

    case CacheClient.create_cache(client, cache_name) do
      {:ok, _} -> :ok
      :already_exists -> :ok
      {:error, error} -> raise error
    end

    {:ok, _} = CacheClient.set(client, cache_name, "foo", "bar")

    case CacheClient.get(client, cache_name, "foo") do
      {:hit, hit} -> IO.puts("Got value: #{hit.value}")
      :miss -> :ok
      {:error, error} -> raise error
    end
  end
end

プログラムではキャッシュの作成(すでにあれば無視)と
キャッシュデータのset/getをしています。
プログラムの記述ができたら依存ライブラリのインストール、コンパイル、
プログラム実行をします。

% mix deps.get
% mix compile
% mix run -e ElixirMomento.run

16:47:03.203 [info] Loading 166 CA(s) from :otp store
Got value: bar

他の言語と同じく、簡単にMomentoへのアクセスができました。

Summary

今回はElixir SDKをつかってMomentoへアクセスしてみました。
まだβ版ですが、今後他の機能も順次実装していく予定です。

Momentoは毎月50GBまでなら無料で使用可能なので、
ぜひこの機会に試してみてください。

なお、Momentoについてのお問い合わせはこちらです。
こちらもお気軽にお問い合わせください。

References