エンジニア必見! 今やネットワークはここまでプログラマブルに
アプリとネットワークが近づきつつある現況と、将来を生き抜くためのヒントを解説する。前半は企業および通信事業者担当SEを経験し、近年ではSDNにも携わる、シスコシステムズ テクニカルソリューションズアーキテクトの生田和正氏が最新動向を解説し、後半はアプリケーション開発とネットワークの両方を経験したプログデンスの円佛公太郎氏がネットワークスキルを得るためのコツを伝授する。
これまでアプリケーション開発の世界とネットワークの世界は隔絶された世界だった。アプリケーション開発者から見たら、ネットワークは「送れば運んでくれるもの」であり、もし反応が遅くても自分たちが関知することなく「早く直して」と一任してしまう。またVLANなど新環境がほしいとなると、ネットワーク担当部署に依頼して作業待ちとなる。
一方、ネットワークエンジニアは「ネットワークは問題なく動いて当然で、トラブルがあれば批判される。一度動くと確認したら、極力設定は変更したくない」という感覚だ。どちらも互いに相手を「別世界」と見ていて、間には大きな垣根があった。
長い目で見ると、昔は「フルスタックエンジニア」という言葉はなかったものの、企業規模が小さければエンジニアはネットワークの設定や運用からアプリケーション開発まで担当することも珍しくなかった。次第に分業化が進んだものの、近年では揺り戻しのような変化が起きている。ネットワークにソフトウェア要素が増えてきて、再び融合に向かっているからだ。
動きの根底にあるのがSDN(Software Defined Network)。SDNが登場してから、しばらく過ぎたこともあり、近年では標準技術が成熟してきている。もともとネットワークには何百台ものルーターやスイッチが配置され、ネットワークの「面」を構成している。そこにSDNコントローラーが登場し、ネットワークの情報を抽象化して制御し、GUIやAPIアクセスで上位に情報を提供できるようになった。抽象化された「面」は、ファブリックともよばれるようになった。
例えばかつてはアプリケーションから「このクライアントが使う無線LANの情報がほしい」とリクエストがあればいろんな機器からの情報を直接取得し集約していたが、今では例えばSDNコントローラーの抽象化されたAPI実装を活用することで、必要な情報がまとめられてJSONで返される。
重要な役割を果たしているのがAPIの標準化だ。かつては力技のように、膨大なコードを書く必要があったが、近年では「標準的なAPIがこなれてきた」とシスコの生田氏は話す。最先端設備があるようなデータセンターではない企業や店舗でも、モデルドリブンなAPIが普及しているという。
こうしたAPIやコードがあると、ネットワーク装置をプログラムからアクセスしやすくなる。こうしたブログラマビリティの効果はネットワーク装置の設定管理や更新など、運用面だけではない。スイッチやルーターでちょっとしたアプリケーションを稼働させることができる。サーバーでルーターやスイッチを稼働させるのと逆の発想だ。
例えばネットワーク機器を集中管理するシステムがあるとしよう。工場や店舗ではサーバーを設置するのが難しいので、そこのスイッチやルーターにアプリを簡単なエージェントとして稼働させることができる。
実際に生田氏はSIMが刺さるルーター(Cisco 1100 シリーズ LTEモデル)に小さなアプリケーションを搭載した。SMSからルーターにコマンドを送ることができる。生田氏は「ネットワーク業界では流行っています。自分で好きにロジックを書けるので、とても実用的かつ楽しいですよ」と笑う。なお構成管理ツールとして有名なAnsibleやTerraformにも対応している。
例を挙げるときりがないほど、IaCは着々と進んでいるのがネットワークの最近の実状だ。APIが共通言語となり互いを隔てる垣根はなくなりつつあり、距離は近づいてきている。
なおガートナーのAndrew Lernerが2017年にブログに投稿した記事によると「ネットワークエンジニアがAnsibleやPython、もしくはAPIによるSIの経験があればCLIベースの給与と比較して、30%以上の昇給が期待できる」とある。
給与と関連して技術者試験についても触れておこう。Ciscoの技術者認定といえばネットワークエンジニア向けのCCNA(Cisco Certified Network Associate)が有名だ。2020年に大きな改訂があり、試験範囲にプログラマビリティが1割ほど含まれるようになった。加えて新たにアプリケーション開発者向けにDevNetという新しい資格体系が加わった。こちらはCCNAと試験範囲がほぼ逆転しており、試験範囲にネットワークの基礎が15%ほど含まれる。
アプリ開発者とネットワークエンジニア、互いのスキルを活かし広げていこう
では、どうやって学んでいけばいいか。アプリケーション開発者がネットワークを学ぶには。逆にネットワークエンジニアがアプリケーション開発を学ぶには。生田氏の推しはDevNetだ。オンラインサイトやオフラインイベントを通じてアプリケーションからネットワークまで幅広く学ぶことができる(詳しくは後述)。今では社会人エンジニアだけではなく学生からの参加もある。
ここからはプログデンスでCTOを務める円佛公太郎氏がマイクを握る。円佛氏のキャリアのスタートはPCメーカーでのソフトウェア開発から。ここでソフトウェアとハードウェアを学んだ。最初の起業はホームページ制作会社で、アプリケーション開発の要素が多かったが、それ以降の起業ではネットワーク領域に進出していった。
技術的な構成要素でアプリケーションとネットワークを見ると、アプリケーションは最も上位層にあり、その下にOSやミドルウェアや(サーバーの)ハードウェアがあり、そしてネットワークがある。サッカーなら、アプリケーションがアタッカーでネットワークがディフェンダーのように対極的だ。それゆえに「離れた」イメージがあるものの、「今はアタッカーとディフェンダーが手を携えてシナジーを生んでいく時代であり、こんな時代が来るのは必然」と円佛氏は言う。
世界観の違いを見ていこう。アプリケーションは新しいツールを積極的に取り入れていく文化がある。コミュニケーションならSlackやWebex、そしてコードのバージョン管理や継続的インテグレーションもツールを用いて生産性を高めていく。
一方、ネットワークの世界は変化をあまり好まない。コミュニケーションはいまだにメールが多く、バージョン管理はファイルにサフィックスを使うか、Diffツールを使う程度。継続的インテグレーションに至っては「何それ?」というレベルだ。
実際、円佛氏がネットワークの世界に踏み入れた時、使うツールの違いに驚いたそうだ。ある日、作業を依頼されて現場に到着すると大変なものを目にした。現場で「ls」コマンドを入力すると反応が遅い。嫌な予感がした。そして画面いっぱいに似たファイルがずらりと並んだという。思わず円佛氏は「なんの罰ゲーム?もしくは視力検査?!」と困惑したという。ネットワーク業界ではアプリケーションの世界の常識や感覚が普及していないと痛感した。
しかし円佛氏は「これってチャンスでは?」と気持ちを切り替えた。ネットワークの世界にプログラマビリティ、自動化、バージョン管理、継続的インテグレーションなどアプリケーションの世界のスキルや文化を活用したらぐっと生産性が上がると考えたのだ。今やクラウド時代、ネットワーク設定作業は様変わりしている。従来通りコントローラーから集中管理することもあるが、GUI画面で操作できる場面も増えてきた。ネットワークエンジニアが身につけるべきスキルも徐々に変わりつつある。
これから必要となるスキルセットを考えてみよう。米グローバルナレッジが発表した「稼げるIT資格」によると、ネットワークに関する資格は14位のCCNPなど、そう高い位置にあるわけではないものの、ランキング内に食い込んでいる。かつては何か1つ極めたものがあれば「いっぱし」と言われたが、円佛氏は「今は3つくらいの軸があるといい」と言う。例えば「クラウド、セキュリティ、ネットワーク」、あるいは「プログラミング、プロジェクトマネジメント、セキュリティ」など。
どこから学べばいいか。円佛氏はおすすめをいくつか挙げた。Pythonなら「PyQ」、メニューが豊富なUdemyもおすすめ。「もちろん翔泳社のサイトや書籍も」と付け加える。
そして生田氏とともに円佛氏が薦めるのがCisco DevNetだ。ネットワークからアプリケーション開発まで、基礎から学べる教材が多数あり、多くが無料で提供されている。円佛氏は「Ansible、Git、PythonなどCiscoに特化しない教材も多数ある」と評価する。
オンライン学習サイトは多数あれど、一通り学ぶと「次はどうすればいいの?」と壁にぶつかる。これは実践への足がかりが見いだせないためだ。その点、DevNetは専門の学習サイトではなくベンダーが提供しているだけに、製品と連携するためのノウハウや教材が豊富に用意されている。Sandboxがあるのも心強い。スイッチやルーターはそうそう手軽に試せるものではないので、作ってみたコードが無事に動くかどうかを試すことができるのは貴重だ。
開発したものの例としては、Cisco ACIのアプリケーションやAnsibleのモジュール化などがある。前者はこれまで設定前後の比較を「show コマンド + diff」としていたところ、ACI ToolkitをPythonで書いたアプリをコンテナ化し、Cisco ACI状態を自動的に比較できるようにした。後者はなかったので作成し、後にオフィシャルにマージされた。
円佛氏は締めとしてこう述べる。「自分にとってラッキーだったのはアプリのスキルを持ち、ネットワークに来たこと。今では垣根はなくなりつつある。ネットワークエンジニアはアプリケーション開発スキルを身につけて生産性を高め、キャリアアップしていきましょう。アプリケーション開発者はネットワークにある宝の山を活用しましょう。APIで拾う仕組みがレディな状態になっています。スキルをいかしてアイデアを活性化させてください」