NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    Webアプリケーションの「面をつくる」とは?

    本記事は  【Advent Calendar 2024】  24日目①の記事です。
    🌟🎄  23日目  ▶▶ 本記事 ▶▶  24日目②  🎅🎁

    こんにちは。Webシステムプロデュース事業部の実方です。
    本日は12月24日、クリスマスイブです。メリークリスマス!
     ところで、クリスマスイブの「イブ」やメリークリスマスの「メリー」という言葉、なんとなくのニュアンスで使っていないでしょうか? 私の理解では「クリスマスイブ」はクリスマスの前日、「メリークリスマス」は祝いの言葉という意味かなーと思っていました。 改めて調べてみると、正確な定義は以下のようです。

    • クリスマスイブ

      「クリスマスの前日」と勘違いされやすいクリスマスイブ(Christmas Eve)。Eveは夕方や晩を意味する『evening』の古語『even』が語形変化したもの。つまり、Christmas Eveを直訳すると「クリスマスの夜」となるわけです。 では、なぜクリスマス当日の25日ではなく、24日の日没後からが「クリスマスイブ」なのでしょうか。その答えは、キリスト教の母体となったユダヤ教の暦にあります。 ユダヤ暦では、朝ではなく日没を境に日が変わります。現代での「12月24日の夜」は、ユダヤ教の暦で言うと「12月25日の始まり」になるのです。 つまり、12月24日の日没後からすでにクリスマスは始まっていると考えることができます。クリスマスイブは「クリスマスの前日の夜」ではなく「クリスマス当日の夜」という意味になるわけです。現代の日本でも、多くの教会で24日の夜にクリスマス礼拝が行われています。

    引用元:gifcal.com

    • メリークリスマス

      「メリークリスマス(Merry Christmas)」を日本語にすると「素敵なクリスマスを」「クリスマスおめでとう」といった意味になります。「メリー(marry)」には「陽気な」「楽しい」「お祭り気分の」といった意味があり、「メリークリスマス」は楽しいクリスマスをお祝いしようというポジティブなあいさつです。 また、メリーには「浮かれた」「ほろ酔い気分の」というニュアンスも含まれています。 現在ではこの単語は未成年などに使うのはふさわしくないとして、イギリスでは「ハッピークリスマス(Happy Christmas)」というフレーズがよく使われるようです。

    引用元:

    gifcal.com

    正しい意味を理解して使えていたでしょうか? 日常使いの言葉であればなんとなくのニュアンスで会話しても全く問題はありません。(私も普段からなんとなくで会話しています)

     しかし、エンジニアが正しい理解をせずになんとなくで会話をするのはご法度です。
    本記事では私がIT企業に勤めてニュアンスで会話されているなと感じた言葉No.1のWebアプリケーションにおける「面をつくる(切る)」という言葉について解説します。

    面をつくるを一言で

     「面」という言葉がどんな風に使われているかというと、こんな感じです。
    「開発環境のtest1面にAPIの向き先を変更してほしい。」
    「保守と環境が被るので面を切らないとだめですね。」
    私が「面」という言葉を理解したのはWebアプリケーション開発に携わるようになってからで、それまでは「なんかフロントにも環境があるんだなー」程度の理解で会話していました。 さらに「面をつくる」という言葉ですが、インターネット検索してもそれらしい記事にたどり着けず、結局なんとなくの理解で終わってしまう、なんてことが多いのではないかと感じています。
    なぜ「面をつくる」という表現なのかは定かではないですが、「面をつくる」という言葉を言い換えてみると、「1つのサーバ内で複数のアプリケーション環境を用意する」ことだと考えています。

    なぜ面をつくるのか?

     今回は仮想のシステム開発を例に面がどのように利用されるのかを解説します。
    12月が近づいてきたため、通常の保守開発と並行してクリスマスプロジェクトという改修プロジェクトが立ち上がったと考えてみます。 開発環境でクリスマスプロジェクトの改修やテストを実施するとなった場合に、同一の環境で改修をしてしまうと、既存のアプリケーションにもクリスマスプロジェクト用の改修が反映されてしまいます。 そのため、既存アプリケーションに影響のない別環境で改修を行い、リリースが決定した段階で既存環境にマージするというのが一般的な開発手法です。
    「別環境を用意する」という要件を実現したい場合には、面をつくるのがよく利用される手段になっています。 「面をつくる」ことは「1つのサーバ内で複数のアプリケーション環境を用意する」ことなので、別のサーバを新しく用意して開発環境を構築する手間や費用が削減できます。
    さらに、既存システムとのインターフェイスの切り替えも、URLを修正するだけで済むため追加のアプリケーション改修や、ネットワーク疎通が不要になります。
    このように普段から保守・運用で利用している環境には影響を与えずに、別のプロジェクトなどでアプリケーション改修やテストをしたい場合には面の利用が最適です。

     図は、保守・運用のアプリケーションをコピーし、クリスマスプロジェクトの改修を行うために別の環境で開発が進行することを表しています。

    クリスマスプロジェクト用の環境を用意し開発を進める
    このシステムでは開発環境にて保守利用している環境に「dev.abcde.jp」というURLが、クリスマスプロジェクトのためにつくられた環境に「dev2.abcde.jp」というURLが割り当てられています。

     「1つのサーバ内で複数のアプリケーション環境を用意する」を、日常生活で例えるなら、マンションが良い例になるのではないでしょうか。
    マンションは1つの住所に複数の部屋があります。 各部屋は共通的なつくりにはなっていますが、部屋にはそれぞれ別の住人がおり、各々の趣味嗜好によりインテリアなども異なってきます。

     これをWebアプリケーションの世界に置き換えてみます。
    サーバ(マンション)にはIPアドレス(住所)が割り当てられています。 サーバには共通のつくりのアプリケーションが複数存在し、各アプリケーションはそれぞれの要件を受けて改修を行っています。
    アプリケーションへのアクセスは部屋番号にあたる接続先URLのドメイン部を変更することで可能になります。 こうすることで、1つのサーバで仕様の異なる別のアプリケーションが開発可能です。

    URLのホスト部分の変化で同一サーバ内で要件の異なるアプリケーションが実現可能

     面をつくることにより関連システムとも別の環境同士で接続が可能になります。
    通常Webアプリケーションはサーバのみでは完結せず、外部システムとの連携や、DBサーバへのアクセスが発生するため、面をつくる場合は関連システムから見た接続先URLも合わせて変更が必要です。 プロジェクトを共に遂行している外部システムとのテストの際には、外部システムから自システムへの接続先もプロジェクト用の「dev2.abcde.jp」に変更してもらいます。
    DBについてもプロジェクト用のDB面を作成し、接続先を変更することになります。

    外部システム、DBの接続先も環境ごとに切替える

    面のつくり方

     これまで仮想のWebアプリケーションを例に面とは何かについて、概要をざっくりご説明しました。
    ここからは実際に面をつくるにあたってどのような作業が必要になるのか説明します。
    (ハンズオン形式での説明は私の意志を継ぐ者に委ねます)
    クリスマスプロジェクトの面の要件は以下の通りです。
    dev2.abcde.jpにアクセスしたときに、クリスマスプロジェクトのアプリケーションが参照できること

    これを実現するのに必要な作業は主に3つです。

    1. DNSサーバにCNAMEレコードを追加
    2. ドキュメントルートの作成
    3. バーチャルホストの追加
    CNAMEレコードを追加

    CNAMEレコードとは、ドメイン名に付与される別名のことです。
    DNSサーバにIPアドレスに対応するプロジェクト用のdev2.abcde.jpの別名を追加します。

    dev2.abcde.jp     IN CNAME            dev.abcde.jp
    dev.abcde.jp       IN A                 127.0.0.1

    これによって、「dev.abcde.jp」「dev2.abcde.jp」のどちらのURLでアクセスした場合においても、IPアドレス127.0.0.1のサーバに対してアクセスされるようになります。

    ドキュメントルートの作成

    ドキュメントルートとは、「dev2.abcde.jp」に対応するモジュールを格納するディレクトリです。
    Webサーバにクリスマスプロジェクトのモジュールを格納するディレクトリを作成します。

    /var/www/dev2/public

    作成したディレクトリにクリスマスプロジェクトのモジュールを格納します。

    バーチャルホストの追加

    バーチャルホストとは、1台のサーバ上で複数のドメインを扱えるようにする技術です。
    Apacheの設定ファイルに以下のような記述を追加します。

    <VirtualHost *:80>
        DocumentRoot /var/www/dev2/public
        ServerName dev2.abcde.jp
    ・・・
    </VirtualHost>

    ⅮocumentRootにはクリスマスプロジェクト用のモジュールが格納されているディレクトリを、ServerNameには追加した面のURLを指定します。 これによって、dev2.abcde.jpにアクセスされた場合はクリスマスプロジェクトアプリケーションが稼働するようになります。

    前提とする環境にもよりますが、基本的には1~3の作業を実施することで面がつくられます。

    おわりに

     今回はWebアプリケーションにおける「面をつくる」の概要について解説しました。 現場で「面」という言葉が出てきたときに、本記事を参照していただき少しでも理解が深まっていただければ幸いです。

    今夜はクリスマスイブ、お父さんお母さんという人格に面を1つ追加する、そんな日なのかもしれません。

    後日談

     今回この記事を書こうと思ったきっかけは、2年前に面という言葉についてインターネット検索をしても情報を得られなかったためです。記事を書くにあたって改めて検索しましたが、結果は変わらずでした。 私はまだ新卒入社3年目ですが、今は当時よりも便利な時代になったようで、Microsft Copilotで以下のように質問すると本記事の内容と大体同じ答えが返ってきました。

    1台のサーバでdev.abcde.jpと、dev2.abcde.jpのURLに対応する別のアプリケーションを稼働させるには?

    もちろん「面をつくる」という抽象的な言葉を具体的な表現に言い換えて質問する必要があり、以下のような質問では期待する答えは得られません。(「画面をつくる」と解釈されUI/UXについての説明が始まります)

    システム開発における「面をつくる」とは何か?

    具体↔抽象の考え方において、まだまだ人間が活躍する余地はありそうです。