第16回コベチケの会

コベリンの最近の取り組みとして、業務などで役立ちそうな知見を共有する会を開催することになりました。 そのついでに発表に使ったアジェンダもそのまま公開してしまおうという豪快な企画です。

※ アジェンダをそのままコピペして公開したものなので若干見にくい箇所もあるかもしれませんが、ご了承ください。

思考の整理学の読書感想文 @takkumattsu

id:mironal がおすすめしてくれた本で気になったので読んでみたので簡単に読書感想文を書いてみようと思います。

どんな本か

自分が読んだ部分は75P/225P

主に導入部分だけ

  • グライダー人間と飛行機人間を例に自走できる人とそうでない人について書かれていて、いわゆる学校教育ではグライダー人間しかできないので次走出来る思考が育たないことが述べられている
  • 論文を書く時に困る生徒を例に上記を説明
    • 論文は自分で問題を考えて、自分で解くという構図
    • 学習が優秀な人(グライダー人間)ほど進まなくなる
  • テーマを考えるヒントを筆者が提起
    • 素材探し
    • 寝かす
    • それを合わせる(カクテル)

導入は論文が書けない背景を具体例にとり、自分の力で想像する方法のヒントが書かれていた

読んでどう感じたか?

筆者も言ってるけど義務教育は「国家・社会の形成者として共通に求められる最低限の基盤的な資質の育成」が目的だから仕方ないなと思った。
そういう意味では部活動は顧問の先生が教えてくれることもあるけど、顧問の先生がいない間の練習は各個人が強くなるためにどうすればいいかを調べて考えていたので自分で考えるということをやっていたんだなーと思った
あと基本的に筆者の経験論な部分が多いのであくまで考え方の一つとしてとらえた方がいいかなと思った。(早起きの部分とかは人によりそう)

Sourcery を使った半自動生成プログラミング

https://github.com/krzysztofzablocki/Sourcery

Sourcery と TwitterAPIKit のテストコード生成を半自動化した。

Sourcery とは

Swift のコードジェネレータの一つ. Swift のコードとテンプレート からコードを生成する.

別のコードジェネレータ例としてはSwagGenなど.

SwagGen は Swagger (OpenAPI) の yaml から Swift のコードを生成する. 繰り返しになるが Sourcery は Swift から Swift を生成する.

半自動プログラミング

今勝手に考えたもの. Sourcery はコード生成して mock とか protocol への準拠のコードを自動生成するもの. 自動生成したものはいじらないのが前提。

半自動プログラミングは自動生成したコードを更にいじることを前提としている。

TwitterAPIKit のテストコードの半自動生成

TwitterAPIKit は各リクエストのコードがこんな感じに定義されている。コレを一応一個一個テストしている。

Tree テストコード
image.png (56.9 kB) image.png (77.4 kB)

テストコードを書く時の流れは以下のような感じで意外と面倒. リクエストの数だけ繰り返すのはかなりだるい.

ファイルを作る -> ファイル名つける(意外と面倒) -> テンプレのコード消す(意外と面倒) -> Request 作る (意外と面倒) -> Assert 書く (ここは Twitter API のドキュメント見ながら頑張るべき場所)

これを Sourcery を使って以下のような手順にした。

Sourcery でコード生成 -> Asset 書く (ここは Twitter API のドキュメント見ながら頑張るべき場所)

Assert を書く部分だけに集中できて最高.

具体的に以下のテンプレートを使ってコード生成している.

https://github.com/mironal/TwitterAPIKit/blob/main/test-template.stencil

sourcery --sources Sources/TwitterAPIKit/Some/Resource/Requests/ --sources Sources/TwitterAPIKit/TwitterAPIRequest.swift --templates test-template.stencil --output Some/Test/Dir

Sourcery(stencil) のテンプレートの書き方

以下のように sourcery:file って書くと複数のファイルに分割できる.

{% for type in types.all %}
// sourcery:file:Generated/{{ type.name}}+TemplateName
// sourcery:end
{% endfor %}
  • Hoge.generated.swiftgenerated を消す
    • デフォだとファイル名に generated って付く

出力ファイル名に拡張子まで指定するとそのとおりに出力される.↓

{% for type in types.all %}
// sourcery:file:Generated/{{ type.name}}+TemplateName.swift 
// sourcery:end
{% endfor %}