SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

SIerから転職して触れた7つのWeb技術 7つの世界

f:id:mt_iri:20190322180505p:plain

こんにちは、インフラエンジニアの入山です。

2018年10月のスマートキャンプ入社から、もう少しで6ヶ月になります。
前職はSIerで金融系インフラエンジニアを5年程しており、銀行システムの環境構築やテスト、システム管理、保守などを担当していました。

金融系インフラエンジニアだった前職では、オンプレミスなのはもちろんのこと、サーバーやストレージなどのハードウェアからミドルウェアまで、扱う製品のほとんどが自社ベンダー製だったため、一般的にWeb系エンジニアが使用している技術には全く触れたことがありませんでした。

また、大手で完全分業された中のインフラエンジニアだったたため、プログラムについては目にする機会もありませんでした。

スマートキャンプに転職した現在は、AWSインフラをメインに、Vue.js Ruby on Railsでフロント〜サーバーサイドの開発まで幅広く担当しています。

そんな私が、Web系エンジニアに転職して触れた7つの技術について、SIerとの違いや触って感じたことなどを含めて紹介します!

インフラ寄りの内容ではありますが、SIerからWeb系に転職を考えている方Web系エンジニアをこれから目指す方の参考になれば幸いです!

Git

  • ファイル(ソースコードなど)の変更履歴(誰がどのファイルのどこをいつ変更したか)を記録・管理するための分散型バージョン管理システム
  • リモート(サーバー上)とローカル(自分のPCなど)のリポジトリで別々に変更履歴を記録・管理できる
  • 複数の変更履歴を一つに集約する機能も持つため、複数人での共同開発を効率的に行える
  • GitHubなどのWebサービスと連携することで、チームメンバーとソースコードの共有やレビューなどが効率的に行える

IT業界で働き始めて7年目を迎えようとしている私ですが、今までバージョン管理ツールと呼ばれるものを使ったことがありませんでした。前職での変更管理は、変更申請書や管理台帳(Excel)、作業手順書などで行っており、資産は自社ファイルサーバー内で作業日付や管理番号と対応したディレクトリで管理していました。

私はバージョン管理ツールを使ったことがないだけでなく、今までチーム開発の経験もなかったので、リポジトリやブランチの概念がわからなかったり、commitやpushをすることに慣れなかったりで、Gitでの管理に順応するまでに結構時間がかかりました。正直、Gitの複雑さは初心者には難しく、ある程度使えるようになるだけでもそれなりの学習が必要だと思います。しかし、使えるようなるとGitはとても便利なツールです。

GitHubと連携したソース共有やPR(PullRequest)レビューなども含めて、チーム開発には欠かすことのできないツールです!

Git

tmux,byobu

  • 端末多重化(ターミナルマルチプレクサ)ソフトウェア
  • 1つのターミナルウィンドウ上で複数のターミナルを操作することができる
  • 仮想ターミナルの画面分割が可能
  • 起動した仮想ターミナルのデタッチ(切り離し)/アタッチ(接続)が可能

エンジニアであれば必ず操作するターミナル。サーバーをSSH接続で操作する場合などでターミナルは必須で、複数のサーバーに接続して並行作業を行うことも多いと思います。 そんな時、ターミナルウィンドウを別々に起動して作業していませんか?私は前職で、数多くのターミナルウィンドウを並べて作業してました。

tmuxを使えば、1つのターミナルウィンドウで複数のターミナルを操作できるため、ターミナルウィンドウを複数起動する必要がなくなります。
また、tmux内のターミナルは、タブで切り替えが可能で好きなだけ画面分割できて、ターミナルの管理がとても楽になり、効率的に作業を行えるようになります。 Ubuntuでは、tmuxと同じような機能を持つbyobuがデフォルトで入っているため、サーバー上ではそちらを使うのも良いと思います。

GitHub - tmux/tmux: tmux source code

http://byobu.co/

