BlueVancouver- アラサー エンジニア転職@カナダ

現在アラサーの駆け出しエンジニア。[文系学部卒]にも関わらず26歳の時にSoftware Engineerになる事を決意。東京の外資系コンサル会社を26歳で退職し、カナダでのコンピュータサイエンスの大学に理転しました。(業務未経験) & (アラサーからの理転) & (いきなりカナダ) ですが、日本人としてもっと多様なキャリアがあってもいいと思い、情報共有しております。Youtube: https://www.youtube.com/channel/UCpa0EIrdETaR2gunXDEz-7A

カナダ1社目でソフトウェアエンジニアとして学んだこと

カナダ1社目のSoftware Developer(Co-op)の仕事を終えようとしているため、このエントリーで学んだ事を記録に残しておこうと思います。

 

<業務を通じて使用した技術と学んだ事>

Backend Development:

Javaを使ってサーバーサイドの開発。オブジェクト思考をしっかり学べた。使い回すBase classを決め、それをExtendして個々のサービスを作っていくこと。いくつかのfunctionを作る中で、共通しているactionを途中でhelper functionとして別に作って、他のfunctionからcallするみたいなのを経験して、今後は途中からではなく、設計の段階で長期的な視点を持っていずれ他のfunctionもcallするだろうから最初からhelperを作ろうとか、wrapperを用意しておこうとかそういう勘所が身につくといいな。

 

テスト自動化:

JUnitでBackend, SeleniumでFront-endのテストを自動化した。Sleniumではpage objectとtestファイルを分け、maintainしやすいファイル構成を学べた。

Backend側のテストでは、最初はjson fileでmock dataを作って、それをテストファイルで呼び出す2ファイル スタイルでやっていたが、後でmock dataをテストファイルに書くninja_squadを知ったので、1ファイルの方がmaintenanceしやすいし、読みやすいのでこういうスタイルもあるんだなという事を知った。今後は1ファイルでスマートに書いていこう。

 

DB:

Postgresを使ってSchemaの構築や、View, Functionを作成し、RDBの基礎を学んだ。DB MigrationではFlywayというDB用のversion controlツールを使用し、一発でDBをmigrateできることも学べたし、移行時にif notや、if existsなど環境差を鑑みたUPDATEの書き方を学んだ。 COMMITとROLLBACKなどのコンセプトも理解した上で、まとめてデータをupdateするときはtransactionにして失敗したらrollbackしないとdataのconsistencyが崩れるので、callする前にauto commitはfalseにするなど細かい所まで実装に気を使える様になった。

 

ビルド:

Bash scriptを書いてdocker-composeをcallして、local環境構築 >buildでjava fileをbinary fileに>DB migrate反映 までbashで自動化させることを学んだ。Backendよりもこういう効率性をあげるコード(=DevOps)をもっと深めていきたい。Docker-composeでwebとPostgresを繋げるなども学べてよかった。

 

CI/CD Pipeline:

Jenkinsを使用して、build > test > migrateをステージごとに実行する書き方を学んだ。これはこれで奥が深いし、どういうポイントでlogを残すかとか一つとっても重要なことがわかった。あとは、一回のJenkins buildで20分ほどかかるのをどうやって早くするのか、今後はperformanceを早くする方法を調べていきたい。

 

チーム開発Tool:

GitではとりあえずGit rebase -i HEAD~5などでsquashとかeditとかして一個一個のcommitを綺麗にして、editで過去に遡れて、最後にgit pull --rebase origin masterでmasterブランチにcatch upしてからpushするとかの基本を学べればとりあえずは生きていける事がわかった。 あとは、git reset --soft HEAD^で誤ったremoteへのpushを取り消すとか。慣れてよかった。

 

 

今後より深めたい技術

働きながら、仕事とは別に個人開発をGo + Postgres + Redis+EKS(AWS) +Terraformでサービスをlaunchsする経験を積めた。本業と同じかそれ以上の学びが個人開発であった。

個人開発で触れた中でもっと深めたい技術としては、kubernetesを使ったコンテナ技術と、AWSなどのクラウドサービスをより深く理解したい。Terraformでconfig管理し、自動化する所もサクッとできるくらいまで。

Terraformで買って良かった参考書はこの本かな。やっぱり自分は日本語でできれば勉強したいので、現状日本語の書籍でTerraformを学ぶなら個人的にはこれ一択かと思います。

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) | 野村 友規 | 工学 | Kindleストア | Amazon

 

Kubernetesは現在CKA試験絶賛勉強中です。個人開発ではkubernetesの完成品を使ってアプリをdeployしますが、trouble shootingや自分でパーツを組み立てるより深い知識を補うためにCKA試験を受けます。個人的に勉強用に買った本としてはこれになります。kubernetesも、コンセプトは日本語で頭に入れたいので、現状はこの本が良いかなと思い購入しました。

Kubernetes実践ガイド クラウドネイティブアプリケーションを支える技術 impress top gearシリーズ | 北山 晋吾, 早川 博 | 工学 | Kindleストア | Amazon

 

Goは個人開発では認証機能、Session&Cookieスクレイピング、DB連携など実装できたけど、並列処理に触れなかったので、BackendエンジニアとしてはGoの並列処理をもっと学びたい。あとはKafkaなどのmessaging queもロジックを理解したい所ですね。

 

まだまだ学ぶ事が多そう。エンジニアとしては浅く広くよりも、深く深くが大事だと思うけど、BackendやDevOpsのどの分野を深めるかを決めるために今は色々hands-onでサーチしているという段階です。 なんとなくコンテナ技術が面白いと感じてきたので、Goとコンテナが今は極めたいと思っております。