【キャリア】Web系エンジニア2年目のまとめ

エンジニア歴が1年半(初心者で初参画したのが2019年4月)となり、まがいなりにも使える技術や知識が増えてきました。

ここらへんでスキルの棚卸ということで、2年目に学んだことをまとめていきたいと思います。

2020年振り返り

1月 Vue.jsポートフォリオ作成

    この時期くらいから転職を本格的に考え始めました。

    まずは何はともあれ、ポートフォリオを作成。技術的には、本業で別チームが使っていて、個人的にも興味のあったVue.jsを採用。Vue.jsの勉強には「ネコ本」を使用しました。

    年末年始は、React学習にも着手。具体的には公式サイトのチュートリアルをやり、ToDoリストを作りながらReactの基礎を学びました。Vue.jsと比較してですが、Reactの方が書き始めてすぐから「自分に向いてる」とも感じました。ひとことで言うとReactの方が「洗練されていてルールが硬い」ところが書きやすかったです。

    (あとで書きますが、ここで学び始めたReactを使って、いまの現場で仕事ができてると思うとこのタイミングで始めたのは天恵だったなと思います。)

    2月 Laravelでの外部API接続

    本業ではLaravelをメインに触っていて、既存のシステムに機能追加を行っていました。その中の一つとして、外部APIを使用してのプログラムを詳細設計込みでやったり、CSVダウンロードができるようにコードを整えたりしていました。

    3月 Gatsbyで技術ブログを作成する

    2月では省きましたが、コツコツとReactの勉強を続け「何か作ってみたい」と言う思いが強くなってきたところで、Reactの静的サイトジェネレーター(SSG)のGatsby.jsの存在を知りました。

    • Gatsby.js
    • Netlify
    • Contentful

    といったJamstackな構成で技術ブログを作成しました。とは言っても、テンプレートを使用したので、ほんの少しの勉強時間で作成することができました。

    4月〜5月 Udemyで興味のある講座をやりまくる

    緊急事態宣言の影響で、ほぼほぼ仕事がなくなりました。というのも、当時参画していた案件が緊急事態宣言の影響をモロにうける業種であったため、開発自体もストップしてしまっていました。

    そんな中で、有り余った時間を使ってUdemyの講座を受けまくっていました。その中でも特に役に立ったと感じる講座は以下のとおり。

    3つともVue.jsやReact、TypeScriptといったJavaScript系の言語ですが、ここでガッツリ勉強できたことは2020年の後半に向けてとても良かったと思います。その後の案件を確認すると「Vue.js/Laravel」や「React/Laravel」といった技術構成が多く、ここで学んだHooksなども大きくフロントエンドの根幹技術として使用していました。

    6月 副業案件を初受注

    初めて副業案件を受注したのはこの時期です。案件自体はWordPressを使用したWeb制作だったので、そこまで難しい案件ではなかったのですが、「自分で稼ぐ」ということを実感したのはこのときが初めてでした。身ひとつで「顧客と関わり、製品を納品する」といった一連の流れを体験できたのはとても大きな体験でした。

    7〜9月 SES会社に転職し、Vue.js案件に参画

    SESという形態の会社は初めてだったが、入社後すぐに案件も決まりVue.js/Laravelの案件に参画。主にフロントエンドの新規開発などを行っていました。結果的に、この案件には7〜9月までの参画となりました。

    • 社員チャット画面の作成(Vue.js)
    • 管理画面周りの作成(Laravel)
    • マスターのDB作成など

    上記のようなことをやっていましたが、この案件は入った時点で「炎上」している案件でした。環境もきちんと整っていないままアプリ作成などを行っていたので、環境依存のエラーなども起こり苦労していました。さらに多くの人のコードが入り混じっていたので「読み解き→コード修正→新規機能追加」という手順を踏まなければなりませんでした。

    この案件から学んだことは「設計が甘いとすべてが崩れる」ことでした。

    話を聞いてみると、参画した企業さまも最初期から関わってはおらず、途中で投げ出されたプロジェクトを拾ったとのこと。さらに「設計書なども特にない」となると、実装担当者はすでにいないため、「ソースコードが設計書」状態になります。そのコードも作りが優れていたわけではないので、すべてのしわ寄せが来てしまったようでした。

    このような状態にならないためには、下記のような条件が必要だと学びました。

    • 適切な技術選定
    • アーキテクチャパターンに従った設計
    • コードレビューなどを行った相互的なコード管理

    この案件の経験から、アークテクチャや設計に興味をもち、さまざまな関連する本を読むようになりました。

    具体的には下記の2冊が印象に残っています。

    特に「オブジェクト指向でなぜ作るのか」は、Javaなどの言語の成り立ちから「オブジェクト指向とは何か」ということを説明しているので、体系的に知識を身に付けるのに役に立ちました。「ドメイン駆動設計入門」も設計論の基礎から学べたのでとても良かったです。ドメイン設計のバイブルでもある「エリック・エヴァンスのドメイン駆動設計」よりも先にこちらを読んで基本的な考え方を頭に入れるのが吉だと思います。

    10〜11月 React/Laravel案件に参画

    一気に今までやってきたことが花開いたと感じたのがこの案件。技術的には以下の技術を使用しています。

    • React 16.14 (React Hooks)
    • Laravel 7.0
    • AWS (EC2, RDS, Route53, Lambda)
    • Docker

    個人的に本業で触ってきた技術のなかで一番モダンな技術セットで仕事ができています。やっていることも新規開発がとても多く、フロントエンドの新規画面作成から、バックエンドのDB管理まで行っています。入ってすぐからReact Hooksを使用した新規機能追加タスクをやらせていただき、技術スタックを稼げました。

    なかでも設計が素晴らしく、下記のような構成でアプリが構成されています。

    • Atomic Designを採用したフロントのデザインパターン
    • Repositoryパターンを使用したバックのアーキテクチャパターン

     

    この案件に入るまでざっくりとしか理解できていなかったAtomic Designのパターンが、具体的な例で理解できたのはとてもうれしかったです。今後、Atomic Designのパターンを採用する際はこのコードの構成をイメージして実装すれば良いので、「良質な例を持つこと」の重要性がわかりました。

    「良質な例の重要性」に気がつく前は、GitHub上のコードを漠然と読んでいましたが、「例を探すこと」にフォーカスし始めてからはコードの読み方が変わった気がします。

    まず第一に、コードの定着率が上がり、自分が書けるコードの質も上昇しました。頭の中に選択肢が増えたようで、ひとつのコードがうまくいかなかった場合にも、すぐに代替案が浮かび、高速にトライ&エラーが繰り返せるようになりました。

    第二に、「過去の時点よりもより良いコードを目指す」ようになりました。言い換えると、現時点でのベストを都度コードに残すようになり、プログラム全体の質を上昇させるように意識するようになりました。

    12月 将来性のある言語の学習(Python, Golang)

    仕事に慣れてきた際には、PythonやGolangの勉強を始めました。おなじみのUdemyの講座ですが、下記の講座で勉強していました。

    PythonもGolangも、将来性がとても高い言語と言われており、現時点からしっかりと身につけておくことでエンジニアとしてのキャリアの中で有利に動くことができると踏んでいます。将来性のある言語やスキルにしっかり投資していくことで、2021年以降も新しい技術にいつでも挑戦できるようにしたいという魂胆です。

    今まで読みたくて読んでいなかった上記の本たちもこの時期に読みました。リーダブルコードでは、普段から意識していることが多く書かれていたので、アンチパターンでコードを書いていなかったことにほっとしたのを覚えています(笑)

    まとめ

    エンジニア2年目を振り返ってみると、さまざまなことを勉強できたと感じます。年初めからしっかりと学習していたことでしっかりとお金を稼ぐことができたし、さらに新しい興味のあることにも投資できていると思います。

    しかし、上をみるとまだまだだし、学習すべきことがたくさんあります。作成したものにしても、本業以外には年初めに作成したポートフォリオと技術ブログしかありませんでした。考えてみると、学習したものは多くても、それに伴う成果物が少なすぎるようにも感じます。

    2021年をさらなる飛躍の年にするために、JavaScript、PHP(Laravel)やGolangなどの技術向上をしつつも、しっかりと成果物を作成していきたいと思います。さらに言語の深い部分やデザインパターンについてもまだまだ知らないことだらけなので、深いところも学んでいきたいです。エンジニアとして働くのなら、なにかしら熟知している言語が必要だと思うので、武器になる言語も作りたいですね。。(おそらくもっとも得意なのはJavaScriptだけどどうなるか。。)

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です