イノたまごラボ・あのぶる の「こんなの作ったよ!」

ひとりプロジェクト・イノたまごラボの中の人「あのぶる」がどうでもいいことやよくないことをぶつぶつとつぶやきます。

【2018新春版】Web系のバックエンドエンジニアをやってて必要になった技能まとめ

不勉強で自分の職種を端的にどう説明すればいいのかよく悩むのですが、この記事では「WebアプリやスマートフォンアプリのWebAPI開発を担当するにあたり必要になった/なるであろう技能」をまとめているとご理解いただければ幸いです。

一応実装技術に関するものをメインに据えているので、設計に関する技術とかはあんまりというかほとんど言及ないです。

この記事を書いた人のスペック

  • 10年目のソフトウェアエンジニア
  • 国内の四大卒(CS学士)
  • 2012年(5年目)あたりで本格的にJavaからPHPに転向、地道にLaravelとお友達関係を築こうとしているお年頃
    • 余談ですがこの件のおかげでPythonが一気に気になる存在に……
  • 現在のメインフィールドはスマホゲームのWebAPI開発と運用

レベル1・エンジニアとして業務をするならおそらく必須になるもの

  • 案件で使っているプログラミング言語フレームワークの基礎技能
  • RDBの使い方(というかつまるところSQLの書き方)、プログラム(フレームワーク経由含む)からのCRUD操作方法
  • 案件によっては上記と同じようなノリでNoSQLのCRUD操作方法
    • 個人的経験ではRedisを使うことが多い。SortedSet無しではもう生きていけません。
  • WebそのものとWebAPIというものに関する基礎知識、JSONもしくはXMLの基本仕様に対する理解
  • ssh接続の方法とLinuxコマンドとシェルに関する基礎知識
  • ごく基礎レベルのフロントエンド技能(HTML+CSS+JS)
  • ある程度環境が整備された状態からユニットテストを書いて実行できるレベルの理解
  • バージョン管理システムの基本的な操作方法
    • 2018年1月現在ではgitが主流

レベル1.5・あると何かと役に立つもの

  • 正規表現の知識と技術
    • やたらと使いたがる人って「ものすごく使いこなせる人」と「てんでダメな人」の両極端な気がする(偏見)
    • とはいえ、腕で勝負する系のエンジニアなら一度は拗らせる時期がある気がする(超偏見)
  • スプレッドシート(もしくはExcel)に関する簡単な技術
    • 四則演算とvlookupが使いこなせれば十分だと思う(独自研究)
    • Excel方眼紙は丸めてポイだっ

レベル2・実装に対して裁量を持つなら必要になるもの

  • プログラミングのパラダイムに関する知識
  • プログラミング言語フレームワークのコアに関する知識、ライブラリに関する知識
    • ソースコード全部読めとは言わないが(私も全部は読んだことないし)、必要になったらコア挙動を読んで理解できる能力は必要
    • どうしても必要とあらば自分でライブラリ書いたるわ、という気概があるとなお良し
  • セキュアプログラミングの知識
    • Webアプリでのセキュアプログラミングならまずは徳丸本いきましょう
  • 自案件環境にユニットテストを導入するための知識とやり方
    • ライブラリはともかく、サービスのコードに、となると意外と一筋縄でいかない(私の技術力が足りないだけかもしれませんが…)
  • (1/17追記)CIツールの運用に関する知識
  • デプロイのやり方
  • 負荷試験のやり方
  • SQLチューニングを含めたパフォーマンスチューニングの知識とやり方
  • なんとなくレベルのミドルウェアの知識
    • 主にWebサーバとかRDBMSの設定まわり
    • AWSやAzureなどのクラウドサービスの知識も含むことがある
      • どんなサービスがあってどんな風に使えそうか、というレベルでまずはいいと思う
  • CSSフレームワークの存在と使い方
    • バックエンドの人ならbootstrap知ってて簡単にでも使えれば十分じゃないかなぁ(懇願モード)
  • 外部サービスと通信するときの基礎知識
    • 使っている環境でのWebAPIのたたき方とか、認証方法とか
  • その他Webの通信仕様に関する知識
    • ステータスコードの厳密な意味合いとかそういう類
    • (余談)メールアドレスの仕様については「厳密に運用するとすごく面倒」ってことだけ把握していればOKかと思う
  • バージョン管理システムを使ったリポジトリの運用、付随してレビューツールと運用方法の知識
  • OS等のプラットフォームへアプリを出す場合、プラットフォームの仕様や規約
    • スマホアプリの場合、課金まわりやプッシュ通知に関するあたりはポイントかと思う
  • 新しく技能が必要になった際、正しく情報収集する力とそれを自分の状況に合わせて取捨選択できる判断力(大体これに集約される気がする)

レベル3・何故か要求されることがあるもの

追記:「何故か」と言ってはみたものの、ここで言及しているものに関しては特に理不尽なものではないです

  • 「表示汚い」「どこに何があるか分からない」と言われない程度のデザイン知識というか、画面上の情報を整理する技術
    • 以前の記事でもちらっと触れましたが、自社で運用するサービスを構築する案件の場合、社内用管理ツールのUI構築がデザイナーさんの工数として計上されることはまずないと思ったほうがいいです(私が居た案件がそうだったってだけかもしれませんが……)
    • そのため、特にスマホアプリ案件の場合、「管理ツールの構築」にUI構築も入っているものとしてバックエンド側のタスクとなることが多いです*1
    • それこそノンデザイナーズ・デザインブックの内容を頭に入れておくとデザイナーさんの意図が少しは汲めるエンジニアになれるんじゃないかと
  • 担当サービスに関係する法律知識
    • ある意味業務知識の範囲っちゃ範囲
    • 最終的にサービス提供側のしかるべき人が正しく判断を下す(だろう)とは言え、たとえばスマホゲームの案件やるなら景表法や特商法あたりはなんとなくレベルでも知っておくと役に立つのは間違いない
    • (追記)あ、あとスマホゲームとかアプリ内通貨を持つ案件だと資金決済法もですね、指摘入れてくれたダオカ君ありがとー

*1:というか、そもそも管理ツールのUI構築工数とか(下手すると管理ツールの実装工数自体を)誰も意識していないので、管理ツールを作るチームが意識して計算しないと大変なことになります