未経験エンジニア、調査ツールAppDynamicsの自動化に挑む

## はじめに
これは、部署配属されて2週間の未経験・文系・新卒エンジニアが、部署で使っているツールの自動化に取り組む物語（実話）である。。。

## 自動化に取り組むまでの経緯
#### 1.「新卒タスク」の始まり
2022年8月。開発の全体研修を終えた私は、SREというインフラ系の部署に配属になりました。
配属から1週間がたったころ、Dept長（他社でいうと部長）から、新卒に共有があるとミーティングが組まれました。そこで発表されたのは、**「新卒タスク」** なるものを研修で行うということ。以下、その詳細です。

:::note info
**期間**
     2ヶ月
        ・ 1ヶ月終わった段階で中間報告
        ・ 2ヶ月終わった段階で最終報告
:::
:::note info      
**内容**
    ・新卒の4人が2人ずつチームとなり、SRE内にある課題を見つけ、それを解決する
    ・ 新卒1人につき1人の先輩社員がトレーナーとして付き、タスクの進行をサポートする。
:::   
:::note info 
**目的** 
・プロジェクトとしてチームで取り組み、アウトプットを出して報告する経験を積んでもらう
・なるべく自分と距離が近い課題を自分で見つけて解決してもらう
・タスクをきっかけに、Dept内のメンバーとの交流や業務理解を促進する
:::
    
こうして、先輩方がアイデア出しをしてくれた課題シートが配布され、新卒タスクがスタートしました。

早速同じチームになった子と話しあい、**最終報告で成果が分かりやすい技術系タスク**をメインでやろう、**余裕があったら教育系タスク**をやろうという方針になりました。

技術系タスクは、「一部しかログ取得できないものを全部できるようにする」というもの、教育系タスクは「環境構築やバージョンアップの際の全体像が分かりにくいので図を制作する」というものを第一候補にして、トレーナーさんとのミーティングに臨むことにしました。

#### 2.トレーナーさんとのMTGで起きた予想外の展開
その前のミーティングでかなり方向性が決まっていたので、トレーナーさんを交えたミーティングでは、タスクは私たちが出した案で決定し、今後の計画について話し合うものだと勝手に予想していました。

そんななか始まったMTGで、思いがけず別のタスクを提案されることとなりました。それが、**「AppDynamicsメトリクスを機械学習してエラー原因候補を自動通知」** という見るからに難しそうで、候補から外していたものでした。
※AppDynamicsはアプリケーションパフォーマンスの監視ツール

今回の新卒タスクは、新卒4人が2:2で分かれて行う構造なので、中間報告や最終報告では出来栄えが比較されると考え、私はとにかく確実に成果物が出せるタスクをやりたいという気持ちがありました。なので、最初にその難しいタスクにチャレンジするというアイデアを聞いたときは、「え～」という気持ちでした。

トレーナーさんがそのタスクを提案した理由は、
> **提案してくれたタスクは、100%実現可能で、現在のSREメンバーが時間や余裕がなくてできていないもの。新卒タスクでやらなくても、研修が終わった後で、いつでもできる。それに対して、AppDynamicsのタスクは実現できるかどうかわからない。これは成果を気にせずチャレンジできる、今回の新卒タスクだからこそ取り組めること。だからチャレンジしてほしい。**
>
とのことでした。それを聞いて確かに、と納得し、「難しそうだな」という不安を抱えつつも、「とりあえずやってみよう」という気持ちで、この自動化タスクに取り組み始めることにしました。

## 自動化に向けて何をしたのか
こうして始まったAppDynamicsの自動化ですが、以下のような流れで進んでいきました。専門的なパートでもあるので、感想など見たい方は次のパートへどうぞ。

* 課題の背景の整理
    * なぜAppDynamicsの自動化は必要なのか
        * AppDynamicsは多機能なので使いこなすのが難しい
        * インシデントによって対応が大きく異なるのでキャッチアップに時間がかかる
        * それにより調査にレベル差が生まれ、属人化してしまっている 

* インシデントの現状分析
    * SREに問い合わせられた問題の詳細、発生原因とどう対応したのかを調査
    * インシデントを以下の3つに分類
        * 再起動などSREが主に対応して治っているケース
        * プロダクト開発に調査を依頼するケース
        * 未解決のケース
    * 分類を経て、SREが対応すべきか否かを早く判断するためにリソースのメトリクスを一目で見れるようにするのが、調査の効率UPに効果的なのでは、との結論になった。
    
    * TODO：メトリクスを一気に見れる機能の実装を目指す
    
* SREの社員の方にヒアリング
    * ヒアリング項目
        * AppDynamicsの調査でどんな値をチェックしているか
        * AppDynamicsで困っていること
        * AppDynamicsの自動化に対するアイデアについて
    * これを経て、
        * 調査の最初にSlackチャンネルなどで出るアラートをチェックしていること
        * 「このサーバーの情報が知りたい」と、こちらがアクションを起こした時に、メトリクスの情報が取れるとありがたい
        * 何か一個特定のケースを想定して取り組んだ方がやりやすいのではないか
    * という意見をいただくことができた。
    
    * TODO：実際のインシデントを想定したツールの実装
    * TODO：能動的に情報を取りに行くと、適切な情報が返ってくるツールの実装
    
