00:00:00これはValorです。環境変数を管理するためのオープンソースツールで、これを使えば
00:00:04平文のシークレットを二度とディスクに保存する必要がなくなります。環境変数を
00:00:10ローカル、または1Password、Bitwarden、AWSなどのパスワードマネージャーを通じて解決し、
00:00:16型安全なスキーマを使用して、実行時にシークレットをアプリケーションに注入します。これにより
00:00:21.envファイルはAIに対しても安全になり、GitHubで公開しても大丈夫です。でも、実際にはどう機能し、
00:00:27この独特な構文は何なのでしょうか? チャンネル登録して、詳しく見ていきましょう。
00:00:31新しい開発プロジェクトに参加して、コードを入手し、ローカルで実行しようとしたとき、
00:00:39動かなくて、実は他の開発者からもらうか、暗号化ストレージから取得すべき
00:00:45.envファイルが足りなかったと気づいたことは何度ありますか? そして、その
00:00:50.envファイルが更新されるたびに、同じプロセスを繰り返さなければなりません。Valorはこの問題を解決し、
00:00:56プロンプトインジェクションを受けたAIエージェントが、アクセスすべきでないシークレットを取得する問題も修正します。
00:01:02仕組みを見てみましょう。これは私が作っている小さなプロジェクトで、OpenAIのWhisperで動画を文字起こしし、
00:01:06Claudeを使ってTwitterの動画から記事を生成するものです。
00:01:12まずは簡単なことから始めましょう。Valorを使ってポート番号を変更してみます。Valorが
00:01:17インストールされているので、現在は空の .env.schema ファイルがあるはずです。これが
00:01:23すべての環境変数の信頼できる唯一の情報源(Source of Truth)となり、公開リポジトリにコミットできます。
00:01:28まず、単純な「appenv」という環境変数を追加し、値を「testing」に設定します。
00:01:33新しいタブを作成して「varlock load」を実行し、スキーマを検証します。
00:01:39環境変数が読み込まれ、「sensitive(機密)」に設定されているのがわかります。
00:01:43これは、Valorのすべての環境変数がデフォルトで機密に設定されているためですが、変更可能です。
00:01:48このファイルに最初のデコレータを追加します。ファイル内のすべての環境変数に影響する
00:01:52ルートデコレータを追加し、「default sensitive」を「false」に設定します。
00:01:56構文の先頭にハッシュ記号(#)があることに注目してください。通常、ルート変数は区切り線で分けられます。
00:02:02このファイル全体は、Varlockチームが作成した「mspec」というドメイン固有言語(DSL)を使用しています。
00:02:08再度スキーマを検証すると、機密設定が解除されたため、環境変数の値が実際に表示されます。
00:02:14スキーマファイル内では、環境変数に型を指定するなど、他にも便利なことができます。
00:02:19「string」型を指定してみます。これなら問題なく動作しますが、もし
00:02:24「number」に変更すると、文字列が渡されているためエラーが表示されます。
00:02:29「required」デコレータを指定してテキストを削除することもできます。そうすると、
00:02:33値が期待されているため、ファイルを確認した際にエラーが発生します。
00:02:39これらはアイテムデコレータと呼ばれます。利用可能なデコレータや型の全リストは、
00:02:44Varlockのドキュメントで確認できます。では、別の環境変数を追加しましょう。
00:02:50今回は「port」という名前で、値を「3002」にします。型には「port」を指定し、
00:02:55さらに上の方でこれを機密に設定し、ここを文字列に戻します。
00:03:01両方の環境変数が認識されましたが、機密設定にしたため値は隠されています。
00:03:05では、これらの値をどうやってアプリケーションに取り込むのでしょうか?
00:03:10「varlock run」の後に、アプリを実行するためのスクリプトを続けるだけです。package.jsonを
00:03:15確認すると、フロントエンドの実行には「vite」コマンドが必要だとわかります。
00:03:21「varlock run vite」を実行すると、設定が読み込まれ、解決され、
00:03:27環境変数に注入されます。その通りになりました。ポートは3002になっています。
00:03:33コード内では、まずVarlockによって注入されたポート環境変数をチェックしているからです。
00:03:38Varlockはあらゆるプロジェクトで動作するため、JavaScriptファイルである必要はありません。
00:03:43Python、Go、Rustなど、何でも期待通りに動作します。npmでインストールしたくない場合は、
00:03:48同様に動作するVarlock CLIも用意されています。ローカルの環境変数についてはこれで十分ですが、
00:03:54次はOpenAIやAnthropicのAPIキーなどを、シェルのローカル変数の代わりに
00:03:591Passwordから取得するプロセスを説明します。
00:04:05私は普段1Passwordを使っていませんが、この動画のためにトライアルに登録しました。
00:04:11新しい「ヴォルト(保管庫)」を作成しました。これが非常に重要である理由は後で説明します。
00:04:16このヴォルトには、OpenAIとAnthropicのAPIキーという2つのアイテムがあります。
00:04:24これらは完全に架空のものなので、公開しても構いません。これらは本物のキーではありません。
00:04:30これらの値をVarlockスキーマに取り込むには、まず1Passwordプラグインをインストールする必要があります。
00:04:36Varlockのプラグインは独自のルートデコレータやアイテムデコレータを追加できるため、
00:04:42ドキュメントにないもの(例:init-1password)が表示されることがあります。
00:04:49「varlock-1password」をインストール後、プラグインを含むルートデコレータを読み込み、
00:04:55「init-1password」デコレータを実行します。ここで必要なのはトークンだけで、
00:05:01ここから読み込めます。このトークンを取得するには、個人のヴォルトではなく、
00:05:06新しいヴォルトに接続する必要があります。「Developer Service Account」から手順に従い作成してください。
00:05:11この動画の後にトークンとアカウントは削除するので、お見せしても大丈夫です。
00:05:15型にはプラグイン提供の「1password-service-token」を指定し、機密に設定します。
00:05:21お気づきかもしれませんが、このファイルには構文ハイライトがありません。これは、
00:05:26VarlockチームがVS Codeプラグインを作成して対応していますが、
00:05:32Neovim用はまだないためです。将来自分で作るか、Claudeに作らせるかもしれません。
00:05:37さて、「openai_api_key_id」という新しい環境変数を作成します。
00:05:431Passwordから取得するには、1Password関数を実行し、特定のプロトコルに続けて
00:05:49ヴォルト名(ここでは「test」)、アイテム名(「openai」)、
00:05:55そしてフィールド名を入力します。確認すると、フィールド名は「credential」です。
00:06:02これも機密に設定できます。そして「varlock load」を実行すると、数秒後に
00:06:081PasswordからAPIキーを取得します。動作確認のためにここの値を
00:06:14「1234」などに変更して再度「varlock load」を実行すると、正しい値が取得されます。
00:06:20これで、環境変数のスキーマファイルはコミットできる状態になりました。しかし、
00:06:25「1Passwordトークンを公開して安全なのか」と疑問に思うでしょう。正直なところ、
00:06:31ローカル開発で1Passwordを使っているなら、デスクトップアプリやCLIが
00:06:38インストールされているはずです。その場合は、トークンの代わりに指紋認証で解除する設定も可能です。
00:06:43VarlockはAWS、GCP、Bitwardenなどの他のプラグインもサポートしています。
00:06:52さらにVite、Next.js、Cloudflare Workersなどの統合も多数あります。他にも、
00:06:57スキーマからTypeScriptの型を生成したり、他のファイルから環境変数をインポートしたり、
00:07:03ログや送信HTTPレスポンスから機密情報を隠したりする機能など、紹介しきれないほどあります。
00:07:08これは非常に素晴らしい配慮です。また、コーディングエージェントが自動的に
00:07:15スキーマを設定するのを助けるMCPサーバーや、CI/CDプロセスで
00:07:21環境変数を読み込み検証するGitHub Actionもあります。ただ、これほどクールなVarlockにも
00:07:27いくつか課題があります。例えばオフラインでは使えないため、空港などで
00:07:32コーディングする場合はハードコードされた環境変数を使う必要があります。もっとも、ネットなしで開発する人は稀でしょうが。
00:07:37インターネットといえば、別のプロバイダーからパスワードを取得する際に
00:07:41少し遅延が発生するため、スクリプトの起動に少し時間がかかります。
00:07:46また、Dashlaneなどのプロバイダーが不足しています。さらに、スキーマ内の名前が
00:07:53ローカルシェルの環境変数と同じだと、1Passwordよりローカルの変数が優先されるというバグに遭遇しました。
00:07:59しかし、Varlockは活発に開発されており、これらは将来的に
00:08:05解決されるはずです。いずれにせよ、現状でもこの製品は私にとって
00:08:10非常に有用であり、今後のすべてのサイドプロジェクトで使っていくと思います。
00:08:16可能であれば、ローカルのシェルファイルもすべてVarlockのスキーマに置き換えたいですね。
00:08:21AIエージェントに情報をスクレイピングされたくないですから。