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についてのお問い合わせはこちらです。
こちらもお気軽にお問い合わせください。