アラフィフのサーバ屋がフルスタックエンジニアを目指す話
私は社会人になってから20年以上、インフラエンジニア、とりわけサーバエンジニアとしてキャリアを重ねてきました。で、現在もフリーのサーバ屋として糊口を拭っているわけですが、最近になって思うのは、サーバ屋の身の置き所の少なさです。PaaS、コンテナ、サーバレスアーキテクチャ等々の進化によって、サーバ屋が最も得意とするサーバ構築・管理・運用といった技術に対する要望がどんどん少なくなってきているのが現状です。これではいけません。私のようにサーバの知識一本で世を渡ってきた者としては、このままではおまんまの食い上げです。
というわけで、もうちょっと選択の幅を拡げるために一念発起、開発もできるサーバ屋、ゆくゆくはフルスタックエンジニアになれるようにいろいろお勉強を始めようではないか、という次第なのです。
しかし、調べていくと、自分に欠けている能力があまりにも多過ぎる(苦笑)。あまりに多過ぎてどこからどういう順番で手をつけていいのかわからなくなってきたので、ここで記事を書きながらそれをまとめていくことにしました。以下、そういうお話です。
バックエンド
まず、サーバエンジニアから比較的距離の近いバックエンドについて考えてみます。
これまでのキャリアでも、いわゆるバックエンドの開発を行なったことは何度かありました。ただ、いかんせんやってきたことが古すぎるので、現在のニーズに対応できるものではありません。
言語
これまでのキャリアで最も多用してきたのは、Perlです。うん、今やレガシーと言って差し支えない、Perlなんです。これは、さすがに今のニーズには合わなさすぎるので、伸ばしていく意味はほとんどありません。その他バックエンドの開発で使ったことがあるのはPHPですが、これもバージョン5の前半くらいの知識しかないので、現在においてそのまま武器になるかというと頼りないところです。
だったら、PHPを勉強し直して伸ばしていけばいいやん、という話にもなるのですが、Perl使いだった身としては、似たような香りがするRubyにむしろ心惹かれているのです。入門書を読んでいると個人的にはかなりとっつきやすく、「こんなことも出来るんだあ」という驚きもあり、勉強していて面白いというところが魅力です。
PHPとRuby、たぶんバックエンドの開発で食っていくためにはこれが2大巨頭かと思われますので、どっちを選ぶが悩ましいところです。その他、JavaやPythonという選択肢もありますが、Javaは何だか今さら感があり、PythonはどちらかというとAIや機械学習、データ処理といった辺りが専門なんではないかという印象&あまり案件が多くなさそう(失礼)なので、ちょっとお見送りな感じです。フリーの立場としては、食べていけることは大事なのです。
フレームワーク
過去に扱ったことがあるフレームワークはCakePHPの1.x辺りだったので、まあ正直これもそのまま武器にはならないでしょう。今どきPHPのフレームワークといったらLaravelなのかなあ、と。ただ、CakePHPの時にさんざん苦労させられた経験があるので、(残念ながら)PHPのフレームワークにはあまりいい印象を持っていない、というのが現状です。
一方、Rubyであればそれはもう、Ruby on Railsでしょう。情報も豊富ですし、案件も豊富。盤石です。敷かれたレールから外れると途端に難易度が跳ね上がるという怖い噂も聞きますが、レールに乗った状態での開発速度の速さには定評がある模様。Rubyへの興味も合わせて、かなり気になる存在です。
というわけで、PHPかRubyかどちらかとなったら、フレームワークは自ずと決まってくるのかと思います。
データベース
データベースについては、MySQL、PostgreSQLともひととおり構築から管理までできるので、まあ問題はないかと思っています。データベースエンジニアを名乗るほどではありませんが、SQLも書けますしテーブル設計もできるので、開発においてはほぼ心配はないのではないかと。ただ、NoSQLデータベースを扱ったことがないので、そこが弱点といえば弱点です。
フロントエンド
フロントエンドは、ほぼ知識無しと言っても過言ではないでしょう。Webの黎明期からいろんなことに手をつけてきましたが、今となってはどれもこれも中途半端、というか時代遅れ。勉強不足もいいところです。
HTML & CSS
HTMLもCSSも、何となく書けるかなあ、というレベル。全く知識がないわけではありませんが、どちらもかなり適当です。まあ、スタイルシートなるものが無かった頃からの知識なので、CSSはいまだに専門書片手でないと書けません。HTMLも5になってからの知識がありませんし、この辺りは徹底的にブラッシュアップしていかねばならないところです。
JavaScript
目下、一番の問題がこれです。何しろJavaScriptといったら、20年ほど前のWebページのアクセサリとしてのもの程度の知識で止まっていたのですから。昨今のモダンなJavaScriptについてはなんにも知らなかったので、現在ギャップを埋めるべく猛勉強中です。当然ながら、Node.js? npm? Babel? Webpack? 何それどうやって使うのー!? というレベルなので、いやもうどうしたらよいのか……。ほんと、手探りで進んでる感じです。
JavaScriptフレームワーク
JavaScriptさえおぼつかないのに、そのフレームワークなんてどうするんだ、という段階ではありますが、一応昨今における2大メジャーであるReactとVue.jsについては入門書を読んでみました。感想としては、Reactは最初からきっちり学んで書かなければならないけれど、Vue.jsの方は割ととっつきやすいかなあ、という印象です。Reactはどちらかというとアプリ指向である一方、Vue.jsは手っ取り早くWebページを作成するには良さそうな感じがしました。何となくの目標としてPWAを作ってみたいというものがあるので、ここはひとつ、まずはVue.jsを選ぼうかな、と思っております。
まとめ
うーん、ざっと見渡すと、こんなところですかねえ。あと足りないものは……自分の今の知識では、ないかな。
さて、問題はこれらの優先順位。どれから先に勉強していくか、というところです。本当はすべて同時並行に学んでいければいいのでしょうけど、とてもそんな時間も能力もありません。というわけで、ざっくりまとめます。
まず、HTML5 & CSS3をきっちり勉強します。Web開発を行なう上で、これらは言わば「設計図を引くための道具」。アプリであれページであれ、どんな形のものを作ろうとするかというイメージを固めるための道具として不可欠、と考えます。というわけで、Progateでお勉強中です。
次に、JavaScript関連を並列的に学びます。たとえばVue CLIを使って開発を進めようとするのであれば、Node.js環境の構築、npmとそれによって導入する各ツールについての知識が必要になります。もちろん開発を行なうためのJavaScript(ES6以降)の知識も必須です。これらはほぼ一体となっているものなので、個別にというより一緒くたに触っていって、同時に学んでいこうかな、と考えています。ちなみに、JavaScriptについてはProgateのコースをすべてクリアした状態です。
で、ここまで来たところで、ひとつの野望に手をつけたいと思っています。それは、JavaScriotによるサーバレスアーキテクチャでの習作の開発です。20年来のサーバ屋がサーバレスアーキテクチャに手を染めるという自己否定を行ないます(笑)。当てはひとつあって、Cloud Firestoreを使おうかと。これはNoSQLデータベースへの挑戦でもあり、なかなか面白いことになるのではないか、と考えています。どんなものを作るかは……ひみつです。
そして最後に、RubyとRuby on Railsに手をつけようかと思います。普通にWeb開発を行なうのであれば、フロントエンドを習得したらバックエンド、になるのでしょうけど、ここはあえてサーバレスアーキテクチャに挑んでみたいのです。もしダメだったら、あきらめてバックエンドを勉強します。というか……正直なところ、大規模なバックエンドの開発って、そろそろ廃れ始めていくんではないかなあ、という予感がしておりまして。うん、斜陽感漂うサーバ屋としての勘みたいなものです。
といったところで、自分の現在の能力の棚卸しをしつつ今後について考えてみました。まあ、こんなことを考えているサーバ屋もいるということで。