KDL BLOG

2022.06.01
KDL社内・社員

【2022年 新入社員研修:番外編②】システムの裏側を覗いてみよう

こんにちは、新入社員の高木です!

これまで『前編』・『中編』・『後編』・『番外編①』と続いてきたこのブログも、とうとうラスト!!そんな今回は、『番外編②』ということで前回に引き続き、技術的な内容を掘り下げていきます。

『番外編②』を担当する高木です!

学生時代は、AI・データサイエンス分野の勉強に励んでおり、その中でも自然言語処理という言葉のAIの分野を専門としていました。チーム単位でのWeb開発経験はありませんが、APIやデータベース、クラウド、コンテナ技術といったいわゆるバックエンド側の知識に関しては、学生時代に一通りの学習経験がありました。これらは、Webエンジニアだけではなく、AIを中心に取り扱うデータサイエンティストにも必須の知識なのです。そんなバックグラウンドもあり、今回の研修ではバックエンドの開発に携わりました。

『番外編②』では、バックエンドとデプロイという二つの内容についてご紹介します。
バックエンドのパートでは、今回の開発でバックエンドチームが利用した技術を「なぜその技術を選定したのか」という観点も入れながら説明していきます!また、デプロイのパートでは実際に自分達が開発したコードをAWSというクラウドサービスに載せる部分(めちゃくちゃ大変だったところ…)について詳しく書いていきます。

システムの裏側を操るバックエンドとは?

バックエンドチームは、Web開発をするのは初めての杉山さん(学生時代は数学が専門)と私(学生時代はAIが専門)の二人がメインで、Web開発経験が豊富な伊藤さん(学生時代はWeb関連が専門)が二人のフォローをするというチーム体制でした。そのため使用技術と言っても「何を使うの?」というようなところから考える必要がありました。
そんなバックエンドチームが、今回の開発を進めていく上で優先的に決めないといけない事項は下記の3つでした!なぜなら、この3つはWebサイトを構築していくうえで非常に重要な役割を果たしているからです。

1. APIをどうやって実装するの?
2. データベースは何を利用するの?
3. データを操作するSQLはどうやって書くの?

では、なぜこれらの事項が重要であるのかを理解するために具体例を用いて考えてみましょう。今回は、”Webサイトにあるボタンをクリックすると違う画面に遷移する”動きを取り上げてみます。

サイト画面の表示はフロントエンドのプログラムが実現しています。ボタンがクリックされると、「指定した画面を表示する」という指示が窓口を通って裏側(バックエンド)に伝わり、プログラムが動き出します。プログラムは、たくさんのデータ(情報)が管理されている倉庫の中から、指定された画面を表示するのに必要なデータを取得し、適切な形に加工した上で画面に表示します。この一連の動作によって、”ボタンをクリックすると違う画面に遷移する”という動きを実現できるのです。

ここでいうバックエンドへの指示の窓口が「API」、たくさんのデータがある倉庫が「データベース」、データを適切な形に加工する言語が「SQL」という訳です。

まとめると…
API:「サイトで画面を表示する」「情報を登録・変更する」などのプログラムの窓口
データベース:サイトが持たないといけないデータ(情報)を管理するところ
SQL:データベースの中のデータ(情報)を適切な形に加工するプログラム言語

我々バックエンドチームは、この3つについて以下のように決定しました。

API:FastAPIというフレームワークを使用
データベース:セキュアに利用できるMariaDBを使用
SQL:Python(プログラミング言語)で書くことができるSQL Alchemyを使用

ここからは、どうしてこのような結論に至ったのかを一緒に見ていきましょう。

最初に、APIについてですが、バックエンドチームはPythonを使った開発経験があったため、Pythonで書くことができるWebフレームワークであるFastAPIを選択しました。
Pythonで書ける代表的なWebフレームワークにはFlaskやDjangoもあり、どちらも多少の経験がありましたが、今回の模擬開発は新しい技術を実践的に習得するチャンスであると考えて、あえて経験のないFastAPIを採用しました。

次に、データベースについてです。今回の開発でデータ周りの実装を担った高木はSQLiteというデータベースの構築経験がありましたが、SQLiteにはパスワードの設定がないという重大なセキュリティの問題がありました。模擬開発する採用管理システムは社外に漏れてはいけないデータを取り扱うため、クライアントからもセキュアな開発を希望されていました。ですので、セキュリティに不安のあるこちらのデータベースは見送らざるをえません。そこで、セキュリティ面で十分な対策ができ、世間で広く普及しているデータベース調べているなかでMariaDBの名がヒットしました。こちらも未経験の技術ではありましたが挑戦しました。

