技術ブログ株式会社エーピーコミュニケーションズの技術ブログです。エーピーコミュニケーションズの技術ブログです。>はじめに先進サービス開発事業部の高橋です。ブログ初投稿となります、よろしくお願いいたします。今回はNEEDLEWORK-ScenarioWriterについて書きます。NEEDLEWORK-ScenarioWriterとは私が所属する部署はNEEDLEWORKというプロダクトを提供しています。詳細はNEEDLEWORKの製品サイトよりご確認ください。NEEDLEWORKを使用するために所定のCSVが必要になります。CSVをネットワーク機器のコンフィグファイルから手動で作成するのは時間がかかります。そこで今回はコンフィグファイルから自動でCSVを生成するツールを作成しました。SSG5に対応しています。SSG5に接続しGUIを表示させます。fileを選択します。SSG_バックアップバックアップにてコンフィグファイルを取得後、ツールを使用します。ツールの使用方法はNEEDLEWORK-ScenarioWriterからご確認ください。開発で苦労したこと3つです。そもそもコーディング未経験であるということコンフィグファイルがテキスト形式であるということコードの可読性が著しく低いということ1つずつ掘り下げていきます。そもそもコーディング未経験であるということpythonの基礎どころかコーディング経験がなかったためこのツールがどうあるべきか、そしてある処理をするためにどういった実装をするべきかを考えることに少し苦労しました。コンフィグファイルがテキスト形式であるということ「JSONならばどれほどよかったでしょう」コンフィグファイルがテキスト形式(.txt)でした。コンフィグファイルの情報をもとにCSVを生成するため、定型でないデータを扱うために煩雑な処理を行うケースもありました。以下のコード(1部抜粋)です。append_noname_to_policy_dict(value)このコードは以下の処理を行っています。ツール使用時に指定したコンフィグファイルを読み取る特定の文字列が含まれた時に専用のリストに辞書型で追加するよりよい方法もあると思うので順次改修予定です。名前付きのポリシーやNATなどの設定によって「リストのn番目に必ずこの値が入る」と断定できなかったため複雑になってしまいました。コードの可読性が著しく低いということこれが1番苦労しました。自分で書いたコードが2,3時間後にわからなくなる、あるいは理解に時間かかるコードを書いていました。[absorb.IntZoneV[0][4]]このコードは「宛先ゾーンと一致するゾーンで使用されているVLANIDをリストに追加する」という処理ですが下記の情報が瞬時に読み取れるでしょうか。absorb.pyの変数IntZoneVにVLANの設定をしている、Interfaceのゾーン情報がリストにリストで格納されている(リスト内リストである)こと実装時は格納された値のうちから固定で[0]の値を取得していたこと[6]からInterfaceのゾーン名が取得できること[4]からInterfaceのVLANIDが取得できること上記のコードはまだ比較的理解しやすいですがこのようなコードやこのコード以上に複雑なコードが複数あったらどうでしょうか。コーディングどころではなくなってしまいます。そこで試しにradonで開発中のコードを計測してみました。(25.38)コードの可読性が著しく低いことがわかります。practice)やflake8をもとにリファクタリングしました。リファクタリング後の結果はこのようになりました。(17.58)まだ改善の余地はありそうなので時間を見つけてリファクタリング等したいと思います。以上、ご一読ありがとうございました。エーピーコミュニケーションズネットワーク、サーバ、ミドルウェア、仮想化、OpenFlow、DBなどなど、インフラ系メインで提案から構築、運用までをしています。自動化if-up2019に参加してきました。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。