エンジニアが1年で学ぶ13個のこと中盤です
⑥フロントエンド
フロントエンドとは
・ナビゲーションメニュー、デザイン要素、ボタン、画像、グラフなど、ユーザーが直接操作できるグラフィカルユーザーインターフェイス
・WebサイトやWebアプリケーションなどでユーザーが文字を入力したり、ボタンをクリックしたりする部分や、バックエンドのソフトウエアと直接やり取りをする部分のこと
・クライアントサイドとも呼ばれる
・Webブラウザ側でプログラムを実行
・TypeScriptとReactを学習すると良い
⑦仮想化コンテナ技術
仮想化とは?
・物理サーバーのリソースを抽象化することで、リソースを分割して運用する技術のこと
・従来、1つのアプリケーションに対して1台の物理サーバーが必要だったが、「CPUやメモリ、ストレージなどリソースが余る」「導入コストがかかる」「運用や管理が煩雑になる」などの問題点があり、これらの問題を解決するために仮想化という技術が開発された。
・しかし、従来の仮想化技術は「(ゲストOSを介して起動する必要があったため)動作速度が遅い」「動作させるためにリソースが必要(仮想化サーバーごとにCPUやメモリ、ストレージなどのリソースが必要)」「環境構築に多くの工数を要する」といった問題点があった。
・これらの問題を解決するために「コンテナ型」という仮想化技術が開発された。
コンテナ型の仮想化とは?
・仮想化技術の1つである「コンテナ型」とは、アプリケーション環境(本体や設定ファイルなど)をコンテナという独立空間で構築する技術のこと。
・コンテナは、ホストOS上にインストールされた「コンテナエンジン」によって、運用・管理されている。
・最大の特徴は、ゲストOSを必要としないこと。
・コンテナ型の仮想化では、ホストOSから直接それぞれのコンテナを管理することができる。
・ゲストOSが必要ないため、仮想化サーバーごとのゲストOS、CPUやメモリ、ストレージなどのリソースを必要としない。
・コンテナはコピーすることができる。
・コンテナは「DevOps」という開発手法に適している(開発と運用の相性が良い)
コンテナ型仮想化の代表的な技術とツール
Docker:
・コンテナ型仮想化をささえるコンテナ技術
・コンテナ型のなかでもっともメジャーなオープンソースの仮想化ソフトウェア
・複数人が同一の環境で開発できる
・開発環境から本番環境へ移行しやすい
Terraform:
・HashiCorp社によって開発されたOSSで、IaCツールの1つ
・オープンソース
・コードで管理できるので変更の履歴を確認できる
・1つ環境を作ってしまえば他の環境にも設定を使いまわせる
・コードが読めれば既存のインフラの環境を把握できる
※OSS(Open Source Software)とは:
ソースコードが公開されており、無償で誰でも自由に改変、再配布が可能なソフトウェアのこと
※IaC(Infrastructure as Code)とは:
手動のプロセスや設定の代わりに、コードを使用してインフラストラクチャの管理とプロビジョニングを行うこと
⑧DevOps(デブオプス)
DevOps(デブオプス)とは
・「開発(Development)」と「運用(Operations)」を組み合わせた造語
・開発担当者と運用担当者が協力してスムーズに開発、運用をすすめ、システムの価値を継続的に向上させるための概念
・ソフトウェア開発の手法の一つで開発と運用を一気通貫にしたプロセスのこと
・DevOps のベストプラクティス(一番良い実践方法)は、CI/CDを取り入れ、自動化するリリースパイプラインを作ること
CI/CDとは
◆CI=Continuous Integration(継続的インテグレーション)とは
・デプロイするコードの品質を確保しながら、開発スピードを向上させる DevOps(デブオプス) ソフトウェア開発手法
・開発者は継続的にコードを少しずつ (少なくとも 1 日 1 回、可能なら 1 日に数回) コミットし、そのコードが共有リポジトリ(マスターブランチ)にマージされる前にビルドとテストが自動的に実行される
・ビルドやテストが失敗しても、数分以内にすばやく修復できる
・開発チームの生産性の向上実現
・コードバグの発見と修正が最短時間で実現
・1,000 行のコードを書いてからエラーを見つけ出そうとするのではなく100 行書いただけでコミットするため、コード内のバグ探しが、数時間ではなく数分で済むようになる
・GitHub と CircleCI を連携させることでソースコードの変更履歴を記録・追跡、コードを基にCircleCIでビルドプロセスが実行され、その後に自動テストスクリプトが実行される
◆CD=Continuous Deliverry(継続的デリバリー)とは
・継続的インテグレーション(CI)を延長して、より高レベルの結合とテストなどを自動的に行い、新しい変更がリリース(本番環境へデプロイ)可能であることを保証するプロセス
・コードのコミットが毎回テスト スイートに合格しなければ、ソフトウェアはデプロイされない
・CD実現のためのツールは「Jenkins」
・Jenkinsは、継続的デリバリー(CD)のための機能やプラグインも多く準備されている
・テストやデプロイなどの各フェーズはそれぞれ専用のツールで自動化を行い、Jenkinsにて、どういったタイミングでどのツールを呼び出すかを指示し、エラーが出たら即座にフィードバックするという処理を行う
⑨テスト技法
テスト技法とは
・ソフトウェアのテストケースを作成するための技法のこと
・バグを見つける感覚が身につきプログラミング中に不具合を見つけやすくなる
テスト技法の種類
ブラックボックステスト:
・中身が分からない状態でのテスト
・テスト対象の内部構造ではなく、入出力(外から見た振る舞い)に着目するテスト技法
・やり方としては、同値分割法、境界値分析などがある
※同値分割法
・出力結果が同じ値となるテストケースを同等と見なし、グループ化するテスト技法
・各グループ(同値パーティション)から1つずつ代表ケースを選んで実施すれば、すべての出力結果を網羅できる
※境界値分析
・出力結果の境界部分をテストケースとして選定するテスト技法
・たとえば「18歳以上は500円、18歳未満は300円」という仕様があった場合、17歳と18歳で出力結果が変わることになります。このとき、入力データが「17歳のケース」「18歳のケース」を選定するのが、境界値分
ホワイトボックステスト:
・中身が分かる状態でのテスト
・テスト対象の内部構造に着目するテスト技法
・制御フローテスト、データフローテストなどがある
※制御フローテスト
・プログラムにおける処理の流れを可視化した「フローチャート」にもとづくテスト技法
・まず、ソースコードをもとにフローチャートを作成し、入力条件による処理の分岐を明確にする
・次に、作成したフローチャートから、プログラムの内部構造を網羅するテストケースを考えていく
※データフローテスト
・プログラムにおけるデータ(変数)の流れを確認するテスト技法
・プログラム内で変数が使われる流れを図で可視化し、適切な使われ方かどうかを確かめる
・変数が定義される前に参照されていないか、不要な変数が定義されていないか、などをチェックすることが可能
エンジニアが1年で学ぶ13個のこと後半に続きます