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

`aikagi import` で、`.env` 形式のキーをまとめて読み込めます。書き込む前に、結果だけを確認することもできます。

## ファイルから読み込む

```sh
aikagi import .env
```

標準入力からも読み込めます。別のコマンドの出力を渡す場合は、平文をファイルに書き出さずに済むこちらの方法を使ってください。

```sh
aikagi import -
```

読み込み先のワークスペース・プロジェクト・環境は、作業中のリポジトリの `.aikagi.toml` で決まります。`-w`・`-p`・`-e` で指定することもできます。

## 先に結果を確認する

**いきなり書き込まず、先に結果を確認してください。**`--dry-run` を付けると、追加・更新・スキップされるキーが表示され、何も書き込みません。

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

同じ名前のキーが既にある場合は、そのキーをスキップします。上書きする場合だけ `--overwrite` を付けてください。

## キーの名前

読み込んだ行は 1 行ずつ、同じ綴りの名前のキーになります。フォルダに入れる場合は `--folder` で指定します。

```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 つの値を参照で共有していたキーも、aikagi では別々のキーになり、値を個別に持ちます。

警告が出ても読み込みは続行します。警告を読んだうえで、キーをまとめ直すかどうかを判断してください。

ファイルの中に同じキーが 2 回出てきた場合は、後に書かれた値を使います。追記を重ねてきた `.env` では、後の行が意図した値であることが多いためです。

## 他のサービスから直接読み込む

別のシークレット管理サービスの CLI が手元にあれば、その出力をパイプで渡せます。平文がファイルに残りません。

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

そのサービスの CLI を aikagi から呼び出し、環境やフォルダを指定しながら移す方法もあります。複数の環境をまとめて移すこともできます。書き方は `aikagi import --help` で確認してください。

## 移行した後

読み込まれたキーは一覧で確認できます。値は表示されないため、名前と数を確認してください。

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

読み込んだキーをチームで使う場合は、そのプロジェクトにメンバーを招待してください。キーを別の場所へ移し直す必要はありません。手順は[メンバーと招待](https://aikagi.dev/guide/members.md)を参照してください。

---

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