レポートやメモの作成に定番のMicrosoft Wordや同時編集が魅力的なgoogle documentsを使ってきたが、gitで管理できるフォーマットを試しながら、gulp+pugで作るシングルページHTMLに行き着いたのでメモする。
これまで試したもの
- sphinx + Read the Docs Sphinx Theme
- pandoc +Wandmalfarbe/pandoc-latex-template
やりたかったこと
- 脱ペーパー
- これまでPDF化するなど印刷前提のフォーマットを貫いてきたけどペーパーレスの時代に「紙ページに収める」という縛られ方をする必要はないのではないだろうか。 挿絵の位置で改ページがあっちいったり、こっち行ったりをどうこうしたり、 横に平べったく長い表の貼り付けたり、 章タイトルの直後に改ページが来てpandocフィルタ追加したり… そういう調節とお別れしたい。
- メール添付やクラウドストレージを通した配布
- クラウドストレージのプレビュー機能の充実とブラウザ間の互換性向上によって、シングルHTMLファイルがPDFの代替になりそうな気がした。
- インタラクティブなコンテンツ
- いったん脱PDFし、HTMLをフォーマットとして選ぶとJSとかSVGとかの採用が見えてくる。
環境の準備
Webpackも考えたけどentry pointがjsファイルになる点が今ひとつコンセプトに合わなくてgulpにした。
npm install --global gulp-cli
npm init -y
npm i -D gulp pug gulp-pug
npm i -D gulp-inline-source gulp-inline-images
構成
root
├── _template
├── dest <-- ここに出来上がったレポートが出力される
├── gulpfile.js
├── package-lock.json
├── package.json
├── img <-- レポートに使う画像を放り込んでおく
└── src <-- ここにレポートの素を置く
gulpfile
const gulp = require('gulp')
const pug = require('gulp-pug')
const inlineSource = require('gulp-inline-source')
const inlineImages = require('gulp-inline-images')
gulp.task('pug', () => {
return gulp.src(['./src/*.pug', '!./_**/*', '!./node_modules/**/*'])
.pipe(pug({ pretty: true }))
.pipe(inlineSource())
.pipe(inlineImages({ basedir: './img/' }))
.pipe(gulp.dest('./dest/'))
})
gulp.task('watch', () => {
return gulp.watch(['./src/*.pug', './_template/*.pug'], gulp.series(['pug']))
})
gulp.task('default', () => {
return gulp.parallel(['pug'])
})
あとはgulpでもgulp watchでも…. 画像, CSSそれにjavascriptはinline化してhtmlに埋め込んでしまいます。
レポートのテンプレート
コンセプトにも関わらず、紙に印刷したいとなったらpaper.css、プレゼンしたいならreveal.jsと思いつつ、Bootstrapをcssのみで使う選択肢で作ってみた。
ライブラリを追加する場合inlineのアノテーションを忘れないように!!
doctype html
html(lang="ja")
block config
head
meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1")
link(rel="stylesheet", href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css", inline)
style.
body {
font-family: "Helvetica Neue",
"Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
}
block css
block scripts
title #{title}
body
.container
block content
本文の書き方
カラム数などによっては40emで折り返すようにしておくと読みやすいかも。
extends ../_template/template.pug
block config
- var title='私のレポート'
block css
style.
.alert-trim {
display: inline-block;
}
.col p {
width: 40em;
}
block content
.row
.col
h1 報告
h2 はじめに
p 今月は…
Boilerplate
ボイラープレート用意した
Chachay/pug_boilerplate: My Boilerplate of Single HTML reports
No comments:
Post a Comment