Nextcloudの管理用CLI「occ」詳細： ユーザ管理に関するコマンド群

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

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

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

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

- user:add
- user:delete
- user:disable
- user:enable
- user:info
- user:lastseen
- user:list
- user:report
- user:resetpassword
- user:setting

## user:add
ユーザを追加します。

### 使い方
`user:add [オプション] <ユーザID>`

#### ユーザID
Nextcloudにログインする際に使用するユーザIDを指定します。ユーザIDとして使用できる文字は次のとおりです。
- 半角英字(`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`)
- 半角数字(`0123456789`)
- 半角ハイフン(`-`)
- 半角アンダースコア(`_`)
- 半角アットマーク(`@`)

#### オプション
- `--password-from-env`  
環境変数`OC_PASS`に定義されている内容を追加するユーザIDの初期パスワードとして設定します。  
このコマンドでは、実行の都度`Enter password:`とユーザIDに対する初期パスワードの入力を要求されますが、これを指定すると初期パスワードを自動的に設定することができます。
- `--display-name=[DISPLAY-NAME]`
追加するユーザのNextcloud画面での表示名を指定します。日本語文字などのマルチバイト文字も指定することができます。  
このオプションを指定しない場合は、デフォルトでユーザIDと同じ文字列がセットされます。
- `-g, --group=[GROUP]`
追加するユーザをどのグループに所属させるかを指定します。  
指定したグループが登録されていない場合は、指定されたグループを自動的に作成します。
グループには日本語文字などのマルチバイト文字も指定することができます。  
このオプションを複数指定することで、複数のグループに所属させるように指定することができます。

### 使用例
①`hoge_9999`ユーザを追加する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:add hoge_9999
Enter password: [パスワードを入力]
Confirm password: [パスワードを入力]
The user "hoge_9999" was created successfully
```
②環境変数`OC_PASS`にセットされた文字列をパスワードとする`fuga_9999`ユーザを追加する。

```
$ OC_PASS=password
$ sudo -E su -s /bin/sh nginx -c "php /var/www/html/nextcloud/occ user:add --password-from-env fuga_9999"
The user "fuga_9999" was created successfully
```
③ユーザID:`piyo_9999`、表示名:`ぴよ9999`のユーザを追加する。この際に新規グループ:`ぴよぴよ`に所属させる。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:add --display-name=ぴよ9999 -g ぴよぴよ piyo_9999 
Enter password: [パスワードを入力]
Confirm password: [パスワードを入力]
The user "piyo_9999" was created successfully
Display name set to "ぴよ9999"
Created group "ぴよぴよ"
User "piyo_9999" added to group "ぴよぴよ"
```
④ユーザID:`hogera_9999`のユーザを追加する。この際に既存グループ:`ぴよぴよ`と新規グループ`hogehoge`に所属させる。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:add --group=ぴよぴよ --group=hogehoge hogera_9999
Enter password: [パスワードを入力]
Confirm password: [パスワードを入力]
The user "hogera_9999" was created successfully
User "hogera_9999" added to group "ぴよぴよ"
Created group "hogehoge"
User "hogera_9999" added to group "hogehoge"
```

## user:delete
登録済みのユーザを削除します。

### 使い方
`user:delete <ユーザID>`

#### ユーザID
登録済みのユーザIDを指定します。

### 使用例
`hoge_9999`ユーザを削除する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:delete hoge_9999
The specified user was deleted
```

## user:disable
登録済みのユーザを利用不可にします。  
利用不可となっているユーザに対してコマンドを実施してもエラーとはなりません。

### 使い方
`user:disable <ユーザID>`

#### ユーザID
登録済みのユーザIDを指定します。

### 使用例
`hoge_9999`ユーザを利用不可する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:disable hoge_9999
The specified user is disabled
```

## user:enable
登録済みのユーザを利用可能にします。  
利用可能となっているユーザに対してコマンドを実施してもエラーとはなりません。

### 使い方
`user:enable <ユーザID>`

#### ユーザID
登録済みのユーザIDを指定します。

### 使用例
`hoge_9999`ユーザを利用不可にする。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:enable hoge_9999
The specified user is enabled
```

