😡 「わかりづらい」ってどういう意味😡

# はじめに
ソフトウェアを開発するとそのマニュアルを書く必要があります
で、このマニュアルのレビューでよくある指摘が「わかりづらい」

この指摘、(僕もよく言っちゃうけど)イラっとしますよね。「わかりづらい」って指摘がわかりづらい😡
この「わかりづらい」問題を回避するために、このページでは以下の点を考察します

* マニュアルが「わかりづらい」ってなんだよ
* どうやったら「わかりやすい」マニュアルになるのか

# 参考になるかもしれん資料
* [日本語の作文技術](https://www.amazon.co.jp/%E3%80%90%E6%96%B0%E7%89%88%E3%80%91%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E4%BD%9C%E6%96%87%E6%8A%80%E8%A1%93-%E6%9C%9D%E6%97%A5%E6%96%87%E5%BA%AB-%E6%9C%AC%E5%A4%9A%E5%8B%9D%E4%B8%80/dp/4022618450)
    * 内容はわかりやすい。単文をわかりやすく書くのに役立つ
* [理科系の作文技術](https://www.amazon.co.jp/%E7%90%86%E7%A7%91%E7%B3%BB%E3%81%AE%E4%BD%9C%E6%96%87%E6%8A%80%E8%A1%93-%E4%B8%AD%E5%85%AC%E6%96%B0%E6%9B%B8-624-%E6%9C%A8%E4%B8%8B-%E6%98%AF%E9%9B%84/dp/4121006240)
    * 正直少ししか読んでない。先輩が「この本いい」って言ってた
* [Technical Writing | Google Developers](https://developers.google.com/tech-writing)
    * 主に単文を分かりやすく書くことフォーカス。 一部ドキュメントの構造に言及
* [Technical Writing Process](https://www.amazon.co.jp/Technical-Writing-Process-five-step-procedures-ebook/dp/B00UA3YX46)
    * Kingle Unlimitedで読める
    * ドキュメントの構造について、Structureの章で述べている
    * ドキュメントの種類ごとにどういう構造になるべきかを述べているので、結構いい

# マニュアルが「わかりづらい」ってなんだよ
#### 「わかりづらい」を具体化する
「わかりづらい」「わかりやすい」って言葉はいったん捨てます。 だって意味わからんし

マニュアルを含め、全ての成果物はそのユーザーの要求を満たすならOKです
つまり、**「わかりづらい」** は **「ユーザーの要求を満たさない」** ことを指摘しています

マニュアルのユーザーの要求は **「ユースケース[^1]の実行方法をすばやく理解できる」** ことでしょう
この仮定が正しければ、

:::note info
結論
**「わかりづらい」=「ユースケース[^1]の実行方法を理解するのに時間がかかる」こと** [^2]
ちょっと長いので、以下では単に **「理解に時間がかかる」** と記述します
:::

となります。  何となくしっくりくるのではないでしょうか

# どうやったら「わかりやすい」マニュアルになるのか

#### 「わかりづらい」(=「理解に時間がかかる」)原因
まず、「理解に時間がかかる」真因をなぜなぜ分析しましょう[^3] [^4]
問題が具体的であるほどやりやすいので、あなたの知ってるクソマニュアルを想定して読んでください[^5]

よくある真因には〇、あまりなさそうな真因には×を付けます
(結論だけ知りたい人は↓の画像を見なくても問題ありません)

![5-why.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185272/24f57865-0eed-a3a3-2fbd-00bb0e7ed89a.png)

:::note info
結論
真因は以下の通り
* 目次からどのユースケースの記述があるのかわからない
* ユースケースの記述が複数のページに分散している
* 必要以上に詳細な設計情報が紛れ込んでいる
* ユースケースを実行する手順が本質的に複雑である
* 文の表現が冗長である
* ユーザの母国語で書かれていない
:::

#### 真因に対する対策

___
##### 目次からどのユースケースの記述があるのかわからない
<INS>問題の具体例</INS>
[Yocto Project Documentation](https://docs.yoctoproject.org/index.html) を参考に見てみましょう
(YoctoはカスタマイズしたLinuxOSのRuntimeをビルドするためのプロジェクトです)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185272/6f300439-512d-4502-597f-45cf0aa62a1f.png)

左端に目次がありますが、`ビルドのキャッシュをクリアする` 方法はどこに書いてあるでしょうか？
分からないですよね。これが `目次からどのユースケースの記述があるのかわからない` ということです

<INS>対策</INS>
シンプルにドキュメントの構造を `ユースケース単位` にすることになるでしょう
つまり、目次が以下のようになればいいわけです

* ユースケース_1
* ユースケース_2
* ユースケース_3
* ユースケース_4
* ...

これならば、例えばユースケース_1を実行するときに見るべきページは明らかです

 :::note info
ドキュメントの構造を `ユースケース単位` にすること
:::

ただし、以下の点に注意してください

* 対象がYoctoのように複雑な場合、愚直にすべてのユースケースを記載するとドキュメントが爆発します
    どの程度記述をサボるのかはケースバイケースですね...
* 対象がYoctoのように複雑な場合、使うだけでもある程度対象の構造への理解[^6]が必要です
    これをどのような構造でまとめるべきかは、ドキュメント構成の設計要素になるでしょう
* 仕様書や設計書はソフトウェアの構造を目次にすべきです
    マニュアルとは目次の単位が異なるため、分離して管理したほうがよいでしょう
___

##### ユースケースの記述が複数のページに分散している
[上](#目次からどのユースケースの記述があるのかわからない) の対策でこの真因も対策できます

___

##### 必要以上に詳細な設計情報が紛れ込んでいる
<INS>問題の具体例</INS>
これは心当たりある人多いでしょう。 ユースケースの説明に必要ない説明を書いてしまう問題です
よくある例として、あるユースケースで使用するツールの設計を語り始めたりするやつです

😡それは仕様書に書いて😡

<INS>対策</INS>
`削除したら取り上げているユースケースを実行できなくなる記述` 以外は**すべて**削除 or 移動しましょう
Appendixなど雑多な情報を記述する場所か、あるいは仕様書に移動するといいかも

:::note info
`削除したら取り上げているユースケースを実行できなくなる記述` 以外はすべて削除 or 移動する
:::

___

##### ユースケースを実行する手順が本質的に複雑である
<INS>対策</INS>
これはソフトウェアの問題です
ソフトウェアを改修するか、helperスクリプトを用意するしかないでしょう

:::note info
ソフトウェアを改修する。 あるいはhelperスクリプトを用意する
:::

___

##### 文の表現が冗長である
<INS>対策</INS>
推敲するしかないと思う

:::note info
[参考になるかもしれん資料](#参考になるかもしれん資料)を読んで推敲する
:::

___

##### ユーザの母国語で書かれていない
<INS>対策</INS>
書き手の母国語で書いてしまいがちですが、ユーザの母国語に合わせるのがベスト
しかし、例えばドイツ語で書けと言われても難しいため、英語で書くしかないのでは

:::note info
日本人以外のユーザがいるのであれば、英語で書く
:::

どうしても英語が苦手なら自動翻訳ツールを使いましょう
ただし、生成物の著作権の確認はしたほうがいいです

___

# おわりに

そのほか言っておきたいこと

* ドキュメントの構造を真剣に考える人は少ない(と思う)
    でもどんだけ凄いソフトウェアでも使うの面倒臭かったらみんな使わないから、マニュアルは大事
* ソフトウェアエンジニアは「再利用性」を大事にする
    でもマニュアルでいろんな記述を「再利用」するためにページを分けていくと、多分ソフトウェアの構造と一致します
    ユースケースの構造と異なるので、わかりづらいマニュアルになる...
* 最後のほうまた手抜きになった。 ごめんね


[^1]: マニュアルを読むことで実行方法を知りたいとユーザーが思っていること
[^2]: ちょっとウソ
    「ユースケース[^1]の実行方法をすばやく理解できる」を満たさない場合は、「どれだけ時間をかけても理解できない」も含みます
    でもこの場合は「わかりづらい」ではなく「わからない」と言われると思うので対象外にしました
[^3]: * 対策の裏返し(「~していない」など)しか原因を思いつかなくなったらそこで切り上げる
    (対策の裏返しは図には書かない)
    * 5回掘り下げろとかいうのは無視する
    * 「結果と原因」ではなく「全体と部分」で問題を分割したくなることがある。そこは後からわかるようにしておく
[^4]: ホントはやりたくない。頭の中で「これが原因だ」と思っている原因に対して後付けの理屈を捏ねる作業になりがちだから
[^5]: そのマニュアルを書いた人に悪いので具体例は出さないです
[^6]: 一部の人が `メンタルモデル` と呼んでいるもののことです
    ソフトウェアを理解した人が頭の中に持っているソフトウェアの構造のことを言いたいのですが、良い伝え方がわからないです
    ソフトウェアを使用するのに必要十分な抽象度のモデルというか...