🚶

未経験で勉強を始めてから開発三年目までやったこと

2022/09/04に公開約5,300字

業務経歴書だけでは書ききれないかもしれない、これまでの開発についてまとめてみたいと思っていました。

2020年

5〜10月

本格的にプログラミングを始めたのは2020年5月頃でした。なので開発歴でいうと現時点で3年目にさしかかったくらいです。

その頃まではイラストレーターやWebデザイナーを目指していましたが、20歳で専門学校を卒業して2年ほど活動してみて、自分にそういう仕事ができるとはあまり思えなくなってきていました。

5月に地元の会社に就職しましたが、イラストをやめた分なにか他の目標を探そうとも思っていました。
東京に住んでいたときには身の回りにたくさん同年代のエンジニアがいたので、いっそ自分でもやってみるかということで、 2019 年末くらいに HTML・CSS で挫折していた Progate を再開し、JavaScript や Ruby を勉強。

このとき自分が仕事の自動化や効率化にかなり興味を持っていることに気づき、以降は本格的にエンジニアを目指そうと決めました。


5月に入社した職場では主にCMSへ流し込む原稿のチェック・修正を行っており、入稿された画像のサイズ、誤字や「有難う ▶︎ ありがとう」といった表現などを目視と手作業で修正していました。

慢性的に残業が多い部署だったこともあり、これは自動化したほうがミスも減るしチェックも手間がなくなるし、関係者全員にとってメリットが有るのではないかと考えて調べてみたところ、文章の自動校正を行えるtextlintというNPMパッケージを発見。
それからは出社前・退勤後の時間でLIGさんのブログを読んだり、ドットインストールにもちょうどtextlintの動画があったのでそれを見たりしながら Node.js の環境構築をしてみて、どうにか使いこなせないかと勉強してみました。いわゆる「ターミナル」を初めて触ったのもこのときです。

結果的には「対応表のYAMLファイルを作って自動置換する」くらいしかできなかったので、いきなり直接的な問題解決に取り組むよりもまずは何かアプリを作れるようになってみようと気持ちを切り替え。 Progate で Rails のレッスンを開始。終了後そのままMacBookにローカル環境を構築してアプリを作り始め、半年後にはしょぼいアプリができあがり(?)ました。

実装した機能としては、

  • データベースからランダムに5作品分の映画情報を取り出し、並べる
  • 映画情報を入力してデータベースに保存する
  • 映画ブログ(タイトル・本文)をデータベースに保存する
  • 映画ブログ一覧を取得する
  • 映画ブログの詳細を閲覧する

くらいのもの。

いわば CRUD のうち C と R だけ。さらに検索機能もないし画像アップロードもできないし、ページネーションもありませんでした。

アプリを作り始めた時点でもうエンジニア転職を目指そうと決めていたので、勉強に集中するため無謀にも正社員職を2ヶ月で退職。上記の機能を実装したり、 jQuery の勉強をしてフロントエンドを少し整えたりしました。

作り込むのはあとにしてさっさとデプロイしようと考え、これまた無謀にも Heroku は使わずにいきなり AWS に挑戦。 VPC・EC2・Route53 ( RDS は使わず MySQL を EC2 にインストール)という最小構成で、独自ドメイン・SSL証明書付きで公開しました。
このときはアプリケーションサーバーを起動できない、データベースと接続できない等のエラーにハマりまくり、公開にこぎつくまでには一ヶ月ほどを要しました。

10月以降

さすがにこんな程度ですぐ開発職に就職できるとは思わなかったため、Web制作系の仕事でも探そうかと WordPress の勉強をしました。

とはいえなにかしら挑戦はしたく、記事を見ながら Docker Desktopをインストールし、 Docker-compose でローカル環境を構築する、公式プラグインを使ってGithubへプッシュするだけで自動的にデプロイされるようにする、という程度の工夫はしつつ、自分のポートフォリオサイトを制作。
自作テーマでトップページとブログ部分を作り、レンタルサーバーで公開しました。

2021年

1月〜7月

1月頭から、市内の制作会社さんでお世話になりました。

10〜12月中にはバイトの応募には落ちまくっていたわけなんですけども、最後に受けたこの会社さんでは「Webに興味があって…というくらいで応募してくる人が多い中、自分でサーバーを借りて実際にサイトを作り、公開しているところがよかった」とご評価いただき、準委任契約でお仕事をさせていただけることになっておりました。(時給 × 営業時間 × 営業日 + 交通費の計算で、だいたい月12〜16万円の間)

さらに幸運にも WordPress 案件にアサインされることはなく、在職中に経験できたのはほぼ全て Laravel 案件でした。 PHP は未経験だったことと、 Rails でもそこまでちゃんとしたロジックを書いたわけでもなかったので学習コストはかなりのものでしたが、2月末くらいから徐々に書けるようになっていきました。

構成としては、データベースからフロントまで一貫してモデルオブジェクトをリレーしていく Contoroller + Service + Model というアーキテクチャ。
このうち最初は Service クラス部分の実装をやらせていただき、基本的なデータ取得や、初心者にはなかなかキツかった複数テーブルにまたがる検索クエリなど、なんとか Eloquent のおかげで乗り切っていました。

その後は Unitテストを書いたり、次の案件からはスケジュールの頭から Controller、 Service、 Model も含めて担当させていただいたりと、設計が済んだあとの下流工程については割と全体的に関われるようになっていきました。


このとき感じていた課題としては、フロントエンド部分の開発がなかなか非効率であったというものがありました。

