見出し画像

WSHがお好きでしょ?だからマークダウン書いてdocxやPDFにしようよ

こんにちは!なるーらぼです。梅雨というより雨季に入ったのかと思うような日が時折ありますね。なかなか出かけられないことも多いと思いますし、やはりWSHがお好きだと思います。
そこで、今回からWSHでマークダウン書いてdocxやPDFをつくるようなものを書いてみようかな、とアホなことを思いました。
もしかすると何かの役に立つかもしれないし、わたししか学びにつながらないかもしれませんが、途中経過を投稿していこうと思います。

それはつまりなに

まず、Markdownに疲れたはずなのにメモ帳みたいなものを用意しようと考えました。しかし、黒い画面で毎回パカパカと実行するのは心がすり減るかもな、と思いました。ということでWSHですからHTA(HTmlApplication)を用意して、そこで書いたものを人間が読んでも苦にならないファイルにしよう、ということにします。
ここで、そもそもこれが出来そうかな?と思ったキッカケをお話しますと、HTMLファイルはMicrosoft Wordで開くことができたよな、ということを思い出したからなのです。もしWordで開くことができたら、docxとして保存することができるなと考えましたし、そこまでできるならそのままVBAの流れでPDFにエクスポートまでしてしまってもいいか、と…

いきなり書き始める

わたしはプログラマでもありませんので、先述したようなことを思いついたので、頭の中で大体こんな感じやなーというのを思い描きました。そうしたら、まずはHTMLをざっくり書いてしまって見ための構成だけ決めてしまおうと考えました。
フォルダを適当につくり、そのフォルダ内でVisualStudio Codeを起動します。いきなり新規ファイルを作成して、名前は「myeditor.html」としておきました。VSCodeはHTMLファイルで「html」と書くとhtml5のひな形をつくってくれるので簡単です。言語だけenからjaに変更して、タイトルなんかはあと回しでとりあえず保存します。
ここで、イメージに戻ります。
画面の上のほうにエクスポートまわりの機能ボタンを配置。
真ん中の領域は左をエディタ、右をプレビュー領域として配置。
画面の下の方に入力している文字数を表示するところを配置。
こんな感じにしようかと考えました。

コメント 2020-06-28 111145

ということでざっくりhtmlを書きました。この時点ではスタイルシートもstyleタグに書いてしまっています。長くなってきたら分けてしまえばいいんです!ということができるのも、思いつきでひとり書きなぐるときのメリットです。チームでつくるとなると、はじめからどうつくっていくかのルール設定が必要になりますし、スタイルシートについてもクラス名をどう命名するかなんかも決めておかないと大変なことになります!今回書いたところまででも、すでに長すぎる気がしてきました…次回、cssファイルに分割することにしましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>
       html,body {
           margin: 0;
           padding: 0;
           font-family: 'YuGothic';
       }
       header {
           width: 100vw;
           height: 8vh;;
           margin: 0;
           padding: 0;
           border-bottom: 1px solid #cccccc;
           box-shadow: 0 2px 2px 1px rgba(0, 0, 0, 0.2);
       }
       header > div {
           display: flex;
           padding: 0;
           margin: 0;
           width: 100%;
           height: 100%;
       }
       header > div > button {
           flex-direction: column;
           margin: 1rem;
           padding: 0.3rem 1rem;
           font-size: 14px;
       }
       main {
           width: 100vw;
           height: 75vh;;
           margin: 0;
           padding: 0;
       }
       main > div.row {
           display: flex;
           height: 100%;
           padding: 0;
       }
       main > div.row > div {
           width: calc(50% - 4rem);
           flex-direction: column;
           margin: 1rem 1rem;
       }
       main > div.row > div > textarea {
           font-size: 16px;
           font-family: 'YuGothic';
           width: 100%;
           height: 100%;
           margin: 0;
           padding: 0.5rem;
           background-color: #252429;
           color: #cccccc;
           column-width: auto;
           outline: none;
           resize: none;
       }
       footer {
           width: 100vw;
           margin: 0;
           padding: 0;
       }
       footer > div {
           width: calc(100% - 2rem);
           margin: 0;
           padding: 1rem;
       }
       #content {
           width: 100%;
           height: 100%;
           font-family: 'YuGothic';
           margin: 0;
           padding: 0.5rem 1rem;
           column-width: auto;
           outline: none;
           resize: none;
           overflow: auto;
           border: 1px solid #cccccc;
       }
       #chars {
           font-family: 'consolas';
           padding: 1rem;
           font-size: 14px;
       }
   </style>
</head>
<body>
   <header>
       <div>
           <button id="exportMarkdown">
               <span>マークダウンを保存する</span>
           </button>
           <button id="exportDocx">
               <span>Wordにする</span>
           </button>
           <button id="exportPdf">
               <span>PDFにする</span>
           </button>
       </div>
   </header>
   <main>
       <div class="row">
           <div>
               <textarea name="myeditor" id="myeditor"></textarea>
           </div>
           <div>
               <div id="content"></div>
           </div>    
       </div>
   </main>
   <footer>
       <div>
           <span id="chars"></span>
       </div>
   </footer>
   </body>
</html>

かなり適当ですが、大体の枠ができました。

ここでひと息

さて今回は枠までつくりました。まだWSH要素が全然ありませんが、docxをつくるところ、マークダウンを書いたらプレビューされるところを手抜き工事していきます!次回をお楽しみに!

この記事が気に入ったらサポートをしてみませんか?