独学だった自分がWebアプリ開発部門に異動して1年たったので振り返り

#はじめに
ちょうど今年の1月に開発チームへ異動となり、
まもなく1年を迎えようとしています。
年始ということもありますので、
振り返りと今年度に向けてのやりたいことを記載します。

#開発しているプロダクトについて
私が異動した開発チームですが、
オンライン行動データのアクセスログ計測サービスを担当しております。
デジタル広告系の部門との絡みなどが多く、
プラットフォームは主にAWS、ソースの大半はPHP、一部Python/Javaといった感じです。

#異動したての自分の状態
もともとプログラミングというものに興味があり、
仕事の合間でちょこちょことやっておりました。
そのうち、自分でも作りたいっていうのと、
もうちょっと時間かけて勉強したいということから、
プログラミングスクール的なものに通い始めました。

Rubyの基本的な文法からMVCモデルなど一通り学習し、
Ruby on railsを使ってTwitter的なサービスを模写に近いかたちで作成したところで、
プログラミングスクールでの成長に限界を感じ卒業。
その後オリジナルアプリを作るといったこともせず、
仕事に忙殺されながら日々漫然とすごしておりました。

プログラミングスクールはビジネス的にも「あくまで形になるもの」を作ることが最優先になります。（でないとみんな挫折しちゃう）
ので、よく意味はわからんけど教材通りにやったら動くとか、
クラウド環境でやっちゃうので環境毎であまり差がでなく、
教材通りにやればエラーとかもほぼでないというのが特徴です。

最初のスタートとしては良かったと思っておりますが、
サーバー周りなどインフラ方面の知識があまり付かなかったなと今では思います。

そういった環境で勉強しつつ、縁あって異動してきましたが、
当時の自分は以下のような感じでした。
・HTML/CSS/ruby/python/mysqlはある程度わかる
・MVCモデルは概要を知っている
・サーバー周りの知識はほぼ0。vi開くと閉じれなくて焦る
・もちろんネットワークやソフトウェア・ハードウェアの知識皆無
・AWSはCloud9とEC2だけ触ったことある

ここからでみるとだいぶできることは増えたなーとは思うものの、
来年はもっと成長スピードを上げたいなと思うので、
やったこと、出来るようになったことと来年やりたいことを振り返っていきます。


#今年やったこと
今年を振り返ると修行期間/事業部問い合わせ対応期間/開発業務期間の3段階に分かれると思います。

### 修行期間（1月～4月）
配属後すぐで、
事業部側から開発へ異動という珍しいパターンだったこともあり、
仕事もほぼない状態です。
調べ物のテーマをもらったり、Hello worldを色々な言語で記載したり、
ファイル出力をしたりを行っておりました。
また、HTTPプロトコルやネットワークなどの勉強もこの期間に重点的に実施致しました。
その他には基本情報処理もこの期間に取得しました。

### 問い合わせ対応期間（5月～10月頃）
だいぶ自社サービスの全体像が掴めてきたため、
問い合わせ業務に対応しはじめ、
DBから特定の情報を持ってくるといった作業がかなり増えました。
また、ChromeのSamesite属性の影響を一部受けるものがあり、
その対応にも携われました。

### 開発業務へ（7月～）
7月頃からぼちぼちと開発業務に触りはじめたように思います。

・JSでのバリデーション実装
・ダッシュボード
・機械学習モデルの切片修正
・関連サービスとのデータ連携修正
・サービスリリース
などやらせてもらいました。
どれも初めて触るようなものばかりだったので、
苦しい反面学びとしては大きかったなと思っております。


#今年出来るようになったこと・覚えたこと
### 修行期間（1月～4月）
＜覚えたこと＞
・基本情報処理受かるくらいの基礎知識
・Progateでやる程度の各プログラムの文法（HTML&CSS,Python,PHP,Javascript,jQuery,SQL)
・Gitの使い方
・Redmineの使い方
・Linuxディストリビューションの分類
・パッケージマネージャの分類