Docker

  • コンテナ型の仮想環境を作成、管理、実行するためのソフトウェア
  • OSやミドルウェアなどを含む仮想環境のシステム全体をイメージという単位で保存・管理できる
  • 各種OSだけでなくOSSを含んだイメージがレジストリで公開されており、様々な仮想環境をすぐに利用できる
  • 仮想環境の構成管理(ミドルウェアのインストールや各種環境設定など)をコードで行うことができる(Infrastructure as Code)

SIerで触れた仮想化技術は、VMwareやHyper-Vなどの所謂仮想マシンと呼ばれるもので、高性能なサーバーの上に仮想ハードウェアを含む複数の仮想環境を動作させ、企業の物理サーバー台数や運用コストを削減することを主目的としたものでした。

それに対して、Dockerはコンテナと呼ばれるプロセス単位で仮想環境を実行するため、リソース使用量が少なく、PCでも動作させることができます。また、仮想環境の構成をコードで管理できるため構成管理や共有が容易で、Dockerさえ入っていれば異なる環境上で同じ構成の環境を動かすことができます。

開発では多くの現場で使われている技術で、ローカルPCへの開発環境構築などでよく利用されます。OSやOSSのイメージが豊富に公開されており、様々な環境をすぐに動かすことができるのもとても便利です。

Empowering App Development for Developers | Docker

Kubernetes (k8s)

  • 複数の仮想コンテナを一元的に管理するコンテナオーケストレーションツールのデファクトスタンダード
  • コンテナ化されたアプリケーションのデプロイ、スケーリング、管理などを自動化
  • コンテナベースのインフラを本番環境に実装するために必要な機能を提供する
  • GCP、AWS、Azureなどがマネージドサービスを提供しており、クラウドサービスとの連携が可能

私が入社して一番始めに取り組んだのが、Kubernetes(以下、k8s)での新規プロダクトの基盤構築でした。前述したDockerの知識もほとんどなかったので、わからないことだらけで大変でした。私にとってWeb系転職の洗礼とも言えるk8sですが、入社からの6ヶ月間でもや書籍の情報がかなり増え、導入事例も多く目にするようになりました。

個人的にk8sで一番良いと思うところは、インフラ(ホストOS)とアプリケーションを分離できることだと思います。というのも、アプリケーションに必要なものが全てコンテナで起動するため、コンテナを動作させる**ホストOSにはアプリケーションに関するものを一切導入する必要がなくなります。

これにより、ホストやミドルウェアなどのバージョンによる影響を受けなくなるだけでなく、ローカルのDockerで動作検証したものをそのまま本番運用することが可能になるため、効率的に開発が行えます。

マネージドサービスの提供も追い風となり近年急激に伸びているインフラ関連で今一番注目されている技術です!

Kubernetes

Amazon Web Services(AWS)

  • Amazonが提供するクラウドコンピューティングサービス
  • レンタルサーバーやデータベースをはじめ、IoTシステムの構築、機械学習など、様々なサービスが利用できる
  • ユーザーはサーバーなどの設備を一切用意する必要がなく、インターネットに接続できる環境があれば全て利用可能
  • 必要なコストはサービス利用料のみで、個人でも気軽に利用できる(一年間の無料枠も有り)

前職で担当していた金融系のシステムでは、クラウドサービスでのシステム導入は少なく、オンプレミス以外の選択肢はない環境でした。

Web系への転職を決めるまではクラウドサービスを触ったことがなく、クラウドサービスに対する漠然とした不信感や抵抗感を持っていました。

そんな私が初めてAWSを使って環境構築をしたときは、オンプレミスとクラウドの構成や設定の差異に混乱しました。

しかし、一通り環境構築した後は、AWSでの環境構築の手軽さと早さに感動しました。オンプレミスでシステム導入をする場合は、サーバーを触れる状態になるのに数ヶ月必要なのが当たり前でした…。

わずか数分でサーバーが起動して、色んなサービスが手軽に使えて、スケールも柔軟で、個人でも手軽にサーバーが利用できるというのはとても感動しました

