iOSエンジニアがインフラチームに配属されて1ヶ月で学んだこと、感じたこと

## はじめに
未経験からiOSメインで徐々にバックエンドのAPI作成、Android開発等の業務を2年程経験し、先月インフラやバックエンドがメインのチームに移りました。そこで配属されたときの気持ち、初心を忘れないように感じたことや気持ちを記事にしたいと思います。

また初めて聞く用語や知識、聞いたことはあるけど理解できていなかったことをメモ代わりにまとめます！ エンジニアでは当たり前の知識も抜け漏れが多く、学びの日々です。


## そもそもインフラとは
「インフラ」とは、ITにまつわるものの基盤（インフラストラクチャー）となる設備や構造物のことを指します。 パソコンやサーバー、ルーターなどの機器だけではなく、機器に搭載するOSなどの非物理的な設備も含めて「ITインフラ」です。 

私は社内の通信機器等ハードウェアを触ることは今の所ありません。基本的にサービスや運営に関わるクラウドインフラやバックエンド、社内システムのフロントエンドが中心です。またチーム内でも担当する技術領域が習熟度合いや進行中のプロジェクト次第で変化します。


## 感想
新鮮な気持ちで仕事ができているというのが第一の感想です。
1つのプロジェクトに２年弱参加していたのでチームメンバーと使用する技術が変わり、学びや発見が多いです。

1からプログラミングを初めた頃に比べると前提知識がある分、何が分からないのか分からないような状況ではないです。

## 変化したこと
- ネイティブアプリの開発からWeb、バックエンド、インフラの開発・作業がメインになる(当たり前体操)
- 日々メトリクス、金額を確認するようになる
    - **DataDog**
        - サーバーのメモリ、CPU、ロードアベレージ
        - APM(Application Performance Monitoring)        
    - **MondoDB Atlas**
        - メトリクス
        - プロファイラ
    - **Sentry**
        - issues
    - **AWS**
        - 各サービスの金額
- Tableau cloudやOpenAI Assistants等サービスを触るようになる


## まとめ
チーム異動から1ヶ月ほどですがiOS、クライアントの開発だけでは見えなかった視点、視野が得られている気がします。ほんの少しだけ社内のプロジェクトやシステムなどを俯瞰的に見られるようになってきました。各サービスの費用等にも意識が向くようになりました。

クライアント側の実装だけでは知り得なかったバックエンド、インフラの仕組み等を知ることはクライアント側の技術理解にも繋がりました。まさに点と点が繋がる感覚を覚えました。AWS S3の画像がクライアントで表示されるまでの仕組みなどです。

一方でアプリの詳細なアクション数などの数字からユーザーのインサイトを追うようなことをしなくなったのでユーザーとの距離が若干離れてしまったような気もしています。APIの高速化等やプロジェクトを跨いだAPI等ユーザーに影響を与えるタスクもありますが、より社内への影響が目に見えるタスクを行なっており今までとは違うやりがいを感じています。


## 殴り書きメモ

### Linux

- プロセス
プログラムが並行して実行。その1つ1つがプロセス。「実行可能状態」「実行状態」「待ち状態」の3つの状態遷移がある。

- ロードアベレージ
    1CPUに対して平均的にどれだけのプロセスが実行待ちになっているかを表す指標。数値が高いとLinuxのシステムが高負荷状態。 
    わかりやすい記事　https://qiita.com/Takao_/items/8cce7118b020e80750d4

- ファイルディスクリプタ
プログラムからファイルを操作する際、操作対象のファイルを識別・同定するために割り当てられる番号。DBとの接続やソケット


- メトリクス
定期的にシステムのパフォーマンス情報等を取得し、測定値をグループ化したものです。 たとえば、CPU使用率、メモリ使用率、ディスク使用率、Data I/O、アクセス数などがこれにあたる。

- CPU アイドル時間、アイドルタイム
使用可能な状態だが使用されていない、何も処理を行っていない、すぐ使用できるように待機しているといった状態のこと

- スレッドアロケーション
プログラムやシステム内でスレッド（実行の単位）をどのように割り当て、管理するかに関するプロセス

- スタックトレース
処理の呼び出し履歴
実行中のコンピュータプログラムにエラーが発生した際に、直前に実行していた関数やメソッドなどの履歴を表示


### AWS
- VPC (Virtual Private Cloud) 
定義した論理的に分離された仮想ネットワークでAWSリソースを起動できる
- IAM (Identity and Access Management) 
AWSリソースへのアクセスを安全に制御する。アクセス権限を設定できる
- EC2 (Elastic Compute Cloud)
  インスタンスタイプ 物によってはサポートが終了する
  インスタンスの料金は時間単価なので1時間毎に費用がかかる
  通信にも別途料金がかかる。これは従量制
- ECS (Amazon Elastic Container Service) ECSは、Dockerコンテナを簡単に実行、停止、管理するためのフルマネージドサービス
- S3 (Simple Storage Service)　スケーラブルなオブジェクトストレージを提供するサービス。ウェブサイトのコンテンツ、バックアップ、アーカイブなどあらゆるデータを保存できる
- SNS (Simple Notification Service) プッシュ通知等を配信をするためのフルマネージドなパブリッシュ/サブスクライブサービス
- CloudFront　AWSの ¥CDNサービス 
- CDN 
(Content Delivery Network) サービス。世界中のエッジロケーションにコンテンツをキャッシュし、ユーザーに対して低遅延で高速にコンテンツを配信
- オートスケーリング
- SES　(Simple Email Service) 
メール送信専用のサービス
- Route53　
DNS (Domain Name System)のウェブサービス。DNSのポート番号が53
- Lightsail 
ウェブサイト、ウェブアプリケーション、データベースなどを簡単に構築、デプロイ、管理できるサービス。


### 監視ツール、言語、フレームワーク、サービス、その他
- DataDog
- MongoAtlas
- Sentry
- Tableau
- MySQL 
- workbench
- CakePHP
- OpenAI Assistants
- JS



### TCP/IP
- BGP Border Geteway Protocol
- RIP Routing Information Protocol
- 自律システム AS Autonomous System
- OSPF Open Shortest Path First
- NAT Network Address Translation
- NAPT Network Address Port Translation
- Http
    - フォームデータ形式
サーバーに送信する際に使用されるエンコーディングタイプの一つです。HTMLフォームのenctype属性で指定され、特にファイルや大量のデータを送信する場合に利用されます


## 最後に
私の働いている会社で経験の有無を問わず採用を行っています。
興味のある方は是非カジュアル面談から応募してみてください！

https://jambo-support.com/recruit_engineer/