フルスタックエンジニア目指して

エンジニアリングのことはもちろん、全然関係無い話もします。

2017年の振り返り

なかなか時間が取れず、もう年を越してしまいましたが、まとめておきます。

概要

なんといっても昨年は2つの大きな出来事がありました。

  • 5月に大手ゲーム会社から知人の会社へ転職
  • 同じく5月に結婚
    • 転職時期と重なっていたので当時はものすごくハードでした・・・

環境変化

転職について

大手から知人の中小製造業会社に転職をして、一番最初に感じたのは自分の担当範囲の違いです。

事務業務的にもスキル的にもです。

大手でも一応セクションリーダーという立ち位置でしたので、コーディングの他にもPM的なことをするなど、仕事は多い方だと自惚れていましたが中小製造業はそこまで甘くありませんでした。

元の会社では最大でもゲームエンジニアとしての領域を出ることはありませんでしたが、今の会社ではネットワーク設備からシステム開発、企業ページ作成、通販サイト作成まで幅広く携わることになりました。

スキル的にも、元の会社では古めかしいC言語を駆使して、レガシーなゲームのアップデートを開発をしているだけだったので、実際求められるスキルは、C言語のみだったのです。

今流行のIoTシステムの開発も行っているのですが、それだけでもフルスタックエンジニアが求められます。

結婚について

2017年5月に結婚させていただきました。
幸せいっぱいな私ですが、噂に聞いた通り自分の時間は大幅に減りました。

転職の影響もあるのですが、ゲームをする時間はまずなくなりました笑
結婚式が終わった後もなんだかんだ考えることが多く、なかなかフリーな時間は取れません。

後悔は全くしておりませんが、環境はがらりと変わりました。

2017年に触ったもの

今年は多くのサービス、言語、フレームワークなどに触れたので覚えている範囲で書き残しておきます。

マイコンなどのハードウェア

オープンソースハードウェアのRaspberry PiArduinoなど。

IoTシステム構築のために購入し、IoT用にセットアップ等を行いました。

IoTエリアネットワーク構築

IoT用の通信規格であるZigBeeを使用し、ArduinoRaspberry PiでIoTエリアネットワークを組むなどしました。

ZigBeeの実装としてDigiインターナショナル社のXBeeを使用しました。 Arduino用やRaspberryPi用のライブラリが充実していたのが、選定の決め手でした。

また、Digi社から提供されているXCTUというネットワーク管理アプリがあるおかげで構築が容易でした。

Arduinoはセンサを接続してIoTデバイスとして使用し、Raspberry PiはIoTゲートウェイとして使用しました。

IoTシステム技術検定試験中級

IoTシステム技術検定試験を受けました。
業務と被るところが多く、短い勉強時間で合格することができました。

試験としては簡単でしたが、IoTシステムに関する内容を俯瞰的に学ぶことができたので、業務でも役に立ちました。

WordPress

企業ページや通販サイトのスタッフブログを作成する上で使用しました。

ある程度枯れたフレームワークなので、ドキュメントも出揃っており、特に苦労しなかった印象です。

本を買ってオリジナルテーマを作ってみたりもしました。
ちなみにこのときPHPに初めて触れました。

EC-CUBE

通販サイトを立ち上げる上で使用しています。
自作プラグインも作成してみたりもしました。

MVCは初めてだった(言葉も知らなかった)ので、理解が難しかった印象でした。 マイグレーションって何?ORMって何?みたいな。

製造側のトラブルで一旦お蔵入りになった後、後述するRuby on Railsをガッツリ触ったことで、こちらの理解もかなり深まり、再スタートはスムーズに切れそうです。

Ruby on Rails

あるシステムを作成する上で触り始めました。

Ruby自体は前の会社でもちょっとしたバッチツールを作成するため触った経験がありましたが、ガッツリ触ったのは初めてでした。

既にほぼサービスイン出来る状態まで仕上がっているEC-CUBEと違って0からの開発となったため、EC-CUBEよりも身につけるのが容易でした。

Rails 5.1.2を使用するので、それ以前の苦労話とかを聞いても何それってなるけど。

