社会人1年目を振り返って

2019年4月2日

社会人1年目を振り返る

何故このタイミングか分からないが、社会人1年目を振り返ってみたいと思います。思い返すと色々なことがあったなと思います。多分まとまりの無い文章になるでしょう。とりあえず適当に一覧化してみました。

  1. 新人研修(4か月間)
  2. 現場に配属されていきなりコードを書く機会が!(1か月間)
  3. 何も分からないシステムの単体テストを作成する日々…(1か月間)
  4. 心を壊しながらWEBページ開発(2か月間)
  5. 保守・運用を少し(1か月間)
  6. 4で作成したWEBページのエンハンス開発(3か月間)

一覧化するとこんな感じです。それぞれについて使用した技術も含めて書いていきたいと思います。

1. 新人研修

こんな長い研修は必要なかったと思いはしますが、結構楽しい日々でした。マナー研修などの社会人基礎に加え、金融数学やJavaプログラミングの研修を行い、研修終わりごろにはアメリカへ研修という名の旅行へ行くという内容。アメリカは超楽しかったです!!(気候が合わなくて半分体調崩していたけど…)

現在の現場では金融数学は全く使っていないですし、研修のJavaプログラミングはフレームワークを使わないピュアなJavaだったのであまり意味が無かった気もしています。楽だったのそれはそれでよかったのですけどね。さらに、ソースコードの管理にはSVNを使用していました、Gitにしろよ!!と突っ込みたいところです。

それ以外には特に感想はないです!

2. 現場に配属されていきなりコードを書く機会が!

研修を終えて配属された現場はテストフェーズ終了間際のプロジェクト(以降PJと略していきます)でした。私の会社では現場に配属された新人は先輩社員1人に対して2人アサインされ、3人ユニットでタスクを行っていきます。ただし、私のユニットは正直悪かったです…。私たちについた先輩社員はエンジニア歴が7年となかなかの経験があったのですが、当時先輩自身が新しいタスクに挑戦していて新人を見る余裕が無かったのです。日によっては質問しようとすると「今日は無理」と言われることもあったり…。正直ありえないですよね。

というわけで、その先輩に代わって一つ上の2年目の先輩に教えてもらいながらタスクを行うことに、与えられたタスクは「バグ修正」!!なんと配属されてすぐにソースコードを書ける状況になっていました。

システムとしてはSpring bootをフレームワークとしたJavaシステムとViewテンプレートとしてThymeleafを用いたWEB系システムでした。(当時はSpring bootとかThymeleafとか一切分かっていなかったですw今だからわかること!)

タスクの内容は主にテンプレートのXHTMLCSSの修正で、時々Javascriptの修正という感じでした。比較的簡単な修正が多く、時々詰まって帰りが遅くなることもありましたが、新人なので仕方ないものかもしれないですね。XHTMLもCSSもJavascriptも一切やったことなかったですし。(今は事前に勉強しとけよって思いますがw)ソースコード管理にはGitを使用していました。研修ではSVNを使用していたため色々な違いに戸惑うことも多かったですが、なんとかなりました。

といった感じで、先輩以外には特に不満もなくこのPJでの仕事は終了しました。

終わったところでちょっとした事件が!上司からのこんな一言「別のPJが炎上したから救援しろ」。IT企業にはありがちなことですよね。(ですよね?)

とはいえ、たった一日の救援でした。ただし、やったことはなかなかきつかった…。そのPJではSalesforceというプラットフォームを使用していたのですが、そのプラットフォームで使用している言語がapexという謎言語…。(いまだに何かわからないです)この謎言語で実装されたコードの単体テストを書けとのことでした。きつかったですねぇ…。Javaベースでしたが、微妙な違いはあるしapex自体にもバグがあって動くはずのコードが動かなかったり…。この日初めて帰る時間が3時とかになりました。

この辺りから崩壊の日々が始まっていたのかもしれません。

3. 何も分からないシステムの単体テストを作成する日々…

