まず問題を理解するために、Heroku の公式ドキュメントを調査します。
Heroku CLI » はじめに | Heroku Dev Center より引用
CLI をインストールした後、heroku login コマンドを実行します。いずれかのキーを入力し、Web ブラウザに移動してログインを完了するように求められます。続いて CLI から自動的にログインします。
(略)
CLI は、将来使用できるように、メールアドレスと API トークンを ~/.netrc に保存します。
Heroku CLI 認証 | Heroku Dev Center より引用
メールアドレスとパスワードは、heroku コマンドによって API トークンを取得するために使用されます。このトークンは、他のすべての Heroku API リクエストで認証に使用され(後略)
(略)
Heroku コマンドラインツールでは、標準 Unix ファイルの ~/.netrc (Windows では $HOME_netrc) に API トークンを保存します。
(略)
heroku login (または認証が必要なその他の heroku コマンド) を実行すると、~/.netrc ファイルが作成または更新されます。
Heroku CLI » トラブルシューティング » ログイン問題 | Heroku Dev Center より引用
ログインに問題が発生している場合は、 .netrc ファイルを移動してみてください。これは、CLI が証明書を保存する場所です。
$ mv ~/.netrc ~/.netrc.backup
$ heroku login
Windows では、ファイルに _netrc という名前が付けられます。
公式ドキュメントのこれらの記述からわかること、推測できることをまとめます。
- heroku login コマンドを実行すると、ユーザのホームディレクトリに、_netrc というファイルが作成され、そこにメールアドレスと API トークンが保存される(ファイルが作られるのはあくまでユーザのローカルPC上であることに注意)
- 初回以降に heroku login コマンド、または認証が必要なその他の heroku コマンドを実行すると、_netrc ファイルが更新される
- _netrc ファイルが移動または削除されると、次回 heroku login コマンドまたは認証が必要なその他の heroku コマンド実行時に、再度 _netrc ファイルが作られる
発生している問題・エラーメッセージを確認します。
heroku login # 以下のErrorは出ますがログインはできます
# heroku: Press any key to open up the browser to login or q to exit:
# Logging in... done
# Error: ENOENT: no such file or directory, open 'Z:/_netrc'
heroku create # 以下のErrorが出た後に再度ログインを求められるだけで、app用のURLがcreateされません
# Creating app... !
# ! Invalid credentials provided.
# heroku: Press any key to open up the browser to login or q to exit:
# Logging in... done
# Error: ENOENT: no such file or directory, open 'Z:/_netrc'
('ENOENT' という用語については、元 Heroku 開発者の方の 'ENOENT simply means that a file doesn't exist. That can happen for any number of reasons.' という言葉で、特に気にする必要がないことが分かります。)
ここから推測される問題の状況は次のようなものです。
- ログイン後に _netrc を更新しようとして、_netrc ファイルを見つけられないでいる
- _netrc ファイルのあるべき場所は 'Z:/_netrc' である
- _netrc ファイルがなければ作られるはずだが、'no such file or directory' と表示されるということは、ファイルの作成自体に失敗している、もしくはファイルが作成されるパスと Heroku CLI がファイルを探しに行っているパスが食い違っている可能性がある
またこの推測に伴って次のような疑問も浮かびます。
- そもそもZドライブがあるのかどうか
- ユーザのホームディレクトリが 'Z:/' として認識されていると仮定すると、その値はどこからきたのか。%HOME% 環境変数からか。または類似の環境変数である %HOMEDRIVE%(規定値は C:\)と %HOMEPATH%(規定値は \Users\ユーザー名)からか
- それらの環境変数に実際に 'Z:/' という値が設定されていたとして、それはユーザが意図した正しい値なのか
- そもそも Heroku CLI の仕様としては、どの環境変数を参照するように作られているのか(どこに _netrc ファイルを作るように作られているのか)
以上からまず確認したいことは、
- ユーザのホームディレクトリ(規定値ならC:\Users\ユーザー名)に _netrc という名前のファイルはあるか、もしあったとして最終更新日はいつか
- Zドライブはあるか
- %HOME% という名前の環境変数はあるか、あったとしてその値は
- %HOMEDRIVE% と %HOMEPATH% 環境変数のそれぞれの値は
になります。確認の結果を踏まえて、次に何をすべきかを考えることになります。
Heroku CLI はオープンソースですので、仕様は分かる人がみたら分かるのでしょうが、私の手には余ります。
https://github.com/heroku/cli
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/10 00:24
2021/05/10 03:28 編集
2021/05/10 03:18
2021/05/10 06:35