あすたぴのブログ

astap(あすたぴ)のブログ

2017年の振り返りと2018年の話し

2018年になりました。本当は2107年中に書いておいたほうがいいことですが、年末がバタバタしていたような気がするのでこのタイミングになりました。

2017年にやっていたこと

ブログを見てみると18記事書いてました。それらを振り返ってみると、terraformの基礎やDockerでのRailsの環境構築、CirlceCi2.0、WardenやDeviseの認証周り、webpack、ECSについてな感じでした。 これが何をやっていたかと言うと、新しいプロジェクトの開発と参加が決まって、そこで使う技術の選定や調べごと、やった結果を残していた感じです。結果的には調べた内容は全部使いました。

構成としては、サーバーサイドにRubyRails、フロントにReact、Vue、AWSアーキテクチャとしてはECSでDockerを使用しています。 他には新しめの機能では最近NLBを導入しました。ぼくが直接やったわけではありませんが、NLBの背後にnginxを置き、そこでSNIで使用する証明書を動的に切り替えて、バックエンドはECSのRailsコンテナに流しています。面倒なポイントとしてはECSのデプロイが走ったタイミングでNLB背後のnginxのupstreamを更新することですね。(ぼくが作ったわけじゃないですけど。)

webpackを使用していると書きましたが、Rails5ではwebpackerが追加されてwebpackが使いやすく?なりましたが、あまり依存したくないので、Railsの仕組みとは分離してwebpackを使っています。

今年やった一番大きいこととしてはSSL証明書の動的発行(取得)ですね。これは先程書いたNLB背後のnginxで証明書の動的切り替えの話しとの関連です。 ブログでACMEプロトコルについて触れていますが、Let'sEncryptを使用してサービス利用書が使用するドメインの証明書を動的に取得、配置しhttps化をしています。 詳細はまたブログで書きたいと思っていますが、Railsとバッチの連携をSQSで行っていて、証明書を取得するための作業を分割し、キューを受け取ってバッチが処理するって感じで行っています。 Let'sEncryptのクライアントは公式やOSSでいくつかあるのですが、ACMEプロトコルを理解したかったという所と、細かい制御を自分で行いたかったのでクライアントを自作しました。一番しんどかったのは現行のLet'sEncryptのサーバーがいつ時点のRFCを実装しているのかがわからなくて、いろんなバージョンのRFCを読んだり、自分でデバッグしたり、他OSSのコードを読んだりしたことですね。 暗号化周りの知識も不足していて、それは暗号技術入門で補いました。 大変でしたけど、結果的にはうまくいって楽しかったです。

あと、ECSのデプロイはECSを導入している会社でも色々やり方に違いがあって、どうするか悩んだ結果これも自作しちゃいました。githubに公開されてますが、別に紹介するほどのものじゃないので記載はしません。なぜか、Rubygolangで2種類作っているのですがSDKの仕様が結構違うのがだるくもあり面白くもありました。APIの設計としてこっちはこの方が便利だなぁとか、なんでこっちにはこれが戻り値にねーんだよ。とか。 devとprodで使い分けていますが、devはCirleCIで最後に自動でデプロイしています。prodはslackから指示することで任意のタイミングでデプロイ出来るようにしています。 デプロイのツール自体は非常に単純にしていて指定したサービスのタスクを更新してリビジョンをあげてサービスを更新する。だけです。 ECSのデプロイは環境変数の追加、削除や、タスク、サービスの作成をどこでやるかという問題がそれぞれのツールによって解決策が違うのですが、自分の場合は一番最初のタスク、サービス作成は手動でそれ以降単純デプロイはツール任せ、環境変数の追加はそのときに自分で追加。です。 なぜかというと現在の規模ではサービスの追加はほぼない。環境変数の追加もあまりない。ということで単純デプロイがほとんどの状況でツールを必要以上に複雑化したくなかったからです。OSSのツールはほとんどが多くの機能を持っているので、それらを把握し自分の用途を調べるだけでも大変です。なので自分が必要な機能だけをサクっと作ったほうが楽で勉強にもなりますね。

いまさらですが、このプロジェクトでのぼくの役割はなんとなく開発をリードするって感じでしょうか。明確に役割を言い渡されたわけではなく、最初はサーバーインフラがぼくでフロント、デザイナーが1人ずつって感じだったので自分の領分すべてをやる予定だっただけですけど。 開発環境を用意して、アーキテクチャや技術の選定をして、開発の基盤?みたいなの作って、CI環境整備してインフラ作ってデプロイツールを作った。全てまっさらな状態からのプロジェクト開発は人生で2回目で、なかなかない機会なので1回目から約2年くらい空いた状態で今の自分ならどこまで出来るかっていう感じでやりました。いろんなものを整備したのはよかったですが、細かい部分(コード設計)まで回らなかったところと自分でも答えのない状況だったりして、こうしてればよかったなという所がいくつかありました。そのへんはまた次の機会に活かせればなと思います。

その他、2017年の出来事とか

  • 2017年11月で転職してから2年が経ちました。
  • 結婚が決まりました。
  • 転職しようとして内定承諾もしていましたが、事情により内定辞退、辞職キャンセルとなりました。(相談に乗ってくれた方ありがとうございました。ご迷惑をおかけした方申し訳ございませんでした。)

2018年の話しとか

どうしようかなって感じです。直近で気になっているのはイーサリアム上で動作するアプリの開発です。いろんな会社を見て回りたいと思っているので、もし面白そうな話しがあればお声がけしていただければと思います。