Pandoc as a Service的なものを作った

色々とメモをesa.ioやgistに書き留めているのですが、これをサクッと別形式で取り出したくなる場合があります。なぜかMediawiki形式に変換しないと行けないときとか。手元でいちいちコマンドラインを叩くのもめんどくさい。短ければTry pandoc!などでもよいのですが、長いとエラーになったり、いちいちコピペするのが面倒。

ということで、簡単にWebサイトからデータを取ってきてPandocするサービスというか、Web APIを作成してみました。あまり作り込んではいないので、色々とクセの強かったり、ハードコートしてる部分があります。

ソース: KageShiron/aspandoc デモ: AsPandoc (https://aspd.esora.xyz/)

なお、デモではセキュリティ上の理由によりログを取っていますのでご了承ください。

仕組み

基本的にシンプル。

  1. Goでリクエストを受け取りパラメータを処理
  2. パラメータに基づいてURLを組み立てて文章をダウンロード
  3. docker run kageshiron/pandoc pandoc -f markdown -t htmlのような引数でdockerコマンドを叩く
  4. 標準入力に文章を流し込む
  5. 標準出力をレスポンス

kageshiron/pandocコンテナはTexLive+Pandocのコンテナです。PDFを作ったりもできます。

kageshiron/pandoc Dockerfile - Docker Hub

妥協とまとめ

今回は自分用雑サービスなので、パフォーマンスとセキュリティは最低限です。Dockerのコンテナセキュリティはそのうちしっかり勉強するつもりですが、結構学ぶことが多いので一旦これで・・・。(DoSとかは除いて)ヤバそうな点があれば教えて下さい。

あとは、esaとかgist用のブックマークレットを使って任意のフォーマットで取り出せるようにするつもりです。

ちなみに、AsPandocというのは「Pandocとしてファイルを開く」みたいなニュアンスでつけてます。書いてて変な名前な気もしてきますが、気の所為です。