key.properties と upload-keystore.jks

目次

key.properties と upload-keystore.jksの違い

結論: 役割が全く違う!

upload-keystore.jks → 実際の「鍵」🔑
key.properties → 鍵の「使い方」が書いてある説明書📄

比喩で言うと:

upload-keystore.jks = 実際の鍵 🔑

これがないとドアが開けられない!
誰にも見せちゃダメ!

key.properties = 鍵の使い方メモ 📝

「この鍵は、どこにあって、
パスワードは何で、
誰の名前で登録してある」
という情報

それぞれの中身

upload-keystore.jks – 実際の鍵

中身:

バイナリファイル(開けない!)
暗号化されたデータの塊

内容:

  • 秘密鍵(Private Key)
  • 公開鍵(Public Key)
  • 証明書(Certificate)

    開こうとすると:
    ���@��}�X��▒▒▒��… (文字化け)

Androidアプリに署名するための鍵
このアプリは私が作った本物ですという証明

key.properties – 鍵の使い方

中身:

storePassword=your_store_password
keyPassword=your_key_password
keyAlias=upload
storeFile=upload-keystore.jks

これは何?
ビルドするときに、どの鍵をどう使うかを教えるファイル

パスワードや鍵の場所を書いておく(金庫のパスワードをメモした紙)

図解: 2つの関係

Flutter アプリをビルド
build.gradle が実行される
key.properties を読み込む 「鍵はどこ?パスワードは?」
key.properties の内容:

storeFile=upload-keystore.jks・・・・

upload-keystore.jks を開く
(パスワードを使って)
アプリに署名

「これは 私 が作った本物」

リリース完成! 🎉

ファイルの推奨される場所は

your_app/
  ├─ android/
  │   ├─ key.properties           ← ここ! ⭐
  │   └─ app/
  │       ├─ upload-keystore.jks  ← ここ! ⭐
  │       └─ build.gradle.kts
  ├─ lib/
  └─ pubspec.yaml

なぜこの場所?
key.properties → android/ 直下
理由:

build.gradle.kts から読み込みやすい
Android プロジェクトのルートに置くのが慣例

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
//                           ↑ android/ からの相対パス

if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

upload-keystore.jks → android/app/ 直下
理由:

アプリ固有のファイルだから app/ の中
key.properties からの相対パスが簡単

key.properties での指定:

storeFile=upload-keystore.jks
# または
storeFile=app/upload-keystore.jks
```

絶対に守るべきこと: .gitignore*

この2つのファイルは Git に入れちゃダメ! 🚫

なぜ?

“`
upload-keystore.jks → 鍵そのもの! 🔑
key.properties → パスワードが書いてある! 🔐

もし GitHub に上げたら…
→ 誰でもあなたのアプリに署名できる!
→ 偽アプリを作られる!
→ 超危険! ⚠️⚠️⚠️

.gitignore に追加(必須!)

# android/.gitignore または プロジェクトルートの .gitignore

# 鍵ファイル
**/android/app/upload-keystore.jks
**/android/key.properties

# または、より厳しく
*.jks
*.keystore
key.properties

確認方法:

git status

# これらが表示されたらダメ!
# modified:   android/key.properties
# modified:   android/app/upload-keystore.jks

# 表示されなければOK!

疑問をまとめ見た

key.properties のパスワードを変えたい

key.properties を編集するだけ!

変更前:
storePassword=old_password

変更後:
storePassword=new_password
別の場所に jks を置きたい

可能! key.properties でパスを指定:

# 絶対パス
storeFile=/Users/webtec/my-keys/upload-keystore.jks

# または相対パス
storeFile=../../../my-keys/upload-keystore.jks
複数のアプリで同じ鍵は使える?

使わない方が良い!

アプリごとに別の鍵が推奨
鍵が漏れたら全アプリが危険

your_keys/
  ├─ abc_app_keystore.jks
  ├─ zzzzz_manager_keystore.jks
  ├─ xxxx_keystore.jks
  └─ ...
jks ファイルを失くしたら?

超大変!

  • アプリの更新ができない
  • 同じパッケージ名で新規登録もできない

対策:
✅ バックアップを複数箇所に
✅ クラウドストレージ(暗号化して)
✅ USB メモリ
✅ 紙にパスワードを書いて金庫へ

パスワードを忘れたら?

超大変!

復元不可能!

対策:
✅ パスワードマネージャーに保存
✅ 紙にメモして金庫へ
✅ key.properties をバックアップ(暗号化して)

セキュリティのベストプラクティス

1)DropBoxなどにバックアップ

2)パスワードマネージャーに保存
1Password, Bitwarden などに:

タイトル: Tuition App – Android Keystore
ユーザー名: upload
パスワード: xyz789
ストアパスワード: abc123

添付ファイル: upload-keystore.jks

3)GitHub には絶対に上げない

# .gitignore を確認
cat .gitignore | grep -E "(jks|keystore|key.properties)"

# 結果:
**/android/app/upload-keystore.jks
**/android/key.properties


4)環境変数を使う

# key.properties の代わりに環境変数
export KEYSTORE_PASSWORD="abc123"
export KEY_PASSWORD="xyz789"
export KEY_ALIAS="upload"
export KEYSTORE_FILE="upload-keystore.jks"



kotlin

// build.gradle.ktssigningConfigs {
release {
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
storeFile file(System.getenv("KEYSTORE_FILE"))
storePassword System.getenv("KEYSTORE_PASSWORD")
}
}

📊 まとめ: 2つのファイルの違い

ファイル役割置き場所内容
upload-keystore.jks実際の鍵 🔑android/app/バイナリ(暗号化)
key.properties設定ファイル 📝android/パスワード・パス

重要ポイント:

jks = 鍵そのもの(絶対に失くさない!)
key.properties = 鍵の使い方(パスワードが書いてある)
両方とも .gitignore に追加!
バックアップ必須!

比喩まとめ:

“`
🔑 upload-keystore.jks = 家の鍵(実物)
📝 key.properties = 「鍵はここ、パスワードはこれ」というメモ
🏠 build.gradle.kts = 「メモを見て、鍵を使って家を開ける」人

一言まとめ:
upload-keystore.jksは実際の鍵🔑(バイナリファイル)、
key.propertiesは鍵の使い方📝(パスワードとパス)。
置き場所はandroid/app/とandroid/。
両方とも.gitignoreに追加必須!
失くしたらアプリ更新不可能なのでバックアップ超重要! 🔐✨

目次