Skip to content

2020年に作ったソフトウェア & 触った環境振り返り

Posted on:2020-12-19 at 03:00 PM

以下の記事に触発された

2020年に作ったソフトウェアや開発技術をふりかえる

今年は仕事内容としては大きく変わることはなかったけど、業務や趣味ではちょいちょい新しいの触ったり素振りしたりはしたのでその振り返り

GitHub GraphQL Exploler からリポジトリの作成順でソートして今年のリポジトリに絞り込んで何やってたか思い出してみる(大体その時期興味あったリポジトリが作られてるような気がするので)

{
  user(login: "shufo") {
    repositories(first: 100, orderBy: {field: CREATED_AT, direction: DESC}) {
      nodes {
        createdAt
        name
      }
    }
  }
}

GitHub Action

以下作ったアクション

GitHubアクションはペライチスクリプトでもコンテナで動かすことが出来てホスティングもGitHubで完結出来るので開発の敷居が低いのがよい

ECS Fargate運用

ECS Fargate運用する中で雑にoneshot(一回切り)でコンテナでコマンド叩きたいな〜みたいな場面が多かったのでoneshotで叩けるやつ作った クラスター, Service, Taskと実行したいコマンドを渡すと最新の定義からいい感じにスッとコマンドを実行してログを出してくれる

既存のoneshot系は機能が多すぎてよく分からなかったのとコマンド自体がリソースを作成してAWSリソースのstateを変えるような望まない挙動が多かったので

Cluster, Service, task definitionが既に定義されてること前提なので既にIaCで管理されてるコードベースでも運用後に追加しやすいと思う

VSCode Extension

去年作ったblade-formatter (bladeファイルのopinionatedなformatter)をVSCode Extensionに移植した インターフェースがCLI -> VSCodeになってユーザ増えたことでいいフィードバック雑なフィードバック含めフィードバックが増えた.

npmで何か作ってる人はVSCode ExntensionでWrapするとフィードバックには困らないかもしれない

Lambda Function

パラメータとしてHTMLを渡すとChromeでレンダリングしてPDFとして出力するLambda Functionを作った

e.g.

$ echo '{"data": "<html><body><p style=\"color: red\">Hello World</p></body></html>"}' > payload.json
$ aws lambda invoke \
 --function-name lambda-pdf-generator \
 --invocation-type RequestResponse \
 --payload file://payload.json --cli-binary-format raw-in-base64-out response.json

 $ cat response.json | jq -r .data | base64 -d > example.pdf
 $ open example.pdf

Lambda上のHeadless Chrome経由で出力しているためChrome PDF印刷互換のPDFが生成される

PDFをお仕事でごにょごにょしたいやつが出てきて(これ定期的に発生するな)最初昔のごとく各言語ネイティブなPDF出力系のバイディングを探していたのだけど、ChromeのPDF印刷なら楽じゃんということでLambdaベースでChrome動かないか探したらあったのでなんか出来た. HTML/CSSベースなので各言語のPDF出力系ライブラリよりずっと楽にスタイリング出来てまともなレンダリングのPDFが出力出来る. 楽すぎて各言語のバインディングで謎のセマンティクスを理解してPDFをゴリゴリいじってたのがあほらしくなる.

ChromeのバージョンによってPDF出力に改善が加えられてたりする(CSSの縦/横のportraitを認識したり)ので開発用ChromeとLambdaのChromeのバージョンを揃えないハマる(1敗)

サーバレス運用

サーバレスでRDSにクエリ投げるためのCLI & Lambda Functionのセットを作った

以下の要領でAurora Serverless Data APIのようにサーバレスでRDSにクエリ出来る

$ lambda-query -f lambda_function -q "select * from users" --format table

RDS前提だけどIAMさえ持ってればクエリを投げられるようにしたくて作った

Aurora ServerlessはCold Startがあるので許容出来ずRDSでやっているけどサーバレスにクエリしたいよという場合は便利かもしれない

作った結果踏み台サーバのようなものを作ってOS更新がパスワードがユーザ/Groupが許可されたコマンドが云々みたいなやつがなくなって楽になった

直近のAWS CloudShellやAWS SSMなどもあるけど基本的にサーバ管理も直接サーバに入ったりローカルに依存するということも今後必用になる場はやはり少なくなって行くと思う。人間の認知限界がある以上Zero Touch Productionのプラクティスは基本的にベストプラクティスということにはこれからも変わらない。ただ抽象化されるわけではなく、直接触らない ことが重要でObservabilityは確保した上での全てトレース可能になるようにし、API経由の構成でトレーサビリティを確保することに関心が向かっていくと思う.

AWS CloudShellもその文脈の話でWebコンソールでゼロコンフィグでAWS CLIを触れるというのが重要. 実際は裏にインスタンスが立っているわけだけど直接触れないということが重要.

Vercel

Vercel素振りしたくてblade-formatterをオンラインに移植した

GraphQL

HP更新

PelicanからVuePressに移行した

JSスタックなのでプラグインを作ったりするのが楽になったのはよかった

Laravel

まとめ