HTML/CSS/jQuery(CoffeeScript)

これらのWebのフロント言語は通販サイトなどで使用することになりました。

特に難しいことも無いので、ドキュメントを見ながらそれなりに複雑なことをやったりもしました。

CoffeeScriptRailsと合わせて使っています。 jQueryよりもかなり完結に書けるので楽しかったです。

ただ、今はjQueryとかよりもVue.jsやReactが流行らしいので、機会があったら来年は触ってみたいな・・・。

Docker

通販サイトや開発中のシステムで後述するKubernetes Engineと合わせて使用しています。

Git + GitHub

前の会社では社内オンプレで運用されているsvnを使用していました。

Gitは本格的に使用したことがなかったのですが、転職後はGitをGitHubで運用することにしました。

Qiita

前々から読む側として利用していましたが、ようやくアカウントを作成しました。

Google Cloud Platform

App Engine

一瞬だけWordPressのアプリサーバーとして使用しました。

デプロイが結構面倒で、制約も多かったので、管理が簡単なさくらサーバーに移行しました。

とにかく人手が少ないので、企業ページくらいは安くて管理不要なサービスを使えばいいや、という判断です。

Kubernetes Engine

通販サイトや開発中のシステムで使用しています。

イメージさえ作ればデプロイが容易でApp Engineよりも制約も少ないことから採用しています。

kube-legoを使ってhttps化もサクサクです。

構成ファイルのバージョン管理もでき、水平スケールなどもオートでやってくれるので、ありがたく使用させてもらってます。

Cloud SQL

通販サイトのなどのDBとして使用しています。

インフラ管理が不必要なので、人手の少ない環境の中で重宝しています。

Cloud Storage

WordPressで画像ファイルなどの置き場として使用しています。

wp-content/uploadsにGCS Fuseでマウントすることで、WordPress上でアップロードした画像が自動でCloud Storageにアップロードされるようになります。

BigQuery

AWSよりもGCPを選んだ理由は価格面もありますが、このサービスの影響が大きいです。

IoTのビッグデータ処理を考えた時、大量のデータを素早く抽出できるBigQueryの性能は無視できませんでした。

Cloud IoT Core、Cloud Pub/Sub

IoT CoreはMQTTプロトコルを使用してPub/Subにパブリッシュできるサービスです。

IoTシステムにおいて、IoTゲートウェイRaspberry PiをIoT Coreに接続し、Pub/Subにメッセージをプッシュするのに使用しました。

Cloud Dataflow(Apache Beam)

DataflowはApache Beamのフルマネージドなランナーです。

Pub/SubにプッシュされたメッセージをBigQueryに流し込むのに使用しました。

Beam(Batch + Stream)という名前の通りストリーム処理に対応しています。

Javaで自分でパイプラインを作成し、フルマネージドな環境で実行することができます。

Deployment Manager

通販サイトのクラウドインフラを構築するのに使用しています。

ymlとjinja2でほとんどのGCPリソース構成を管理できます。

など。

Container Registry

Dockerのプライベートイメージの置き場として使用しています。

コマンド一発でプッシュできます。

Cloud ML Engine

製造ラインの自動検品用のモデルを学習する際に使用しました。

いくつか問題に引っかかりましたが、TensorflowではなくKerasでも使用できました。

Open CV

製造ラインの自動検品の検証に使用しています。

あれこれ触ってみましたが、金属製品が反射するという問題に当たったため、まだ成果は出せていません。

来年は同軸落射照明という高い照明と高いCCDカメラを買って検証する予定です。

Keras

画像認識を行うもう一つのアプローチとして機械学習を考えました。

Single Shot Multibox Detector(SSD)というモデルを作成し、分類を試みました。

SSDだと判定に時間がかかるということと、データが十分な量無いということで一旦検証を見送っています。

まとめ

去年までほとんどC言語が触ってなかったやつが、2017年はエラいこと頑張ったなと。

今年はどれも軽く触った程度だと思っているので、2018年はWebのフロント技術とGCPなどのクラウドサービスを極めていきたいですね。