当初は Open Live Writer というブログエディタで記事を書こうと考えていましたが、うまく行きませんでした。

MetaWeblog API

WordPressやMovable Typeなど、多くのブログシステムでは MetaWeblog API というものをベースに各システム独自の拡張を施したAPIが使われています。
MetaWeblog APIはXML-RPCという XMLデータの送受信によってRPC(Remote Procedure Call)を実現するプロトコル を使用しています。

Open Live Writer(Windows Live Writerというブログエディタがオープンソースとなったもの)は、各システムの拡張にもある程度は対応しているようですが、当サイトで実現したいこと(または、しなくていいこと)に対応しているはずはありません。  

たとえば、MetaWeblog APIには newPost という新規投稿用のAPIがあって、このAPIのcontentというパラメータに渡す構造体には、カテゴリはありますが、タグがありません。
WordPressMovable Typeでは、この構造体を拡張して、「タグ」や「抜粋」といった項目が追加されていたりします。

Open Live WriterでWordPressとしてこのサイトを登録してテストしてみると、MetaWeblog APIに無いWordPress拡張APIがコールされたりして、すべて網羅するのは大変に感じました。
でも、タグ付けくらいはしたいです。

がんばってWordPressのAPIも調べたのですが、ふと、「仮に全て実装できたとしても、WordPressがアップグレードしてAPIが変更されて、それに合わせてOpen Live Writerがバージョンアップされたら、また修正しなくちゃいけない」ということに気づきました。

ブログエディタも自作する

結局、当サイトブログ専用のブログエディタを作成するのが一番いいという結論になりました。
記事投稿用のWebページを作成するのが普通だと思いますが、管理用ページを設置するのはセキュリティ的になんとなく嫌でした。

そんな中、Markdownで記事を書くという手法を知り、それなら Visual Studio Code (以下、VSCode)の拡張機能を作ってしまおうと思い立ちました。VSCodeにはMarkdownを編集、表示する機能が標準で備わっているので、あとは送受信する機能を付ければ良さそうです。

同じことを考えている人は居るもので、 WtiteCnblog というVSCode拡張機能をアップしている方が居ました。この拡張機能はMarkdownの内容をMetaWeblog APIでブログサービスに送信するもののようです。中国の方のようで、Cnblogというのも中国のサービスなんですかね。GitHubに公開されているソースは大変参考になりました。

VSCode拡張機能 nekoniBlogEditor

nekoniBlogEditorというベタな上、なんとも長ったらしい名前のExtensionを作成しました。
公開はしていません。私のブログ専用なので他には全く役に立ちませんし...。

参考にしたWriteCnblogではXML-RPCクライアントの部分も独自に実装されてましたが、私は xmlrpc というライブラリを使用しています。

Markdownによるブログ記事本文とは別に、記事そのもののメタ情報(タイトルとか、カテゴリとか)の取り扱いに関していろいろ調べていたら YAML frontmatterという仕組みと静的サイトジェネレーターなるものの存在を知りました。

---
id: '6'
pageType: Blog
title: Metaweblog APIの実装
subtitle: 当サイト開発記録 - その2
updateDate: '2018-05-15 00:00:00'
publishDate: '2018-05-15 00:00:00'
categories:
  - .NET
tags:
  - ASP.NET Core
  - nekoni.net
series: 当サイト開発記録
slug: building-nekoni-dotnet-2
sourceType: Markdown
isPublished: true
eyecatch: ''
---
当初は **Open Live Writer** というブログエディタで記事を書こうと考えていましたが、
うまく行きませんでした。

## MetaWeblog API
WordPressやMovable Typeなど、多くのブログシステムでは **MetaWeblog API** という
ものをベースに各システム独自の拡張を施したAPIが使われています。 
  :
  :

(YAML frontmatter)

静的サイトジェネレーターというと Jekyll(Ruby製)、Hugo(Go製)等が有名なようです。

nekoniBlogEditorでは、YAML frontmatterの読み込みには gray-matter というライブラリを使用しています。

npmの充実したライブラリ群を簡単に扱えるので、VSCodeの拡張機能作成はかなり楽しく進められました。
アイデア次第でいろいろ出来ると思うので、みなさんもいかがでしょうか?

これで記事の投稿が可能に

ブログエディタを自作することで、ようやく安定して記事の投稿が出来るようになりました。

最初からこの形で考えることが出来ていたなら、XML-RPCではなく、普通に REST で実装していたと思います。

後で作り直すかもしれませんが、しばらくはこれで行きます。