最後に、MariaDB(データベース)を操作する方法についてです。通常、データベースを操作する時はSQLという言語を利用します。しかし、今回はSQLではなくPythonで書くことができるSQL Alchemyというライブラリを利用しました。開発前よりこのライブラリの存在自体は知っていたのですが、他の技術同様に実際に使用したことはありませんでした。ですが、「せっかくなら、今回のバックエンドの実装は全部未経験技術で行なってしまおう」ということで採用しました。今振り返ると色々とポジティブシンキングすぎますね。

開発環境をデプロイ(構築)しよう

ここでは、実装したコードをクラウドに載せる部分について記載していきたいと思います。この部分も、引き続きバックエンドチームが担当した部分になります。

今回実装したコードは、全てAWSのEC2というクラウド上の仮想サーバーに展開しています。クラウドを選択した理由は、物理サーバーに展開するよりも、初期コストや運用コストが少なく、高い拡張性を持てるからです。チームの中に使用経験がある人が複数いたこともありAWSを選びました。

それでは、次に仮想サーバーの中を覗いてみましょう。下図は、EC2の中身をざっくりと表現したものです。初期設定段階でOSを選ぶことができるのですが、今回はチームの中に使い慣れている人がいるUbuntu ServerというOSを利用しました!

sin20225_01.png

図を見ると、EC2の中に4つの箱を確認できると思います。この箱、実はDockerという技術を用いたコンテナというものです。このコンテナを用いることで、本来複雑である開発環境の展開を容易に行うことができ、小さな変更にも柔軟に対処が可能ということもあり導入しました。今回の開発では、通信を安全に行うための「PROXY」、画面からのリクエストを送る役割の「FRONT」、画面からのリクエストを受け付ける役割である「API」、発生するデータを所持する役割の「DB」という計4つのコンテナを立てています(それぞれのコンテナの具体的な動きは、『番外編①』の記事を参照ください)。

チームの何人かはこのDockerを扱った経験がありましたが、問題はこのコンテナ一つ一つを統制するDocker Composeという技術です。全員が初めて経験するもので、このファイルの作成がバックエンドチームが今回最も苦労したところです。

4つのコンテナをDocker Compose一つで制御するのですが、特徴が異なる各コンテナを全て機能として成立させることは本当に大変でした。例えるなら、それぞれ特徴が違う元気な子供たちの面倒を見る先生です。先生は、子供達の友達関係や、一人一人の体調など、本当に多種多様な要素に気にかけてくれる存在ですよね。そんな先生をプログラムで作り上げるとなるとそりゃ大変です(あくまでも例えですよ!)。このファイルは開発初期段階から、最終日まで毎日書き換えていました。このファイルの疑問点を解消する際に、多くの先輩社員にアドバイスをいただきました。KDLの最強エンジニアの方達に感謝です。

こんなにたくさん

sin20225_2.png

ここでは、今回開発に使用した技術を図にまとめてみました。
たくさんの技術を使用したことが一目で分かっていただけると思います。模擬開発研修を振り返った時に、メンバー間でも「よくこんなにたくさんの技術を使って開発しようと思ったよ、自分達」という声があがっていました。単に使用技術の数が多いだけではなく、このうち約6割は今回の模擬開発中に学習を始めた技術なんです!研修中、新しい技術を学習しているときは全員の眼が輝いていたような気がします。エンジニアの学習意欲って凄いですね。新しい技術を学習することは大変でしたが、モチベーション高く継続できたのは優秀な同期の存在のおかげだと思います。

そして、配属へ

今回の番外編②の記事で、2022年度新卒入社社員が行った模擬開発研修関連の記事は最後となります。新入社員の中には、今回の模擬開発で経験した技術を配属後も頻繁に利用する人もいれば、分野の違いから直接触れる機会がない人もいます。しかし、全員がソフトウェア開発の一連の流れを経験できたことは、技術面においても社会人としても非常に貴重な経験でした。一つの成果のために、それぞれ得意分野が異なるメンバーが集結して協力する。この姿勢は、ソフトウェア開発だけではなく、社会人としての仕事のすべてにおいて共通すると思うからです。そんな経験を積んだ新入社員達は、それぞれの得意分野を活かして配属先の各チームに散らばっていきます。株式会社神戸デジタル・ラボの一員として、神戸発・最新・最強のテクノロジープロバイダの一員として、新入社員全員のこれからの活躍を是非ご期待ください!