AsciiDoc – Tworzymy dokumentacje

Artykuł ten powiązany jest z poprzednim wpisem na temat Spring Rest Docs, czyli automatycznego generowania dokumentacji na podstawie testów. Dzięki Spring Rest Docs generowane były snippety, czyli fragmenty dokumentacji, które następnie umieszczało się w pliku zbiorczym z rozszerzeniem adoc. Na końcu należało te fragmenty ładnie opakować korzystając ze składni AsciiDoc’a.

DocGist

Nam sam początek polecam wam ten edytor online, w którym można pobawić się na żywo z AsciiDoc’iem. Jest to fajne miejsce do sprawdzenia możliwości tego narzędzia.

Live preview via Chrome

Możemy zacząć teraz tworzenie naszej dokumentacji. Utwórzmy plik z rozszerzeniem adoc. i dodajmy do niego treść:

= To jest tytuł dokumentacji

Witajcie na CodeCouple.pl!

== To jest pierwszy nagłówek

Teraz aby podejrzeć zmiany najlepiej jest zainstalować sobie plugin do przeglądarki. Ja korzystam z Chrome także polecam wam ten dodatek. Od teraz wystarczy odpalić plik w przeglądarce (via Drag and Drop) i powinniście widzieć efekt:

Uwaga! Aktualnie plugin ma błąd związany z datą: https://github.com/asciidoctor/asciidoctor-chrome-extension/issues/32

Budowanie

Naszą dokumentację można zbudować na kilka sposób. Najpopularniejszym sposobem jest zainstalowanie Rubiego i pobranie paczki z AsciiDoc’iem. Opis tutaj.

W moim projekcie, korzystam z Mavena, dzięki temu mogłem wykorzystać specjalny plugin do budowania dokumentacji.

Korzystając z tego rozwiązania nie ma potrzeby instalowania Rubiego, ponieważ korzysta on z implemetancji JRuby.

pom.xml umieszczamy następujące linijki:

<build>
    <plugins>
        <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <version>1.5.5</version>
            <executions>
                <execution>
                    <id>output-html</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>process-asciidoc</goal>
                    </goals>
                    <configuration>
                        <backend>html</backend>
                        <doctype>book</doctype>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Domyślną lokalizacją, w której powinniśmy przechowywać pliki adoc jest src\main\asciidoc. Natomiast wygenerowany plik znajdziemy w target. Możemy oczywiście to skonfigurować wedle uznania:

<configuration>
    <backend>html</backend>
    <doctype>book</doctype>
    <sourceDirectory>src/docs/asciidoc</sourceDirectory>
    <outputDirectory>src/docs/html</outputDirectory>
</configuration>

Resztę przydatnych konfiguracji znajdziecie tutaj: https://github.com/asciidoctor/asciidoctor-maven-plugin.

Składnia

Składnia jest bardzo podobna do markdown’a, jednakże posiada dużo więcej funkcji. Poniżej podstawowe elementy:

= To jest tytuł dokumentacji
CodeCouple.pl <codecouple@outlook.com>
v1.0, 2017-09-08
:someVariable: 1.0.0
:toc: left
:icons: font
:source-highlighter: highlightjs

Witajcie na CodeCouple.pl!

TIP: Tip! Naprawdę fajny feature.

== Sekcja

Linia plus oznacza nową linię, +
Nowa linia.

NOTE: Notatka z ikoną.

.Tytuł listy
* Punkt
** Podpunkt
* Kolejny

Aktualna wersja aplikacji: {someVariable}.

Tutaj link link:https://codecouple.pl[do mojego bloga]

Tutaj link bez opisu link:https://CodeCouple.pl[]

== Kolejna

IMPORTANT: Coś tam jako wykrzyknik!

. Punkt
.. Podpunkt
. Kolejny

== Spring Rest Docs

Ten *text* jest pogrubiony.

Ten _text_ jest pochylony.

Ten `text` jest jako mono.

[source,java]
----
public SomeClass {
   void someMethod(String someText){  # <1>
       //Some logic here
    }
}
----
<1> Jakieś wyjaśnienie

- [x] Check lista 1
- [x] Check lista 2
- [x] Check lista 3
- [ ] Nie

Teraz puszczamy mvn clean install.

Wynik

Bardzo dużą zaletą takiej dokumentacji jest to, że w repozytorium trzymamy tylko plik tekstowy a nie binarny. Dzięki temu mamy informację o zmianach. Kolejna zaleta to wsparcie dla Mavena. Można nawet przekazywać parametry z Mavena, co może być przydatne przy wstawianiu numeru wersji dokumentu. W dokumentacji oraz na internecie bardzo często można spotkać dwa pojęcia, AsciiDoc oraz AsciiDoctor. AsciiDoc jest składnią dla tworzenia dokumentacji, natomiast AsciiDoctor jest zbiorem narzędzi do budowania dokumentacji.

Więcej

Polecam bardzo nagranie z Toruńskiego JUG’a, na którym Kuba Marchwicki przedstawił AsciiDoc’a.