saino.me

都内でひっそりと生きる IT エンジニアの個人ブログです

pukiwiki 文法を markdown 文法に変換する pukiwiki2markdown というツールを公開しました

こちらは自分で書いた Qiita からの転載記事です。


とはいえ、1年前くらいに書いたツールなんですが、

「そういえば Qiita にどうやって実装したのか、とか書いてないなー」

と思ったので供養がてら記事しました。(∩´∀`)∩

デモサイト

f:id:kaishuu0123:20191216104827p:plain

https://pukiwiki2markdown.saino.me/

画面向かって左側の input に pukiwiki の文章を入れると右側に変換結果が表示されます。

変換結果をクリップボードにコピーすることもできます。

ソースコード (Github)

github.com

API っぽく動くエンドポイント

下記コマンドを実行することで、pukiwiki 文法から markdown 形式に変換できます。

body の中に文章を入れる感じですね。

curl -XPOST https://pukiwiki2markdown.saino.me/api/v1/convert \
     -H 'Content-Type: application/json' \
     -d '{"body": "*Header1\n**Header2\n"}'

実装するのに使った技術

バックエンド

Slim Framework というのは本家のサイトでも謳っている通り、PHP のマイクロフレームワークです。 選定理由としては 「pukiwiki のコードをそのまま再利用したかったから」 ということに尽きます。

pukiwiki 文法のパーサーを書こうかな〜とも思ったのですが、pukiwiki の元コードを見るとゴリゴリにロジックが書かれていたので、「これは元のコードを再利用した方が圧倒的に早い」と思い、変換するロジックも PHP 側に寄せました。

(変換ツールなので割と使い捨てっちゃ使い捨てですし)

フロントエンド

  • React
  • webpack

こちらはいわゆる「普通のフロントエンド」という感じで、何ら変わったことはしてないです。

ただ単にテキストを入力して変換結果をもらうだけなので、そんなに React の恩恵は受けていません。

最後に

自前で建てたい方はリポジトリの中に docker-compose.yml を同梱しているのでお試しください。 Docker image 提供は今のところ考えてはいません。本当はやった方がいいのかもしれないけど、変換するだけのツールですので。

今後何らかの改善点があるかな〜と考えましたが、現在のところ割と悪くない精度だったので、このまましばらく運用するかもしれません。

何かご意見あれば Issue や Pull Request は受け付けていますので、よろしくおねがいします٩(๑>◡<๑)۶