📒

エンジニア1年目が書く、仕事にキャッチアップする方法

2023/03/06に公開

はじめに

はじめまして、かぜと申します。
2022年9月に未経験エンジニアとして今の会社に入社し、半年が経過しました。

会社ではPHPのCodeIgniter(3系)というフレームワーク(以下FW)を使っています。
このCodeIgniterに慣れるのがなかなか大変で、キャッチアップに苦労しました。

記事の目的

「念願のエンジニアになれた!でも今まで使ったことがない言語・FWだ」
「何が分からないか分からない。学習したいけど何をすればいいか分からない」
そんな人が可能な限り早く、業務で貢献できる人材になるためにできることを挙げていきます。

なお、まだ私もエンジニアになって半年の身のため、ベテランの方から見れば非合理的な記述があるかもしれません。
その際はご指摘いただけると幸いです。

私の背景

  • もともとエンジニア転職前に使用していたのはRuby、会社でPHPを使い始める
  • 在籍しているのはコンサル会社で、サービスの運用・成長が会社の責務
  • グループのエンジニアは私を除いて2人。2人とも歴10年以上かつ超多忙で質問の機会が滅多にない
  • 社員研修は充実していない
    • 入社前にテックアカデミーのLaravel講座を受けさせてもらった
    • 開発するアプリや仕事の流れのドキュメントがほとんどない

キャッチアップに苦労した理由は主に2点

  • それまでRuby, Ruby on Railsを使っており、そもそもPHPに慣れるのが大変だった
  • 社内で質問できる機会が非常に少ない
  • CodeIgniter自体の情報が少ない

目次

  1. 言語に慣れる

    • 触って慣れる
  2. エラーログを読む

    • とにかくログを読む。エラー原因を根気強く追う
  3. 公式ドキュメントを読み込む

  4. 自分が開発するアプリの知識を深める

    • 知っている人に文脈を聞く
  5. 終わりに

    • 今のあなただからできること

言語に慣れる

Rubyistだった私がPHPを見た時、「めちゃくちゃ読みづらい…!」と思ってしまいました。
特に違和感が強かったのが以下3点。
・「"$"って何?」
・「"¥"(バックスラッシュ)って何?Rubyの"/"と何が違うの?」
・「"->"って何?アロー演算子?どうやらメソッドの呼び出しらしい」(Rubyの場合は fileName.functionNameのように"."で繋ぐ)

触って慣れる

これに関しては「習うより慣れろ」でした。
・AtCoderのA,B問題をPHPで書きまくり、変数定義や配列操作を練習
・ソースコードやエラーログを読んで何が起きているか理解する(次項でも説明します)
・$this->load->hogehoge()を見るたび、「これはself.load.hogehogeなんだ」と刷り込む

元も子もないですが、「触って慣れる」 が大事です。

ちなみに、PHPの専門書(独習PHP 第4版)もざっとさらいました。
https://www.shoeisha.co.jp/book/detail/9784798168494
たとえばファイルシステム関数やリクエストについては仕事でよく出てきます。
Rubyでもあるはずですが、そういった関数を使っていなかったので私はよく理解していませんでした。
この本で自分の知らない情報をチェックしておいて、いざ仕事で出てきたら「あの本に書いてあったな」と見直しています。
今でもこの使い方も良かったと思います。

(SQLも実際書いてみるのが身になります。私がやったのはスッキリわかるSQL入門(Amazonリンク))

エラーログを読む

転職前のメンター曰く、「エラーログはプログラムからのお手紙」。
そして転職後、上司には「とにかくログを見ろ」「ログに全部書いてる」と口酸っぱく言われました。

エンジニアとして半年やってみて、ログ読みがコーディング・デバッグのために最も重要なことだと感じています。

最初は一行一行追うことは時間がかかって大変です。
しかし、そのうち「ああ、またこのエラーファイルね、ここは読み飛ばせる」「このファイルは〇〇の機能だ。あのリリースの影響かも」「requestがこれだからこのエラーが出たんだな」など見当が付くようになります。
また、エディターの扱いにも慣れれば数秒で該当箇所にジャンプできるようになります。

