LIVESENSE ENGINEER BLOG

リブセンスエンジニアの活動や注目していることを発信しています

【新卒エンジニア応援】これさえ知っておけば困らない?!エンジニアが最初に学ぶべき技術用語10選

これは LIVESENSE madeブログ 4月のお題 の参加記事です。

こんにちは。転職ドラフトでエンジニアをしている verdy_266 です。

新入社員の皆さん、ご入社おめでとうございます! より良い世界のために、ともに頑張っていきましょう!

僕はWebアプリケーション開発の経験がない状態でリブセンスに入社したのですが、イチからWebアプリケーション開発について学んでいく際に、わからない用語が多すぎて苦労したことを覚えています。

  • 先輩が当たり前のように使っている言葉なので、それってどういう意味ですか? とか質問しづらい。わからない単語が多いので、全てについて明らかにしてから進むことが難しい。
  • ググったとしても、その用語に関する説明の中にもわからない単語が出てきたりして、頭のキャパが追いつかない。
  • 具体的な技術領域を指す言葉ならまだしも、抽象的な用語だと、調べてもあまり実感が湧かない。

ということで、社内ヒアリングなどの結果、とりあえず最初はここら辺の単語を押さえておけば多少はスタートダッシュがスムーズになるのではないか、という用語をピックアップしてみました。Webアプリケーション開発の経験がない人のメンターになった先輩エンジニアの方や、エンジニアの会話の内容がさっぱりわからなくて困っているエンジニアでないみなさんにも有用かもしれません。
抽象的な用語の説明が多いので、厳密な定義についてはある程度犠牲にしている面もあります。ご了承ください。

それでは行ってみましょう!

システム構成関連

「サーバー」と「クライアント」

ある一定の機能を提供するためのコンピュータのことをサーバーと呼び、サーバーに機能の使用を要求する端末やアプリケーションのことをクライアントといいます。
例えば、簡素なWebサイトであれば、html や css のファイルを配信するコンピュータがあれば事足りることになりますが、この機能を担っているのがWebサーバーです。ブラウザでURLにアクセスすると、ブラウザはWebサーバーにサイトのデータを配信するように要求し、その結果受け取った内容を表示するのです。

Webサーバーと区別しておきたいのがWebアプリケーションサーバー(APサーバー)です。Webサーバーが静的な(どんな状況でも中身の変わらない)データを配信するのに対し、Webアプリケーションサーバーは、ログインしているかどうか、表示対象のコンテンツが公開されているかどうか、などの情報をもとにデータを書き換え、動的な(状況によって中身の変わる)内容をWebサーバーに受け渡す役割を担います。

「API」

Application Programming Interface の頭文字で、異なるアプリケーション間を繋げるためのインターフェースのことを指します。Webアプリケーション開発の現場では、Webの仕組みを使った API である Web API を単に API と呼ぶことが多いので、ここでは API として紹介しています。
特定のURLにアクセスすると、プログラムにとって理解しやすいシンプルな形式で情報を返してくれるようなものと理解してもらえば良いと思います。APIの返す内容に応じてアプリケーションの挙動を変更するというのがよくあるユースケースです。
例えば、Open-Meteo というお天気APIを例にとる*1と、北緯35.6785度、東経139.6823度(東京)における地上2mの気温を取得するには、以下のようなURLにアクセスします。

https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823&hourly=temperature_2m&timezone=Asia%2FTokyo

ブラウザでアクセスしてみると、文字や数字がワッと羅列された画面が表示されると思います。これをプログラム上で切り貼りして必要な情報を取り出し、Webサイトに表示させたりするのです。

「SDK」「ライブラリ」

SDK は Software Development Kit の略です。SDK もライブラリも大体同じような意味で、いわゆるプログラミングをするためのツールキットです。Android アプリ開発のためのツールが集まったものを Android SDK と呼んだり、「Python で数値計算を行うなら Numpy というライブラリを使うと良いよ」などと言われたりします。

「環境」(development・開発 / staging・ステージング / production・本番)

開発作業は複雑な作業の繰り返しなので、試行錯誤を行い、求める機能が実現されていることを確かめるまでは世に出しません。そのため、さまざまな端末でアプリケーションが動作するようにしておいて、試行錯誤用、動作確認用、一般公開用などと用途を区別します。この「アプリケーションが動作する端末」のことを環境と呼びます。

開発者が日常的に試行錯誤を行う場所のことを開発(development)環境などと呼びます。大抵は開発者のPC端末を指すことが多いと思います。
ある程度求める機能が実現されたら、作業の依頼者に動作を確認してほしいこともあると思います。そのような時には、最終的にユーザーがアクセスする環境とできるだけ設定をそろえ、かつチームのメンバーしかアクセスできない環境に変更を反映し、確認してもらうと良いでしょう。この動作確認用の環境のことを、ステージング(staging)環境などと呼びます。
動作確認が済んで、エンジニアのレビューも通過したら、いよいよ実装した内容を世に出すことになります。全世界の人からアクセスできる環境のことを本番(production)環境と呼びます。

どのような環境を用意して開発するか、それぞれの環境をどう呼称するかは、チームによってかなりばらつきがありますので、チームの流儀に従ってください。

開発の大雑把な流れ

「プルリクエスト」

