2020-07-12

7/12

Hugoでmemo用のarchetypeを作る

関連項目:

上手く行ったパターン①:

---
title: "{{ dateFormat "2006-01-02" .Date }}"
linkTitle: "{{ dateFormat "2006-01-02" .Date }}"
date: {{ .Date }}
---

現在日時から日付を作る場合は上で良いが、たまに昨日のメモとか作りたくなることがあるので、ファイル名を元に作るようにした。

上手く行ったパターン②:

---
title: "{{ substr .Name 0 4 }}-{{ substr .Name 4 2 }}-{{ substr .Name 6 2 }}"
linkTitle: "{{ substr .Name 0 4 }}-{{ substr .Name 4 2 }}-{{ substr .Name 6 2 }}"
date: {{ .Date }}
---

工夫すればもう少しすっきり書けるかもしれない。

駄目だったパターン:

# Hugoのリファレンスに載ってるのにエラーになる。 .Dateが文字列扱いで、 .Format ってメソッドはない的な
title: "{{ .Date.Format "2006-01-02" }}"

# sprigのリファレンスを見たらこれが正しいかと思ったが、Hugoだと違った
title: "{{ substr 0 3 .Name }}-{{ substr 4 5 .Name }}-{{ substr 6 7 .Name }}"

参考:

binqのメタデータサーバによるメタデータの公開は著作権やライセンス侵害にあたるのか?

少し前から作っていたbinqについて、先ほどようやくブログを書くことができた:

「免責事項」として書いたのだけど、こういうメタデータの収集・公開が著作権やライセンス侵害に当たるのかが気になったので、少し調べた。

あまりそのものズバリな事例はないのだけど、少なくとも、元々コピーや再配布を許可しているライセンスで問題になることはないだろう。

ゆるいOSSライセンスはそういうものもある。

逆に、著作権法上の「公表権」や「頒布権」を理由に、「絶対に自分のHPに来てダウンロードしなきゃ駄目」みたいに書いているソフトウェアがあったら、それをbinqのインデックスに載せると怒られるかもしれない。
そもそもインターネットにOSSとして公開しているソフトウェアで、そんな風に書いているものがあるのか知らないが。

参考:

Goで任意の処理の出力を構造化データとして上手く扱いたい

構造体だったら fmt.Printf("%+v", x) とやればある程度きれいに出力できるけど、それをもっと汎用的にできると嬉しいかなというところ。

背景として、最近はCLIでも構造化されたデータを色んなフォーマットで出力できることがクールになってる、というのがある。

kubectl然り、Google Cloud SDK然り、AWS SDK然り。
最近の事例だと、Rust製のnushellでは、デフォルトでコマンドの出力結果がテーブルになっており、パイプによってコマンド間でデータの受け渡しが可能になっている。

nushellの実装がどうなっているのかは見てないけど、まあなんかそんな感じでやりたい。

サンプルとして参考になりそうな候補:

  • Kubernetes
    • 追ってみたところ、k8s.io/apimachinery/pkg/runtimeが汎用データ型及びプロセッサっぽい。単独では使いづらい気がするんだけど、めちゃimportされているのはコアなライブラリだからか
  • クラウドのSDKとか…まだ見てない
  • logger系
    • hashedhyphenさんに「zapはどう?」と言われたので少し見てみたけど、やはりロギングに比重が置かれている感じで、ちょっとユースケースが限定されすぎている感がある
    • 後でもう一度見直したところ、内部に抽象データ型があるので使えるかもしれないと思った。が、それはやはりロギングに最適化されたデータ構造で、汎用的な用途で使うにはどうしたらいいかわからなかった。
    • fluent/fluent-logger-golang
  • Awesome Goで見つけたやつ:
    • Data Structureカテゴリだと、アルゴリズム系ばかりが見つかる。
    • https://github.com/mickep76/encoding … これは自分が目指しているものに近い気がする。WIPって感じがするけど
    • https://github.com/bndr/gotabulate … テーブル形式で出力してくれる君。2次元のデータにしか対応してない

今回の話と関係ないけど、調べている途中で目に入って気になったライブラリ:

  • kubernetes関係を見ているときにk8s.io/klogというロギングライブラリを見つけた。今回の用途には向かないが、依存がなくて割とシンプルなレベル付きロガーなので、使いやすいシチュエーションもあるかも(Google寄りなライブラリ)
  • https://github.com/mvdan/sh … 全然関係ないけどawesome-goで目に入った。shfmtとかgosh (PoC)が入ってる

実験で作ったdfmtというもの

https://github.com/progrhyme/experiments/tree/master/go/dfmt

ちょっとまだ道筋が見えない。