daiphone’s blog

AWS / JavaScript / Docker / PHP / Python を中心とした技術ネタと、趣味少々

今、学びたいこと

はじめに

※ほぼ個人的な備忘録になっているので読みたい人だけ読んでください。笑

よく休日に個人で黙々とPCをいじり、いろんな技術情報を探すと、必ず思うことがあります。

「あ、これ試してみたいな。」

こう感じたときに、必ず出てくるのが環境構築の手間ですよね。

まあこれはエンジニアにとっては当たり前のことなのだが、 なるべくこの手間をなくしたいと常に考えております。

そんな試行錯誤していた毎日の中、私は今まで下記のような技術を学んできました。

今まで学んできたこと

※今回はインフラ寄りの技術にフォーカスしてます。

これらの技術を学ぼうとした経緯について、なぜその技術を必要としたのかという観点から話したいと思います。

Ansible

忘れもしない、エンジニア1年生の自分。

レンタルサーバ借りてなにかしたいな」 「VPSサーバ?よくわからんけど契約してみよう」 「試しにWordpressでブログ作ってみるか…」 「環境構築上手くいかない」 「もう一回作り直すか」 「上手くいかない…」 「壊すか」 「また1から作るのめんど…」

当時の私は、ひたすらググってコマンドを叩いて実現させるだけでも精一杯だったので 再現性については全く考えていなかった。

するとどうだろう。何が原因で動かないのかがわからない上に、今まで自分が叩いたコマンドも把握できていなかった。

そこでAnsibleと出会った。

「手順をCode化する = 自分が行った手順を忘れずに管理できる」という点が非常に魅力的だった。

(もっと本質的なメリットがあるが、自分が感じたのは、上記であった。)

AWS

「アプリケーションの開発に関しての知識は少しづつついてきたけど、サーバー・ネットワーク周りはよくわからないな…」 「AWSはそれらをフルマネージドでやってくれるのか、そこから学べば理解しやすいかも」 「目標にもなるし、まずは資格取るか」

私がインフラ寄りの技術を本気で学びたいと思い立ったのは、AWSを学び始めたからだ。 本来IaaSに依存しない形で技術を習得するのがベストだと思うが、 「基本的な技術は知ってるけど、このサービス上での利用方法は知らない」じゃ話にならないので、 まずはサービスや機能が多く、利用者が多いため情報が豊富なAWSを学びたいと思った。

AWSを利用し始めたきっかけも、業務で必要になったからなのだが、その中で自分が学びたいと感じた動機は、 インフラ周りの理解をせずにエンジニアを名乗っている自分に自信が持てなかったからだ。

AWSを学び始めたことで、モダンな開発を行う意識がより強くなった。 流れとしては以下である。

  • AWSを学び始める
  • リソースに関して必要な知識をつける
  • その知識に関連する技術を学ぶ
  • それらがモダンな技術だと知る
  • 技術的な理解をした状態で、AWSのリソースを利用して求められたソリューションを提供する

Docker

「この技術試してみたいな…」 「でもVPSサーバは別で使ってるし、EC2インスタンスは無料枠で収まるよう管理するの面倒だしな…」 「かといってLocal環境を汚したくないし…」 「ふむふむ、Dockerを使えばLocalに独立した環境が作れるし、再構築も簡単だし、完成した環境はクラウドで管理できるのか…求めてやつ、これじゃん!」

業務で必要になったのがきっかけであったが、現在のクラウドネイティブなアプリケーション開発を行う上で、必須になってくる知識だと感じたため学ぼうと決意。 現時点で完璧に使いこなしているわけではないが、AWS Fargateを用いたアプリケーションの環境構築をした経験があるので、ある程度は抵抗なく触れられるという自負はある。

しかし、より個人に特化した開発環境を作る上で、重要になってくる部分であると思うため、今後も学び続けていきたい技術の一つである。

Kubernetes

「Dockerに関しては少しづつ知識ついてきたぞ…」 「Kubernetesは難しそうだから一旦避けよう…」 今の会社:「Kubernetes使って運用管理するから、勉強しといてね」 「ついにきたか…!!!!」 ← イマココ

Dockerを学ぶと必然的に次のステップとして学ぶべき技術であろうKubernetes。 無意識に敷居が高いと感じてしまい触れていなかったのだが、 コンテナ開発基盤をよりスケーラブルに管理できるので、学ぶべき技術である。

実際にオーケストレーションツールとしての利用を考えたときに、各IaaSによってはKubernetesを利用しなくてもある程度同様のことはできると思う。 しかし、各IaaSへの依存度が高くなってしまうと、別のIaaSに移行するときのコストが高く付く恐れがある。

その点、KubernetesはそれぞれのIaaSで準拠された形でサービスが展開されているため、Kubernetesを学べば汎用的な知識を学べると考えている。

今、学びたいこと

結論から言うと、インフラ周りの知識をより深めたいです。

もちろんサーバーサイドのモダンなフレームワークやらフロントエンドの新しい技術やら機械学習に関しての記事やら気になるところは沢山ある。 でも、それらを試す環境が作れないんじゃ、読んで終わりになってしまう。 「へーそんなのあるんだー(棒」 で終わってしまっては、せっかく知り得た情報が無駄になってしまう。 アウトプットという意味でもまずは、実践あるのみだと思う。

誰かが用意した環境をそのまま使う(docker imageとか)のは個人的に好きではない。 理解していない技術を使っている自分にもやもやするからだ。

よって、根幹となる環境構築の知識をつけるのが今年の目標の一つである。

まっさらなサーバーやLocalに構築するイメージでいくと以下になる。

  • AnsibleでDocker環境を構築できる
  • アプリケーション実装に必要なモジュールをDocker内で用意できる
  • それらのコンテナをKubernetesで管理する(ここに関してはまだ知識不足のため保留)
  • 最終的に自分の構築した環境をAWSに展開して正常に動作するか確認

終わりに

つらつらと書いてきましたが、常にイメージしているゴールはこれである。

環境構築からサービスデプロイまで自身で一貫してできるようになる 自信を持ってフルスタックエンジニアと名乗れるようになる

今年から新しい会社に転職した結果、AWS周りの知識を使うことが多くなりました。 肩書はなんとフルスタックエンジニアです。

その名に恥じないように、日々精進していきたいと思います。