【PHP日記】

自分の知識不足を悟った末、なるべく1日一回、Webに関する知識を書いていくだけのブログ。

バックエンドに必要なスキル 【3日目】

バックエンドエンジニアとして必要なスキルのまとめです。 独学で学ぶにしろスクールで学ぶにしろ、勉強すべき優先順位を自分の中できちんと決めておいた方がいいので、まとめてみました。

とりあえず雑に集めているので、追記・更新する予定です。



プログラマー共通で必要なスキル

テキストエディタ

Javaの場合はEclipse

PHPの場合はVisualStudioCode。


Linux

OSの一種。サーバーが動いてるOSが大半はLinux。ターミナルのコマンドもLinuxのコマンドになる。 Linuxの仕組みまで理解する必要はないが、必ずオペレーションシステムという概念で、OSが提供する機能をきちんと学んでおくべき。

ここで大事なのは、

  • OSが提供するシステムコール(ファイル作成など)

  • リソース管理(CPU、メモリ、I/Oも含まれる)

  • 並列処理をきちんと理解する(ミューテックスロックなどを勉強する)

例えば、フレームワークを使用するときに多くのシステムコールを使うため、特にバックエンドの場合はこれらを学ぶのは必須。 ITエンジニアの向上を目的としたNPO団体である「LPI-Japan」は、【Linux標準教科書】を無料で公開している。


Git/Github

Gitはソースコードのバージョン管理をするツール。 Githubは、Gitで管理するソースコードをオンライン上で共有するためのサービス。 ポートフォリオを共有するときは、Githubを使って共有するのが一般的なので必須。


Webの仕組み

これを知っておくと、Webサイトを作るのが非常にスムーズになる。 また、HTTP(プロトコル・約束事)の知識がないとトラブルが起きた時に対応できない。


Linter

ソースコードが規約に従って書かれているか自動でチェックしてくれるツール。 ソースコードを綺麗の書くのがめちゃくちゃ重要なので、Web系企業でもよく使われている。 ポートフォリオでもLinter必須。


テスト

プログラムにバグがないか自動でチェックしてくれる手法。 毎回、手動でチェックするのは大変なので、テスト用のコードを書いて自動でチェックする。 Web系企業では基本的に導入されている。 ポートフォリオでもやっておいた方が良い。


CI/CD

Linterやテストを手動で毎回実行するのは面倒なので、ソースコードに変更があるたびにそれらを自動で走らせてくれる仕組み。 また、LinterやテストがOKだったら自動でデプロイ(本番環境にリリース)してくれる。 品質の高いソースコードをスピーディに作るための仕組み。Web系企業ではよく使われる。 ポートフォリオでは必須ではないが、間違いなく加点要素になる。


セキュリティ

個人情報が流出すると莫大な損害を生むので、セキュリティの知識はめちゃくちゃ大事。 HTTP、CORS、コンテンツセキュリティポリシーなど、Webセキュリティの基本を理解する。



バックエンドで必要なスキル

RubyPHPJava

Rubyはスタートアップ界隈で使われていて、PHPはより幅広い層に使われている。 Javaの主に大規模な業務用アプリケーション開発などに利用される。

とりあえず学ぶ言語を一つ決めて、簡単なミニゲームなどを作成してみる。 インプットした知識をアウトプットすることで自分の血肉になるようにする。


HTML/CSS

サイトを1つ模写できるレベルは持っておいた方がいい。

また、フロントエンドとの連携がスムーズに行え、見当違いな機能の開発や非効率な処理の実装を避けるためにも、フロントエンドの動作原理を理解することは必須。


フレームワーク

基本的にはフレームワークで開発を進めていく場合が多い。 RubyではRailsPHPではLaravelがよく使われている。

基本的にポートフォリはフレームワークで作っていくため、フレームワークを用いてアプリケーションを作れる必要がある。 Laravelの場合は公式ドキュメントが存在するため、Webの教材で学んでいくといい。


データベース

集めたデータを整理したり管理できるようにしたもの。ログイン情報の管理など。 具体的にはデータを管理するツールがMySQL、そしてその上で使われる言語がSQLである。必須。


サーバー

バックエンドエンジニアはサーバーの設計と構築も行う(専門の職種に分かれることもある)ため、これらの分野の知識を把握しておくことも重要。

サーバー周りで知っておくべき知識としては、Linuxクラウドコンピュータの経験。 サーバのリソース管理方法、環境設定、そして依存関係と呼ばれるサーバー内で動作するプログラムを管理する知識が必要となる。

またサーバー構築にはハードウェアの選定から含まれることもあり、ハードウェアに関する知識も習得しておくべき。


