AsciiDocで条件で表示したい内容を変える方法

# やりたいこと
- ある条件に基づき、情報の出し分けをしたい
    - 以前に[AsciiDocのファイルを結合して表示する](https://qiita.com/nogoo/items/b0ced45e47d8b470da38)で投稿したような感じで、例えば都道府県について纏めたが、情報量を変化させることをしたい。

# やったこと
- 出し分けできるようにするには、パッと思いつくこととしてIF文みたいなものが使えないか？になる。
    - そこで、検索キーワードして"Asciidoc IF"で調べたところ
        - [Conditionals](https://docs.asciidoctor.org/asciidoc/latest/directives/conditionals/)のサイトがヒットした
        - ほかのサイトを見たが、コードを表現するための書き方の中にある各言語のIF文だった
    - 上記のことから、Conditionalsのサイトを読んでみた
- `ifdef` であればやりたいことができそうだったので、トライしてみた
    - `ifdef`の後に任意の属性を定義して、`endif::[]`で記載した間にコンテンツを記載するということだったので、書いてみた。
        - 表に行を追加して、条件を満たした場合に、人口の情報に関する表示ができるようにする

``` ASCIIDOC
:imagesdir: ./images

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL[]
^|人口 | 5,224,614人　(8位）
endif::[]
|===
```

- 上記で書いた場合、表はこのような感じ表現となり、人口に関する情報の表示はできなかった。
　　　　　<img width="75%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518581/1115b316-d934-6c09-30d9-3f188c95dc14.png">

- 属性を定義したが、この属性はどこからくるのかを考えると、定義されていないことに気づき、2行目に`:MAPDETAIL:` と定義してみた。

``` ASCIIDOC
:imagesdir: ./images

:MAPDETAIL:

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL[]
^|人口 | 5,224,614人　(8位）
endif::[]
|===
```

- 上記のように`:MAPDETAIL:` を記載したところ、人口の情報を表示することが以下のようにできました。
　　　　　<img width="75%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518581/be1c5be6-36a3-115e-ec83-8ed8964121a1.png">

## 追加で試したこと1
- `ifdef` は複数の属性を指定することができることがわかった、パターンが異なる場合に指定することでコントロールできることがわかった
    - 書き方としては、以下のような形で記載すれば、切り替えて使うことができました

``` ASCIIDOC
:imagesdir: ./images

:MAPDETAIL1:
:MAPDETAIL2:

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL1,MAPDETAIL2[]
^|人口 | 5,224,614人　(8位）
endif::[]
|===
```
## 追加で試したこと2
- `ifeval` を使うことで、属性の持つ値を演算子を使って評価して、表示をコントロールすることができることも分かった。
    - 記載の仕方も、`ifdef` とあまり書き方は変わらなかった。
    - 扱う値が文字列か数値かで表現が変わるので注意が必要だった

<details><summary>数値を条件にした場合</summary>

``` ASCIIDOC
:imagesdir: ./images
:MAPVAL: 4

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifeval::[{MAPVAL} >3 ]
^|人口 | 5,224,614人　(8位）
endif::[]
|===
```
</details>

　　　<img width="75%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518581/4b2fa251-37a4-d264-6a19-5281f45030cb.png">


<details><summary>文字列を条件にした場合</summary>

``` ASCIIDOC
:imagesdir: ./images
:MAPVAL: "ON"

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifeval::["{MAPVAL}" == "ON" ]
^|人口 | 5,224,614人　(8位）
endif::[]
|===
```
</details>

　　　<img width="75%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518581/f169bec6-4e6e-18a2-9f1d-327966987888.png">

# まとめ
- `AsciiDoc` に書くべき情報の全てを記載しておき、条件をうまく使って、標準版、拡張版、縮小版などのコントロールを上位の`AsciiDoc`ファイルから属性を渡せば、目的別に`AsciiDoc`ファイルを作り出して出力することができることがわかった

# 参考情報
- [Asciidoctor Docs](https://docs.asciidoctor.org/)
    - [Conditionals](https://docs.asciidoctor.org/asciidoc/latest/directives/conditionals/)