後ほどには何度かこのPJのことをお話しするので、このPJのことを「Howl」と呼びます。(実際のPJ名がジブリ作品に由来するものだったので、同じジブル作品から仮名を付けました。)

次のプロジェクトへ異動に、既存ソースの単体テストを作成するタスクを与えられました。これまで単体テストが動いてなかったので、しっかり動かすようにしたかったらしい。このプロジェクトのシステムはSpring bootフレームワークを使用したJavaバックエンドシステムとsymphonyフレームワークを使用したPHPフロントエンドシステムから成るシステムでした。この時点で思っていたことは「PHPとか古い!」。この辺りのざっくりとした知識でPHPとか古い言語という認識がありました。(実際に間違ってはないとは思いますが…)

単体テストを作成するのはSpring bootの方で、Junitを作成しました。Junitを作成すると言っても、テストコード自体は他の方が作成していて、新人はエクセルにデータを入れていってDBUnitを使用してそのデータを読み込みテストを完成させるというものでした。

ここでのタスクは相当つらかったです…。何も知らないシステムなのが、まずつらい…。私のユニットの先輩社員は相変わらず何も教えてくれず、前のプロジェクトでお世話になった一つ上の先輩は別のプロジェクトに行ってしまい離れ離れに…。誰に教えてもらえば良いか分からない状態で、タスクをひたすらしていく日々。このデータでは動くのか?、そもそも何の機能なのか?、少しずつ聞いて教えてもらってはいたけど、それでも分からない。しっかり教えてくれる人が欲しい日々でした。(その後もずっとでしたけどね…。ちなみに今でもしっかり教えてくれる人が欲しいと思っています…。)

それまで定時+少しの残業で帰れていたのが、このあたりから毎日23時とかになっていました。つらかったなぁ。

4. 心を壊しながらWEBページ開発

Junit作成が終わったら、次のタスクが!プロジェクト自体は「Howl」のまま変わらなかったのですが、タスクはだいぶ変わりました。簡単なWEBページを作成するエンハンス案件があり、そちらにアサインされました。作成するのは「問いあわせページ」で、使用するシステムはsymphonyを使用したPHPのみのシステムでした。メール送信機能があったので、SMTPサーバをいじる機会がありました。さらに、「Howl」にはすでにPHPのシステムがありましたが、この案件で作成するのは新規のPHPシステムでした。

このタスクで私は心を壊すことになりました。

小さなシステムでしたが、アサインされたのはPM+新人2人で、PMはレビュワーだったので実際にタスクを行うのは新人2人のみでした。私は開発担当で相方は設計書担当のような感じでタスクを分けました。(実際にはお互いのタスクを補助しあうようにしていました)

最初の4日間でページ全体のプロトタイプを作成するように言われ、これまで全くやったことのないPHPを駆使して何とか作りました。この4日間の間帰った時間は朝の3~5時の間となってしまいました。

成果物をPMに見せて最初に言われたのは「お前らは今回のPJを理解しているのか?」と…。私が作成したページはお客さんより定時された画面イメージを元に作成していたのですが、PMが言うにはこの案件では「Howl」の既存ページのレイアウトを元に作成することをお客さんと握っているとのことでした。この案件の頭出しでも一切説明されておらず、私と相方は完全に初耳でした。

そこから1時間ほどひたすら説教され続けました。正直この時点で私の疲労は割と限界レベルになっており、この1時間の罵倒とも呼べる説教に耐えらず、心を壊すことに。その後の私はひらすら無気力になり、仕事には行っていましたがパフォーマンスが最悪なことに。この後、この案件に先輩が参画しましたが、この先輩は私と相方をひたすら怒り続ける人でした。最近色々な開発の話を調べていて、エンジニアの心理的安全性の重要性がわかり始めましたが、この時は最悪の環境と言っても良かったと思います。

ひたすら耐えて何とか2か月間を終えました。この時点で私の心理状況は最悪で、今にして思うと何故仕事に行けていたのか不思議です…。

5. 保守・運用を少し

