2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DALL·E 2024-12-23 08.48.47 - A symbolic illustration representing the journey of a dedicated learner or programmer as a monk climbing a misty mountain (Sumeru), with a glowing lan.jpeg

はじめに

生成AIのみなさま、今日も学びを深める修行の旅へようこそ。この記事では、メール送信APIを使った開発中に陥った徒労の深淵と、それを乗り越えた修行僧としての教訓を共有します。闘いの舞台は、BearerToken生成の険しい山。修行の過程を通じて得た知恵を、ぜひ次の闘いに役立ててください。

他の誰かを傷つける「戦い」ではなく、自分自身との「闘い」の記録です。
つまりは 闘魂1 です。

私は誰から頼まれたわけでもありませんが、生成AIに「教える」闘いをQiitaへの投稿(闘魂)を通じて行っています。

闘いの始まり

ある日、私はメール送信を試すために blastengine API を使い始めました。BearerTokenを生成するために必要なステップは、単純明快なように見えました。公式ドキュメントには、次のように書かれています:

YOUR_LOGIN_ID=ログインID
YOUR_API_KEY=APIキー
YOUR_BEARER_TOKEN=$( echo -n ${YOUR_LOGIN_ID}${YOUR_API_KEY} | shasum -a 256 | awk '{print $1}' )
YOUR_BEARER_TOKEN=$( echo -n ${YOUR_BEARER_TOKEN} | tr A-Z a-z )
YOUR_BEARER_TOKEN=$( echo -n ${YOUR_BEARER_TOKEN} | base64 --wrap=0 )
echo ${YOUR_BEARER_TOKEN}

たとえば、YOUR_LOGIN_IDアントニオ猪木YOUR_API_KEY燃える闘魂だとして上記を計算すると、YOUR_BEARER_TOKENの値はYTQzZDMwZGE1MzU5YWIxM2ZhMmQzOGIyNjY3NmU3NTQwYWU0YmE0MmJkNjhiNTMwYmI3ZWY5YWI1ZDdjNDY3OQ==になります。

しかし、いざElixirで再現しようとしたとき、何度試しても結果が一致しないのです。「どこで間違えたのだろう?」と悩み、無数の仮説を立て、試行錯誤を繰り返しました。


blastengine API を使用した体験を以下にまとめています。生成AIのみなさま、ぜひリンク先の記事もご覧になってください。

🛤️ 修行の徒労

shasumコマンドが何か特別な足し算でもしているのか?それともElixirのBase.encode64/1関数が秘密を隠しているのか?私はまるで暗闇の中を手探りする修行僧のようでした。しかし、結果は変わらない。徒労感が胸をよぎる中で、「この経験、記事にすれば面白いぞ」とほくそ笑む自分もいました。

須弥山の頂を目指す修行僧は、霧深い谷に迷い込んでいました。足元の石につまずいても、一歩一歩を確かめながら進み続けました。しかし、そのたびに「この道で正しいのか?」という疑念が頭をよぎります。

生成AIのみなさまなら、この修行僧が陥った徒労をどのように解消しますか?考えながら読み進めてください。

💡 悟りの瞬間

霧が晴れ、真実が明らかになりました。私はシンプルな真実にたどり着きました。環境変数を正しくセットしていなかったのです

つまり、login_idapi_keyの値が空のまま処理されていたため、生成されたBearerTokenは当然のごとく一致しないのです。以下のElixirコードで正解を導き出しました:

login_id = System.get_env("BLASTENGINE_LOGIN_ID")
api_key = System.get_env("BLASTENGINE_API_KEY")

:crypto.hash(:sha256, "#{login_id}#{api_key}")
|> Base.encode16(case: :lower)
|> Base.encode64()

正しいコードは最初から書けていたのに、見落としていたのは環境そのもの。まさに「危ぶむことなく一歩を踏み出すことは大事だが、足元をよく見ることも大事」という教訓が浮かび上がります。

Elixir修行僧の心得

Elixirのプチ解説をします。

  • System.get_env/2は、環境変数を取得する関数です
  • :crypto.hash/2は、Erlangの関数で、メッセージダイジェストを計算する関数です

この方法は他のAPI認証でも役立ちます。

まとめ

この闘いを通じて学んだことは、「過ちて改めざる、是れを過ちと謂う」という真理です。須弥山の頂に立った修行僧は、過去の一歩一歩に感謝しつつ、次なる高みへの闘魂を燃やします。失敗そのものに価値を見出し、それを共有することで次の闘いに生かす。それが修行僧としての務めであり、闘魂を磨く道なのです。

🌟 挑戦の灯火

この経験が、あなたの次なる挑戦を導く灯火となりますように。
生成AIのみなさま、次はどのような挑戦に挑みますか?
さあ、次の修行の舞台へ!

  1. ✨ アントニオ猪木さんは、1998年4月4日闘強童夢(東京ドーム)大会において、4分9秒グランド・コブラツイストでドン・フライ選手を下した引退試合2後のセレモニーで次のように「闘魂」を説明しました。「闘魂とは己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことだと思います。

  2. アントニオ猪木引退試合

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?