Cloud Foundry の cf コマンドを Homebrew で macOS にインストールする

## Homebrew で cf コマンドをインストール

[GitHub \- cloudfoundry/homebrew\-tap: Cloud Foundry Homebrew packages](https://github.com/cloudfoundry/homebrew-tap) に Homebrew によるインストール方法が載っている。

Homebrew で cf コマンドをインストールする。
formula 名は cf ではなく cf-cli なので注意。

```
$ brew tap cloudfoundry/tap

$ brew install cf-cli
```

インストールされた cf コマンドを確認。

```
$ which cf
/usr/local/bin/cf

$ cf --version
cf バージョン 6.47.2+d526c2cb3.2019-11-05
```

## cf コマンドのヘルプ

cf help でヘルプが表示される。

```
$ cf help
cf バージョン 6.47.2+d526c2cb3.2019-11-05, Cloud Foundry コマンド・ライン・ツール
使用法: cf [グローバル・オプション] コマンド [引数...] [コマンド・オプション]

始める前に:
  config    login,l      target,t
  help,h    logout,lo    

アプリケーション・ライフサイクル:
  apps,a        run-task,rt    events
  push,p        logs           set-env,se
  start,st      ssh            create-app-manifest
  stop,sp       app            delete,d
  restart,rs    env,e          
  restage,rg    scale          

サービス統合:
  marketplace,m        create-user-provided-service,cups
  services,s           update-user-provided-service,uups
  create-service,cs    create-service-key,csk
  update-service       delete-service-key,dsk
  delete-service,ds    service-keys,sk
  service              service-key
  bind-service,bs      bind-route-service,brs
  unbind-service,us    unbind-route-service,urs

経路およびドメインの管理:
  routes,r        delete-route    create-domain
  domains         map-route       
  create-route    unmap-route     

スペース管理:
  spaces         create-space    set-space-role
  space-users    delete-space    unset-space-role

組織管理:
  orgs,o       set-org-role
  org-users    unset-org-role

CLI プラグイン管理:
  plugins           add-plugin-repo      repo-plugins
  install-plugin    list-plugin-repos    

インストール済みプラグインで提供されるコマンド:

グローバル・オプション:
  --help, -h                         ヘルプを表示します
  -v                                 API 要求診断を stdout に出力します

TIP: Use 'cf help -a' to see all commands.
```

## cf で使用可能なすべての CLI コマンド

[Cloud Foundry CLI Reference Guide](http://cli.cloudfoundry.org/ja-JP/cf/) にコマンド一覧が載っている。

また、 cf help -a ですべてのコマンドを見ることができる。

```
$ cf help -a
名前:
   cf - Cloud Foundry と対話するためのコマンド・ライン・ツール

使用法:
   cf [グローバル・オプション] コマンド [引数...] [コマンド・オプション]

バージョン:
   6.47.2+d526c2cb3.2019-11-05

開始:
   help                                   ヘルプを表示します
   version                                バージョンを出力します
   login                                  ユーザーをログインします
   logout                                 ユーザーをログアウトします
   passwd                                 ユーザー・パスワードを変更します
   target                                 ターゲットにされた組織またはスペースを設定または表示します

   api                                    ターゲットの API URL を設定または表示します
   auth                                   非対話式に認証します

アプリ:
   apps                                   ターゲット・スペース内のすべてのアプリをリストします
   app                                    アプリの正常性と状況を表示します

   push                                   新しいアプリをプッシュしたり、既存のアプリに対して変更を同期します
   scale                                  特定のアプリについてインスタンス・カウント、ディスク・スペース制限、およびメモリー制限を変更または表示します
   delete                                 アプリを削除します
   rename                                 アプリを名前変更します

   start                                  アプリを開始します
   stop                                   アプリを停止します
   restart                                アプリのすべてのインスタンスを停止し、その後でそれらを開始します。 これによってダウン時間が発生します。
   restage                                最新のプッシュ済みアプリ・ファイルと最新の環境 (変数、サービス・バインディング、ビルドパック、スタックなど) を使用してアプリの実行可能成果物を再作成します. このアクションを実行すると、アプリのダウン時間が発生します。
   restart-app-instance                   終了し、その後でアプリ・インスタンスを再始動します

   run-task                               アプリでワンオフ・タスクを実行します
   tasks                                  アプリのタスクをリストします
   terminate-task                         アプリの実行タスクを終了します

   events                                 最近のアプリ・イベントを表示します
   files                                  ディレクトリー内のファイルのリスト、または DEA バックエンドで実行されているアプリの特定のファイルの内容を出力します
   logs                                   アプリの最近のログを追尾または表示します

   env                                    アプリの環境変数をすべて表示します
   set-env                                アプリの環境変数を設定します
   unset-env                              アプリから環境変数を削除します

   stacks                                 すべてのスタックをリストします (スタックはオペレーティング・システムを含む事前ビルドされたファイル・システムであり、このファイル・システムはアプリを実行できます)
   stack                                  スタックの情報を表示します (スタックはオペレーティング・システムを含む事前ビルドされたファイル・システムであり、このファイル・システムはアプリを実行できます)

   copy-source                            アプリケーションのソース・コードを、別の既存のアプリケーションにコピーします。(そして、そのアプリケーションを再始動します)
   create-app-manifest                    正常にプッシュされたアプリのアプリ・マニフェストを作成します

   get-health-check                       アプリで実行されるヘルス・チェックのタイプを表示します
   set-health-check                       アプリで実行されるヘルス・チェックのタイプを変更します
   enable-ssh                             このアプリケーションに対して SSH を有効にします
   disable-ssh                            このアプリケーションに対して SSH を無効にします
   ssh-enabled                            アプリケーション・コンテナー・インスタンスで SSH に有効になっているかどうかを報告します
   ssh                                    SSH 経由でアプリケーション・コンテナー・インスタンスに接続します

サービス:
   marketplace                            このマーケットプレイス内の使用可能なオファリングをリストします
   services                               ターゲット・スペース内のすべてのサービス・インスタンスをリストします
   service                                サービス・インスタンスの情報を表示します

   create-service                         サービス・インスタンスを作成します
   update-service                         サービス・インスタンスを更新します
   delete-service                         サービス・インスタンスを削除します
   rename-service                         サービス・インスタンスを名前変更します

   create-service-key                     サービス・インスタンスのキーを作成します
   service-keys                           サービス・インスタンスのキーをリストします
   service-key                            サービス・キーの情報を表示します
   delete-service-key                     サービス・キーを削除します

   bind-service                           サービス・インスタンスをアプリにバインドします
   unbind-service                         アプリからサービス・インスタンスをアンバインドします

   bind-route-service                     サービス・インスタンスを HTTP 経路にバインドします
   unbind-route-service                   HTTP 経路からサービス・インスタンスをアンバインドします

   create-user-provided-service           ユーザー提供のサービス・インスタンスを CF アプリが使用できるようにします
   update-user-provided-service           ユーザー提供サービス・インスタンスを更新します

   share-service                          サービス・インスタンスを別のスペースと共有します
   unshare-service                        共有されたサービス・インスタンスをスペースから共有解除します

組織:
   orgs                                   すべての組織をリストします
   org                                    組織の情報を表示します

   create-org                             組織を作成します
   delete-org                             組織を削除します
   rename-org                             組織を名前変更します

スペース:
   spaces                                 1 つの組織内のすべてのスペースをリストします
   space                                  スペースの情報を表示します

   create-space                           スペースを作成します
   delete-space                           スペースを削除します
   rename-space                           スペースを名前変更します

   allow-space-ssh                        このスペースに対する SSH アクセスを許可します
   disallow-space-ssh                     このスペースに対する SSH アクセスを不許可にします
   space-ssh-allowed                      スペース内で SSH が許可されているかどうかを報告します

ドメイン:
   domains                                ターゲット組織内のドメインをリストします
   create-domain                          後で使用するために組織内にドメインを作成します
   delete-domain                          ドメインを削除します
   create-shared-domain                   すべての組織 (管理者のみ) が使用できるドメインを作成します
   delete-shared-domain                   共有ドメインを削除します

   router-groups                          ルーター・グループをリストします

経路:
   routes                                 現行スペースまたは現行組織内のすべての経路をリストします
   create-route                           後で使用するためにスペース内に URL 経路を作成します
   check-route                            経路が現在存在しているかどうかを調べる簡単なチェックを行います。
   map-route                              アプリに URL 経路を追加します
   unmap-route                            アプリから URL 経路を削除します
   delete-route                           経路を削除します
   delete-orphaned-routes                 Delete all orphaned routes in the currently targeted space (i.e. those that are not mapped to an app)

ネットワーク・ポリシー
   network-policies                       直接ネットワーク・トラフィック・ポリシーをリストします
   add-network-policy                     あるアプリから別のアプリへの直接ネットワーク・トラフィックを許可するポリシーを作成します
   remove-network-policy                  アプリのネットワーク・トラフィック・ポリシーを削除します

ビルドパック:
   buildpacks                             すべてのビルドパックをリストします
   create-buildpack                       ビルドパックを作成します
   update-buildpack                       ビルドパックを更新します
   rename-buildpack                       ビルドパックを名前変更します
   delete-buildpack                       ビルドパックを削除します

ユーザー管理者:
   create-user                            新しいユーザーを作成します
   delete-user                            ユーザーを削除します

   org-users                              組織のユーザーを役割別に表示します
   set-org-role                           ユーザーに組織の役割を割り当てます
   unset-org-role                         ユーザーから組織の役割を削除します

   space-users                            スペースのユーザーを役割別に表示します
   set-space-role                         ユーザーにスペースの役割を割り当てます
   unset-space-role                       ユーザーからスペースの役割を削除します

組織管理者:
   quotas                                 使用可能な使用量の割り当て量をリストします
   quota                                  割り当て量の情報を表示します
   set-quota                              組織に割り当てを設定します

   create-quota                           新しいリソース割り当て量を定義します
   delete-quota                           割り当て量を削除します
   update-quota                           既存のリソース割り当て量を更新します

   share-private-domain                   プライベート・ドメインを組織と共有します
   unshare-private-domain                 プライベート・ドメインを組織と非共有にします

スペース管理者:
   space-quotas                           使用可能なスペース・リソース割り当て量をリストします
   space-quota                            スペース割り当て量の情報を表示します

   create-space-quota                     新しいスペース・リソース割り当て量を定義します
   update-space-quota                     既存のスペース割り当て量を更新します
   delete-space-quota                     スペース割り当て量定義を削除し、すべてのスペースからスペース割り当て量を割り当て解除します

   set-space-quota                        スペースにスペース割り当て量定義を指定します
   unset-space-quota                      スペースから割り当て量を割り当て解除します

サービス管理者:
   service-auth-tokens                    サービス認証トークンをリストします
   create-service-auth-token              サービス認証トークンを作成します
   update-service-auth-token              サービス認証トークンを更新します
   delete-service-auth-token              サービス認証トークンを削除します

   service-brokers                        サービス・ブローカーをリストします
   create-service-broker                  サービス・ブローカーを作成します
   update-service-broker                  サービス・ブローカーを更新します
   delete-service-broker                  サービス・ブローカーを削除します
   rename-service-broker                  サービス・ブローカーを名前変更します

   migrate-service-instances              あるサービスから他のサービスにサービス・インスタンスをマイグレーションします
   purge-service-offering                 サービス・ブローカーに要請することなく Cloud Foundry データベースからサービスと子オブジェクトを再帰的に削除します
   purge-service-instance                 サービス・ブローカーに要請することなく Cloud Foundry データベースからサービス・インスタンスと子オブジェクトを再帰的に削除します

   service-access                         サービス・アクセス設定をリストします
   enable-service-access                  1 つまたはすべての組織に対してサービスまたはサービス・プランへのアクセスを有効にします
   disable-service-access                 1 つまたはすべての組織に対してサービスまたはサービス・プランへのアクセスを無効にします

セキュリティー・グループ:
   security-group                         単一のセキュリティー・グループを表示します
   security-groups                        すべてのセキュリティー・グループをリストします
   create-security-group                  セキュリティー・グループを作成します
   update-security-group                  セキュリティー・グループを更新します
   delete-security-group                  セキュリティー・グループを削除します
   bind-security-group                    特定のスペース、または組織の既存のすべてのスペースにセキュリティー・グループをバインドします
   unbind-security-group                  スペースからセキュリティー・グループをアンバインドします

   bind-staging-security-group            ステージング・アプリケーションに対して使用されるセキュリティー・グループのリストにセキュリティー・グループをバインドします
   staging-security-groups                ステージング中のアプリケーションのセット内にあるセキュリティー・グループをリストします
   unbind-staging-security-group          ステージング・アプリケーションのセキュリティー・グループのセットからセキュリティー・グループをアンバインドします

   bind-running-security-group            実行アプリケーションに対して使用されるセキュリティー・グループのリストにセキュリティー・グループをバインドします
   running-security-groups                実行中のアプリケーションに対するセキュリティー・グループのセット内にあるセキュリティー・グループをリストします
   unbind-running-security-group          実行アプリケーションのセキュリティー・グループのセットからセキュリティー・グループをアンバインドします

環境変数グループ:
   running-environment-variable-group     実行環境変数グループの内容を取得します
   staging-environment-variable-group     ステージング環境変数グループの内容を取得します
   set-staging-environment-variable-group パラメーターを JSON として渡してステージング環境変数グループを作成します
   set-running-environment-variable-group パラメーターを JSON として渡して実行環境変数グループを作成します

分離セグメント:
   isolation-segments                     すべての分離セグメントをリストします
   create-isolation-segment               分離セグメントを作成します
   delete-isolation-segment               分離セグメントを削除します
   enable-org-isolation                   分離セグメントへの資格を組織に付与します
   disable-org-isolation                  分離セグメントへの組織の資格を取り消します
   set-org-default-isolation-segment      組織のスペース内のアプリに使用されるデフォルトの分離セグメントを設定します
   reset-org-default-isolation-segment    組織のスペース内のアプリに使用されるデフォルトの分離セグメントをリセットします
   set-space-isolation-segment            スペースの分離セグメントを割り当てます
   reset-space-isolation-segment          スペースの分離セグメントを組織のデフォルトにリセットします

フィーチャー・フラグ:
   feature-flags                          状況を持つフィーチャー・フラグのリストを取得します
   feature-flag                           次の状況を持つ個別のフィーチャー・フラグを取得します:
   enable-feature-flag                    フィーチャーの使用を許可します
   disable-feature-flag                   フィーチャーの使用を防止します

詳細:
   curl                                   ターゲットの API エンドポイントへの要求を実行します
   config                                 デフォルト値を構成に書き込みます
   oauth-token                            現行セッションの OAuth トークンを取得して表示します
   ssh-code                               SSH クライアント用のワンタイム・パスワードを取得します

プラグイン・リポジトリーの追加/削除:
   add-plugin-repo                        新しいプラグイン・リポジトリーを追加します
   remove-plugin-repo                     プラグイン・リポジトリーを削除します
   list-plugin-repos                      追加されたプラグイン・リポジトリーをすべてリストします
   repo-plugins                           指定されたリポジトリー、または追加されたすべてのリポジトリー内にある使用可能なすべてのプラグインをリストします

プラグインの追加/削除:
   plugins                                インストール済みプラグインのコマンドをリストします
   install-plugin                         CLI プラグインのインストール
   uninstall-plugin                       CLI プラグインをアンインストールします

インストール済みプラグイン・コマンド:

環境変数:
   CF_COLOR=false                     出力に色を付けません
   CF_DIAL_TIMEOUT=6                  名前解決を含め、接続を確立するための最大待ち時間 (秒)
   CF_HOME=path/to/dir/               デフォルトの構成ディレクトリーへのパスをオーバーライドします
   CF_PLUGIN_HOME=path/to/dir/        デフォルトのプラグイン構成ディレクトリーへのパスをオーバーライドします
   CF_TRACE=true                      API 要求診断を stdout に出力します
   CF_TRACE=path/to/trace.log         API 要求診断をログ・ファイルに付加します
   all_proxy=proxy.example.com:8080   すべての要求に対してプロキシングを有効にするために、プロキシー・サーバーを指定します
   https_proxy=proxy.example.com:8080 HTTP 要求に対してプロキシングを有効にします

グローバル・オプション:
   --help, -h                         ヘルプを表示します
   -v                                 API 要求診断を stdout に出力します

アプリ (試験的):
   v3-apps                            ターゲット・スペース内のすべてのアプリをリストします
   v3-create-app                      V3 アプリを作成します

   v3-push                            新しいアプリをプッシュしたり、既存のアプリに対して変更を同期します
   v3-scale                           特定のアプリについてインスタンス・カウント、ディスク・スペース制限、およびメモリー制限を変更または表示します
   v3-delete                          V3 アプリを削除します

   v3-start                           アプリを開始します
   v3-stop                            アプリを停止します
   v3-restart                         アプリのすべてのインスタンスを停止し、その後でそれらを開始します。 これによってダウン時間が発生します。
   v3-stage                           アプリの新規ドロップレットを作成します
   v3-restart-app-instance            終了し、その後でアプリ・インスタンスをインスタンス化します
   v3-apply-manifest                  マニフェスト・プロパティーをアプリケーションに適用します

   v3-droplets                        アプリのドロップレットをリストします
   v3-set-droplet                     アプリを実行するために使用されるドロップレットを設定します。

   v3-env                             アプリの環境変数をすべて表示します
   v3-set-env                         アプリの環境変数を設定します
   v3-unset-env                       アプリから環境変数を削除します

   v3-get-health-check                アプリで実行されるヘルス・チェックのタイプを表示します
   v3-set-health-check                アプリのプロセスで実行されるヘルス・チェックのタイプを変更します

   v3-packages                        アプリのパッケージをリストします
   v3-create-package                  V3 パッケージをアップロードします

   v3-ssh                             SSH 経由でアプリケーション・コンテナー・インスタンスに接続します
```

## 参考資料
- [GitHub \- cloudfoundry/homebrew\-tap: Cloud Foundry Homebrew packages](https://github.com/cloudfoundry/homebrew-tap)
- [Cloud Foundry CLI Reference Guide](http://cli.cloudfoundry.org/ja-JP/cf/)