こんにちは。 2018年にウィルゲートにエンジニアとして入社した林です。 現在コンテンツマーケティング事業を支えるシステムの開発・運用保守を行っているチームに配属されています。
入社して早3か月が経ちました。 自分はウィルゲートに入社を決めた後、大学の夏季休業中約2ヶ月ほど現在の配属先と同じチームでインターンをしていました。 インターンの期間と入社後の期間が同じのため、今回のブログではインターン時代と入社後の業務内容を比較し、振り返ってみようと思います。
入社経緯
まず、自分は今回初のブログ投稿でもあるため、簡単に入社経緯を書こうと思います。
自分が在籍した大学の学類では、幅広い技術の基本を学ばせた後は、そこから先は個人の自由にやっていく風潮がありました。 そのため、大学時代で触れた言語だけでもjavaやC言語、OCaml、R言語、アセンブラ言語といった計10近くは触れていたと思います。 講義でも、機械学習や組み込み技術、CGとバックエンドの技術をメインに学びました。
学外での活動ではゲームを作成したり、Arduinoで遊んだりとwebとは全く関係ないことをしてきました。
大学時代に様々なことをやっていた自分ですが、大学入学前はゲームエンジニアを目指していました。 大学入学後、講義を通して様々な技術に触れていくうちに、将来の職としてゲームエンジニアと絞らずに、色んなことが経験でき、顧客との距離が近く、お互いに成長していけるような会社で働きたいと変化しました。 そのため、就活時にはゲーム会社のほかに、セキュリティ会社やweb会社といった幅広い分野の会社を見ました。 その際に会社を見る指針として設定したのが、 ・自社でメインに開発を行っている ・二つ以上の分野に手を伸ばしている といった2点でした。
そういう指針をもって就職活動をしている中で、最終的にウィルゲートに入社することを決めた大きな理由として
- 開発において全て自社内で行っているため、幅広い経験ができそう
- 社長研修や上長との1 on 1といった社員一人一人に向き合った制度があり、内定をもらった中で最も自分が楽しく、成長できる
- 兼任制度や新規事業の提案制度があり、自分がやりたいことを実現できる
- コンテンツマーケティング事業、メディア事業の2つが存在する
といった4つの理由があり入社を決めました。
インターン時代
業務内容
自分がウィルゲートでインターンを開始した時期は、チーム内で大きなシステムの社内リリースを控えていました。 そのため、インターンの最初からプロダクト開発メンバーの一人として参入し、業務はバグの除去を任されました。 最初は、システムを理解することもあり、リストアップされたバグを簡単なものから順に取り除くことに力を注ぎました。 途中からは自分でバグを見つけて、上長に確認し、それらを修正していくこともしていました。 バグの種類としては、簡単なものではデザイン修正・表示の出し分け、 少し大変だったものでは、画面遷移時に前の画面情報をもとにして初期表示の変更・自分で仕様変更による処理を考えて実装などがありました。 以上のようなバグを約50個、インターンの期間中に取り除くことができました。
その後は、簡単な実装を任せてもらえました。 その内の一つにVue.jsを用いてselect2を実装するというのがありました。 select2とはjQueryのプラグインで、selectタグを使いやすく高機能にしたものです。 この実装では描画自体は順調でしたが、選択時のイベントが動作しないということがありました。 調べたり、先輩に話を聞いたりしてなんとか実装を完了しました。 現在でも、そのとき書いたコードが残ってたりするので毎回その部分を見ると少し心がほんわかしたりします。
以上のことを行って、自分は約2ヶ月間のインターンを終えました。
学んだこと
自分はウィルゲートでインターンを行うまで、webの開発もそうでしたが、チームでシステムの開発を行うことをやったことがありませんでした。 最初は、他のメンバーの進捗状況を考えずに、様々なファイルに修正を加えるプルリクエストを出してしまうことがありました。 また、コード規約に沿っていないといったことがあり、プルリクエストのコメントが何十件になったこともありました。 その際に、チームの人にプルリクエストの単位を小さくすること、読みやすいコーディングの必要性を教えていただきました。 教えてもらった後からはただ実装するだけでなく、どうしたら読みやすいのか、他の人が出したプルリクエストを見て参考にしたりと注意を行うようにしました。 そのおかげもあり、今まで目の前のことしか見えていなかったものが、少しずつ視野を広く持つようになり、自分が行う修正が他の人にどのような影響があるのかを見れるようになったと思います。
入社後
業務内容
インターンの時は、一つのシステムのバグ改修がメインでした。 入社後では、チームが持っているシステム全般の開発・運用保守をメインに行っています。
現在、自分のチームで扱っているシステムは全部で9個程あります。 自分はそれらすべてのシステムの運用保守を行いながら、どういうシステムか、どのような処理手順かといった理解を進めています。 最初は上長から直接エラーの対応を任されていました。 しかし、そのまま上長から直接作業を任される状態に慣れてしまうと、自分の成長も望めません。 更にチームへの貢献も多くできないとも思いました。 その考えが出てからは、エラーが出ていることに気づいたら、事前に原因がなんだったのかを調べて、上長に自分が対応する旨を伝えるようにしました。 最初は、エラーとは的外れの場所を調査することがありましたが、何度も対応していくうちにエラーの原因箇所をすぐに割り出せるようになっていきました。 また、その際に行ったことや手順などをドキュメントに残し、属人化とならないように注意しています。
開発に関しては、現在開発中のシステムへの機能の追加をメインに行っています。 この現在開発中のシステムというのが、社内の中でも今後「コンテンツマーケティング事業を支えるシステム」の根幹となるものでもあります。 基本的には機能追加に最長3日もあれば実装が完了するものを割り当てられています。 大学時代では個人で開発することを行っていたため、チームで開発するときの留意点や大変さを感じることができ楽しいです。 また、現在任されている主要システムの内一つに、他のチームも使い、かつ社内でも核となるシステムがあります。 チームに配属されたばかりの頃、このシステムの改修を任されました。 このシステムに不具合や修正があった場合は当然ながら社内全体に影響が出ます。 そのため、インターン時に任された業務と比較すると想像つかないほど緊張しながら開発・テストをしていました。 しかし、その分とてもやりがいもありましたし、テスト時に注意すべき観点といった得るものが多くあったと思います。
インターン時代との変化
正社員となり、インターン時代と異なって大変になったことが2点あります。
一つ目は責任範囲の拡大です。 インターン時代も自分が修正した部分に責任を持っていました。 その際は、大きなプロダクト開発の一メンバーとして、システムを早期に理解し、バグをたくさんつぶして活躍をしていました。 社員となったことで、扱うシステムの範囲も広がり、基幹システムの修正を任されたり、基本設計から携わったりと、他のメンバー、チームとも触れる業務が増えました。 まだ慣れていないことで見落としがあり指摘されることはありますが、任されているということが実感できています。
二つ目は外部の仕様変更による影響範囲の認識です。 入社してから機能の実装部分に携わることがありました。 入社して最初に任された最初の業務では、社内で基幹となっているシステムに機能を追加しました。 テストも行い無事リリースとなりましたが、その数週間後にエラーが大量に発生することがありました。 自分が任された部分でもあったため、自分がミスをしたと思い心臓がバクバクでした。 調査を通して何が原因だったのか追求しましたが、最終的にエラーの原因は外部APIの仕様が突然変更となったことでした。 しかし、この現象が起きたおかげで、その後の運用保守や実装の際に外部APIのことも考えながら作業を進めることができるようになりました。
まとめ
現在自分は、業務では重要なシステムの運用保守や開発に関わることが多いです。 そういう役割を任されているのも、インターン時代にインターン生という気持ちを捨て、自ら問題を見つけようとしたり、システムの理解をしようとしたため、信用を得るこができていたからだとも思っています。 また、インターン時代には、実装時の注意点や周囲のチームメンバーを考えるといったエンジニアとして注意する中で基本となる部分を身に着けることができました。 入社してからも、インターン時代に得た経験が更にブラッシュアップを行っていますが、まだ依然として先輩方から何かを得ている段階であります。 今後は誰かに自分がインターン時代や入社して得た経験を普及したり、取り組み方の手本となれるように頑張っていきたいと思います。
今後
自分のチームでは突発的に扱っているシステムに対して相談や依頼がくることがあります。 それらの窓口は現在上長となっており、その対応も上長が行っています。 この窓口と対応を行う流れを自分が担えるようにすることを第一の目標としています。 そのために、まずは現在稼働している社内システムを他人に説明できるぐらいに理解を進め、 運用保守や依頼があった際には自分が率先して行うようにしていかなければならないと思っています。
また、開発の部分では現在小さいタスクが割り振られています。 少しずつ大きなタスクが任されるように信頼を得て、基本設計や要件定義などの上流に関われるようになりたいと思っています。
短期的な目標としては、早く他のメンバーと同じぐらい社内システムを理解し、基本設計から関われるように今足りない力を手に入れていきたいと思っています。
長期的な目標としてはPMとなり、プロダクトを回していけるようになることを目標としています。そのために、エンジニアとしての技術力を身に着けることはもちろん、思考の柔軟性、スケジューリング力をつけていきたいと思っています。