Webアプリケーション開発でよく使われるソースコード管理ツール、GitHub の用語です。GitLab を使っている場合は、マージリクエストと呼ばれます。プルリクとか、PRとか略されることも多いです。ソースコードの管理者に対するレビュー依頼みたいなものと思ってもらえれば良いです。
実装が終わったら、 GitHub に push(アップロード)してプルリクエストを作成します。修正依頼に対応して、他のエンジニアの承認(approve)が得られたらリリース(後述)することになります。Git に関する作業フローについては、チームによってもばらつきがある部分なので、先輩に教えてもらいましょう。
push とか pull とか merge とかごちゃごちゃになると思いますが、 Git に慣れ親しむと感覚的にわかるようになっていくと思います。

「CI/CD」

サクッと調べると、「継続的インテグレーション / 継続的デリバリー(Continuous Integration / Continuous Delivery)」の略だ、とか言われるのですが、さっぱりわかりませんね(笑)。CIはテスト、CDはリリース準備だと思ってもらえれば良いと思います。リリースについては次の項で述べるので、ここではテストの説明をします。
テストといっても、学校でやったような理解度テストとかのテストとはちょっと違って、ここではプログラムが期待通り動作するかどうかを確認する作業のことを指します。プログラムを変更していると、知らないうちに別のところも変更してしまったとかいう事故が起こりうるので、このアプリケーションはこういう動作をするはずですというリストを事前に定義しておいて、その通りにアプリケーションが動くかどうかを網羅的にチェックします。チェックがプログラムによって実現されていると、特に自動テストなどと呼んだりします。
GitHub Actions や CircleCI などのツールを使うと、 GitHub に push したのをきっかけに勝手にテスト作業を行なってくれるように設定することもできます。テストに合格しないと次のステップに進めないようにブロックすることも可能です。

「ビルド」「デプロイ」「リリース」

アプリケーションはステージング環境や本番環境などの環境に配備されて初めてユーザーの利用に供することになりますが、配備する対象のソースコードを組み立てることをビルドと呼びます。具体的には、ソースコードをコンパイルしたり、依存するライブラリと組み合わせたりする作業を指すことが多いです。前項と関連して、CIにビルドまでを含めることも多いようです。
ビルドが完了したら、いよいよステージング環境や本番環境などに成果物を配備します。配備作業のことをデプロイと呼びます。具体的には、対象となる環境で新しいバージョンをインストールするようなイメージで良いと思います。
デプロイが完了したら、アプリケーションに外部からのトラフィックを流し、ユーザーがアクセスできるようにします。この作業のことをリリースと呼びます。リリースまで済むと、ようやくユーザーはアプリケーションを使用できるようになります。

Webアプリケーション開発においては、デプロイするとすぐにアクセスを受け付けるように設定してあることも多く、そのためデプロイとリリースはほぼ同一の作業として扱われることも多いかと思いますが、 ECS の Blue/Green デプロイなど、デプロイとリリースを分ける(本番環境にデプロイし、動作確認してからトラフィックを向ける)ことができる機能も存在します。

「切り戻し」

めでたく自分の実装がリリースされた! と思いきや、リリース直後から大量のエラーが発生してしまった、、と言うことも残念ながらあります。このような場合は、リリースを取り下げ、リリース前の状態に戻してやる作業を行いましょう。この作業のことを切り戻しと呼びます。
Git で言えばコミットを取り消す作業に相当することが多いですね。

アジャイル開発関連

Webアプリケーション開発を行なっているチームでは、アジャイル開発と呼ばれるアプローチで開発が進むことも多いでしょう。プロダクトが新しい価値を素早く提供できるように、試行錯誤を繰り返しながらプロダクトをよくしていくアプローチのことをアジャイルと言います。アジャイル開発においては、現実の物体を比喩的に用いた単語が用いられるため、混乱しやすいという意見がありましたので紹介します。

「チケット」

タスクのことです。バックログと呼ばれる残作業リストにタスクを追加することをチケットを発行すると言い、タスクを終了することをチケットを閉じるなどと呼びます。

「ポイント」

それぞれのチケットに対し、実装にどのくらいの工数が必要かを数値で表したもののことを指します。開発者でミーティングを行い、大体これくらいのポイントは必要だよね、という合意の上で実装に取り掛かることが多いです。
「1ポイントで実装できる分量はプロジェクトの進捗とともに変動するため、ポイントとは単位時間(1時間とか1日とか)で実装できる分量を示すものではない」ことが理解できると、スクラム初心者を脱したと言えるのではないでしょうか。

その他

エンジニアは独特な語彙でコミュニケーションをとることが知られています。「メモリを食う」「サーバーが落ちる」「エラーを握りつぶす」「ほげふが」「えいやで実行する」……こういう語彙について知りたい場合は以下の記事を参考にすると良いでしょう。数も多いのでここでは割愛します。

qiita.com

終わりに

エンジニアは覚えることが多い職業かもしれませんが、できることがかなり広がる夢のある職業だと思っています。
こうしてブログを活用し、一緒に働いているかどうかに関わらず自らの知見を共有する雰囲気があることも大好きです。
この記事を読んだ新卒の方が、将来素晴らしいエンジニアに成長していくことを願ってやみません。ともに頑張りましょう!

*1:例として認証が不要なAPIを示したかったため、こちらのブログを参考にさせていただきました: APIキーもログインも不要!完全無料で使える天気予報API「Open-Meteo」を使ってみた! - paiza times