# 【実務で使える!】未経験からエンジニアになるために学ぶべきこと

最近、というか昔からよく聞く言葉で 「未経験からでもエンジニアになれますか?」 という質問があります。

エンジニアは全員未経験からエンジニアになっているので、その答えは当然 「なれます」 としか答えようがないんですが、 本当に未経験の人たちは現役のエンジニアに何を質問したらいいのかわからなくて、 でも何か聞きたいしどうやってエンジニアになったらいいのか雲をも掴むような気持ちで質問しているんだと思います。

特に最近は検索してもまともな答えが見つからず困ってる人も多いと思います。

そんなエンジニア未経験・駆け出しエンジニアのみなさんのために、現役のフリーランスWebエンジニアの立場から、 Webエンジニアになるために学ぶべきことをお伝えしていければと思います!

エンジニアとはWebエンジニアのことなのか?

SIer業界のSE/PGという呼称との差別化、といった歴史的経緯やYouTubeの影響もあり、 単にエンジニアと言うとWeb系のプログラマをイメージすることが多いかもしれませんが、 もちろんエンジニア=Web系のプログラマのことではありません。

ですが僕が現役のWebエンジニアとして活動しているので、このブログでは "エンジニア""Web系のプログラマ" と仮定して話を進めます。それ以外の業界のこと知らないし。

# 即金が欲しいなら勉強よりも先にやるべきことがある!

巷では 「最短3ヶ月でエンジニアになれる!」 とか、 「エンジニアで月収○○万円!」 とかって煽るようなプログラミングスクールの広告が目立つんですけど、 そんなものは情報系出身の人間や趣味でプログラミングしていたような 既に出来上がってる 人でないと無理です。

今ぜんぜん稼げてなくて生活が苦しいから一刻も早くお金が欲しい!って人はバイト掛け持ちでもしましょう。 目先の金にならないプログラミングの勉強をするよりも、バイトを掛け持ちでやった方が30〜40万くらいならパッと稼げますよ。

「フリーランスって稼げますか?」

「未経験ですがエンジニアになれますか?」と並んで多い質問がこれ。

"稼げる" がどの程度を指すのかは不明なんですけど、 単月なら100万以上の売上になることは普通にあるし、その気になれば年商1000万も全然不可能じゃないよって感じです。

僕からすると副業の単発案件で毎月10万を稼げるようになる!って目標の方がよっぽど難しいです。

もちろん、個人でこれだけ稼ぐためには高度な技術ときちんと仕事を納める信用が必須です。 大いなる力には大いなる責任が伴うことを肝に銘じておきましょう。

# 初心者はまずLAMP相当の技術を習得しよう

Webエンジニアを目指すのであれば、Webの世界で基本となる技術を知る・習得するところから始めましょう。 Webシステムで一昔前に流行った構成として、 LAMP と呼ばれるものがあります。

これは Linux, Apache, MySQL, PHP の頭文字をとったもので、現在でもこの構成は広く使われてます。

# ■ Linux

Linuxとは、WindowsやMacと同じく、OSと呼ばれるものです。 WebサーバやDBサーバを動かすための業務用で使われるコンピュータのため、 サーバマシン や単に サーバ とも呼ばれます。

単に サーバ と言った場合、後述する Webサーバ のことを指す場合もよくあるので文脈に気をつけてください。

「Linuxを学ぶ」とは、Linuxでよく使われる基本的なコマンドを覚える・使えるようにする ということです。

具体的には下記のようなコマンドとその使い方を習得しましょう。

  • ssh でサーバに接続・ログインする
  • cd, cp, mv, ls, find, grep 等の基本操作コマンドを使いこなす
  • sudo の危険性
  • yum(CentOS), apt(Ubuntu) コマンドを使用したアプリケーションのインストール
  • パーミッション(権限)の意味と設定方法
  • vim, git などソフトウェアの使い方

他にもコマンドは無限にあるので上げきれませんが、慣れてしまえば難しくないと思いますし、 コマンドを暗記する必要はなく、ググって出てきたコマンドをきちんと読みながら実行できれば最低限クリアなんじゃないでしょうか。

# ■ Apache

Apacheはサーバマシン上で動作する、Webサーバと呼ばれるミドルウェアです。 作成したプログラムや画像ファイルなどを、インターネット上に公開するためのアプリケーションになります。

WebサーバはApacheの他にNginxやNode.jsサーバなどがあり、特にNginxはApacheに替わる主流になりつつある? といったところです。

最近ではクラウドサービスの利用が増え、ApacheやNginxを直接いじる機会は減ってきていますが、 それでもWebサーバの役割と設定方法を知っているとめちゃくちゃ活きてきます。

