はじめに
みなさんは「あなたの書いた日本語の設計書はコンパイルできますか?」と聞かれてどんなことを連想されますか?
「コンパイル」ってプログラミングに関係しそうだけど、ソフトウェアの設計書のことだとしたら、ふつうそれはプログラミング言語でコンパイルする手前の資料のことでしょ。このひといったい何言ってんの!?的な感想を持たれた方は多いかと思います。
この記事は日本語構造化仕様記述言語 Re:Mind(リマインド)アドベントカレンダー2023の8日向けの記事です。
対象読者
とりあえずこの記事の想定読者はシステムエンジニアさんです。あなたが自分自身でプログラミングするのではなく、別の人にプログラミングしてほしい場合を想定しています。
みなさんは設計書何語で書いてますか?
みなさんは設計書何語で書いてますか?わたしは日本語です。外国の協力会社さんに実装を依頼する場合も日本語で書いていました。すみません。
この記事ではグローバルに活躍されていて、設計書も英語とかで書かれている方はとりあえず対象外です。自然言語か構造化言語かの問題ではあるので言語によらず参考になるものはあるかもしれません。
設計書とは内部設計書のこと
設計書にもいろいろあって、システムのアーキテクチャやサーバーの機能わけとか、システムの設計書は多肢にわたります。
ここでは、設計書の意味をロジックやアルゴリズムを記述した資料というように限定します。
設計書をどこに書くか
設計書をどこに書くかという問題があります。markdownだったりExcelだったり、あるいはシステム設計システムのシステム画面(webやOSのフォーム)だったりするかもしれませんが、とりあえずここでは、「どこに」の問題はさておいて、「なにを」書くかの点にまとをしぼります。
設計書を日本語で書く際のあるある
いちおうフェーズのイメージを要件のとりまとめや定義が終わって、どのようにそれらを実現するかということを考案していく状況にあるとします。
ここではその要件が合目的的かの検証はしないものとします。別の機会記事にゆずるとします。
要求内容を少し細かく書く
よくあるのは、どのように実現するかのヒントにとどめている記述です。それは往々にして要求的な宣言的な記述を少し自然言語の日本語で補足しているような書き味となっています。
いちおうロジックがざーっと一本書きされている
自然言語の日本語にも、〇〇の場合は~ という条件分岐的な表現が可能なので、いちおう場合分けが書いてある場合があります。
しかし、意外と抜けているのが〇〇の条件式に相当する部分が、あいまいで未定義の単語や「なに」と「なに」が等しいのか等しくないのか、「なに」と「なに」の対となる表現が欠落して片方の「なに」だけになっている「なにが等しい場合」というような表現もよく見受けられます。
場合分けの分岐先がスパゲティ
箇条書きでセンテンス番号が打ってあると、場合分けの分岐先がそのセンテンス番号で表現される場合がよくあります。分岐が複雑になってくると書いている本人もあとからよむとよくわからなくなる場合があります。
日本語の設計書がコンパイルできるとは
日本語の設計書がコンパイルできるとは2つの意味があると考えられます。
2つの意味 その1 実装言語に書き換えれるレベルに達している
2つの意味のその1は、実装言語に書き換えれるレベルに達しているという意味です。直接コンパイラに通せるほど厳密に構造化はされていないにしても、多少のあいまいさを含みつつもおおむね慣れているプログラマであればただしく解釈できる程度には記述が論理的で矛盾がない状態です。
これはしかしコンピュータの支援をうけずにここまで脳裏に構成できる人材はなかなかいないのが現状と推察されます。私を含めてです。
2つの意味 その2 日本語プログラミング言語でコンパイルできるレベル
これが実は本記事のお題でした。
ハードウェアの設計現場では図面や回路などコンピュータの支援を受けて矛盾や不適合が可能な限り最小化されているのにくらべて、ソフトウェアの設計現場では伝統的に自然言語によるテキスト記述がまだまだ一般的です。
記入する枠としてはmarkdownやExcelまたはシステム画面の入力フォームで記述内容の大枠は決められている現場は多いと思いますが、考案されたロジックが妥当であるかどうかの検証はよくて人間系のデザインレビューにとどまっています。
おわりに
設計情報をコンパイルときくと、めんどくさい、そこまで工数が割けないとか、いろいろあるかとは思いますが、システムの中核的なロジックは試作の意味も含めて、構造化された日本語対応のコンパイラを通過するかどうかだけでも検証する価値はあるような気はします。
実行可能かどうかまではいかないにしても、想定しているデータ構造・型の組み合わせ、変数名の定義漏れの検査を含めて、日本語プログラミング言語によるコンパイラを通してみるのは、後工程の生産性向上に寄与する気がします。