最近覚えたりやったりしたことを列挙

こんなことやったなぁを書いておこうと思った。

Scala

型クラス

ぶっちゃけプロダクトでどう使えばいいのか全然ピンとこなかったのでもう忘れた...
型クラスがあることによってどんなことを型で表現するからメリットになるのか?の例が知りたい

scalikejdbcとscalikejdbc-bigquery触った

この辺

github.com

ついでにtypesafe-configとかも。
当初の目的としてはscalikejdbc-bigqueryをゴニョるために触った感じ。
普段のプロジェクトではいろいろなライブラリを使ってる関係で生scalikejdbcを触る機会が全然ないので適当に触って、クエリを発行できるようになるまでどんな手順でやればいいのかとかを適当に触った

=:=

型の同一性チェックができる(雑)

mockitoのeqをscalaで使う

Scalaには eq が存在してるのでインポート時に別名でインポートしないと使えない(ハマった

ScalaからCLIツール(具体的には gsutil コマンド)を叩く実装を書いた

要件として、

  • コマンドはなるべく複数並列で叩きたいし、並列数も制御したい
  • コマンドが応答しなくなったら並列で実行中のプロセスをkillしてからScalaのプロセスもちゃんと落としたい

というのがあって、Futureで並列度を制御しつつ、プロセスをkill出来るような実装を頭悩ませて実装したりした
jsでもCLIのラッパー書いたことあるけどキツかったので、CLIのラッパーはどの言語でやってもきついのかもしれない・・・

infra系

Ansible少々触った

  • task,role,inventoryあたりの概念多少知った
  • ユーザー定義の関数を作れるらしいと知った(作ったことはない)
  • スクランナー化したAnsibleは地獄だと知った(弊プロダクトのインフラはそうなってしまっている)
  • 変数の出処を探すのが大変なのでシンプルに保とうという気分になった
  • あと宣言的になるように、とかね。。。

CloudFormation少々触った

  • スタック・変更セット・アウトプット・userdataあたりの概念を知った
  • 順当に運用するのが普通に難しいということがわかった
  • Ansibleに比べて変更の頻度が少ないし、作り直しみたいなことも普通はしないので、「冪等性を保つ」のが意識されにくい
    • 最新のテンプレートだけを反映すればOKという状態になっていない不具合が起きてしまっていた
    • 作って壊してを頻繁に実施するような運用にしたほうがいいのかもしれない
    • インフラ系は触り始めて日が浅いので、ベストプラクティス・・・というかうちの事情を踏まえた上でどうすれば改善できるのか?というのがあまりわからない
  • GCPのDeploymentManagerも多分似た話があるんだけど、こっちは今いるプロダクトだとCFnよりさらにめったに触らないので逆に問題が起きにくい感じがある

Storage Transfer Serviceを毎時集計に使うようにした

EMRでサマった結果をBQでロードするためにS3→GCSへ移動するのに利用。
どうやらこのTransfer ServiceはGCP上の共通のリソースを使っているらしくて、他のProjectがTransferのリソースを使いまくってるときにこちらもアオリを食らうということがあったりしてひどい目にあった
アレ本番運用で定常的に使ってる人がいたらどうしてるのか聞きたい・・・

なおうちはgsutil rsyncコマンドで対処できるように、という対応をしました

CircleCI

この辺↓のことをやった

qiita.com

qiita.com