＜できるようになったこと＞
・pythonで簡単なデスクトップアプリを作成
・pythonでExcelの簡単な操作


この時期は特にやれることもないのでひたすらインプットを行っておりました。
なにか目標がないとこの辺りは自分には辛かったので、
基本情報処理に合格するという目標を持ってインプットし、無事合格することができました。
合格できたことである程度の知識はついたんだなーと１つ自信にも繋がりました。

この辺りでわからない事柄に対してのアプローチの手段ができたのはよかったと思います。
例えば、別の視点からインプットしてみるとか、
ちょっと時間をあけて他の事柄をインプットしてからもう一度学んでみるとか。
あとはアウトプットの大切さですね。
特に自分はざっくりと物事を捉えがちです。
自分なりに解釈した状態ではイメージができただけであり、
うまく言語化できていないことに気づかせていただきました。

結局言語化ができないと人とのコミュニケーションには使えないので、
大事な気付きであったなと思います。


また、Linuxディストリビューションの知識がついたことで、
環境構築周りの情報収集がスムーズになりました。
以前は「Ubuntuへの〇〇のインストール方法」といった記事を見て、
その記事内のコードをCentOSに丸コピしてうまくいかないとかが多かったのですが、、、
自分が適用出来る情報とそうでない情報をある程度分類できるようになってきました。



### 問い合わせ対応期間（5月～10月頃）
＜覚えたこと＞
・自社サービスのインフラ構成
・EC2,ELB,Opsworks,CloudFront,CloudWatch,Athena,S3などAWS知識
・CakePHP,Laravelのフォルダ構成など基本知識
・Cookie,Cookie属性(Samesiteやdomainなど)に関する知識
・Jmeterによる負荷試験の方法

＜できるようになったこと＞
・一通りのLinuxコマンド
・Shell scriptでのプログラム作成（ファイル入出力、DB操作、置換など）
・AWS CLI（s3,athena)
・Athenaでアクセスログを希望の形にすること
・php,pythonでアクセスログを希望の形にすること
・mysqlで複数のテーブルからのデータの抽出（なんかjoinが苦手だった）
・Jmeterで負荷試験の実施、秒間1000弱のimpを出すこと


この辺りの期間では、
事業部からこういうデータを出してとか、こういうリクエストってどれくらいあるといった問い合わせへの対応が多かったです。
s3に溜まったアクセスログからデータ抽出などの機会が非常に増えたのですが、
同じような抽出についてもPHPを通してやる、Pandasでやってみる、すべてAthenaでやるなど、
色々な方法でチャレンジできました。
データ量がそこそこあって、文字列抽出やフラグ立て変換など、
以外と色々なことができたため、勉強できたなと思います。
mysqlに関してもこの順番でJoinすると重くなるのかといった感覚的な部分が学べました。

また、この作業面倒だなといったことをShellで書いてしまおうといったことをやったおかげで、
だいぶShellでのプログラムがかけるようになりました。


### 開発業務へ（7月～）
＜覚えたこと＞
・自社の各サーバーのデプロイ方法
・Vue.jsのさわりの部分
・Java（オブジェクト指向）の概要
・Maven,Antのビルドツールの簡単な使い方
・ロジスティクス回帰分析の概念
・ECS,ECR,CodeCommit,AWS Batch,Kinesis,KCLなどのAWS知識
・Fluentdの知識

＜できるようになったこと＞
・JSでのDOM操作
・JqueryでのDOM操作,Ajax
・簡単なVue.jsの修正
・cssフレームワークの使用
・ECS,ECRを使ったオートスケーリング
・pandas,numpyなどpythonのライブラリを使って数GBのファイルを操作すること
・LaravelでAuth周りのカスタマイズ、メール送信処理、バリデーションルールの作成
・（精度はさておき）開発の見積もり
・Javaのコピペベースの改修、コンパイル、実行

7月以降、徐々に開発タスクを貰える状態になってきました。
初めて作るような機能や初めて触るライブラリ・フレームワークで行うことが多かったので、
視野を広げられ、大変ありがたかったです。