最近では政府機関や金融機関へのクラウド導入事例も増えており、オンプレミス運用をしている企業が減少しているため、クラウドサービスに触れる機会はかなり多いと思います。

クラウドならアマゾン ウェブ サービス 【AWS 公式】

Terraform

  • インフラリソースをコード(テンプレートファイル)で構築・管理するためのツール
  • AWS・GCP・Azureを始め多くのクラウドプロバイダやDNSimple, Herokuなど多くのPaaSに対応
  • インスタンスやネットワークなどの低レイヤーから、DNS や SaaS など高レイヤーまで幅広く管理可能
  • コードの差分を判斷した上で最適な実行計画を練ってインフラを更新

前職でのインフラ構築は、設計書に基づいて手順書を作成し、手順書に従ってGUIやCLIで構築していくものでした。そのため、インフラをコードを使って構築・管理したことはなく、こういった技術の存在も知りませんでした。

プロダクト開発においてインフラは、同じような構成の環境が複数必要となるため、AWSでサーバーを立てて、データベースを作って…など、同じような内容の作業を各環境で繰り返し行う必要がありす。また、複数の環境を作るにはそれなりの工数が必要で、手作業では漏れやすい箇所もたくさんあります。

Terraformでは構築作業をコードで一括構築・管理できるため、元となる構成のコードを一度書いてしまえば変数を変更するだけで、同じ構成の別の環境を構築できます。

インフラの構成をコードで管理できるため、インフラの構成や構築方法の属人化を防いだり、Githubで扱うことでバージョン管理やレビューをしたりできます。より簡単に扱えるようになり、インフラ変更作業に伴う事故リスクを減らすこともできます。

コードの書き方に慣れる必要はありますが、クラウドサービスのインフラ構成管理にとても便利なツールです。

Terraform by HashiCorp

Vue.js

  • WebアプリケーションのUI(ユーザーインターフェース)を構築するためのJavaScriptフレームワーク
  • シンプルで自由度が高く、他のフレームワークと比べて軽量で速い
  • SPA(Single Page Application)開発に使われることが多い
  • 学習コストが低い

前職でプログラムを触ってなくインフラエンジニアの私が、フロントエンド開発を行う日が来るとは正直思っていませんでした。そんな私が現在開発中のプロダクトで初めて触ったのがVue.jsです。

JavaScriptすらわからない状態からスタートしたので、他のフレームワークと比べてどうかについては正直わかりませんが、日本語の公式ページが充実していて勉強しやすいと感じました。JavaScript HTML CSSをある程度勉強した上で、公式ページをしっかり読めばそれだけでもかなり理解度は上がると思います。 私の場合は、公式ページに加えて初心者向けの本を一冊読んだことで、大分理解できるようになりました。 コンポーネントライブラリを使うことで、デザイン性のある高機能なUIを簡単に実装できるのもフロント開発初心者としてはとっつきやすくてよかったと思います。

Vue.js

最後に

SIerはレガシーな技術や文化が根強く残っていることが多いですが、Web系の企業ではモダンな技術や文化が積極的に活用されています!

今回は、SIer出身の私が系に転職して触れた技術の中から7つを紹介しましたが、これらの技術はWeb開発では一般的に使われているものばかりです。

7つのWeb技術は共通して、再利用性・利便性・安全性を高めていて、開発効率向上には欠かせない技術です。

紹介した中にもし知らない技術があったら、是非触ってみることをおすすめします!

現在、インフラではAmazon EKS、フロントではAtomic Designを中心に挑戦中です。 SIerからWeb系への転職は技術的なハードルが高いイメージがありますが、Web系では新しい技術が多く、それらの技術に触れることはとても楽しいので、悩んでいる方は恐れずに挑戦してみてください!

※ タイトルはここからとりました😙

7つの言語 7つの世界

7つの言語 7つの世界

  • 作者:Bruce A. Tate
  • 発売日: 2011/07/23
  • メディア: 単行本(ソフトカバー)