Webエンジニアに転職して半年、学んだ3つの大事なこと
はじめに
私は去年の秋に実務未経験からWebエンジニアとして転職しました。
まだ半年ほどですが自分の経験や先輩からのアドバイスで、個人開発では気づけなかった大事なことを色々と学びました。
全てが正しいかはわかりませんが、自分がエンジニアとして正しく成長していくためにこれからも心に留めておこうと思ったことを書き出してみます。
私と同じく未経験からWebエンジニアを目指す方の思考材料の一つになればと思います。
システム開発の本質
ユーザー視点で見て、作ったものが要望通りに毎日動いて価値のあるものであることだと思います。
上記は当たり前のことですが、どうしてもエンジニア視点になると
「どんな新しい技術を使っているか」
「きれいにコードをまとめているか」
「ファットコントローラーでないか」
「疎結合か」
・
・
といったことを主軸に置きがちです。楽しいので。
もちろん保守やスキルアップを考えると大事ですが、ユーザーにとっては関心のない部分です。
まずはバグがなく、毎日動いて、ユーザー視点で考えて価値を発揮できるサービスになっているのかが一番の優先事項だと思います。
私もそうでしたが、実務未経験でwebエンジニアからエンジニアになろうとする場合、
「RailsやLaravel、Next.jsなどの便利なフレームワークがあるんだ」
「コードはこうやって書くのが流行りなんだ」
といった情報がまず目に入ってくると思うので、エンジニア目線のことに注力しがちです。
ポートフォリオで作る個人開発ではバグが起きてもそこまで誰かに不利益は起きないと思います。
ただ実務では、バグが起きたり動作が重いとユーザーの業務や生活に不利益が生じてしまいます。
どんな技術が使われていても、あくまでユーザーがいて価値が成り立つのがWebサービスです。
半年間実務を経験してみて、その優先順位を忘れずに仕事をしていきたいと思いました。
基礎が大事
未経験からWebエンジニアを目指す際、主にフレームワークの学習から入ると思います。
RailsやLaravelなどのフレームワークは、チュートリアルに沿ってCRUD機能を作成していくだけで基礎的な部分を飛ばして簡単にある程度のアプリができてしまいます。
また、gemなどのライブラリを使うとユーザー認証機能なども簡単に作れてしまいます。
ただ仕事で商用リリースするためにパフォーマンス要件やセキュリティ要件などを満たそうとすると、場合に応じてカスタムしていく必要があります。
その際、基礎がないと応用ができません。
自分が見落としがちだった部分を例として挙げてみます。
ORMで発行されるSQLを意識する
フレームワークから入るとActiveRecordやEloquentなどのORMを使ってDBにSQLクエリを投げることが一般的になり、実際にどんなSQLが発行されてDBへアクセスしているのか?という視点が抜けがちです。
そういった場合、ログを見てみると無駄なSQLが発行されてしまっている場合もあります。
個人開発だと気づきにくいですが、商用のサービスでユーザー数やデータ量が増えると、少しの無駄なSQLが致命的なパフォーマンス低下の原因になることもあります。
APIレスポンスにモデルインスタンスごと返さない
私もそうでしたが、例えばRailsだけやっているとモデルをインスタンスごとJSONにしてAPIレスポンスを返すことに慣れていると思います。
例:Railsガイドでもレスポンスをモデルごと返している
モデルインスタンスをそのままJSONにしてレスポンスを返してしまうと全てのカラム情報をブラウザに送ることになり、開発者の意図しない情報がブラウザから見えてしまいます。
また、画面表示に使われてないカラム分だけ余分な通信量が増えるため、パフォーマンスに影響してしまいます。
セキュリティも踏まえると基本的には該当画面の表示に必要なパラメーターのみ返すことになると思いますが、ここについては扱うサービスや設計方針によって色々なケースがあります。
例えば以下の書籍では、APIの設計手法として、
レスポンスはある程度同じデータ構造にした方が、クライアント側では同じコードで処理をできるようになるため楽になる。
という指針もありました。
例:Web API: The Good Parts
フレームワークのやライブラリを使う時の心構え
フレームワークやライブラリはとても有用で欠かせないものですが、裏で色々と便利にやってくれるもの任せにしないことは日々意識すべきだと思います。
中身を知らずに使っていると予期せぬところでバグが起きたり、セキュリティの穴ができたりすることがあります。
一番大事なのは要望通りに毎日動くことで、フレームワークなどの技術はあくまで手段です。
そして最適にそれらを活用するために、基礎が大事なんだと思います。
型があるから「型破り」、型がなければ「形無し」
中村勘三郎(18代目)
セキュリティ意識
個人開発と実務のギャップとして、セキュリティも大きなポイントだと思います。
私もまだまだ至らない点が多いですが、経験上まず以下を知っておくことは大事だと思いました。
- ブラウザの開発者ツールでどんな情報まで見えるのか
例:各APIの通信内容(HTTPヘッダ、リクエスト、レスポンス)、Cookie、セッションID、、
- 本番環境のログには何が出力されているのか
例:ORMから発行されるSQLクエリ
セキュリティに強くなる方法として、開発者ツールを使って攻撃者の気持ちになって世の中のサービスを触ってみる(実際に攻撃はしない)のも良いと思います。
セキュリティに完璧はなく、
- 考えられる最大のことをやって事故が起きたのか
- それをおろそかにして事故が起きたのか
では対応の仕方も変わってきます。
プロとしてサービスを作る以上、最低限のセキュリティポイントは常に意識して設計と実装を行なっていけるようになっていかねばと思っています。
おわりに
自分が心に留めておきたいこと、基本だけど大事だと思うことをまとめてみました。
色んな情報があり、特に未経験だと何が正しいのかがわからなくなりがちだと思います。
もちろん新しい技術を取り入れていくことは大事ですが、日々移り変わる技術に対してシステム開発の基礎は変わらないものだと思うので、まずは今回挙げたようなことを前提に目の前のことに取り組んでいくのがエンジニアとして正しく成長していくための近道だと思っています。
Discussion