上記の案件を終えて、「Howl」の保守・運用を行うことに。正直特筆することはないのですが、初の保守・運用ということで学ぶことはたくさんありました。CI/CDツールであるJenkisを初めていじったり、Linuxサーバの設定をbashコマンドで色々いじったりすることができました。

この間に何度か「Howl」のアプリでインシデントが発生したため、インデント対応をすることができました。あるインシデントではDBの不整合が発生したため、データパッチを当ててデータを修復することもありました。ですので、SQLについて学ぶこともできました。

この1か月は心の中は常に修羅場でしたが、比較的穏やかに過ごせたと思います。

4で作成したWEBページのエンハンス開発(3か月間)

新年になる頃に、4の案件で作成したPHPシステムのエンハンス案件にアサインされました。(案件が始まること自体は前年12月から分かっていましたが、正直アサインされたくないとは思っていました…。)

今回の案件はPM1人と先輩1人と新人2人に、さらにベテランの技術派遣の方1人というなかなかの体制。前回とは違い色々安心感がありました。なので、今回の案件では私は開発よりも設計寄りでした。今回の私的な鬼門はDBテーブル設計でした。

前回の案件の時はDBを使用していなかったので、DBを追加する必要がありました。追加の機能自体は少ないので、テーブルの数も少なかったです。しかし、私は理解していませんでした…、テーブル設計は今後の機能追加も考慮して行わないといけないということを。私が最初に作ったDBは今回の機能しかカバーできないであろうものでした。今思うと私が考えてなさすぎでした。

ついでに今回私が作成したDB設計を別の新規PJでも使用すると言われ、そのPJで使用される機能とここから追加されそうな機能を含めてDB設計をし直しました。DBの正規化等の基本的なことを色々調べながら3日間ほど考え、PMにレビューを申し込み、いざレビューへ。

私が設計したテーブル自体は管理テーブル1個と子テーブル1個のシンプルな作りでしたが、今後この機能が追加されたら~みたいなことも含めて、説明しました。PMから「これなら問題ない。」と、GOサインがでました。この瞬間は今でも覚えていますが、涙が出そうなほど嬉しかったです。

この後は作成したテーブルを元に設計・開発を行っていき、最後にバッチ処理が必要だったのでバッチ用にSpring bootのバッチ用システムを新規作成しました。研修以外でJavaを初めて実装できました。開発自体は問題もなく順調にいきましたが、最後に問題が起きました…。

それは本番リリースの際でした、本番リリースでWEBページが表示できなくなるという問題が…。その日はどうしようもなくコンチプラン(問題発生時の代替手順のこと)を発動し、システムを元の状態に戻しました。私は原因調査をし環境起因の問題であることを突き止め、報告し次の週に再度リリースし事なきを得ました。

本番移行時に問題が起きましたが、何とかリリースが完了し良かったです。ここでの経験は私にとって自信になり、ここまで死にかけていた心がだいぶ良くなっていました。リリース完了後に4月から別のPJへの異動をPMから伝えられたのですが、こちらは2年目のため、2年目振り返りで記載していきたいと思います。

1年間で習得した技術一覧

1年目で習得した技術をひたすら箇条書きにしていきます。

  • Java
  • SVN
  • Git
  • Spring boot
  • Thymeleaf
  • HTML(+ XHTML)
  • CSS
  • PHP
  • Symphony
  • Javascript
  • Junit
  • Jenkins
  • Linux
  • bash
  • OracleDB
  • SQL
  • Salesforce + apex
  • SMTP

このような感じです。1年で触れた技術の量としてはなかなかではないでしょうか?これ以外にもDB設計や設計書作成、手順書作成などシステム運用する上での様々な知識を得ることができました。

最後に

今回今更ながら新卒1年目を振り返りました。今振り返ってもつらい思い出が多いですが、身についた技術や知識は普通の新卒1年目とは比べ物にならないと思います。

次は4月中頃か5月くらいに2年目の振り返りをしようと思います。