DEVGRU

プログラミングと競馬予想について書きます

私的開発環境 Ver. 2021-2

個人・仕事の開発環境をそろそろ見つめ直そうと思ったので、現状を整理する。

広告

ハードウェア・OS

個人も仕事もMacBook なので、 OSはmacOS縛り。 仕事の方はまだ Big Sur にアップグレードできていない。

もちろん Homebrew を使っている。

エディタ

Emacs は卒業して、 Visual Studio Code を使っている。

Vim は開発環境を揃えるのが面倒すぎて断念してしまった。

アドオン

もと Emacs ユーザなので、 Awesome Emacs Keymap を使っている。

その他、メジャーどころ。

ターミナル・シェル

iTerm2 + zsh (+ prezto) + 白源フォント

サービス

  • GitHub
  • Slack
  • Zoom
  • Google Workspace
  • esa (仕事のみ)
  • Notion (個人のみ)- 最近はToDoからブログの下書きまで全部ここに集約している
  • DeepL
  • Netlify (個人のみ) - Hugo で生成した静的ファイルをここでホスティングさせている

ツール


感想

もっとたくさん使っている気がしていたが、思ったより少なくて驚いた。

こういうのは定期的に見直していかないと向上しないので、ちょくちょくやっていこうと思う。

エンジニア採用のお知らせ

現職ではプロダクト拡充のため、ソフトウェアエンジニアの採用を行っております。

転職をお考えの方、または興味のある方は、@blog_devgru までDMください。 現職のWantedlyのページとかんたんな紹介をお送りします1

業務分野

  • 国内医療系スタートアップ

雇用形態

  • 正社員
  • 業務委託

会社規模

  • 正社員100人超
  • 資本金

ポジション

  • バックエンドエンジニア
  • フロントエンドエンジニア
  • SRE

テクノロジースタック

  • バックエンド

    • Python/Django
    • Python/Serverless Framework/AWS Lambda
  • フロントエンド

    • Angular
    • React
  • 共通: AWS, Datadog, GitHub

その他

  • フルリモート可
    • オフィスは都内ですが、関西、北海道のメンバがおります
  • スクラム
  • 裁量労働

  1. 会社の人にこのページ見られるのちょい恥ずかしいので隔離させてください。Twitterだめな場合は別途ご相談させてください。

(訂正あり) Serverless Framework で TypeScript を使うときは、aws-nodejs-typescript を使わずに serverless-plugin-typescript を使おう

(訂正)

書いたはいいが、 よくよく確認したら repository の last commit が2年前と全くメンテナンスされてない状態だったので、 こちらのほうがむしろ推奨されない方法となっていました。

なにかの参考になるかもしれないので、記事は残しておきます。

不便な記事2連発で申し訳ありません。

広告


tl; dr

sls create -t aws-nodejs-typescript -p プロジェクト名

あらまし

ちょっとしたスクレイピングをするバッチのために Serverless Framework + AWS Lambda + Node.js + TypeScript の構成で実装しようとしたが、 よく検索して出てくる方法が特定の方法に特化しすぎていて、使いづらいケースが多そうだったのでオフィシャルで説明されている方法をおすすめする。

検索するとよく出てくる方法

こちらこちらなどでは、以下のコマンドでテンプレートから生成する方法が紹介されている。

sls create -t aws-nodejs-typescript -p プロジェクト名

この方法で生成されるプロジェクトには以下の問題がある。

  • API Gateway 前提のコードになっていて、それ以外の用途で使いづらい
  • 依存が多い
  • serverless.yml ではなく serverless.ts になる

問題その1: API Gateway 前提のコードになっていて、それ以外の用途で使いづらい

生成されるコードはここの内容になる 1

github.com

見てほしいのは、 serverless.tssrc/ 以下で、どちらもガッツリAPI Gatewayを使用する設定になっている。

  provider: {
    name: 'aws',
    runtime: 'nodejs14.x',
    apiGateway: {
      minimumCompressionSize: 1024,
      shouldStartNameWithService: true,
    },
    environment: {
      AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
    },
    lambdaHashingVersion: '20201221',
  },
const hello: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => {
  return formatJSONResponse({
    message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`,
    event,
  });
}

serverless.tshello ハンドラーがガッチリAPI Gateway使用を前提としているので、 それ以外で定時バッチ組みたいとかのケースだとこれらのコードを削除して整える必要があり、テンプレートを使う旨味が全然ない。

むしろ意図せずAPI Gatewayに公開する危険すらあるので、それ以外の用途で使う場合以外は使うべきではない。

問題その2: 依存が多い

Lambda は依存が増えるとパフォーマンスに影響が出るので依存を減らしたいところだが、 package.jsondependencies を見ると、@middysource-map-support が入っており、不要の場合いちいち削る必要がある。

また、その下の devDependencies は実行速度に影響こそないものの、なるべく少ないほうがパッケージのメンテナンス上都合がいい。

問題その3: serverless.yml ではなく serverless.ts になる

これは良し悪しだが、 serverless.ts はあんまり使いたくない。

スキーマチェックが入るので安心できる部分はあるが、ブログなどで紹介されている記述例は9割が serverless.yml なので、いちいち変換して書く必要があるのは美味しくない。

推奨する方法: serverless-plugin-typescript を使う

serverless-plugin-typescript を使おう。

github.com

serverless ではなく prisma-labs 以下のリポジトリなので 3rd party になってしまうが、 本家からも紹介されているので、 問題なく使えると思います。

使い方は、通常のプラグインのように npm install serverless-plugin-typescript したあとに、 serverless.yml に以下を追記するだけ。

plugins:
   - serverless-plugin-typescript

あとは、handler.js ではなく handler.ts に実装するだけで良い。

バンドラの設定などはよしなにやってくれる。

細かいところは ここ を参考にすると良い

まとめ

aws-nodejs-typescript よりも、 serverless-plugin-typescript を使いましょう。

AWS Lambda実践ガイド

AWS Lambda実践ガイド

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)


  1. プロジェクト謹製でこれなのは少し困る。