2018年にやったこと[ソフトウェアエンジニアリング関連]

2019年の年始の雰囲気も薄れてきた今になってようやく書く、2018年にやったこととそこから学んだことです。

リストアップしてみるとこうなります。

  • Lambda(Node.js)

    • Lambdaの概要
    • test(mocha, chai, proxyquire)
  • Deploy

    • to S3(CodeBuild, CodePipeline, API Gateway, Microsoft Flow)
    • to Lambda(apex)
    • to DB(db-migrate)
  • E2E test

    • puppeteer
  • Docker

    • ECS
  • Coursera


Lambda

既存のEC系サービスのバックエンドにLambda(Node.js v6)が使われていて、途中からプロジェクトに入り、開発や運用を引き取りました。 Lambdaをちゃんと使ったことがなかったので、Lambdaへのデプロイ方法、ライフサイクル、バージョニングとエイリアス、等Lambdaに関する知識を学びました。

コードについては、最初の段階では処理が共通化されていなかったり、直にSQL文が書かれていたりしたので、モデルを作成してそちらに処理を移すようにしました。 また、テストをmocha, chai, proxyquireを使って書きました。

Deploy

to S3

上記のプロジェクトでは、フロントエンドのコードを手元でwebpackを使ってビルドし、awsコマンドを使って必要なファイルだけをアップ、その後CloudFrontのキャッシュを削除、という手順でデプロイが行われていたので、この手順をCodeBuildを使って自動化しました。 また、このCodeBuildとCodePipeline、それにAPIGatewayとLambdaを組み合わせて、HTTPリクエストを投げるとデプロイが始まるという状態を作りました。これにより、今までエンジニアサイドでのみ可能だったデプロイが他の人でもできるようになりました。デザインのみの修正を行う場合、デザイナーがデザイン・コーディングを行い、その後ボタン(今回はMicrosoft Flowを使っています)を押せば変更が開発環境に反映されるようになりました。また開発環境上で動作の確認をした後、ステージング、本番への反映も可能です。これにより、素早い開発が可能となりました。

to Lambda

Lambdaもコードを手元でzip化してコンソールでアップロードという状態だったので、Apexを使ってデプロイするようにしました。

to DB

データベースの変更はmysqlに接続して直にSQL文を流す状態だったので、db-migrateを導入しました。ライブラリとしては薄めですが、今回のケースには合っていて必要十分という感じです。

E2E test

puppeteerを使ったE2Eテストを作成しました。サンプルコードはこちら

Docker

Dockerを本格的に使い始めました。こちらの本で一通りを学習できてよかったです

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

また、ECSを現在進行系で使用中です。Fargateの料金が下がって嬉しい。今はここらへんのデプロイ周りのところに悩んでいます。

Coursera

ちょっと毛色が違いますが、去年からCourseraをはじめました。"Software Design and Architecture"というコースをとりました。これは4つの講座から成り立っていて、"Object-Oriented Design", "Design Patterns", "Software Architecture", "Service-Oriented Architecture"をそれぞれ1ヶ月ずつ使って受けた感じです。 ビデオ講義と、実際に手を動かして提出する課題、それにテストがあり、週末はけっこうこれに費やしてました。 内容はオブジェクト指向デザインパターンアーキテクチャ設計+UMLなどです。 ちゃんとこれらを体系立てて学んでいなかったので、歯抜けになった知識が埋まって、ずーと放っておいた宿題を片付けたような気分です。

去年にやった主なことはこんなかんじですね。もうちょっとちょくちょくまとめていったほうがよさそうです。今年はもうちょいまめにブログを書くことを目標にします。