ポエム

インフラエンジニアはプログラミングできたほうがいいのか

インフラエンジニアがプログラミングできたら、何かいいことあるのか?

インフラエンジニアとしてキャリアを積んでいる過程でこういった質問、懸念をお持ちの方もいるかと思います。私もキャリアのスタートはネットワークエンジニアでしたので、最初は開発はまったくできませんでした。

今はフロントもバックエンドの開発もできるようになりました。しかし、インフラができて開発もできるといっても、恩恵はそんなにないかなと思っています。

なので、冒頭の回答は

「いいことは、それほどない。プログラミング、開発スキルは特に必要ない」

になります。

が、もちろんメリットもなくはありません。

前提

前提1: プログラミングのレベル

今回の記事で言っているプログラミングとは、いわゆる開発のスキルのことです。オブジェクト指向やプログラミングの基本原則がわかっていて、フレームワークを駆使してフロント作れます、バックエンド作れますというレベルのことです。

スクリプトやIaC(インフラのコード管理)レベルのプログラミングは、インフラエンジニアにも必須です。このレベルのプログラミングができないインフラエンジニアは、優先して身につけるべきスキルだと思います。

現場がオンプレでSREの概念を取り入れていないようなレガシーな環境の場合、この手のプログラミングも必要になることはないのですが、それも時間の問題です。いずれはクラウド移行して、その際にコード管理や各種自動化が発生します。それはスクリプトぐらいは書けるレベルのプログラミング能力はないと務まらない業務です。

前提2: インフラエンジニア目線の話

インフラと開発の両方のスキルを身につけるルートは、インフラエンジニアがプログラミングを勉強するというパターンと、ソフトウェアエンジニア、いわゆるアプリエンジニアがインフラの知識を勉強するというパターンがあります。

今回の話の観点は、前者になります。

脱線: 開発者はインフラを勉強するべき?

後者の話を少しすると、インフラエンジニアにスクリプトレベルのプログラミングは必須なのと同様、ソフトウェアエンジニアもインフラの知識は少しはあったほうがいいです。障害対応やインフラのデザインはできなくてもいいですが、ネットワークやサーバーの基本知識はあったほうがいいです。

インフラの知識がない開発者は意外と多いのですが、この辺はコンピューターの基礎教養レベルです。この辺の知識がない開発者と話していると、インフラエンジニアとしては無駄に疲れます。

それに、クラウドの普及もあって、開発者がインフラ周りの設定をいじったりすることが増えてきました。規模の小さい会社だとインフラエンジニアがいない場合もあります。

しかし、インフラの基礎知識がない開発者がこういった業務をやると、コストや効率が悪い設定のままアプリを動かして本番リリースしちゃうということがあります。設定が悪くて動かないとかならまだいいんですが、今はクラウドが良くできていて、コンソールをポチポチしていたら、何かよくわからないが動く環境ができたということになるんですよね。。。

インフラエンジニアに開発スキルが不要な理由

私がインフラエンジニアに開発スキルは特に必要ないと考える理由は以下になります。

  • 需要がない
  • 単価は変わらない、むしろ仕事が得られないもある
  • キャリア形成のプラスにはならない

需要がない

身も蓋もないことを言うと、需要がありません。

インフラも開発もわかるエンジニアはあまりいない、希少価値がある、といった類の話を聞くことがあるかもしれません。

しかし、実際の案件を見ると、インフラと開発スキル両方を求められる案件はほとんどありません。スタートアップでフルスタックを求めている案件も少しありますが、要は人がいないから何でも屋が欲しいということです。

単価が高めの大手企業ほど、専門特化した案件になっています。

なので「エンジニアとしてお金を稼ぐ・社会に役立つサービスを作る」ということに焦点を当てるなら、インフラエンジニアが開発できると言ったところで、だから何ということになってしまいます。

また海外でも、エンジニアは専門特化が当たり前です。海外のインフラ系の高単価のJD(Job Description)では、プログラミング必須と書かれていることもありますが、それはC系の低レベルの言語です。アプリ開発で使うような高級言語の経験は求められていません。

単価は変わらない、むしろ仕事が得られないもある

前述の需要がない話と少しかぶりますが、開発スキルがあったところでインフラエンジニアとしての価値は変わりません。

