2021/02/05

テクノロジー

入社してから現在までの研修を1年目が振り返ってみた!

この記事の目次

    はじめに

    こんにちは!2020年4月に入社したITシステム課(現デジタルテクノロジー戦略本部)のN.Yです。

    今回は入社から現在までの、研修についての振り返りをしたいと思います。

    自己紹介

    私は、マイナビに入社するまで本格的にプログラミングをしたことがない、文系大学生でした。
    就活と同時に勉強を始め、Progateを中心にhtmlやCSSを学んでいました。

    入社時は、ゴリゴリにプログラミングできることに憧れもありましたが、自分の手でサービスをつくりたいとも考えていました。

    現在は以下の業務を中心に行っています。

    • SSO、ID統合管理サービスの導入
    • 社内BTSサービスの運用
    • 社内図書館アプリの開発・運用
    • 社内イントラサイトの再現の開発

    ITシステムの導入・サービスの運用(非エンジニア的業務)と、アプリ開発やサイト開発(エンジニア的業務)を6:4ほどの割合で行っています。

    プライベートでは以下のようなことを行っています。

    最近はシンプルなプログラムなら作れるようになってきたので、徐々に開発の楽しさが増してきている今日このごろです!

    入社から配属まで

    入社してすぐに全体研修があり、約3カ月間で基礎的なビジネスマナーとIT技術を学びました。

    全社研修+ITコースの入社研修については、別記事にインタビューが掲載されています。

    入社研修後は現在の部署に配属になり、業務をこなしつつ、部内で新人研修を並行しておこなっていました。
    部内研修の目的は、プログラミングだけでなく、アプリケーションを支えるインフラ部分の理解と定着です。そのため、ネットワーク、アーキテクチャなどについて、より多くの時間をかけて学んでいきました。

    今まで学んだIT技術をより実践的に学ぶことで、新人研修を受けたまま曖昧になっていた部分の知識がしっかりと整理され、システムが具体的にイメージできるようになりました!

    部内の研修内容

    やったこと

    部内の研修ではFlaskを使ったWEBアプリの開発を行いました。
    私が所属するシステム統括本部の本棚には、約200冊ほどの書籍があり、それを管理できるWEBアプリケーションを開発するのが、部内での研修でした。

    全体研修ではローカルPCに環境構築をし、機能の結合も手動で行いつつ、部内研修では、アジャイル・ペアプロ・クラウド・Gitなど、現場でもよく使われる手法や技術を利用し、実践的なことを学ぶことができました。

    また、ミニマム(一番簡単なシステム)でよいので、期日までに必ず動くものをつくること、というルールもありました。このルールにより、過程ではなく、結果が求められる現場ならではの考え方を学べました。

    開発手法や流れ

    手法

    同期とともにペアプログラミングで開発をおこないました。

    ペアプログラミングとは、1人がコーディング、もう1人はそれをレビューしながら開発を進めていく手法です。

    また「プログラミングなら何でもおまかせ!!」というほどの凄腕の課長がトレーナーとなってもらい、3人でSlackのチャットやビデオ会議でコミュニケーションをとり、プロジェクトとコード管理にはGithubを利用しました。

    流れ

    週初め:今週行うことの打ち合わせやレクチャー
    週中:それぞれの担当を開発
    週の終わり: 振り返りと動作確認 来週行うことの打ち合わせ

    といった1週間ほどのスパンで開発しました。

    全体的なスケジュールとしては

    ①要件定義
    ②AWSのEC2立ち上げ
    ③ミドルウェアのインストール(nginx,gunicorn)
    ④Python+flask+jinja2で開発
    ⑤開発環境から本番環境にデプロイ

    を2ヶ月ほどかけて行いました。

    研修で特に学びになった取り組み

    1. 画面遷移図の作成→CSSコーディング
    2. nginx+gunicornインストール
    3. データベースを本番環境にリストア
    4. トラブルシューティング

    1. 画面遷移図の作成 → CSSコーディング

    実際の開発手法にそった形で行うため、Adobe XDというUI作成ソフトを使って画面遷移図を作成しました。

    今までパワーポイントやエクセルなどで作成していたのが、XDを使うことで素早く作成することができました。
    また、サイトイメージを作成する際は、テキストの見やすい配置や、Bootstrapをそのまま生かせるデザインをつくることを心がけました。
    そして、サイトイメージを作成したことで、高さ、横の配置や、各パーツの幅や間隔が数値で明確になっているため、その後のCSSコーディングや打ち合わせが効率よく進みました。

    XDを使ったことで、以下の学びを得られました。

    1. サイトイメージは実際に作成するものに忠実に作らなければならない。
    2. 画面遷移の機能を使うことで、URL構造の抜けを発見できる

    ※XDで作成したサイトイメージの一部

    2. nginx+gunicornインストール

    今まで、馴染みが薄かったミドルウェアをインストールし、サイト開発に使用しました。(全体研修では、Xamppで開発したため)
    当時はどういった働きをするものなのかが全くわからなかったため、開発に着いていくのに精一杯でした。

    これらのソフトウェアを開発を通して触れたことで、

    1. Pythonだけではサイトは作れない(基本的には)
    2. サーバーとアプリケーションがどのように連携しているか(相互の通信、ポート番号や設定ファイルなど)
    3. 3倍ほどの種類のlinuxコマンドが打てるようになる(入社当時は皆無だった)

    など、さまざまな経験や学びを得ることができました。

    3. データベースを本番環境にリストア

    約200冊ほどのデータを開発環境に入れたあと、本番環境に移す作業が大変でした。踏み台サーバーを経由して、本番環境のデータベースにローカルのデータをコピーすることに、かなりつまずきました。

    当時、コピーということであったので、「右クリックしてコピーして、指定の場所で貼り付け」といった方法を想定してたのですが、今回はできそうもありませんでした。(今思うと当たり前)

    つまずいた理由としては、

    1. 踏み台サーバーにユーザー作成+公開鍵設定ができていなかった
    2. その原因がわかるまで、どの通信エラーのログを読めばいいのか理解していなかった
    3. データベースがどこにどうやって配置されているか理解していなかった

    など、さまざまなつまずきを経験できました。

    この経験を通して、上記のつまずきだけでなく

    1. AWSの構成やロールなどに詳しくなった
    2. 踏み台サーバーが何のためにあるのかを理解できた

    などの学びを得ることができました。

    4. トラブルシューティング

    トラブルシューティングは一番大変な作業でしたが、最も勉強になった内容でもありました。

    内容は、「後輩がシステムに入って操作したところ一部の部分が壊れてしまった」といった架空のケースを2日間で解決するといった研修。
    アプリが動いていないのは「ブラウザを見ればわかる」が、どこが壊れているかは「ブラウザを見ただけではわからない」といった部分が新鮮であり、難しい課題でした。

    さまざまなエラーログを見て、考えられる仮説を同期と話し合い、解決策を模索しました。壊れているのは一つではなく複数あったので、難易度が高く、すべてを解決することはできませんでした。

    しかし、このトラブルシューティングのおかげで、エラーログの重要性や一つ一つのシステムの特性を学ぶことができました。

    アプリ開発の全体の流れ・手順

    • 【AWSに開発環境作成(初期)】
      • AWS IAMユーザー作成
      • AWS EC2作成・SSH接続
      • VSCODEでEC2にSSH接続 社内のプロキシ設定をくぐる
      • Python インストール・venv作成
      • flaskのインストール
    • 【要件定義などドキュメント作成】
      • 「概要・目的・解決したいこと」を明確にする
      • サイトのURLを決める(研修用の使えるドメインの制限があるため)
      • 画面遷移図を作成する(Adobe XDを使用)
    • 【開発環境作成(中期)】
      • ステージングのインスタンスに検証用のユーザーを追加
      • nginx・gunicornのインストール
      • mysql インストール
      • テストデータで動作チェック
    • 【一覧画面・詳細画面コーディング】
      • jinja2インストール
      • pythonでサイト制作
      • flaskを用いたデータ処理
      • 検索機能・ページング機能の搭載
    • 【開発環境(末期)】
      • インスタンス起動時にデーモンが起動するようにする
    • 【データベース作成】
      • 190冊ほどの資料をデータベース化
    • 【トラブルシューティング】
      • 仮想のトラブルケースに対応する
    • 【開発環境の最新データベースを本番環境にリストア】
      • 踏み台サーバーからmysqlにアクセス

    私が開発中に大変だったこと

    • SSH接続のエラーがなかなか解決できなかったこと
    • ネットワーク、アーキテクチャ、ミドルウェアなど、さまざまな分野の新しい知識がどんどん出てくること
    • 同期との理解度の差にいろんな意味で対応すること(わからないところはしっかり聞く)
    • 先輩からレクチャーを受けたあと、いざ自分が手を動かすとなるとほとんどできないこと

    学びになったこと

    • ログの見方を習得し、つまずいたときの対応力がついた
    • 最初わからなくても、3、4回触り、つまずいても乗り越えれば、なんとなく理解できることを知った
    • わかったつもりが一番危ない、誰かにアウトプットしてやっと定着する

    研修を受けての感想

    つまずいてしまったとき、すぐにトレーナーに質問するべきなのか、まだ自分で調べて解決すべきなのかの線引きが難しかったです。

    今振り返ると、質問せずに自力で調べれば調べるほど、当時の私は余計に混乱していました。あらかじめ時間を決めて、それを超えてもまだ解決できないときは質問をする、などの方法を取っても良かったと思います。

    最初の1ヶ月間は、自分の知識も技術も足りずに申し訳なさと恥ずかしさで一杯でしたが、トレーナーと同期のおかげで何とか乗り切ることができました。

    研修は終了しましたが、学びを業務に生かせるよう、今後もしっかりと頑張っていきたいと思います!

    ※本記事は2021年02月時点の情報です。

    著者:マイナビエンジニアブログ編集部