Gatsby.js向けに書いた記事をQiita向けに変換したい

1 min read読了の目安(約1700字

Zennでも通用すると思います…

やりたいこと

  • Gatsbyjs向けに書いた記事を
  • Qiita 向けの記事の書き方にしたい

ちょっとよくわからないので噛み砕いて

  • Gatsbyjs向けに書いた記事をコピーし
  • 正規表現で Qiita 向けの記述になるように変形し
  • なんでもいいのでテキストとしてすぐ扱えるようにする

じゃあやってみましょう。

以前、A to Bな変換系WebアプリをFlaskで作ろう!という記事を書きましたが、
こんな変換のためにいちいち Web アプリをローンチするのもかったるすぎるので
PC 上で完結できるようにしましょう。

そもそも〜向けの記事って何?

コードブロックの書き方がちょっと違います。
そのせいで片方向けの記事を書いてもう片方で公開したいとなるとちょっとめんどくさいです。

Gatsby 向けの記事だとpython:title=hoge
Qiita 向けの記事だとpython :hogeみたいな感じ。

これをごちゃごちゃにするとこうなります。

title=script.py

これではちょっと嫌ですね。
それでは、やっていきます。

材料

  • ShellScript もとい bash

以上。

早速組み立てていく

できたものがこちらになります。

script.sh
# クリップボードから文字列を変数に代入する
copied=`pbpaste | nkf -w`

# Qiita <- Gatsby
pat_1_before='(`{3,4})(.+):title=(.+)'
pat_1_after=':'
strings=`echo "$copied" | sed -E "s/$pat_1_before/$pat_1_after/g"`
echo "$strings" | open -f
  • 変数copiedを作る。
  • copiedpbpaste | nkf -wで、
    クリップボードの中身をエンコードしたのちぶち込む。
  • 正規表現のパターンを用意する。
  • 変換する
  • open -fでテキストエディタ上に開く。

これで、

  • Gatsby 向けに書いた記事をコピーする
  • スクリプトを実行する
  • 変換されて、テキストとしてアウトプットされる

といった感じで使えるようになりました、やったね。

まあ、ShellScript 初見で挑んで
こんな簡単に終わったわけがないんですけど

詰まったところ

Q. pbpaste使うなら相方のpbcopyでコピーすればスマートじゃね?
A. 何故か知らないんですけどそれができなかったのです。
できなかったので、妥協案として「テキストエディタ上に開く」という動作にしました。
これはこれでファイルが生成されないのでスマートです。

以上です。
pbcopy使えないじゃん!って気づくのに 1 時間位かかりました。

参考

sed を使って": 1 not defined in the RE"などと出たらキャプチャの構文が間違っている Bye Bye Moore

文字コードと改行コード UNIX & Linux コマンド・シェルスクリプト リファレンス

[clip / pbcopy・pbpaste]クリップボードにコピー | 日経クロステック(xTECH)