なのでインフラエンジニアとして仕事を受ける場合、開発ができると言っても単価は変わりません。場合によっては、専門に特化していないということで、不採用という決定をくだされることもあります。

キャリア形成のプラスにはならない

インフラエンジニアをベースとしてキャリア形成していく場合、開発スキルはキャリア形成のプラスには成りません。

インフラエンジニアのキャリアの先には、エンジニアとして専門特化していくのか、プロジェクトマネージャーやコンサルなどのおしゃべりをする系のどちらかになりますが、いずれにしても開発スキルは必要ありません。

プロジェクトマネージャーやコンサルなら、インフラも開発もある程度できたほうがいいと思うのですが、日本に限ってはそんなことないんですね。プロジェクトマネージャーやコンサルは、基本、インフラか開発かのどちらかあがりで、片方の知識しかない場合がほとんどです。

酷い場合は、インフラも開発の知識もないプロジェクトマネージャーもいます。工数管理や予算管理をするだけでも大変ですし、日本の多重請負文化が起因の問題なので、その方を責めるわけではありませんが。

インフラエンジニアが開発スキルあったときのメリット

では、いいことがまったく無いのかというと、そんなことはありません。インフラエンジニアが開発できた場合のメリットを考えてみました。

(少し無理がありますが・・・😅)メリットは以下の通りです。

  • 副業しやすい
  • 小さい会社だと重宝されることもある
  • 飽きっぽい性格のフリーランスには向いている

副業がしやすい

開発スキルがあった場合、開発の副業がしやすいです。最近はフルリモートで、週2、3日でOKの副業向きの案件が増えてきました。

しかしこの手の案件のほとんどは開発です。なので開発のスキルがあったら、本業のインフラエンジニアと並行して開発の副業ができます。

インフラ系の案件は、今もなお週5フルコミットがほとんどです。なので、インフラしかできないという場合、インフラの知識や経験を活かした副業というのはしづらいです。

まあ、副業なら経験のかけ算を目指すという意味で、エンジニア関連とは別のものをやりたいと思う方も多いでしょう。そういった意味では、これはたいしたメリットではないかと思います。

小さい会社だと重宝されることもある

スタートアップ系の小さい会社だと、一人のエンジニアがインフラも開発もやるということが結構あります。というのも、クラウドでサクッと環境が作れる昨今では、小規模のサービスだとインフラの仕事は開発に比べて少なくなる傾向があります。

もしインフラしかできない場合、企業からしたらインフラが整ったら「じゃあもういいや、あとは開発メンバーでなんとかします、ありがとうございました。」ということになります。

でも開発ができた場合は、そのまま継続して開発にシフトするといった働き方ができます。

まあ、だからといって単価が上がるわけではありませんし、切られたところで別の案件に移ればいいだけなので、たいしたメリットじゃないですね。今は売り手市場ですし。

飽きっぽい性格のフリーランスには向いている

私自身がそうなんですが、飽きっぽい性分のフリーランスには、開発スキルがあったほうがいいかもしれません。

ずっと同じことをやっていると飽きます。そうなったとき柔軟に案件を変えられるのはフリーランスのいいとこなんですが、インフラの経験だけだと、変えたところでまた同じようなことをやるということになります。

インフラ、開発、両方できた場合は、インフラ飽きたから次は開発やろうなどといったように、好きなことをやり続ける働き方ができて仕事へのモチベーションを維持しやすいです。

私は今は週5フルコミットのインフラ系の案件と、週2の開発案件を並行してやっています。なのでかなり忙しくはあるのですが、メリハリが効いてモチベーションは維持しやすいです。インフラばかりやっているからこそ開発を面白いと感じることができますし、開発やっているからこそ、インフラはインフラで面白いところあるよねと思えます。

でもこれはキャリア形成の観点からしたらマイナスです。

私はキャリア形成はあまり考えていなくて、やりたいこと重視で割と適当に生きています。なのであまり参考にならないかもしれません。

まとめ

以上まとめると、インフラエンジニアが開発スキルを身につけたところで恩恵はほとんどありません。

純粋にプログラミングに興味がある、余裕があるので勉強したいと思っているなどの理由がない限り、無理して勉強してできるようになる必要はないでしょう。いやいや勉強するぐらいなら、その分インフラの知識を深めるとかマネジメントや英語を勉強するとかした方が、キャリアにとってはプラスになります。