Nextcloudの管理用CLI「occ」詳細： アプリ管理に関するコマンド群

# はじめに
NextcloudにはCLI環境として`occ`というものがあり、さまざまな設定、管理を行うことができます。 ここではoccで使える様々なコマンド群のうち、アプリ管理に関するコマンド群についてまとめてみます。

※occ の使い方については、 [Nextcloudの管理用CLI「occ」コマンドについて](https://qiita.com/S_Katz/items/99b9319127d956b22e7b)の記事を参照ください。

# 環境について
ここで記載するoccを実行するNextcloudのバージョンは、2019年3月9日現在で最新の`15.0.5`を利用します。  
WebサーバはNginxを利用した環境で実施しております。ApacheをWebサーバとして利用している場合は、`sudo -u` のユーザIDを`apache`に読み替えてください。

# アプリ管理に関するコマンド群
アプリ管理に関するコマンドは以下のようなものがあります。

- app:check-code
- app:disable
- app:enable
- app:getpath
- app:install
- app:list
- app:remove
- app:update

## app:list
利用可能なアプリのリストを出力します。アプリが有効化されているかどうかも確認することができます。  

### 使い方
`app:list [オプション]`

#### オプション
- `--output=[OUTPUT]`
アプリ情報の出力フォーマットを指定します。指定できるフォーマットは次のとおりです。
  - `plain`: 普通の出力 (オプション未指定の場合のデフォルト)
  - `json`: JSON形式
  - `json_pretty`: 整形されたJSON形式
- `--shipped=SHIPPED`
`true`を指定するとNextcloudのパッケージとしてインストールされたアプリのみをリストとして出力します。`false`を指定するとNextcloud App Storeなどから別でインストールされたアプリのみをリストとして出力します。
このオプションが指定されない場合は全てのアプリをリストとして出力します。

### 使用例
①全ての利用可能なアプリのリストを出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:list 
Enabled:
  - accessibility: 1.1.0
  - activity: 2.8.2
  - bruteforcesettings: 1.3.0
  - cloud_federation_api: 0.1.0
  - comments: 1.5.0
  - dav: 1.8.1
  - federatedfilesharing: 1.5.0
  - federation: 1.5.0
  - files: 1.10.0
  - files_pdfviewer: 1.4.0
  - files_sharing: 1.7.0
  - files_texteditor: 2.7.0
  - files_trashbin: 1.5.0
  - files_versions: 1.8.0
  - files_videoplayer: 1.4.0
  - firstrunwizard: 2.4.0
  - gallery: 18.2.0
  - logreader: 2.0.0
  - lookup_server_connector: 1.3.0
  - news: 13.1.0
  - nextcloud_announcements: 1.4.0
  - notifications: 2.3.0
  - oauth2: 1.3.0
  - password_policy: 1.5.0
  - provisioning_api: 1.5.0
  - serverinfo: 1.5.0
  - sharebymail: 1.5.0
  - support: 1.0.0
  - survey_client: 1.3.0
  - systemtags: 1.5.0
  - theming: 1.6.0
  - twofactor_backupcodes: 1.4.1
  - updatenotification: 1.5.0
  - workflowengine: 1.5.0
Disabled:
  - admin_audit
  - encryption
  - files_external
  - user_ldap
```
②Nextcloud App Storeなどから別でインストールされたアプリのみのリストを整形されたJSON形式で出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:list --shipped=false --output=json_pretty
{
    "enabled": {
        "bruteforcesettings": "1.3.0",
        "news": "13.1.0"
    },
    "disabled": []
}
```

## app:disable
アプリを無効にします。

### 使い方
`app:disable <アプリID>`

#### アプリID
無効にしたいアプリのアプリIDを指定します。すでに無効にされているアプリIDが指定された場合や存在しないアプリIDが指定された場合は`No such app enabled: <アプリID>`というメッセージが表示されます。

### 使用例
①`news`アプリを無効化する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:disable news
news disabled
```

## app:enable
アプリを有効にします。

### 使い方
`app:enable <アプリID>`

#### アプリID
有効にしたアプリのアプリIDを指定します。すでに有効にされているアプリIDが指定された場合でも処理が実行され正常終了します。存在しないアプリIDが指定された場合は`<アプリID> not found`というメッセージが表示されます。

### 使用例
①`news`アプリを有効化する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:enable news
news enabled
```

## app:getpath
利用可能なアプリがインストールされている絶対パスを出力します。

### 使い方
`app:getpath <オプション> <アプリID>`

#### アプリID
パスを表示したいアプリのアプリIDを指定します。存在しないアプリIDが指定された場合は何も表示されません。

#### オプション
- `--output=[OUTPUT]`
アプリ情報の出力フォーマットを指定します。指定できるフォーマットは次のとおりです。
  - `plain`: 普通の出力 (オプション未指定の場合のデフォルト)
  - `json`: JSON形式
  - `json_pretty`: 整形されたJSON形式

_# どの出力フォーマットを指定しても出力がみんな同じ・・・JSONで出力する意味もないと思いますけど。このまま放置なんでしょうかね。_

### 使用例
①`news`アプリのインストール先絶対パスを出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:getpath news
/var/www/html/nextcloud/apps/news
```

## app:install
アプリをインストールします。

### 使い方
`app:install <オプション> <アプリID>`

#### アプリID
インストールしたいアプリのアプリIDを指定します。存在しないアプリIDが指定された場合は`Error: Could not download app <アプリID>`と表示されます。指定したアプリがすでにインストールされている場合は`<アプリID> already installed`と表示されます。

#### オプション
- `--keep-disabled`
インストールが終わったあとアプリを有効にしません。

### 使用例
①`calendar`アプリをインストールする。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:install calendar
calendar installed
calendar enabled
```

②`notes`アプリをインストールする。インストール後アプリは有効にしない。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:install --keep-disabled notes
notes installed
```

## app:remove
アプリを削除します。

### 使い方
`app:remove <オプション> <アプリID>`

#### アプリID
削除したいアプリのアプリIDを指定します。インストールされていないアプリIDが指定された場合は`<アプリID> is not installed`と表示されます。

#### オプション
- `--keep-data`
削除した後もアプリデータを保管し削除しません(アプリ本体のファイルは削除されます)。このオプションを指定しない場合はアプリデータは削除されると思われるのですが、アプリによってはそのままデータが残り続けることもあるようです。

### 使用例
①`notes`アプリを削除する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:remove notes
notes disabled
notes removed
```

## app:update
1つまたは全てのアプリを最新版に更新します。

### 使い方
`app:update <オプション> <アプリID>`

#### アプリID
最新版に更新したいアプリのアプリIDを指定します。インストールされていないアプリIDが指定された場合は`<アプリID> not installed`と表示されます。指定したアプリがすでに最新版である場合は何も表示されません。`--all`オプションを指定しないときは必ず指定する必要があります。

#### オプション
- `--all`
更新できるすべてのアプリを最新版に更新します。
- `--showonly`
更新処理は行わず、更新情報のみ表示します。

### 使用例
①`calendar`アプリを最新版に更新する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:update calendar
calendar new version available: 1.6.4
calendar updated
```

②すべてのアプリのアップデートがあるか確認する。更新処理はしない。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:update --showonly --all
fulltextsearch new version available: 1.2.5
calendar new version available: 1.6.4
```

## app:check-code
アプリのコードが適合したものかどうかを確認します。

### 使い方
`app:update <オプション> <アプリID>`

#### アプリID
アプリのコードが適合しているかどうかを確認したいアプリのアプリIDを指定します。

#### オプション
- `-c, --checker=CHECKER`
指定されたコードチェッカーを使います。このオプションを指定しないときには全てのチェッカーで確認を行います。オプションを複数指定することで複数の確認を同時に行うことができます。チェッカーは下記のものを指定できます。
  - `private`: プライベートクラスの静的メソッドの呼び出しに関するチェック。
  - `deprecation`: 非推奨クラスの静的メソッドの呼び出しに関するチェック。
  - `strong-comparison`: 厳密な比較に関するチェック。
- `--skip-checkers`
コードチェッカーをスキップして、`info.xml`、言語、データベーススキーマのみ確認します。
- `--skip-validate-info`
`info.xml`のバージョン確認をスキップします。

### 使用例
①`calendar`アプリのコードが適合しているかどうかを確認する。出力例は確認の結果問題ない場合です。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ app:check-code calendar
App is compliant - awesome job!
```

**★この記事は、[スタイルズ社のNextcloudサイト](https://nextcloud.stylez.co.jp/) の [Nextcloudブログ](https://nextcloud.stylez.co.jp/nextcloudblog)にも公開しております！**