『Rustの練習帳』を片手に Rust で Cloud Automator の環境変数を切り替えるツール作ってみた

記事タイトルとURLをコピーする

サービス開発部のくればやしです。

背景1

本日、Cloud Automator のジョブと後処理の情報を一括で取得できるコマンドラインツールがリリースされました 🎉ジョブ情報の一覧取得はこれまでに多数ご要望頂いていた機能ですので、便利に使って頂けるものと思います。

blog.serverworks.co.jp

こちらのツールですが、ご利用に際し、Cloud AutomatorのAPIキーを環境変数に登録しておく必要があります。もし本番環境と検証検証等、複数のCloud Automatorの環境を使っているときには環境変数の管理が必要になりそうです。

背景2

Rustが人気なので、個人的に勉強してみたいなという気持ちはあったのですが、なかなか腰が上がりませんでした。以下の本が目に止まり、Rust製のCLIツールの作成から入れば学習のステップとして良さそうだなと思いました。購入し、本書を片手にCLIツールを作成してみました。

やってみたこと

というわけで、Cloud Automatorの環境変数を管理するCLIツールを作ってみました(Cloud Automatorとしてサポートしているわけでは無いので、あくまでOSSということであしからず…)。

あらかじめファイル ( ~/.cloudautomator/credentials ) に環境に応じたAPIキーを TOML 形式で記載しておきます。

[production]
api_key = 11111111111111111111111111111111
[qa]
api_key = 22222222222222222222222222222222
[dev]
api_key = 33333333333333333333333333333333

本ツールにより、APIキーを対話的に環境変数に登録できます。

細かい使い方等は以下のREADMEをご覧ください。

github.com

ちなみにお手本としては awsp というAWSのクレデンシャルを切り替えるツールを参考にしています。(愛用させて頂いていて、とても便利です)

github.com

感想

『Rustの練習帳』では入門的な文法の解説等はあまり無いので、最初の1冊目としては難しいと思います。大体の感じを掴んだ後の2冊目以降に読む本として、テーブルにおいておくと役に立つと思います。コマンドラインツールの実例が豊富に掲載されているため、コマンドラインツールで必要な引数の読み込みやファイルの読み込み等、作ろうとしているものに共通のノウハウが見つかると思います。

Rustでは主な活躍領域として「コマンドライン」「WebAssembly」「ネットワーク」「組み込み」を謳っているようです。実際、多くのエンジニアがRust製の便利コマンドラインツールを何らか使っているのではないでしょうか。

上述の4領域の中でも、コマンドラインツールは誰しも普段から使っており恩恵がある分野なので、Rustの入門や活用分野としても特に期待できる領域と思います。

今回、初めてRustを勉強してみましたが、静的言語でかつモダンな書き方ができるので、開発の体験も良くかつ文法的にも書きやすそうだなという印象です。 所有権等独自の概念もあり、まだまだ勉強しないといけませんが、それらもあってメモリ管理の安全性やパフォーマンス面でも非常に優れているようなので、そのあたりも今後深堀りしていきたいところです。

また、他の点で勉強になったこととして、環境変数一般について、親プロセス(シェル)の環境変数を子プロセスからは触れないため、親プロセスで source [script] のような形で実行しないと環境変数の登録が難しいようです(つまり、Rustのプログラムからは、呼び出している親プロセスの環境変数の登録ができない)。 さらに source コマンドの引数はテキストのスクリプトしか取れないようで、Rustで作られるバイナリを直接指定できないので、 source [shell sciprt(この中でRustで作ったバイナリを呼ぶ)] という形になってしまいました。 awsp も似たような構造になっていましが、 awsp のような npm パッケージの場合はシェルスクリプト等も同梱して配布できるようで、このような構造でも配布は簡単そうです。

というわけで、作り始めてから気づいたのですが、今回のケースでは配布等を考えると Rust は不適だったかもしれませんね汗。 ただ、Rustの取っ掛かりはつかめたので、今後何かしらのツール開発等に活用していければと思います。

くればやし (記事一覧)