## user:info
ユーザの登録情報を出力します。  
指定したユーザが登録されていない場合は`user not found`と表示されます。

### 使い方
`user:info [オプション] <ユーザID>`

#### ユーザID
登録情報を出力したいユーザIDを指定します。

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

### 使用例
①`hoge_9999`ユーザの情報を普通の形式で出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:info hoge_9999
```
②`hogera_9999`ユーザの情報を整形されたJSON形式で出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:info --output=json_pretty hogera_9999
{
    "user_id": "hogera_9999",
    "display_name": "hogera_9999",
    "email": "",
    "cloud_id": "hogera_9999@192.168.33.100",
    "enabled": true,
    "groups": [
        "hogehoge",
        "\u3074\u3088\u3074\u3088"
    ],
    "quota": "none",
    "last_seen": "2019-02-22T05:24:03+00:00",
    "user_directory": "\/var\/www\/html\/nextcloud\/data\/hogera_9999",
    "backend": "Database"
}
```

## user:lastseen
ユーザが最後にログインを行った日時を出力します。日時は世界標準時で出力されるので、日本時間でいつか確認したい場合は、この日時に9時間を足してください。  
指定したユーザがまだログインしたことがない場合は `User (ユーザID) has never logged in, yet.` と表示されます。
指定したユーザが登録されていない場合は `user does not exist` と表示されます。

### 使い方
`user:lastseen <ユーザID>`

#### ユーザID
登録済みのユーザIDを指定します。

### 使用例
`admin`ユーザが最後にログインした日時を出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:lastseen admin
admin`s last login: 22.02.2019 06:17
```

## user:list
登録済みユーザのリストを出力します。  

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

#### オプション
- `-l, --limit[=LIMIT]`
取得するユーザ数を指定します。このオプションを指定しない場合のデフォルト値は`500`です。
- `-o, --offset[=OFFSET]`
取得するユーザを何番目から出力するかを指定します。このオプションを指定しない場合のデフォルト値は`0`(=先頭)です。
- `--output=[OUTPUT]`
ユーザ情報の出力フォーマットを指定します。指定できるフォーマットは次のとおりです。
  - `plain`: 普通の出力 (オプション未指定の場合のデフォルト)
  - `json`: JSON形式
  - `json_pretty`: 整形されたJSON形式

### 使用例
①全登録ユーザ(先頭から500件まで)のリストを出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:list
  - admin: admin
  - fuga_9999: fuga_9999
  - fugafuga_001: ふがふが_001
  - HanakoTanaka: 田中　花子
  - hoge_9999: hoge_9999
  - hogehoge_001: ほげほげ_001
  - hogera_001: ほげら_001
  - hogera_9999: hogera_9999
  - hogohoge_002: ほげほげ_002
  - piyo_9999: ぴよ9999
  - piyopiyo_001: ぴよぴよ_001
  - taro_yamada: 山田　太郎
```
②登録ユーザのうち先頭から5件分のリストを出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:list -l 5
  - admin: admin
  - fuga_9999: fuga_9999
  - fugafuga_001: ふがふが_001
  - HanakoTanaka: 田中　花子
  - hoge_9999: hoge_9999
```
③登録ユーザのうち先頭から6番目以降で5件分のリストをJSON形式で出力する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:list --offset=5 --limit=5 --output=json
{"hogehoge_001":"\u307b\u3052\u307b\u3052_001","hogera_001":"\u307b\u3052\u3089_001","hogera_9999":"hogera_9999","hogohoge_002":"\u307b\u3052\u307b\u3052_002","piyo_9999":"\u3074\u30889999"}
```

## user:report
どれだけのユーザがアクセスをしているかを出力します。

### 使い方
`user:report`

### 使用例
```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:report
+------------------+----+
| User Report      |    |
+------------------+----+
| Database         | 12 |
|                  |    |
| total users      | 12 |
|                  |    |
| user directories | 2  |
+------------------+----+
```

## user:resetpassword
登録されたユーザのパスワードを再設定します。

### 使い方
`user:resetpassword [オプション] <ユーザID>`

#### ユーザID
登録済みのユーザIDを指定します。

#### オプション
- `--password-from-env`  
環境変数`OC_PASS`に定義されている内容を追加するユーザIDの新しいパスワードとして設定します。  
このコマンドでは、実行の都度`Enter a new password:`とユーザIDに対する新しいパスワードの入力を要求されますが、これを指定すると新しいパスワードを自動的に設定することができます。

### 使用例
①`hoge_9999`ユーザのパスワードを変更する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:resetpassword hoge_9999
Enter a new password: 
Confirm the new password: 
Successfully reset password for hoge_9999
```
②`fuga_9999`ユーザのパスワードを環境変数`OC_PASS`にセットされた文字列に変更する。