とにかくエラーログを読む。エラー原因を根気強く追う

エラーが起きたらエラーログを読む。
当たり前なことですが、恥ずかしながら個人開発の時はできていませんでした。
エラーログを「見た」としても理解しようとせず、すぐにググってテキトーにコマンドを打つなど、根本的な対応ができていませんでした。
しかしこのような作業は製品として使われているものに安易にしてはいけません。

とにかくログを読む習慣をつける。
できれば、なぜそのエラーが出たか究明し、対応する。

これを実践し続ければ、間違いなく力が付きます。

公式ドキュメントを読み込む

ログを読むに当たって、ファイルの読み込みによって様々なファイルを移動することになります。
そのときに「コードには何も指定がないのに、なぜかこのファイルが呼び出されている」なんてことがあります。

これは少しMVCのFWをかじったことがある人なら当たり前の話ですが、FW側で"決まり事"としてルールに従ってファイルを読み込むようなっているからです。
公式サイトやドキュメントにそういった内容も書かれています。
たとえばCodeIgniterでは(https://codeigniter.jp/user_guide/3/overview/appflow.html
リクエストを受けた後、ルーター、コントローラー、モデル(ライブラリ等)、…とお約束ごととして処理が流れて行きます。
このイメージ図が頭の中あると、処理の流れの理解が早まるはずです。

遠回りに感じるかもしれませんが、いつか点と点がつながります。
公式ドキュメントを繰り返し読み込みましょう。
(調べ物の際は言語(PHPなど)の公式ドキュメントもぜひ参照しましょう)

自分が開発するアプリの知識を深める

知っている人に文脈を聞く

「DBテーブルによく出てくるこのEducation(仮)って単語、一般的な意味とは違いそう。何を指してるんだろう?」と思うことがよくありました。
1on1で質問したところ、「EducationがついてるのはサービスBに関するデータってことだよ」と教わりました。
(弊社ではサービスA、サービスB、サービスCの開発をしており、サービス同士で通信して連携を取っています。3サービスそれぞれ別のDBを持っていますが、一部自身以外のサービスのデータを保持しています)

これを知って以降、DB周りの調査やコードの読解速度が格段に上がりました。

もうひとつ例を上げると「ディレクトリ構造を理解する」ことも大きく役に立ちました。
どのようなディレクトリ構造なのか。
そのディレクトリはどのような意味のまとまりなのか。
ファイル・ディレクトリ名にどういった意味があるのか。

公式ドキュメントの構造との差異は何か・どういった思想でその構造や名前を採用したのかなども上司に教わりました。
このあたりを知ると、ログ読みやコーディングの速度が上がりました。

終わりに

今のあなただからできること

エンジニアの仕事の第一はコーディングやエンジニアリングだと思いますが、仕事はそれだけではないと思います。
社会人の常識かもしれないですが、あなたがチームメンバーであるなら、他の人がスムーズに気持ちよく働ける環境を作ることも大切な仕事だと思います。
そしてそのひとつがドキュメント作成だと考えています。

今のあなたが詰まったことは、将来別の人が詰まる可能性があります。
その解決の過程をドキュメントに残しましょう。
将来の新人が詰まったときに「ここに書いてるよ」と伝えてあげられれば、新人のキャッチアップはより早くなります。
(私の入社後に入ってきたエンジニアがいますが、ドキュメントが実際に役立ちました)

弊社の場合、私以外のエンジニアは超ベテランです。
しかし、その人たちは初心者が詰まる部分が分かりません。
プロになると、初心者が詰まりそうな部分は分かりづらいものです。

きっと1ヶ月後のあなたも、「初心者が詰まりそうな部分」がおそらく分からなくなります。
分からなかった部分は業務の中で"当前わかる"部分になってしまい、そのときにはもう「何が分からなかったか」も分からなくなります。そもそも詰まった事実さえも忘れるかもしれません。

なので、そのドキュメントを作れるのは今のあなただけなのです。
内容は、将来、よりしっかり理解できるようになったときに編集すればいいです。
内容の正しさは第2目標。「どこで詰まったかを残す」ことが最優先課題だと思ってドキュメントを残しましょう。

Discussion