REST API

APIというのはアプリケーションを繋ぐ仕組みのことで、RESTというのは設計の原則のこと。 要は、RESTという原則に則って作られたAPIREST APIになる。 画面側の方で、裏側に対してデータの指令を出すことで裏側での処理が行われるが、その処理をするのがREST APIになる。 SPAであったりスマホアプリを作るときはこの知識が必要になる。


AWS

ポートフォリオをインターネット上に公開する際に利用する。 その他簡単なサービスも存在するが、AWSを使った方が技術的なアピールになるため、使用を推奨。

AWSを使用して、基本的なアプリケーションを作成してデプロイする、という流れやそこで必要となるネットワークの知識を一緒にセットで学んでいく。


OOP

オブジェクト指向プログラミングの略。コンピュータプログラムの構成法の一つ。関連するデータの集合体と、それを操作する手続きを「オブジェクト」と呼ばれるひとまとまりの単位とし、その組み合わせでプログラムを記述する手法。

OOP言語では、色んなデザイン(設計)パターンが使われている。 様々なアーキテクチャデザインパターンを自分のポートフォリオに採用することが、自分の実力をみせる機会にもなる。


アーキテクチャ

コンピュータシステムの論理的構造。 また、Webサイトの設計に関する幅広い範囲をバックエンドアーキテクチャと呼ぶ。 例えば、ユーザーが入力したデータを処理し適切なデータを出力する為に、サーバー、データベース、フレームワークAPI、各種コードをどのように組むのか決めること。設計、仕組み。

最近だと色んな種類があって、たくさん知らないといけない。 クラウドコンピューティング、マイクロサービス、N層アーキテクチャ、それらを勉強してどんな風に工夫するかが大事。 面接でも聞かれるかも。



ポートフォリオ

コードを綺麗に書く

めちゃくちゃ大事。リーダブルコードなどの参考にしながら、ポートフォリオサイトのコードを読みやすい物へと修正していく。


Docker

開発環境が人によって違うとエラーが出たりするので、そういった環境を整えるためのコンテナ型仮想環境のこと。 コンテナ型とは、アプリケーション環境をコンテナという独立空間で構築するタイプのこと。自社開発企業ではよく使われている。 未経験でこれを取り入れている人は少ないため、技術的差別化を図ることができる。 入れるのであれば、ポートフォリオを作る前にDockerで開発環境を作るのが効率いい。


CI/CD

Linterを入れて、テストを入れて、それをCI/CDで自動に回るようにしていく。 Web系開発企業では実際に使われている技術だが、ここまでやっている人は少ないためおすすめ。 運用のことを意識していることをアピールできる。

使うツールとしては「CircleCI」がある。 こちらとAWSGithubを使うことで仕組みを構築できる。 公式ドキュメントを見ていくのがいい。


セキュリティ

ここまでやらなくても大丈夫だが、加点要素になる。


転職活動

他人に見せれる程度のポートフォリオが完成したら、なるべく早めに就職活動をした方がいい。 就職活動をして初めて、会社が未経験に対して求めているスキルがわかるため、早めにスタートする。

また、目指している会社が使っている技術を使って、チーム開発をすることも大事。 開発したものをユーザーに使ってもらえれば尚良し。 ハッカソンに参加するであったり、オープンソースに自分のコードをリリースするなど。 今の自分のレベルに合わせて、とりあえず経験してみるのが大切。



役に立つ知識

データ、関数、制御フロー

この3つがあればなんでも開発できる。 これらプログラミングの基礎知識があれば、新しい技術に挑戦するときの役に立つ。


ソフトスキル

チーム開発において、いかに自分が考えていることを伝えるのか、現在の条件を集めてチームに共有するのかが大事。


以上です。






あとがき

スクールに通うことの最大のメリットは、勉強する目的や道順を立ててくれることだと思います。

技術自体の習得は独学でも十分可能ですが、何を勉強するのか、もしくは「目標」を明確化して何が必要かを自分だけで判断するのはなかなか難しいです。

経験豊富な人達からのアドバイスがどうしても必要だったり、業界に詳しくないと解らなかったりするので、自分はこれに躓いてスクールなどの支援を受けることにしました。

企業が求めるものは「業務で必要な知識」だと思うので、志望する会社が求めているスキルやポートフォリオ、また自分が目指しているキャリアに近づくための選択自体を、誰かにアドバイスで聞く、もしくはそのためにスクールに通うというのは割と有りなのかなと思います。

それこそ、スクールという形ではなくエンジニア就職のサポートに特化しているサービスがあれば、ぜひ利用してみたいです。


以上です。