2017.12.31   |   Memo

2017まとめ - 技術編

自分用メモを兼ねて今年のまとめを。

とりあえず技術周りについて。あとでプライベート編も書きますこちら

今年学んだ技術で大きなトピックはというと

  • Docker の実戦投入
  • 型アノテーション付 Python 実戦投入

の2つです。

Docker は去年からぼちぼち触るようになってましたが、今年はより実践的に活用する 1年でした。ローカルでの環境をすべて docker-compose で実行できるよう既存のプロジェクトを置き換えたり、 ECS (Amazon EC2 Container Service) を使って本番環境でも Docker を動かすといったことを積極的に行っていきました。Ansible 等で構築していたデプロイツールがもはや負債に感じてしまうくらいには Docker に浸かってしまいました。ECS のようなオーケストレーションツールのお陰で、作ったシステムをインスタンスと切り離して管理できるのでとても効率的でした。実戦投入にあたってつらみも色々ありましたが…。

Python の方では型アノテーションを多用するようになりました。型付言語に比べると Python のような動的言語は IDE の補完が効きづらく、効率的に開発するには頭のなかでメソッドやプロパティを多く記憶しておく必要がありました。最近ただでさえ少ない記憶力が低下してきてきて Go や Kotlin みたいな静的言語に惹かれつつあるのですが、動的言語のメリットも捨てきれません。そこで折衷案として出てくるのが型アノテーションです。Python のコードに型情報を記載することで補完やコードの安全性をサポートする仕組みです。これを使うと IDE がちゃんと構造を解析してくれるので補完が効きやすくなります。ライブラリが対応していないと結局ドキュメントを見に行かないといけないのですが、自分で書いたコードや対応ライブラリを使ってコードを書くときは圧倒的に効率が良くなります。また型情報を保持するために Enum や NamedTuple を積極的に使うようになったため、構造化したコードを書くようになりました。以前は適当に dict に詰めて返していたものを、

class DbStatus(NamedTuple):
    ok: bool
    reason: str = None

のように構造を定義して使うようになりました。補完も効くしコードも堅牢になるしメリット多いです。イミュータブルなのも嬉しいですね。欠点なのは内部的にはタプルな点でしょうか。json などにシリアライズする際、_asdict() みたいな一手間が必要です。

Python 3.7 からは Data Class というミュータブルな構造も定義出来るようになるのでより 型ヒントを使ったプログラムが捗りそうですね。

あとは Keras を触ってみたり、pypi に初めて登録してみたりといったことを今年1年経験しました。逆に悔やまれるのは Android に全然触れなかった点ですね。一応ネタアプリは1つリリース出来ましたが、Kotlin が正式採用されたり Android のアーキテクチャのベストプラクティスが成熟し始めたタイミングに追従できなかったのは痛手でした。元凶である Nintendo Switch を封印したので来年こそは頑張りたいです。

成果物まとめ

今年アウトプットしたもの。

Android アプリ

ガチャで SSレアがでなくてむしゃくしゃして作った。今は課金している。

スライド

Python のロギング周りをまとめて社内勉強会で発表しました。
場数踏んで大きいカンファレンスとかでも発表できるようになりたい。

Qiita

Django まわりで 2つほど。(全然いいねつかなくて悲しい。)

GitHub

薄くなっている期間と Switch の主要タイトルリリース日を重ね合わせてはいけない。

文字で Slack の絵文字っぽいのを作るやつ。Chrome 拡張で有能なものを見つけたので自分でも使ってないですが、PIL の勉強になりました。

WIP: REST な API 経由で操作できるキーバリューストア。


来年やりたいことや目標については年明けてから書く予定です。
良いお年を。