Ruby のプロジェクトから環境変数(ENV)っぽい値を取り出す

# 何がしたいか

git リポジトリの Ruby のプロジェクトから環境変数([ENV](https://docs.ruby-lang.org/ja/latest/class/ENV.html))っぽい値を取り出したくなった。

# やり方

これでできる。
割とバグってるので使用は自己責任で。

```shell:これでできる.sh
git grep -h -o -E "ENV(\[|\.fetch).*" |
  ruby -ane 'puts $_.match(%r|['\''"](.+?)["'\'']|)[1] rescue nil' |
  sort |
  uniq
```

## 解説

- `git grep -h -o -E "ENV(\[|\.fetch).*"` 
    - `ENV['HOGE']` とか `ENV.fetch("HOGE") { 'fuga' } ` とかを抽出する
    - `-h` ファイル名なし
    - `-o` マッチした部分だけ
    - `-E` 正規表現
- `ruby -ane 'puts $_.match(%r|['\''"](.+?)["'\'']|)[1] rescue nil'`
    - `ENV.fetch("HOGE") { 'fuga' } ` から `'` `"` で囲まれた部分を最小で取り出す
    - **`ENV` が同じ行に二つ以上あるとバグります。**
    - `sed` でも `perl` でも `grep` でもできそう。
- `sort|uniq`
    - ソートして重複を排除します

## 例

[mastdon](https://github.com/tootsuite/mastodon) で実行してみるとこんな感じ。

```.env
ALLOWED_PRIVATE_ADDRESSES
ALLOW_ACCESS_TO_HIDDEN_SERVICE
ALTERNATE_DOMAINS
AUTHORIZED_FETCH
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
BACKTRACE
BIND
BRANCH
BUNDLE_GEMFILE
CACHE_BUSTER_ENABLED
CACHE_BUSTER_SECRET
CACHE_BUSTER_SECRET_HEADER
CACHE_REDIS_URL
CAS_CALLBACK_URL
CAS_CA_PATH
CAS_DISABLE_SSL_VERIFICATION
CAS_EMAIL_KEY
CAS_ENABLED
CAS_FIRST_NAME_KEY
CAS_HOST
CAS_IMAGE_KEY
CAS_LAST_NAME_KEY
CAS_LOCATION_KEY
CAS_LOGIN_URL
CAS_LOGOUT_URL
CAS_NAME_KEY
CAS_NICKNAME_KEY
CAS_PHONE_KEY
CAS_PORT
CAS_SSL
CAS_UID_FIELD
CAS_UID_KEY
CAS_URL
CAS_VALIDATE_URL
CDN_HOST
DATABASE_URL
DB_HOST
DB_NAME
DB_PASS
DB_POOL
DB_PORT
DB_SSLMODE
DB_USER
DEFAULT_LOCALE
DISABLE_FOLLOWERS_SYNCHRONIZATION
DISABLE_SIMPLECOV
EMAIL_DOMAIN_ALLOWLIST
EMAIL_DOMAIN_DENYLIST
ES_ENABLED
ES_HOST
ES_PORT
ES_PREFIX
FFMPEG_BINARY
GITHUB_API_TOKEN
GITHUB_REPOSITORY
HEROKU
KEYBASE_BASE_URL
KEYBASE_DOMAIN
LDAP_BASE
LDAP_BIND_DN
LDAP_ENABLED
LDAP_HOST
LDAP_MAIL
LDAP_METHOD
LDAP_PASSWORD
LDAP_PORT
LDAP_SEARCH_FILTER
LDAP_TLS_NO_VERIFY
LDAP_UID
LDAP_UID_CONVERSION_ENABLED
LDAP_UID_CONVERSION_REPLACE
LDAP_UID_CONVERSION_SEARCH
LIMITED_FEDERATION_MODE
LOCAL_DOMAIN
LOCAL_HTTPS
MAX_FOLLOWS_RATIO
MAX_FOLLOWS_THRESHOLD
MAX_REQUEST_POOL_SIZE
MAX_SESSION_ACTIVATIONS
MAX_THREADS
NODE_ENV
OAUTH_REDIRECT_AT_SIGN_IN
OTHER_DATABASE_URL
OTP_SECRET
PAM_CONTROLLED_SERVICE
PAM_DEFAULT_SERVICE
PAM_EMAIL_DOMAIN
PAM_ENABLED
PAPERCLIP_ROOT_PATH
PAPERCLIP_ROOT_URL
PATH
PERSISTENT_TIMEOUT
PGHERO_STATS_DATABASE_URL
PORT
PREPARED_STATEMENTS
QUERY_TRACE_ENABLED
RAILS_ENV
RAILS_LOG_LEVEL
RAILS_MASTER_KEY
RAILS_SERVE_STATIC_FILES
REDIS_DB
REDIS_HOST
REDIS_NAMESPACE
REDIS_PASSWORD
REDIS_PORT
REDIS_URL
REMOTE_DEV
REPO
S3_ALIAS_HOST
S3_BUCKET
S3_CLOUDFRONT_HOST
S3_ENABLED
S3_ENDPOINT
S3_HOSTNAME
S3_MULTIPART_THRESHOLD
S3_OPEN_TIMEOUT
S3_OVERRIDE_PATH_STYLE
S3_PERMISSION
S3_PROTOCOL
S3_READ_TIMEOUT
S3_REGION
S3_SIGNATURE_VERSION
SAML_ACS_URL
SAML_ALLOWED_CLOCK_DRIFT
SAML_ATTRIBUTES_STATEMENTS_EMAIL
SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME
SAML_ATTRIBUTES_STATEMENTS_FULL_NAME
SAML_ATTRIBUTES_STATEMENTS_LAST_NAME
SAML_ATTRIBUTES_STATEMENTS_UID
SAML_ATTRIBUTES_STATEMENTS_VERIFIED
SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL
SAML_CERT
SAML_ENABLED
SAML_IDP_CERT
SAML_IDP_CERT_FINGERPRINT
SAML_IDP_CERT_FINGERPRINT_VALIDATOR
SAML_IDP_SSO_TARGET_PARAMS
SAML_IDP_SSO_TARGET_URL
SAML_ISSUER
SAML_NAME_IDENTIFIER_FORMAT
SAML_PRIVATE_KEY
SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED
SAML_SECURITY_WANT_ASSERTION_ENCRYPTED
SAML_SECURITY_WANT_ASSERTION_SIGNED
SAML_UID_ATTRIBUTE
SECRET_KEY_BASE
SIDEKIQ_REDIS_URL
SINGLE_USER_MODE
SKIP_POST_DEPLOYMENT_MIGRATIONS
SMTP_AUTH_METHOD
SMTP_CA_FILE
SMTP_DELIVERY_METHOD
SMTP_DOMAIN
SMTP_ENABLE_STARTTLS_AUTO
SMTP_FROM_ADDRESS
SMTP_LOGIN
SMTP_OPENSSL_VERIFY_MODE
SMTP_PASSWORD
SMTP_PORT
SMTP_REPLY_TO
SMTP_SERVER
SMTP_SSL
SMTP_TLS
SOCKET
SOURCE_BASE_URL
SOURCE_TAG
STATSD_ADDR
STATSD_NAMESPACE
STREAMING_API_BASE_URL
SWIFT_AUTH_URL
SWIFT_CACHE_TTL
SWIFT_CONTAINER
SWIFT_DOMAIN_NAME
SWIFT_ENABLED
SWIFT_OBJECT_URL
SWIFT_PASSWORD
SWIFT_PROJECT_ID
SWIFT_REGION
SWIFT_TENANT
SWIFT_USERNAME
TEST_ENV_NUMBER
TRUSTED_PROXY_IP
USER
USER_ACTIVE_DAYS
VAPID_PRIVATE_KEY
VAPID_PUBLIC_KEY
WEB_CONCURRENCY
WEB_DOMAIN
http_proxy
```