Ansible blockディレクティブよりもinclude_tasksで処理をまとめよう！

# まえがき

実は1日目の「[Ansibleタスクの再利用性を高めるためのタスクの粒度について](https://qiita.com/comefigo/items/f6cdeb1c2ce1ba33c0e7)」を書いてて出てきた副産物ですｗ
以下の内容も前述の内容を踏まえてのものになっています。


# 概要

一連の処理をまとめる方法として`block`を使われるかと思いますが、
`include_tasks`のほうが**処理速度が速く**、**可読性が高く**なります。

## 処理速度

処理結果が出力されるまでのことを指します。
以下のコードを実行して体感できるかと思います。
ただし、block内処理が短い場合はさほど効果がない。

## 可読性

- 処理結果  
    下記の実行結果のように、block内のタスクがすべてskipとして出力されます。  
    playbookが長く、対象ホストが多い場合は、万単位のログが出力されますので、できれば無駄なログを減らしたいところです。  
    `include_tasks`を用いると**skipが1行のみ出力される**ので、無駄なログを減らすことができます。
- コード  
    block内のタスクが多くなると、コードの可読性が下がります。  
    `include_tasks`で外だしすることで、スッキリ管理することができます。


# 実行結果

`block` はblock内のすべてのタスクがSkipとして出力されるが、`include_tasks`は1行のみになっています。
これだけでもログが圧倒的にクリーンになると感じて頂けたのではないでしょうか。

## blockの例

```yaml:block.yml
---
- name: Ansible block sample
  hosts: localhost
  connection: local
  tasks:
    - block:
        - debug: msg="1"
        - debug: msg="2"
        - debug: msg="3"
        - debug: msg="4"
        - debug: msg="5"
        - debug: msg="6"
        - debug: msg="7"
        - debug: msg="8"
        - debug: msg="9"
        - debug: msg="10"
      when: no

```

ログに**各タスクのskipが表示**されます。

```shell:実行結果

PLAY [Ansible localhost sample] **************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *********************************************************************************************************************************************************************************************
skipping: [localhost]

PLAY RECAP ***********************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=10   rescued=0    ignored=0 
```

## include_tasksの例

debugモジュールはタスクファイル`count.yml`にまとめます。

```yaml:include_tasks.yml
---
- name: Ansible include_tasks sample
  hosts: localhost
  connection: local
  tasks:
    - include_tasks: count.yml
      when: no
```

```yaml:count.yml
---

- debug: msg="1"
- debug: msg="2"
- debug: msg="3"
- debug: msg="4"
- debug: msg="5"
- debug: msg="6"
- debug: msg="7"
- debug: msg="8"
- debug: msg="9"
- debug: msg="10"
```


実行結果には**1つのskipのみが表示**されます！

```shell:実行結果
PLAY [Ansible localhost sample] **************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************************
ok: [localhost]

TASK [include_tasks] *************************************************************************************************************************************************************************************
skipping: [localhost]

PLAY RECAP ***********************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0  
```

# コミュニティ

これから始める方なら安心の日本語でコミュニケーションができるので、興味がある方は是非ご参加ください。

- [Slack](https://ansiblejp.slack.com/join/shared_invite/enQtNzQwNTEyNTc2Mjc3LTRmYzBkY2FhM2RhOGIzNjVhYTczMDdiODY0YWFiMjdmMGRkNGJiZDYzN2I4M2NjZDA5MjkxYzU3ZWQyMzFhYjU)･･･日本のユーザ会（800名以上）になります。
- [connpass](https://ansible-users.connpass.com/)･･･Ansible関連イベントの募集を行っています！