```
$ OC_PASS=password
$ sudo -E su -s /bin/sh nginx -c "php /var/www/html/nextcloud/occ user:resetpassword --password-from-env fuga_9999"
Successfully reset password for fuga_9999
```

## user:setting
ユーザのアプリケーション設定情報を読み込み、または変更します。

### 使い方
`user:setting [オプション] <ユーザID> [アプリケーション名] [キー] [設定値]`

#### ユーザID
ユーザIDを指定します。

#### アプリケーション名
対象のアプリケーション名を指定します。

#### キー
指定したアプリケーションのキーを指定します。

#### 設定値
指定したアプリケーションのキーの設定値をこの設定に変更します。

#### オプション
- `--output=[OUTPUT]`
ユーザ情報の出力フォーマットを指定します。指定できるフォーマットは次のとおりです。
  - `plain`: 普通の出力 (オプション未指定の場合のデフォルト)
  - `json`: JSON形式
  - `json_pretty`: 整形されたJSON形式
- `--ignore-missing-user` 
指定したユーザが存在しない場合はこれを無視します。
- `--default-value=DEFAULT-VALUE`
デフォルト値が設定されておらず、設定が存在しない場合、コマンドは1で終了します。  
このオプションは、設定取得時にのみ適用することができます。
- `--update-only`
設定値の変更のみを行います。指定した設定がまだされていない場合は設定の追加は行われません。
- `--delete`
指定したアプリケーションのキーの設定を削除します。
- `--error-if-not-exists`
`--delete`オプションとセットで指定します。アプリケーションのキーの設定を削除する前に、この設定が存在しているかどうかを確認し、存在しない場合はエラーとします。`--delete`実施時にこのオプションが指定されていないと、設定が存在する/しないにかかわらず正常終了となります。

### 使用例
①`admin`ユーザの設定情報を表示する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting admin
  - avatar:
    - generated: true
    - version: 4
  - core:
    - lang: ja
    - locale: ja_JP
    - timezone: Asia/Tokyo
  - files:
    - quota: default
  - firstrunwizard:
    - show: 0
  - login:
    - lastLogin: 1550833090
  - login_token:
    - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: nnnnnnnnnn
```
②`admin`ユーザの言語設定を取得する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting admin core lang
ja
```
③`hogera_9999`ユーザのE-Mailアドレス設定を変更する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting hogera_9999 settings email hogera_9999@stylez.co.jp
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting hogera_9999
  - avatar:
    - generated: true
  - core:
    - lang: ja
    - timezone: Asia/Tokyo
  - files:
    - show_grid: 0
  - firstrunwizard:
    - show: 0
  - login:
    - lastLogin: 1550814907
  - settings:
    - email: hogera_9999@stylez.co.jp
```
④`hogera_9999`ユーザのE-Mailアドレス設定を削除する。

```
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting --delete hogera_9999 settings email
$ sudo -u nginx php /var/www/html/nextcloud/occ user:setting hogera_9999
  - avatar:
    - generated: true
  - core:
    - lang: ja
    - timezone: Asia/Tokyo
  - files:
    - show_grid: 0
  - firstrunwizard:
    - show: 0
  - login:
    - lastLogin: 1550814907
```

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