Gatsby用のindex.mdをつくる


追記:theme 用に更新しました

このブログの theme を作成してそれを使っているので、この記事で紹介しているものも更新しました。 gatsby-crudzoo

それに合わせて必要な markdown ファイルが変わったのでこのスクリプトを少し更新。

create-mdx

変更点は

  • 拡張子を 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 する時間で置き換えるべきかもしれませんね。