Gatsby用のindex.mdをつくる
追記:theme 用に更新しました
このブログの theme を作成してそれを使っているので、この記事で紹介しているものも更新しました。 gatsby-crudzoo
それに合わせて必要な markdown ファイルが変わったのでこのスクリプトを少し更新。
変更点は
- 拡張子を md から mdx に変更
- title の削除 (ファイル作成後に自分で書く方が使いやすかった)
- tags,spoiler の追加
です。
blog 用の markdown file
Gatsby の starter-blog は、blog フォルダ内に url path のフォルダを作り、その中に index.md を作成すると記事として認識してくれます。
例えば、blog/sample/index.mdと作成すると**http://localhost:8000/sample/**でアクセス可能になります。
index.md のサンプルをみると、下記のように title と date を設定されていました。
---
title: Sample Title
date: '2019-02-03T16:58:03.284Z'
---
title はまだしも date は手打ちするの少し面倒で、毎回フォルダと index.md を作るのも手間。勉強中の Go でその辺り作ってみることにしました。
コード
gatsby の content/blog 直下にフォルダと index.md を作成するのが目標。ビルドファイルは content と同階層に置いて、最終的に以下のようなコマンドで使えるように。
./createmd -title test -url sample-list
package main
import (
"flag"
"fmt"
"os"
"time"
)
var title = flag.String("title", "", "input title")
var url = flag.String("url", "", "input url path")
func main() {
flag.Parse()
if *title == "" {
fmt.Printf("please enter a title ex: -title sampleTitle\n")
}
if *url == "" {
fmt.Printf("please enter a url ex: -url sample-url\n")
}
if *title != "" && *url != "" {
directoryPath := "content/blog/" + *url
if err := os.Mkdir(directoryPath, 0777); err != nil {
fmt.Println(err)
os.Exit(1)
}
file, err := os.Create(directoryPath + "/index.md")
if err != nil {
os.Exit(1)
}
defer file.Close()
output := `---
title: %s
date: "%v"
---
`
file.Write(([]byte)(fmt.Sprintf(output, *title, time.Now().Format(time.RFC3339))))
}
}
感想
簡単に作れそうでも意外と時間がかかるちょっとしたツール作成。まだまだ怪しい書き方だと思いますので、1〜2 ヶ月後の自分が綺麗に直すことを期待します。
時間は書き上げた時間ではなく作成時間になっているので、最終的に date は git に push する時間で置き換えるべきかもしれませんね。