Blade テンプレートに script タグでベタ書きされていてまったく DRY ではなかったことに加え、 ES6 で採用された構文は使わないやり方での消極的なIE対応など、正直モチベーションは下がるばかり。どうにか説得して ES6 + 別ファイルへ切り出し + Laravel Mixでトランスパイルする形に書き直させてもらいました。

クラス構文の復習から行う必要があっただけでなく、それまでIE対応をしたこともなかったので多少不安だったのですが、これによってクラス構文自体への基礎的な理解が深まり、その後の Laravel を使った開発でもいい影響を与えてくれたと思います。

8月〜

7月末で案件を終えたあとは、特にシステム開発系の案件が決まっていないとのことだったので、WordPress をやるよりは現場で使われていなかった Docker や Vue.js の学習をしたいと思ったため契約を終了。再び独学を継続しました。

その頃のリポジトリ

https://github.com/nawawa/spa-tutorial-laravel
https://github.com/nawawa/spa-tutorial-vue

軽く Vue.js をハンズオンしてみたあとは、 Nuxt2 に挑戦。JAMstackなブログを作りたいとずっと思っていたので、Qiita API を叩いて自分の記事を取ってくる技術ブログを作りました。

https://nawamemo.dev

https://github.com/nawawa/qiita-jamstack

実際には CSS に凝りすぎて一度挫折しまして、就職活動用のポートフォリオを作るため Laravel に浮気したまま年末を迎え、ブログ自体は2022年の再就職前後の時間を使って、改めてローンチしました。

2022年

4月〜8月

4月から、再び市内の企業にて働くことになりました。現時点における最終職歴です。

エンジニア採用ではあったのですが、その企業は主にビジネスホテルに対してセンサーや客室用テレビ画面の制御システムなどをまるっと納品する事業を行っており、取り扱っている機器や業務の理解のため、しばらくは出荷する製品のセットアップを行っていました。

常に忙しいというわけでもなかったので、自席PCに既存システムの環境を構築して仕様を調べたりしながら業務をこなしていたのですが、6月末頃からは本格的に開発業務にアサインされることになりました。
内容としては、それまで何年も保守・運用されてきたテレビ画面の制御用システム(PHP5系・MySQL5系・Windows Server2016)を SaaS としてリプレイスするプロジェクトであり、初めて一からサービス全体を設計するチャンスだったため、それ以降の業務に対するモチベーションは高かったです。

ただ、社内には自分以外にもうひとりWeb系エンジニアの方がおりましたが、その方は現行のシステムの面倒を見たり、テレビを制御する組み込みプログラムをC#で書いたりなどの業務を行っており、本プロジェクトで稼働できる人員は自分ひとりしかおりませんでした。(その人も「これ以上成長できなさそうだから」ということで近々退職されるのですが…)

つまりたった一人で設計・計画・デザイン・実装・テスト・運用を行うということであり、それは確かに無謀。
先輩Web系エンジニアも Nuxt や Docker などのWeb系技術に詳しいわけではなかったので、詰まっても誰にも相談できない日々が続きました。あるときは Axios の設定方法がわからないまま一営業日を費やし、退勤後は20時までガストで粘ったあと翌朝も4時半に起床して、どうにか遅れを取り戻したり…

たしかにチャンスではあったものの、いろいろと慣れないことをしているうちに上層部を焦らしてしまい、8月末をもって当初の予定通り外部のベンダーへ委託することに決定。開発タスクからは解かれることになり、開発以外の業務に再び取り組むよりは、再度開発職を探して就職活動をしたほうがよいのではと考え、つい先日退職いたしました。

いろいろな慣れないこと一覧

  • Windows に WSL2 をインストールして Ubuntu 環境を構築
  • Docker Desktopなしで Docker と Docker-compose をインストール
  • Aglio・Drakovを使って API Blueprin t式で記述したマークダウンをHTML化 & モックサーバー化
    • それらのツールはさすがにレガシーだったので Stoplight Studio・Prism の組み合わせに変更
  • 画面設計
  • Figma で実際の UI をデザイン
    • アトミックデザイン的に最小単位から考えていくとやりやすかったです
  • ドメイン駆動(っぽい)設計
    • Laravel ・ Nuxt いずれも。マナリンクさんの記事が大変参考になりました
  • Laravel ・ Nuxt 間のCORS関連の問題解決
  • エラーレスポンスの設計
  • スモールスタートを前提にした技術選定
    • Heroku より Render.com のほうが良さそう?
    • DB は Planet Scale を使う選択肢も?
    • HTML化したドキュメントは Netlify ・ Vercel のどちらに?
    • オブジェクトストレージは S3 を使うことになりそう?
  • ブランチの運用戦略

これらを業務時間内外に勉強できたことで、実際新しい知識はどんどんついていったものの、結局は「お給料をもらいながら独学」していただけで、特にそのコストを還元することなく退職することになってしまったのは心残りです。

9月〜

さてどうしましょう。少なくとも、さびしくない開発がしたいな〜とは、めちゃめちゃ思っております。

前職に限りませんが、開発以外の仕事をしていたときも含めて、在職期間中は朝はやく起きて1〜2時間時間を作って個人開発をしたり、技術ブログを書いたり、土日も最低限どちらか片方で時間を作って、1日3〜5時間ほど作業していました。

今後はそんなふうにちょっとずつ伸ばしてきたスキルを一回形にして、再度就職活動をしようと思います。はやく作りきらないといけませんね。これまであまりできてこなかったことですけど。

ほとんど動いてないけどTwitterもありますので、よしなに…

https://twitter.com/nawa3ng
GitHubで編集を提案

Discussion

ログインするとコメントできます