どうも、こじです。
Web系のフリーランスエンジニアとして働きはじめて5ヶ月が経ちます。
そして、実際に働くことで、Webエンジニアとして必要な技術領域というのがわかってきました。
今回は僕の経験ベースから、Webエンジニアに必要だと思った10の技術について、簡単にお話したいと思います。
では、どうぞ。
はじめに
フリーランスエンジニアとして働き始めて4ヶ月目にこんなことを思いました。
https://twitter.com/koji_aibaka/status/987118810661576705
僕はWebエンジニアとして、Ruby と Ruby on Rails を扱っています。
経験の浅い僕はこれらの勉強はもちろん必要なのですが、それ以外にも勉強しなければと思うことが実務を通して感じることが増えてきました。
それを思わずつぶやいたのですが、思ったよりも反応をいただけて、これらはやっぱり必要な技術領域なんだなと思った次第です。
と、いうことで、これらのことを結構簡単にですが、お話したいと思います。
Webエンジニアに必要だと思った10の技術
下記の技術は、Webエンジニア(サーバーサイドエンジニア)についての技術要素となります。
順位付けは僕の独断と偏見になりますので、ご了承ください。
1.Linuxコマンド(UNIXコマンド)
これはWebエンジニアとしての取得必須のスキルですね。
映画とかでもよく見る黒い画面です。
Webエンジニアの場合はよく Linux (またはUNIX)で作業をするため、Linuxコマンドは必須となります
とりあえず、下記のコマンドが使いこなせれば問題ないでしょう。
pwd、cd、ls、cp、mv、rm、mkdir、touch、ln、cat、less、find、grep、ssh、exit
※他は必要になったら「Linux コマンド」とかで検索すれば色々出てきます。
ちなみに、僕が一番好きなコマンドは「ls」コマンドです。あ、「 find . | grep ○○」も捨てがたい・・・
欲を言えば、Linux や UNIX の OS についても勉強すると良いかもしれません。
※↑は僕の今後勉強したい内容です。カーネルとかね。
2.プログラミング言語
Web系のプログラミング言語でメジャーなものが「 Java > PHP > Perl = Ruby = Python」という感じですかね。
取得する言語は、まずは個人が達成したい目的に合わせて、勉強するプログラミング言語を選ぶことが最初になると思います。
僕は Ruby を選びましたけど、Java でも、PHPでも何でも良いと思います。目的がしっかりしていれば。
まずは、ひとつの言語を学習してしっかりと地に足をつけ、これならできるという状態にすることが大事だと思います。
原理原則がわかってしまえば、他の言語に移った際に習得が楽になりますから。
ちなみに僕は Java を勉強した後に、Ruby を学びましたが、習得はだいぶ楽でした。
僕が学習で購入した書籍はこちらです。(僕は下記のどちらも購入済です。)
他の言語から Ruby に入る方におススメします。
一から Ruby を学ぶ方はこちらをどうぞ。
参考として(外部サイト)
プログラマー年収ランキング2017!言語別、第1位はScalaの626万円
3.Webアプリケーションフレームワーク
Webアプリケーションフレームワーク(以下フレームワーク)とは、Webアプリケーションを効率よく作ることができる仕組みのことです。
Webアプリケーションの作成には、フレームワークの使用が欠かせないので、プログラミング言語の習得とは別にフレームワークの学習も必要になります。
フレームワークは言語ごとに様々なものがあり、Java では Spring 等 、PHP では CakePHP 等 、Ruby では Ruby on Rails 等 があります。
プログラミング言語とセットで学習することが効率的です。
僕としては Ruby を学んでいるので、Ruby on Rails をおススメします。
他の言語だと、案件ごとに使用するフレームワークが異なったりするので、その都度フレームワークを勉強しないといけません。
その点、Ruby と言えば、Ruby on Rails のように選択肢がほぼ一択なので、学習コストが低く効率良いと思いますね。
Ruby on Rails の本はこちらをおススメします。
4.データベース(DB)やSQLなどのデータ周り
Webアプリケーションでは「データを色々と扱い、その結果を表示する」ということを行っています。
そのため、データベース(DB)に関する知識も必須となります。
DBは、MySQL や PostgreSQL 、Oracle Database などがあります。
そして、DBのデータにアクセスする方法として、SQL というデータアクセス言語が存在します。
とりあえず、MySQL を抑えておけば問題ないですね。
ちなみに、Ruby と Ruby on Rails を学ばれている方なら、SQL は 必要になったら学べば良いと思います。
Ruby on Rails には Active Record という、SQL を意識せずにデータアクセスできる仕組みがありますので。
まあ、SQLは使えるに越したことはないと思います。
DB周りはそのうち勉強しようかな~と思ってはいます。。。
5.Git や SVN といったバージョン管理ツールについて
バージョン管理ツールとは、編集されるファイルの変更履歴を管理するためのシステムのことです。
まあ、要するにゲームのセーブみたいなもんですね。
バージョン管理ツールを用いると、プログラムのソースコードなどを「いつ・誰が・どこを・どのように」変更したかを、変更履歴として記録できます。
これは、エンジニアとしてチームで働く上で必要な知識となります。
Web系では主に Git と Git hub を使っていることが多いので、Git と Git hub を中心的に学習すれば良いと思います。
チーム開発では、ブランチ戦略の理解も必要になってくるので、ゆくゆくは「Git-flowのブランチ戦略」等も勉強すると良いかもしれません。
僕は Git 関連の本は、最初にこの本をポチりました。。。
6.デプロイとかの公開周り
上記で書いた技術を用いて、Webアプリを作ることができたら、次はWebアプリの公開をします。
今までローカル環境で作っていたWebアプリを、全世界に公開するには様々な方法がありますが、外部レンタルサーバーを借りてそのサーバー内にアプリ環境を作って公開するのが一般的です。
そして、この外部レンタルサーバーは、最近ではおなじみの「クラウド」系の技術を用いることが増えてきています。
この「クラウド」という分類の中に「クラウドコンピューティング」という分野があり、大きく分けて「Iaas」「PaaS」「SaaS」の3つに分類できます。
それぞれの違いについて、一言で簡単に説明すると
・土地を借りること = IaaS
・家を借りること = PaaS
・部屋を借りること = SaaS
となります。
いや~、この引用先はとてもわかりやすかったです。
上記引用の土地の例の通り、「Iaas」>「PaaS」>「SaaS」の順で、自由度と難易度が上がります。
土地を借りて自由に自分の公開したいものを置くのか、部屋を借りて制限の中でほそぼそと公開するのか、選ぶものによってとれる方法が変わってきます。
まあ、本格的にWebアプリを運用したいなら「IaaS」一択です。AWSとかね。
AWSについて、とてもいいサイトがあったので、参考までにどうぞ
※実体験から上記に補足すると、最近はサーバーレスアーキテクチャが流行っているので、Lambda や API Gateway とかも追加ですかね。
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
7.セキュリティ周り
さて、6番にて公開について書きましたが、Webアプリを全世界に公開する以上は、自分以外の様々なアクセスをされることになります。
純粋にアプリを触りにくるユーザー善良なユーザーもいれば、悪意を持って攻撃をしてくるユーザーも存在します。
そのため、攻撃でどんな被害があるか、どう対策すればいいかは知っておく必要があります。
セキュリティ周りのことは、Webアプリを運用する上で欠かせない知識になりますので、是非とも書籍等で体系的に学習することをおススメします。
体系的に学ぶ 安全なWebアプリケーションの作り方[固定版] 脆弱性が生まれる原理と対策の実践
8.書籍:Webを支える技術
これについては、 Web の世界でエンジニアとして生きていくうえでの基礎教養、といっても過言ではないくらいの内容かと思います。
Web サイトがどうやって動いているのか、その仕組みを書籍を通して体系的に学習しましょう。
基礎となる技術は変わらないので、学んでおいて損はしないと思いますよ。
9.書籍:リーダブルコード
プログラミングを始めた頃や、まだ実力が浅い時期は、ただコードを書くだけになってしまいがちだと思います。
とりあえず動くものを書いて、あとで直せばいいやと思っても、後で見返すとすぐにわからない・・・ということもあったりします。
ええ、僕なんて未だにそうなります笑
「良いコード」を書きたいとは思いますが、その「良いコード」の定義とはなんでしょう?
紹介する書籍「リーダブルコード」では、「良いコード」について下記のような解釈があります。
本書の目的は読みやすいコードを書くことである。
その中心となるのは、コードは理解しやすくなければいけないという考えだ。
具体的に言えば、誰かが君のコードを読んで理解する時間を最短にするということだ。
「リーダブルコード」はじめに、本書について、、、から抜粋
「良いコード」すなわち「読みやすいコード」ということですね。
本書を読んで、「読みやすいコード」が僕も書けるようになりたいと思います!
10.HTML、CSS、Java Script
HTML、CSS はWebページを作るうえでベースとなる技術ですね。
Webアプリは基本的に、Ruby や PHP といったプログラムが HTMLを動的に作るものですので、基本的なことは理解しておく必要があると思います。
あくまで、基本だけで十分かなと僕は思います。
HTML、CSS に Java Script を含めたフロントの世界は、ユーザーの目に触れる部分でもあり、デザインやユーザーインターフェース(UI)で綿密に計算された芸術の世界だと僕は思っています。
センスが必要な世界だと思いますし、そんな芸術的な世界は僕には作ることができません(褒め言葉)
僕はサーバーサイドの裏側の世界で、縁の下の力持ち的な役割を担いたいと思います。
まとめ
とりあえず、羅列してみましたが、多いですねえ。。。
ちなみに僕ですが、上に書いた技術を自身持って出来ます!って領域には全然達していません・・・
僕はエンジニア歴4年になりますが、知れば知るほど勉強しないとなと思うことがどんどん出てくるんですよ。
意味わからなくないですか?笑
どういうことかというと、出来ることが増えると、その先に広がる景色が見えるようになって、おいおいこんなにあるのか・・・ってなるんです。
そうですね、たとえると、よちよち歩きだった赤ちゃんが立つと、今までと見える景色が違うみたいなもんでしょうか?
違うか笑
とりあえずですね、自分があることができる様になると、それを前提とした次のステージがあったりするって言うことです。
更に!
IT技術は今も、そしてこれからも恐ろしい速度で進歩していくことでしょう。
今できないことが、これから生まれてくる新技術でできるようになるという便利さの反面、技術者側から見ると、勉強することに終わりが来ないということになります。
この変化を楽しめる人には向いている業界だと思います。
勉強しないとって思うことがたくさんあって大変かもしれませんが、少しずつできるようになっていきましょう!
僕も頑張ります!
まずは、積み本を消化しないとですね・・・(白目)
今回は、こんな感じで。