ITエンジニア開発用語集 スキルアップ編

公開日:2019.04.16

スキルアップ
 

スキルアップ編では、すでに数カ所の開発現場で経験を積んだ方に向けて、エンジニアとしてさらにスキルアップするためのキーワードをご紹介します。ご紹介する用語は、どれも一つひとつが奥深い内容になるため、今後のスキルアップの参考として、ぜひご確認ください。

5つの開発効率化のための用語

開発効率が上がると、「仕事が着実で速い」と評価につながります。また、それにより、より良い条件の契約や給与アップにつながることもあります。ここでは開発効率のための5つの用語をご紹介します。

仮想マシン

仮想環境は、自分の端末上に本来のものとは違う環境を構築するための仕組みです。例えば、開発に利用している端末のOSがWindows10でも、実際に本番システムとして使われるサーバーのOSは、Windows2012であったり、Ubuntuであったりなどということはよく起こります。

そのようなときには、自分の端末の中に仮想的に別のハードウェア環境を作り、その中に本番で利用するOSをインストールします。すると、新たなハードウェアを用意せずとも自分の端末内で試験まで行えるようになり、開発が効率化されます。仮想環境の構築に利用されるソフトウェアは、VMWare、VirtualBox、Parallels、Docker等があります。無償、有償それぞれありますので、ご自分のスタイルにあったものを見つけてください。

構成管理ツール

構成管理ツールとは、新たな環境を構築するときに使われるツールです。JSONやYAMLなどの文法で記述された設定ファイルを構成管理ツールに読み込むことによって指定のハードウェア上に環境を作り出します。

構成管理ツールは、先程登場した仮想環境と合わせて使われることが多いです。例えば、本番環境のOSがubuntuだとして、そのubuntu上で使われるミドルウェアとそのバージョン、設定項目などをすべて設定ファイルの中に記述しておきます。その設定ファイルを構成管理ツールで動かすことにより、全員が本番と全く同じミドルウェアの構成と設定を構築することができるようになります。

複数人が関わるプロジェクトにおいては、プロジェクトメンバー全員が、このように本番と同じ仮想環境をそれぞれの端末に持っておくことにより、ある開発者の端末で動いたプログラムが別の開発者の端末では動かない、などという状況を避けることができます。

構成管理ツールの代表的なものとしては、Ansible(アンシブル)、Dockerfile(これはDockerコンテナを作るときに利用します)、Chef(シェフ)、Puppet(パペット)などがあります。

ユニットテストツール

ユニットテストツールは、テスト用のプログラムを実行するためのツールです。プログラムの品質を担保するために導入されます。

テスト用プログラムとは、開発したプログラムをテストするためのプログラムです。ドライバやスタブのような位置づけで作成し、例えばドライバであれば入力値とそれに対して期待する出力値をテスト用プログラムに記載しておき、実際にその通りになるかをユニットテストツールのなかで自動的に判断します。

単体試験時の全てのパスを通すためのホワイトボックス試験であれば、それぞれのパターンをテスト用プログラムの中で自動的に生成して試験を行うため、手動で試験をするときよりも遥かに効率があがります。また、1度テスト用プログラムを記述しておくと、何度でも好きなタイミングで実行することができるので、プログラムの内部構造を変更してもすぐに動作や影響範囲を確認することができます。

テスト自動化

テスト自動化はユニットテストを自動的に動かす仕組みです。ユニットテストが起動されるタイミングを予め設定しておき、自分の好きなタイミングでユニットテストを実行することができます。例えば、プログラムを書いている最中、ファイルを上書き保存するたびにユニットテストを実行します。そうすることにより、プログラムが書き終わると同時に単体試験も終わっているという状態にでき、単体テスト分の時間を削減することができます。また、Gitのリポジトリにコミットしたタイミングなどでテストを起動するような場面もあります。そうすることにより、自動的に結合試験を実施することができます。

テスト駆動開発

テスト駆動開発はプログラム開発手法の一種で、プログラムを開発する際に、最初にテスト用のコードを書き、そのテストが動作する必要最低限の実行を行った後、コードを洗練させていくという短い工程を繰り返すスタイルです。先程テスト自動化でご紹介した、先にテストを書いておくようなスタイルをもっと極端に行います。テストを始めに書いてしまうことから、内部仕様の曖昧な部分をあぶり出すことができ、設計者と開発者の考えの齟齬をなくすことができます。

8つのチーム開発用語

開発はプログラマが1人で行うより、複数人で行うことのほうが多いものです。また、スクラム開発の場合は、企画やマーケティングといった職種の人も同じチームとして活動します。ここでは、このような状況における、より便利に、効率よく開発をするための8つのチーム開発用語をご紹介します。

ソースコード管理ツール

ソースコード管理ツールは、複数人で同時にプログラムを書く際に利用するツールです。複数人で開発を行う場合、ファイルを集中管理して開発者同士で共有することはもちろんのこと、誰がいつどのファイルを編集したかも管理する必要があります。ソースコード管理ツールはそのような際に利用します。サーバーにリポジトリと呼ばれるソースコードの置き場を用意し、そこでソースコードの一元管理を行います。数年前まではSVNと言われるソースコード管理の仕組みが多く使われていましたが、ここ数年はGitと呼ばれる仕組みが使われています。

チェックアウト

開発者がリポジトリからソースコードを引き出し、ローカルの端末で編集可能な状態にすることをチェックアウトと言います。

コミット

