こちらは自分で書いた Qiita からの転載記事です。
とはいえ、1年前くらいに書いたツールなんですが、
「そういえば Qiita にどうやって実装したのか、とか書いてないなー」
と思ったので供養がてら記事しました。(∩´∀`)∩
デモサイト
https://pukiwiki2markdown.saino.me/
画面向かって左側の input に pukiwiki の文章を入れると右側に変換結果が表示されます。
変換結果をクリップボードにコピーすることもできます。
ソースコード (Github)
API っぽく動くエンドポイント
下記コマンドを実行することで、pukiwiki 文法から markdown 形式に変換できます。
body の中に文章を入れる感じですね。
curl -XPOST https://pukiwiki2markdown.saino.me/api/v1/convert \ -H 'Content-Type: application/json' \ -d '{"body": "*Header1\n**Header2\n"}'
実装するのに使った技術
バックエンド
- PHP + Slim Framework 3
- pukiwiki のコード本体
Slim Framework というのは本家のサイトでも謳っている通り、PHP のマイクロフレームワークです。 選定理由としては 「pukiwiki のコードをそのまま再利用したかったから」 ということに尽きます。
pukiwiki 文法のパーサーを書こうかな〜とも思ったのですが、pukiwiki の元コードを見るとゴリゴリにロジックが書かれていたので、「これは元のコードを再利用した方が圧倒的に早い」と思い、変換するロジックも PHP 側に寄せました。
(変換ツールなので割と使い捨てっちゃ使い捨てですし)
フロントエンド
- React
- webpack
こちらはいわゆる「普通のフロントエンド」という感じで、何ら変わったことはしてないです。
ただ単にテキストを入力して変換結果をもらうだけなので、そんなに React の恩恵は受けていません。
最後に
自前で建てたい方はリポジトリの中に docker-compose.yml を同梱しているのでお試しください。 Docker image 提供は今のところ考えてはいません。本当はやった方がいいのかもしれないけど、変換するだけのツールですので。
今後何らかの改善点があるかな〜と考えましたが、現在のところ割と悪くない精度だったので、このまましばらく運用するかもしれません。
何かご意見あれば Issue や Pull Request は受け付けていますので、よろしくおねがいします٩(๑>◡<๑)۶