* 細かく調査のフロー分析
    * フローチャートや対応表を使って、調査の流れや異常値とその原因の組み合わせについて細かく分析した。
    
* **この時点で1ヶ月経過し、中間報告。以上やったこととこれから実装をやっていくことを発表。**

* 実装
    * 私は、SlackとAppDynamicsの連携、もう1人のメンバーは自動化の処理をするPythonのコード部分を担当
    * Slack連携は、特定のメトリクスをSlackのSlash Commandで取得できるところまで完成
    * 自動化の処理は、時間帯やメトリクスなどを選んでメトリクスを取得し、状態を判断してメッセージの送信をするところまで完成
    * 6~7割ほど実装が完成したところで最終報告


* 今後の課題
    * 運用系
        * 現状のpythonコードをSlackで実行可能にする
        * Slash Commandを完成させる
        * Slash Commandで取得値の指定をできるようにする
        * 入力フォームの整備
        * 出力フォーマットの改善

    * 処理ロジック系
         * 各インスタンスごとにメトリクスを取得できるようにする
        * 取得したうえでアラート検知(100%,95%,80%)
        * 継続的なメトリクスの上昇(メモリリーク等)の検出ロジックを作成する
        * 各メトリクスごとのアラートを元にエラーの示唆を実施する
        * DB も含め総合的にボトルネックを精査


## 新卒タスクを終えて
#### 1.このタスクに取り組んで学んだこと
<dl>
  <dt>2人で2ヶ月の新鮮さ</dt><br>
  <dd>入社してから研修で何度も個人ワークやグループワークをやってきましたが、ペアで何かに取り組むことは初めてだったので、とても新鮮でした。</dd><br>
<dd>自分にはなかったアイデアを貰えたり、グループでやるより柔軟に動くことができたりと、2人でタスクに取り組むメリットを大きく生かせて取り組めたと思います。</dd><br>
<dd>普段の業務は1人でやることが多いので、タスクのMTGで雑談する機会が多かったのも楽しかったなと思います。感謝！</dd><br>

 <dt>未知の領域に取り組む難しさ</dt>
<dl>
<dd>タスクで取り組むAppDynamics、サーバレス、Pythonなどは、まったく未経験の領域だったので、新卒タスクに取り組む過程で、SREの先輩方にヒアリングしたり、実際にAppDynamicsの勉強会に参加してみたりして、理解を深めていきました。分かってくるにつれて、知識ゼロからの成長を感じられて楽しかったです。</dd><br>
  <dd>ただ、「わかる」ところまでいっても、「沢山アイデアが出る」という領域に行けなかった点は、（短期のタスクだし、しょうがないとしても）、少し悔しさが残りました。私はこういうタスクでは、アイデアマンとしての立ち位置でいることが多いので、「こういうことを次にするべきではないか」「こういうツールなら便利ではないか」という意見が普段より出てこず、少しもどかしかったです。</dd><br>
 <dd>次こういうタスクをやる機会があったら、もっと主体的に取り組めるよう、実務やスキル面の知識をもっとつけていきたいです！</dd><br>

  <dt>親しき組織にも礼儀あり</dt>
<dl>
<dd>細かいことですが、先輩方への連絡作法だったり、感覚値を学べたりしたのは大きかったと思います。</dd><br>
  <dd>このタスクを通じて、部署内のお話したことのない先輩社員の方とのMTGが、何回かありました。その中で、「まずGoogleカレンダー上で予定入れてから、Slackで連絡した方がやり取りが少なくていい」「ヒアリングは先輩社員1人ずつよりは、先輩社員を2人まとめての方が多く意見が出てよいと思う」のような、やり取りの仕方を確認できたのがよかったなと思います。</dd><br>
 <dd>これからも社内で気持ちのよいコミュニケーションと、効率的なやりとりができるよう、このような点は引き続き確認していきたいなと思います。</dd><br>

  <dt>ググるだけでは解決しない</dt>
<dl>
<dd>実装の後半、Serverless Frameworkを使った実装をゼロから1人で行いました。</dd><br>
  <dd>先輩から参考記事を頂いていたのですが、私とは違うサービスを作っている方だったので実装を完成させられず、色んな記事を見漁りました。結果5,6個の記事を参照して、なんとか基本の骨組みを完成させることができました。</dd><br>
 <dd>この経験を経て、ググるだけでは解決せず、それを理解して自分の作りたいものに応用する力が必要なんだなと強く実感しました。これからもっと知識をつけて、ググる → 実装のスピードをどんどん上げていきたいなと思います。</dd><br>
</dl>


#### 2.今後
実際の運用に使われるツールを作れるように、一旦年末をめどに引き続き取り組んでいくことになりました。

#### 3.感想
2ヶ月間取り組んで、上記の通り、スキル面でもビジネス面でも多くのことを学ぶことができました。難しかったけど、刺激的で充実した日々だったなと思います。SREの皆さま、素敵な機会とあたたかいサポートありがとうございました！
実際の業務に役立つ便利なツールを完成させるべく、引き続き頑張っていきます🔥🔥

## まとめ
今回の記事では、私が配属後に行った新卒タスク：AppDynamicsの自動化と、そこから得た学びについて紹介しました。ここまで記事を読んでいただき、ありがとうございました。何か気づきや参考になる点があれば幸いです！