本サイトについて

Log:Code

本サイトでは主に以下の技術・話題について公開しております

  • Webプログラミング
  • 機械学習
  • オートメーション化

開発環境について

本サイトでは、Web開発用にカスタマイズした Linux OS “LinuxNight” を公開しており、こちらを推奨環境としております

そのため LinuxNight を VirtualBox, VMware 等の仮想化ソフトウェアにインストールするか、デュアルブート環境を構築していただくことを想定しております

デュアルブート環境の構築は初学者には難易度が高いため、本ドキュメントでは、Windows環境に VMware Workstation Player という無料の仮想化ソフトウェアを導入し、LinuxNight をインストールする手順を記しております

なお、筆者がMacを所持していないため、Macでの開発環境構築手順は筆者がMacマシンを手に入れてから公開とさせていただきます。。。(欲しい)

LinuxNight構成

LinuxNight は、Ubuntu Linux (Linux Mint) をベースに以下のような構成でカスタマイズした Linux OS です(Ubuntu Linux は、数あるLinuxディストリビューションの中でも Windows に近いユーザインタフェースで、初心者にも使いやすいことで人気のOSです)

そのため、すでに Ubuntu や Linux Mint 等で開発を行っている方は、以下の構成を参考に自身で環境構築することも可能です

  • ベースOS:
    • Ubuntu 18.04 (Linux Mint 19.3 MATE)
  • エディタ:
    • VSCode
      • Web開発に便利なプラグインが多くあり、使いやすいため採用
  • パッケージマネージャ:
    • Linuxbrew
      • Mac用パッケージマネージャ Homebrew のLinux版
      • 最新パッケージをインストールしやすい
      • root権限不要で使用可能
      • 環境を汚さずパッケージをインストール可能
  • その他:
    • Git
      • 基本的にコードの管理はGitで行う
    • Docker
      • Web開発はDockerコンテナを使うことで環境の違いを吸収できる
      • 必要な環境を自動的に構築することも可能

Dockerについて

Dockerとはコンテナ型の仮想環境を構築するためのオープンソースソフトウェアです

仮想環境には大きく以下の3種類があり、いずれも「隔離されたアプリケーション実行環境」を提供するものです

  • ホスト型 host-type.png
    • ホストOSの上に別のOS(ゲストOS)をインストールする仮想化技術
    • ゲストOSをそのまま仮想環境にインストールするため、ある程度再現性が担保されている
    • ディスク容量やメモリ使用量が大きい、動作が重い・不安定などの欠点がある
  • ハイパーバイザ型 hyper-type.png
    • ハイパーバイザとはホストOSそのものを仮想化する制御プログラム
    • ホスト型より性能劣化が低い
    • ゲストOSとして使用できるOSに制限がある
  • コンテナ型 container-type.png
    • ホストOSのカーネルを流用して隔離されたアプリケーション実行環境(コンテナ)を実現する仮想化技術
    • 性能劣化がほぼなく、安定して動作する
    • カーネルの異なるゲストOSを利用することはできない(例えば、Linuxホスト上でコンテナとして利用できるのはLinux系OSのみであり、WindowsOS等を使うことはできない)

この仮想化技術の発展により、Web開発は大きく進展したと言われております

従来は、物理的なサーバマシンに様々なアプリケーションをまとめて放り込んでいるような状態であったため、以下のような問題がありました

  • 開発環境とサーバ環境を同一の状態にすることが難しく、開発時に動作していたものがサーバ公開時に動作しなくなるなどの問題が発生しやすい
  • 一つのアプリケーションに問題が発生した場合、他の正常稼働しているアプリケーションにも影響が出る
  • サーバ用途の転用が困難(ハードウェア構成の変更作業が発生する)
  • アプリケーション・ミドルウェアの構成を自由に変更することが困難
  • アプリケーション・ミドルウェアの構成を自動化することが困難

上記のような問題のほとんどが、仮想化技術により解決されました

特にコンテナ型の仮想化技術は、ホストOSの上で直接動作するため、ほぼ性能劣化することなく隔離されたアプリケーション実行環境を提供することができると言われております

そのため、現在のWeb開発においてはこのコンテナ型仮想環境を利用するのが主流になりつつあり、特に、Docker社の開発した Docker は、コンテナ型仮想化技術として広く普及しています

実際、GoogleのWebサービスなどはあらゆるものがコンテナ化されて運用されているらしいです

Docker開発環境について

元々コンテナ技術はLinuxカーネル上で実装されており、基本的にはLinuxマシンで運用するのが現在の主流です

そのため、最近のWeb開発はLinux系OS上でDockerコンテナを利用して行うのがトレンドになっていると感じます

筆者のメイン開発環境もLinux系OSの一つである Ubuntu ディストリビューションであり、当サイトで公開している LinuxNight は、筆者の開発環境をベースにカスタマイズした Linux OS になっております