ネットワークエンジニアがpyATSを使えば実益につながり、プログラミングの世界の扉が開く
今回のセッションのテーマはハイブリッドエンジニア。ネットワークエンジニアからソフトウェアエンジニアへスキルやキャリアを広げた東村氏の経験も交えながら、ハイブリッドエンジニアに進むための方法を解説する。
しばらく前からネットワークの世界でプログラマビリティが急速に広がってきている。シスコであればCisco ACIやSD-WANがあり、近年ではNETCONF/RESTCONFをYANGモデルで制御するようになり、さらにpyATS(詳しくは後述)を使って自動化ができるようになっている。
かつてネットワークやインフラを専門とするエンジニアはコマンドでの作業が中心だったものの、今では自動化の必要性が高まり、プログラミングは不可欠なものとなってきている。例えばAPI、IaC(Infrastructure as Code)、コード管理のGitなど。
それでもネットワークエンジニアの中には「いやいや、プログラミングは経験したことがない」と敬遠する人もいる。しかしネットワークエンジニアでも、業務効率化のためにターミナルソフト(Tera Termなど)のマクロやExcel VBAを経験したことがあるのではないだろうか。東村氏は「これはもうプログラミングなのです」と言う。
プログラミング言語にはいろいろとある。どれを学ぶべきか。東村氏が「断然おすすめ」と推すのはPython。理由は情報量の多さと敷居の低さ。なかでもネットワークエンジニアにとって有用なツールとなるpyATSとの相性もいい。
pyATSはネットワークの自動化ツールだ。元々はシスコシステムズがシスコのネットワークOSをテストするためのツールとして開発したものだが、今ではOSSとして公開されておりマルチベンダー化も進んでいる。Linuxのようなコマンドからdiffのように差分を確認したり、自動化のためのコードを書いたりできる。また無料ツールでありながらログビューアーもついている。
ネットワークエンジニアがpyATSに出会うとどうなるか。東村氏は「ネットワークの自動化が実現できるようになるだけではなく、Pythonを駆使したプログラミングの世界へと踏み出せるようになります」と強調する。
とはいえネットワークエンジニアにとってプログラミングは敷居の高い世界だ。プログラミングスキルが必要だと言われても、ただ学ぶだけでは長続きしない。しかしpyATSを足がかりにすればExcel VBAで業務効率化するような感覚で、学習していくことができる。pyATSを足がかりにプログラミング(Python)のスキルを得ることができて、ソフトウェア開発の世界にも足を踏み入れることができるようになるというのだ。
もしpyATSを試すなら、シスコの開発者コミュニティ「DevNet」にあるSandboxを覚えておこう。シミュレーターで使えるオールインワンの環境が整えられており、無料で簡単に試すことができる。ネットワーク環境はそう簡単に準備できないので、シミュレーターとはいえ自由に使える練習の場があると頼もしい。
ここからはpyATSをより詳しく解説していこう。まずはpyATS CLI。その名の通りコマンドラインインターフェースなので、プログラミング知識なくても使うことができて、pyATSの大切なファーストステップとなる。例えば作業前と作業後で「learn」コマンドを実行して情報を取得しておき、「diff」コマンドで簡単に差分を確認することができる。コマンドのシンタックスさえ覚えておけば実行できる。
続いてYAMLベースで自動化ステップを記述するpyATS Blitz。こちらもコマンドさえ知っていれば使える。並列処理やループ処理を簡単に記述できる。
ここまでのところはプログラミング知識不要。「あれ? プログラミングはやらないの?」と思う方もいるかもしれない。東村氏は「重要なのはプロセス」と言う。自動化を目指すなら、まずはpyATS CLIを使ってみて、足りなければpyATS Blitzへとステップアップしよう。そして次のステップアップはいよいよpyATSにPythonを組み合わせる。Pythonでプログラミングできれば可能性は無限大に広がる。
プログラミングに挑戦するなら貢献しながらステップアップしてみよう
さて、お待ちかねのプログラミングへの世界へと入っていこう。しかしいきなりコードを書くのは敷居が高い。まずは簡単なところから入っていこう。まずは「習うより慣れろ」でサンプルを試してみる。あるいは「人のコードを見て学習する」のもいい。ここで頼りになるのが大量のサンプルがあるGitHub。大抵はREADMEを読めば、どのように使うか説明がある。ぜひ活用しよう。
プログラミングスキルを高めるならいろんな方法があるものの、東村氏の提案は「プログラミングするなら貢献しよう」。Gitとともに歩むということ。ここから簡単なところから徐々にステップアップしていくための道案内をしていこう。
最初は「Issueをあげる」。Issueとは主にバグや不具合のなど問題の報告で、これもコミュニティには立派な貢献となる。
次にコードのコントリビューションへと進んでみよう。コントリビューションで易しいのはサンプルの追加だ。既存のサンプルを試してみて、「こういうサンプルもあったら便利なのでは」と思うものを作ってみよう。なおシスコに関するコードであれば、DevNet Code Exchangeに投稿するのもいい。
マニュアルの修正に協力するのもいい。pyATSはじめ多くのOSSではマニュアルもオープンだ。誤字の修正、説明が分かりにくいところを指摘するのも貢献になる。こういう協力も多くの開発者は「うれしい」と歓迎する。プログラム本体だけではなくマニュアルも含めていいものになれば発展していくからだ。些細なことだが、コード内のコメントに誤字があれば指摘することもできる。コードのコメントなら動作には関係ないものの、たまに「Cisco」が「Cissco」になっていたなどタイポが潜んでいたりするのだ。可読性向上のためのコメントを追加する、表現を変更する、コードの整形崩れを修正するのもいい。
少しずつレベルアップしていこう。ちょっとした修正や改良に挑戦してみよう。例えば2行で書かれているものを(他に差し障りがないなら)1行に短縮してみる。あるいはより最適な表現にしてみる。こういう細かな改善を探してみる、考えてみるだけでも勉強になる。
output = device.parse('show ip interface brief') return output
↓
return device.parse('show ip interface brief')
if 'R1' in output or 'R2' in output or 'R3' in output or 'R4' in output:
↓
if any([i in output for i in ['R1', 'R2', 'R3', 'R4’]])
次はAPIだ。APIは基本的に小さい関数なので、数十行から数百行と短めで理解しやすい。APIも真似して作るのが簡単だ。シスコ関連なら、ネットワークデバイス接続の設定に関するものや、ネイバーアドレスを取得するものなどがある。
pyATS CLIで使うパーサーを開発することもできる。今ではパーサーは3000以上ある。東村氏によると「コード自体は正規表現とループがメインになるため、コードとしては比較的簡単」だそうだ。開発ガイドも充実している。パワーユーザーが書くブログやYouTubeに解説ビデオも参考になる。
そしていよいよメインのプログラムの新機能に関わってみよう。まずはIssueで案を出してみて、開発者と提案について実装方法などを議論する。進めても良さそうならコードを作成しプルリクエストをオープンにして、開発チームからレビューやフィードバックがあればそれを反映する。その後は承認やマージという流れで進む。こうなると一時的に開発チームに参加するようなイメージとなる。開発プロセスの流れを把握し、理解することができる。開発者たちと直接関わる経験はいろんな意味で勉強になるだろう。
いろいろと一気に紹介したが、東村氏は「焦らないで。ゆっくりでいい」と言う。東村氏自身もすぐにはコードを書けなかったという。ソフトウェアに関わるようになった2017年は年間で134件のコントリビューションだった。これまで紹介したようにサンプル追加やドキュメント修正などを徐々に経験してステップアップを重ね、2020年には1724件へと増えた。「今では毎日のようにコードを書いています」と東村氏は言う。
なおプログラミングは属人化に陥ることがある。属人化を防ぐポイントとして東村氏は、秘密裏にやらない、外部に公開せずとも社内には公開する、他メンバーが分かる言語(Python)を使う、チーム全体でメンテできるようにしておくことなどを挙げた。
今回はインフラエンジニアがプログラミングのスキルを持ち、ハイブリッドエンジニアになる道を紹介してきた。メリットを改めて整理してみよう。まずはインフラやネットワーク知識を継続的に活用できて、プログラミング知識を新たに活用することができる。両方分かれば、双方の視点から提案することができ、仕事の幅も広がる。さらに私生活でも、スマートホームや遊びにおいてメリットがあるかもしれない。とんとん拍子に進めば起業もありうるかもしれない。
逆にデメリットやリスクも考えられる。例えば、インフラもプログラミングも日進月歩の世界なのでキャッチアップするのが大変になる。どちらも中途半端になってしまう危険もある。逆に両方分かると問い合わせや依頼が舞い込み、忙しくなってしまうかもしれない(チャンスでもある)。また、どこかのタイミングでどちらかの選択を迫られる可能性もある。こうしたことを踏まえ東村氏は「どちらか強い方を明確にしておくこと。私ならネットワークが強みです」とアドバイスする。
最後に東村氏は「ハイブリッドエンジニアになるとチームにさらなる貢献をもたらすことができて、キャリアパスも広がります。プログラミングで広がる可能性を考えると、確実におすすめです」と話した。なおネットワークとプログラミングの両方の知識を持つエンジニア向けの技術者認定試験としてDevNet認定がある。これも目標の1つとしておこう。