自分が作成したソースコードをサーバーのリポジトリに反映する作業のことです。SVNの場合は、コミットを行うとSVNサーバーのソースコードが更新されます。Gitの場合は、コミットはローカル上で行い、その後それをサーバーのリポジトリに反映するプッシュという作業が必要になります。

マージ

複数の開発者が同時に同じファイルを編集してしまった場合などに、2つのソースコードの差分を比較して、新しく記述された部分を検出し、新たなソースコードに結合することをマージと呼びます。

コンフリクト

複数の開発者でまったく同じファイルの同じ箇所を修正してしまい、ソースコード管理ツールがマージを行えない状況のことをコンフリクト(衝突)と呼びます。こうなった場合、手動でソースコードをマージする必要があります。

デグレード

ソースコードが新しいバージョンのソフトウェアが、品質の悪いバージョンに置き換わってしまうことを言います。多くの場合、誰かが古いバージョンを上書き更新してしまった場合に発生します。ソースコード管理ツールはこのようなデグレードの予防に多いに役立ちます。現場では「デグレ」と略されて使われる場合が多いです。

プルリクエスト

Gitで利用される仕組みです。Gitは通常、開発者ごと、機能ごとにブランチという作業を分流させる機能を使います。分岐されたソースコードを本流にマージさせる際に、リポジトリ管理者に対して出すマージ依頼をプルリクエストといいます。リポジトリ管理者はプルリクエストを受け付けたら、マージ内容を確認し、マージするか差し戻すかを決定します。

CI

CIは継続的インテグレーションと言い、アプリケーションを開発していく際に、ビルド・テスト・デリバリーを継続的に行える仕組みを指します。例えば、開発中のアプリケーションを企画担当者が確認したい場合、そのたびに開発者に依頼することなく、半自動的に企画担当者の手元に届くような仕組みです。

ビルドはコンパイルやトランスパイルなどの行為を示すことが多いです。よくあるパターンとして、スタートはリポジトリへのコミットから始まります。CIツールと呼ばれるシステムがリポジトリへのコミットを検知し、ソースコードをチェックアウトしてビルドを行います。テストでは、先ほど登場したテスト自動化も組み込まれることが多いです。ビルドされたシステムに対して自動化された結合テストや総合テストが自動的に行われます。

テストをクリアすると、デリバリーです。テストを通過したシステムが、ステージング環境(サーバーサイドプログラムなら対象サーバー、スマートフォンアプリならばTestFrightなどの環境)にデプロイされます。そして、その結果がコミュニケーション用に使われているSlackなどのツールに通知が行われ、企画者の知るところとなります。

こういったCIを行うための、CIツールと呼ばれるツールはいくつか存在しています。また、オリジナルで構築する場合もあり、現場ではプロジェクトが始まると「今回はCIどうする?」といったような話し合いが行われます。

[Git]コミット→PULLリクエスト→ターゲットブランチにマージ[CIツール]ソースコードをPULL→自動テスト→サーバーに反映→コミュニケーションツールに通知
(CIの一例)

3つの設計用語

少し経験を積んでくると、設計を行う場面も増えてくると思います。設計は、教科書に書いてあるような非常に基本的な方式に加えて、実際の現場ではこれからご紹介するようなテクニックを使う場面が多く登場します。設計レビューなどがある現場では、頻繁に登場する用語もあるので、押さえておきましょう。

GoFのデザインパターン

デザインパターンとは、過去の設計者が編み出した設計のノウハウを名前付けし、カタログ化したものです。これらの中で最も有名なのが、GoF(Gang of Four)と呼ばれる4人の共著者によって書かれた書籍、「オブジェクト指向における再利用のためのデザインパターン」に登場する23のデザインパターンです。例えば、木構造を表現するCompositeパターン、オブジェクトの生成をサブクラスに追い出すFactory Methodパターンなど、代表的なノウハウが存在します。このデザインパターンは広く知られ、現場では会話の中で当たり前のように登場するので、覚えておくと良いでしょう。

AWSクラウドデザインパターン

AWSクラウドデザインパターンは、Amazonによって提供されているAWS(Amazon Web Service)を使ってシステムを設計する際に利用できるデザインパターンです。AWSは他のレンタルサーバー業者が用意しているようなVPS(Virtual Private Server)の他に、マイクロサービスと呼ばれる機能を細分化した単位のサービスを提供しています。これらマイクロサービスは上手く組み合わせると、オリジナルで組み立てるよりも安価で汎用性をもたせたシステムを構築することができます。これらの組み合わせのノウハウを集めたものがAWSクラウドデザインパターンです。最近では、AWS以外でもマイクロサービスを提供する企業が多くなってきたので、それら別事業者のサービスでもこのデザインパターンを当てはめることができます。

ドメイン駆動設計

ドメイン駆動設計とは、設計手法の一種で、オブジェクト指向のアーキテクチャにおいて、ドメイン層に焦点を置いて、ドメインの深化を追求していく手法です。この中で登場する「境界づけられたコンテクスト」という考えが、ドメイン間の関係性を適切に表現できることから、最近ではマイクロサービスの設計をするときにも、このドメイン駆動設計の考え方が活用されるようになってきました。これからマイクロサービス化が普及すると、とても重要になってくる用語なので、今のうちから覚えておくと良いでしょう。

スキルアップ編では開発の現場に慣れてきた方のために、エンジニアとして専門性を高めていくためのキーワードをご紹介しました。今の現場やこの先のキャリアを踏まえながら、ぜひ今後のスキルアップの参考にしてみてください。

(2019年4月現在)

AKKODiSコンサルティングに関するお問い合わせ