未経験が受託企業に入って1年経ったので、学んだスキル全部書いてみる

#はじめに　

2019年6月にキャリアをスタートさせました。
Railsエンジニアとして1年でいろいろなことを学んできたので、簡単にまとめていきます。

いろいろなキャリアの積み方があるのでどれほど成長できてるのかは不明ですが、ほんの一例としてご参考ください。

※　表現のおかしい点等ありましたら、ご指摘頂けますと嬉しいです。
※　今後のキャリア的に良さそうなアドバイス等も頂けると、非常に喜びます。

前回：[未経験が受託企業に入って半年経ったので、学んだスキル全部書いてみる](https://qiita.com/wann/items/2ccbe77ba7939b03ba9c)

#簡単な経歴

・一般大卒
　パソコンスキルはitunesで音楽入れる程度
・某アパレルチェーンで3年勤務
　内2年管理職
　パソコンスキルはWordで毎週報告書を書く程度
・2018/12〜　 Mac購入
　　　　　　　某オンラインスクールで勉強開始
・2019/3〜　独学開始、都内もくもく会に週1参加、Menta契約、アプリ作成
・2019/6〜　就職
・2020/7　現在（2年目）


#半年〜1年で学んだこと

##１）技術関連

###Ruby/Rails
4ヶ月くらいは毎日触っていました。
入社当初よりだいぶ読むのに抵抗が無くなったなと思ってましたが、初めて別PJに移ると、同じRailsでもすんなり読めない箇所が結構出てきたので、まだまだ甘いんだなと痛感しました。

業務フロー的にすごく複雑な機能の設計〜開発を担当し、作りながらお客様と何度も要件を擦り合わせ、完成後も改めてメンバーへ共有するのにはとても苦労した覚えがあります。

また、これまでは機能の追加や改修、０から開発などやってきましたが、次案件では主に`Capybara` `Selenium`を使った `スクレイピング`をやりました。
Jobの仕組みや各サイトごとの要素取得のコツ、そして今まで以上にbyebugの貴重さを学びました。


###SQL（ActiveRecord）
実際に使ってもらうお客様の1部署が多忙で、システムを使っての作業まで回らないということがよくあり、最初のうちはこちらで「毎月◯日に叩くコマンド」というのを複数用意して実行していました（もうやりたくない）。

基本的には某テーブルに溜まっている先月分のデータのステータスを、条件に当てはまれば全て「未→承認」に変える、というものでしたが、先方の業務フローがいまいち不明瞭だったり、イレギュラーがあまりにも多く、実際のデータに弾かれて一発で終わるなんてまあありませんでした。
そのため「叩く→止まる（トランザクションで戻る）→要件確認して都度コード修正」が毎回しばらく続きました。

こんな書き方があるのか、というところまで色々と試しながら書いていけたかなと思います。

###Git
わざわざ書くことではないかもですが、日常的に`git stash` `git log --oneline` を使うようになりました。
また、コンフリクトが発生しても、焦らずに冷静に対応できるようになりました（経験って怖い）。

###WordPress
Rails案件と掛け持ちして、20%くらいの時間を割いてやってました。

テーマ選定（Cocoon,OnePress等5テーマで試作）から、実際のお客様の要望に合わせたサイト製作、複数プラグイン導入、`Lightsail`でのサーバー利用、`Route 53`でのドメイン作成、`Letsencrypt`を使用したSSL化、`Google Analytics`などの周辺設定 等、一通り経験できました。

直接PHPをいじっての細かいカスタマイズはまだまだできないですが、テーマに乗っかればそこそこのサイトなら作れるようになりました。

###0から新規サービス立ち上げ
こちらはとても良い経験になりました。

同PJ内ではありますが、新規サービスの要件定義〜設計〜開発〜テスト〜リリースまで一貫して行いました。
コンセプトは同じでもユーザー層が変わったため、画面が業務用のB向け→C向けに変わったのが印象的でした。

タイトなスケジュールの中、Railsはもちろん、Deviseの詳細設定や別サービスとのDB共有、Viewの細かい調整やまで行いました。
`Pure CSS`に慣れてなく、初めてフロントが嫌になりました（当時）。

###AWS
実務では主に`CloudFront` `AWS WAF` `Elastic Load Balancer` `ACM` `Route 53`あたりを触りました。
まったく分からない中でなんとか模索しつつ、何日も日を跨ぎながらやった記憶があります。
セキュリティの仕組みと知識が大まかにつきました。
他にも`CloudWatch` `Trusted Advisor` `GuardDuty`あたりも触りました。
気付いたらコンソール画面への抵抗も無くなっていました。
だいぶ時間を使ってたので、コードが書きたいなあと思うことも多かったです。

個人では`AWS SAA`という資格に合格しました。
実務で触ったあとにかなりの実力不足を痛感したので、せめて最低ラインまで浅く広く知識を得たいと思い学習し始めました。
結果、半年前の目標を達成できた形になりました。

[AWS認定ソリューションアーキテクトアソシエイト（AWS SAA）合格記](https://qiita.com/wann/items/cb959291ce8b1d23e38b)
↑　詳細はこちらに書いてますので、よかったら読んでみてください。

###ステージング/本番環境へのデプロイ
新規サービス立ち上げ時も、相変わらず毎週のようにデプロイ作業を行なっていました。
本番が落ちるなんていつものことでした（まだリリース前だったので勘弁）。
焦りながら必死でバグを見つけて修正していたので、デプロイする日は胃がキリキリしていました。

開発環境がガラッと変わると、本番へ反映させてもcssがうまく反映されずなんだこりゃと思うことがありましたが、単純に`rails assets:precompile`を忘れてただけということがありました。

今まで先人の用意したデプロイ一括コマンドにあやかって叩いてたので、甘えてたなと思うと同時に、そういえば自分の独学時代もHerokuにだけcss反映されずによく困ってたなwとか思い出して、懐かしんでました。

##２）顧客対応
###タスク/スケジュール管理
PLを任されていた関係で、雨のように降り注いでくる要望の全てを、お客様用へは`ガントチャート`、社内では`Trello`でまとめて管理していました。

`ガントチャート`は`Googleスプレッドシート`から使用していました。
エクセルができないまま使い始めたので、大学時代にちゃんとやっとけば後悔しました。
[Googleスプレッドシートを爆速で活用するための基本＆応用の関数10選](https://form.run/media/contents/google-spreadsheet-basic/)

`Trello`は自分で提案して導入し、時間の限られる中でチームで効率よくタスクが見渡せるように工夫しました。
カスタマイズがしやすかったので、カードごとの工数表示やボードごとの自動工数計算など、必要なものはどんどん取り入れてました。
[小規模チームのタスクをTrelloで管理する](https://qiita.com/maimax/items/e81e7fa19b775fd817c0)

###業務効率化
半年前にもありましたが、対応部署の増加や繁忙期が重なるなどでやりとりに苦戦するようになり、さらなる工夫が求められました。

・毎週のMTGを必要がない限り無くした
・部署ごとのチャットでの問い合わせで、問題に対する情報が足りず何往復もすることが多かったため、必須項目を絞り込み`Googleフォーム問い合わせ`+`スプレッドシート自動更新`+`slack通知`で大幅な時短化をさせた
・なるべく常にYESで答えていたが、多すぎるタスク量と開発の優先順位を考えてNOも使うようにした（でも相手の気を損ねないようにする）

などを行いました。

#[補足]次の1年でやりたいこと

今後学びたいスキルを書いていきます。
開発に力を入れたいです。

※　アドバイス等頂けると嬉しいです。

###Rails
上でも書いてますが案件が代わり改めて基礎力が低いことを通感しました。
原点に戻って、基礎からサッと復習したいなと思います。
[Ruby on Rails チュートリアル](https://railstutorial.jp/)
[プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=pd_lpo_14_t_1/357-3152370-9879618?_encoding=UTF8&pd_rd_i=4839962227&pd_rd_r=e3cb6b89-d98c-4a88-8d27-ef41fe42a41d&pd_rd_w=2iWaf&pd_rd_wg=IIDIl&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=M48S4ZR2JV0FG8HXE81X&psc=1&refRID=M48S4ZR2JV0FG8HXE81X)

あとは別PJだけでなく、社外で書かれてるコードを読むのも勉強になるので、githubで公開されてるコード等を積極的に読みたいです。

###AWSをいじる
資格こそ取ったものの、実際に触るとなると全然できる自信がありません。
いわゆる「頭でっかち」状態だと思います。

自分でVPC周りを組み立ててみたり、LambdaやSQSなどよく使われているであろうサービスにも慣れておきたいです。
できればコンテナサービス周りにも手を出してみたいです（先にDockerの勉強も必要ですが…）

###JavaScript
実務であまりJavaScriptを触っておらず、エンジニアとして結構な弱点だと感じています。
Vue.jsやReactなどに焦点をおかず、まずはじっくり生JavaScriptに慣れていこうと思います。

[改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88JavaScript%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E3%83%A2%E3%83%80%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E7%8F%BE%E5%A0%B4%E3%81%A7%E3%81%AE%E5%BF%9C%E7%94%A8%E3%81%BE%E3%81%A7-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/477418411X)
[JavaScript Primer](https://jsprimer.net/)
まずはこの辺りを参考にする予定です。

###IT基礎
知識不足を日々感じます。
まずは`基本情報`でIT基礎を網羅的に頭に叩き込みます。
時期もちょうど良いので、秋の試験まで受けてしまおうかなと。

その後`Linux` `SQL`あたりも、王道めな技術書をざっと読んで早く頭に入れてしまいたいです。

###チームリーダー
一度経験させて頂きましたが、やや特殊な案件だった（笑）ため、普通の案件で経験してみたいです
相手が強いエンジニアの方でもきちんとコミュニケーションできるように、早くITスキルを高めていきます。

###突破力
ググり力こそ上がりましたが、基礎知識不足のせいか諦めて社内の人を頼ることも多々ありました。
ベースの力をつけるのはもちろん、その上で分からないことも粘り強く最後まで諦めないようにして、突破できる力をつけたいです。
ただ仕事なので、これ以上無駄だと判断したらタイミングよく見切るクセもつけたいです。

なるべく意識してるのですが、この境目がなかなか難しいです。