どちらかというとフロント側を触る機会が多く、
JSをまともに触ったのも初めてでしたが、
後半にはVue.jsという世界にも軽く触れたのが良かったです。

また、リリース作業も実施させてもらったことで、
サービスのアーキテクチャの具体的な知識や
ECS,ECR周りの知識を整理することができました。

その他にはJavaをソフトタッチしたのですが、
Javaにかかえていた難しそうというイメージはある程度緩和することができました。（OracleDBは嫌いになった）


#来年やりたいこと
### ＜技術周り＞
技術周りに関してはやりたいと思ってやれるものでもないですが、
積極的に情報を集めつつ、
機会があったときにインプットではなくアウトプットをできるようにしておきたいです。
また、まだまだ各技術の入門に触れるといったレベル感がほとんどのため、
脱初心者から中級者へとステップアップすることを重視したいなと思っております。

####API
APIについてはこれまでノータッチです。
食べログや楽天のAPIを叩いてみるくらいのことはやったことありますが、
API側を実装するという経験はないのでやっときたいです。
まずはRestfulAPIのインプットからだとは思いますが、
なんか簡単なAPIを公開してみるみたいのもありですかね。。

####Laravel
色々な言語などに触れられている反面、
これは大丈夫！と思えるものがないという点が少々気になってます。
現状Laravelがある程度まともなため、
Laravelならある一通りわかりますという状態に持っていきたいです。


####ソフトウェアアーキテクチャ
今月頭にPHPカンファレンスに参加してみて、
アーキテクチャへの興味が増しました。
 [Design It!](https://www.oreilly.co.jp/books/9784873118956/)を借りたため、
日頃からどういう考え方をしておけばよいのか？といった部分を構築できたらなと思っております。
アーキテクチャといっても幅広いので、
まずはどこに興味が湧いているのかから自分の興味がある分野を深掘ってみようと思います。

####Testコード
1年間開発業務をやって一番苦痛だったのは手動のテストでした。
人が書いたテストコードを実行するくらいしかほぼやったことがないので、
さくっとテストコード書ける状態になっておきたいです。


### ＜資格周り＞
なんだかんだいって文系で開発部門に移った自分の経歴の中では、
資格によるある程度の知識の証明は重要に思えます。
ですので、あくまで知識をつけることと目標としつつ、
以下の資格は取得したいなと思います。

####応用情報処理の合格
セキュリティからハードウェア、ソフトウェア、DBなどなど
幅広い分野を学ぶきっかけとなるので取得しておこうと思います。
基本情報処理を取得しましたが、選択式であったこともあり、
知識として定着したとは言えないかなといったところです。
年明けから徐々に学習をはじめて4月で取得します。

####AWS　ソリューションアーキテクトの取得
業務でAWSをちょこちょこ触っておりますが、
自分が触ったことがないサービスについても基本的なところは抑えておきたいので取得します。
応用情報処理のあとに取ろうと思うので、
6月頃が目標です。

####さらなるセキュリティ知識をつける（徳丸試験？）
 [PHP技術者認定機構](https://www.phpexam.jp/news/tokumarushiken/)

セキュリティが懸念となってサービスを作るスピードが遅くなっている部分が結構あります。
ここは自信をつけたいということもあり、
ぜひ受けたいなと思ってます。
来年初夏を目処にベータ試験を実施とのことなので、
どうなるかはわからないのですがウォッチしておこうと思います。

### ＜その他＞
####自分でサービスを作る（完成させる）
ちょろちょろとWebアプリを作成しておりましたが、
だいぶだらついてきたので、
早々と片付けたいと思います。
細かいところにこだわってなかなかデプロイしないというよりは、
ある程度出来上がったタイミングでとりあえず出してみて、
反応を見ながら修正していくようにしようと思います。


#まとめ
異動して1年ですが、
想定していたよりも多くのことを学ぶことができました。
異動していなければこれらの知識は得られなかったと思います。
とはいえまだまだひよっこであることには変わりはないので、
より成長できるよう来年もがんばります。