# 他のサービスからの移行

`aikagi import` が `.env` 形式をまとめて読み込みます。先に結果だけを確かめてから書き込めます。

## ファイルから

```sh
aikagi import .env
```

標準入力からも読めます。手元のファイルに平文を落とさずに済むので、別のコマンドの出力をそのまま流すときはこちらです。

```sh
aikagi import -
```

置き場所は、いま居るリポジトリの `.aikagi.toml` から決まります。`-w` `-p` `-e` や `--personal` で指定することもできます。

## 先に確かめる

**いきなり書き込ませずに、まず結果だけを見てください。**何が増えて、何が更新され、何が飛ばされるかが出ます。

```sh
aikagi import .env --dry-run
```

すでに同じ名前がある鍵は、黙って飛ばします。入れ替えたいときだけ `--overwrite` を付けてください。

## 名前の付きかた

読み込んだキーは、そのままの綴りで 1 本ずつの鍵になります。フォルダに入れたいときは指定してください。

```sh
aikagi import .env --folder aws/prod --lowercase
```

- **`--folder`**: 置き場所のフォルダ。省くと、その場所の根に入ります。
- **`--lowercase`**: 名前を小文字に揃えます。エージェントに届く環境変数の名前は、どちらの綴りでも変わりません。

キーの名前にスラッシュは使えません。フォルダを勝手に生やさないためです。引っかかったら、その行を直してから読み込ませてください。

## フォルダは環境変数の名前になります

**フォルダに入れると、エージェントに届く環境変数の名前が変わります。**環境変数の名前は、フォルダを含めた置き場所の全体から作られるためです。`--folder aws/prod` に入れた `SECRET_KEY` は、`AWS_PROD_SECRET_KEY` として届きます。

移行元がフォルダでアプリを分けているなら、その形をそのまま写さないでください。写すと、どのアプリも自分の環境変数を見つけられなくなります。**移行元のフォルダ 1 つを、aikagi のプロジェクト 1 つにしてください。**そのプロジェクトの根に入れれば、名前はそのままです。

```sh
aikagi import - -p web-app -e production
```

フォルダが役に立つのは、1 つのアプリの中で `AWS_` や `STRIPE_` のように頭を揃えたいときです。そのときは、頭の分を名前から外して、フォルダの名前に移してください。

## 覚書の引き継ぎ

キーの上に書いてある `#` の行は、そのまま覚書として引き継ぎます。行の末尾に書いたものも拾います。

```sh
# 請求に使うほう
STRIPE_SECRET_KEY=...
```

要らないときは `--no-comments`、全部を同じ一文で揃えたいときは `--comment` です。

```sh
aikagi import .env --comment "移行時に取り込み"
```

## 移行元とのつながりが切れるところ

読み込みの途中で、次の 2 つを注意として伝えます。**値そのものは 1 文字も出しません。**

- 値に `${…}` の参照が残っているとき。aikagi は書かれたままの文字列として持つので、移行元で効いていた参照は切れます。
- 複数のキーが同じ値を持っているとき。移行元では「1 本の鍵と、それを指す参照」だったものが、こちらでは別々の鍵になります。

どちらも取り込み自体は進みます。読んだうえで、まとめ直すかどうかを決めてください。

同じキーがファイルの中に二度出てきたときは、あとに書いてあるほうを採ります。継ぎ足していった `.env` の意図はそちらにあるためです。

## 他の金庫から直接

手元に別のシークレット管理サービスのコマンドが入っているなら、その出力をパイプで渡せます。平文がファイルに残りません。

```sh
<そのサービスのコマンド> export --format dotenv | aikagi import -
```

そのコマンドを aikagi 側から呼んで、環境やフォルダを指定しながら移す道もあります。複数の環境をまとめて移すこともできます。綴りは `aikagi import --help` で確かめてください。

## 移したあと

入ったことは一覧で確かめられます。値は出ないので、名前と数を見てください。

```sh
aikagi ls --recursive
```

個人の保管庫に取り込んだ鍵をチームに配るときは、プロジェクトへ移してください。やりかたは[ワークスペースと環境](https://aikagi.dev/guide/workspaces.md)にあります。

---

出典: https://aikagi.dev/guide/import/