Apache, Nginxどちらか一方で大丈夫なので、触っておくのをおすすめします。 特に新人の頃につまづいたのは Rewrite系 の設定です。

これは自分で作成したWebサイトを公開する時に、Linuxの勉強と併せて設定を自分でやってみるのが手っ取り早いです。

# ■ MySQL

SQLとはデータベースを操作するための言語で、MySQLはSQLの中の一つの方言だと思って下さい。 MySQLの他にはPostgreSQLやSQLite, Oracle Databaseなどがあります。

またデータベースという括りでは、NoSQLと呼ばれるものもあり、FirebaseやDynamoDBなどもSQLと選択的に使われています。

データベースとは、住所・氏名・年齢といった個人情報や、ツイートしたテキスト、 アップロードした画像の保管場所といった情報を保存するためのミドルウェアです。

この中で、Web系の現場で最も一般的なのはやはりMySQLだと思います。 データベースはWeb開発の基礎になる部分ですので、 しっかりと書き方を覚えるようにましょう。

MySQLはプログラミングを勉強する際に、セットで覚えるのが良いと思います。 プログラミングの教本なら、MySQLを使ったアプリを作る課題もあると思います。

# ■ PHP

言わずとしれたプログラミング言語です。 元々はテンプレートエンジンと呼ばれるプログラミング言語未満の存在だったんですが、今はWeb系では主力の言語とされてます。

個人的にはPHPがおすすめではありますが、サーバサイド言語ならなんでも良いです。 サーバサイドでよく使われる言語にはPHPの他に Java や Ruby などがあります。

Node.js や Python なんかもサーバサイド言語ですが、実務レベルになるにはなかなか難易度が高いので、、、

個人的にはPHPがおすすめです(2回目)

Web系の現場では、よく使われる機能をあらかじめ構築してある「フレームワーク」というのを使って開発をするのが一般的です。 PHPなら CakePHPLaravel が有名ですね。Rubyだと Ruby on Rails が使われます。

更にWebアプリの裏側である管理画面(業務システムでは表側だったりしますが)には、フレームワークを利用して更に "よくある画面" を構築済みの「ボイラープレート」というのが使われることも多いです。

例えば↓のような AdminLTE なんてのがあります。

admin-lte

こうした構築済みのキットを、目的に合わせて改造してシステムを作っていくんですね。

やりたいこと次第ではあるんですが、Laravelは初心者にとっては難しいフレームワークなので、 もしLaravelを勉強するなら、こうしたボイラープレートを使ってみても良いかもしれません。

# HTML/CSSは?

ここまで紹介した中に、Web系を目指してるみなさんが勉強しているであろうHTML/CSSが出てきてませんね。

HTML/CSSっていうのは、もちろん奥が深いと言えばその通りなんですが、普通に書くだけなら誰でも出来る、 いわば "立って歩く"/"服を着る" 程度に当たり前のことなんです。

100mを10秒台で走るアスリートやおしゃれに着こなすモデルでもなければ、100人やって99人以上ができることをわざわざアピールする人はいませんね。 margin と padding の使い分けができない人は多いですけど...

これらはマークアップ言語と呼ばれ、一般的にプログラミング言語とは見なされません。

HTML/CSSはWebエンジニアを目指す上でスタートラインに立つ前の基本教養だと思っておきましょう。

# 最初に目指すべきこと

まずはプログラミングの教本を買って、そこにあるサンプルのプログラムを写経して作りきりましょう。 そしてVPSを契約して作ったプログラムをインターネット上に公開するところまでをやってみると良いと思います。

意外とプログラミングって、0から作るとなると手が止まるもんです。 何を作ればいいのか、どう作ればいいのか、プログラミングの構文を覚えただけじゃ実は何も作れないんですよね。

ならばいっそ、サンプルで作ったプログラムを公開するところまでを先にやりきっちゃった方が学べることって多いと思います。

# まとめ

コロナ禍や昨今のエンジニアブームで大量の未経験エンジニアが業界に流れ込んできた影響もあり、 業界未経験からエンジニアへの転職するためのハードルは上がってきているようですが、 実務経験を積み、技術を磨いたエンジニアの需要もまた年々上がってきています。

僕自身、情報系の出身でありながらもプログラマーになるために何を学んだらいいか、 どこまでできたら実務で通用するのかがわからずくすぶっていた時期が10年もありましたが、 エンジニアになることができた今、あちこちからお仕事の相談をいただくようにもなり、 この仕事を心から楽しいって思えています。

今回紹介したLAMPの技術を習得したところでエンジニア職への就職が決まるわけではありませんが、 何から手を付けたらいいかわからないエンジニア志望者の助けになれば嬉しいです!