インフィニットループ 技術ブログ

2022年09月05日 (月)

著者 : vjsigsig

サーバーサイドインターンでの採用技術一挙紹介

こんにちは vjsigsigです( ´∀`)

8月15日から19日の5日間、サーバーサイド実践インターンシップにてガチャを題材にしたPHP実装体験を行い、サーバーサイドプログラミングの楽しさをお伝えしました。

詳しくは 2022年「実践!サーバーサイド実装体験5Daysインターンシップ」を開催しました をご覧ください。

PHPを用いたサーバーサイドのプログラムで開発を行うにあたって、使用するツールやミドルウェアはPHPだけではありません。

データを保持するデータベースや、webアプリケーション実装言語。また、それらのミドルウェアを動作させるためのコンテナ管理ツールが必要です。

アプリケーションを実現するための言語については、弊社はPHPがメインであるという事もあり、インターンでもPHPを採用しました。
どの言語を選択しても問題ありませんが、データベースやコンテナ技術はどれも現在のサーバーサイド開発の基礎的な技術となります。

今回はこれらの技術を一挙に紹介します!

アプリケーション言語:PHP

PHP は Web アプリケーションにおける主流な言語のひとつで、WordPress をはじめとする有名なプロダクトにも使用されており、世界的に根強い人気のある言語です。
PHP は動的な挙動が多く大規模開発に向かないのではないかと言われることもありましたが、現在ではタイプヒンティングなどの言語仕様の進歩や静的解析などのツールのサポートによって
スクリプト言語の良さを保ちつつ比較的安全に開発ができるようになっており、ソーシャルゲームのサーバサイドのような高負荷案件においても未だに現役で活躍しています。

元々はHTMLに埋め込む形のテンプレート的な処理を行うだけの言語でしたが、多くの機能追加により汎用的なスクリプト言語となりました。

Apachenginx などのwebサーバーとの連携が可能で、サーバーサイドWebアプリケーション開発のスタンダードな言語です。
以前までは Apache のモジュールの一つとして提供されておりましたが、最近では独立したFastCGI機構のphp-fpmが提供されており、今回のインターンでも採用しました。
ちなみに nginx にて PHP を動作させる場合、この php-fpm は必須となります。

データベースとの連携モジュールは PDO、 ORM は Eloquent ORM を使用しました。

フレームワーク

CakePHPLaravel が有名な所ですが、サーバーサイドインターンではオーバースペックなため軽量な SlimFramework を使用しました。

構文参考

インターンにて実装してもらったガチャ抽選処理の一部です

データベース:MySQL

類似技術:PostgreSQL, MariaDB

MySQL はオープンソースのデータベース管理システムです。データの永続化に使用します。
サーバーサイドインターンでの用途は主に下記の管理を目的に導入しました。

  • ユーザーデータ管理
  • ユーザーガチャ履歴
  • ユーザー所持カード管理
  • カードや排出率を定義したマスタ

アプリケーションからは Eloquent ORM でやり取りします。
ユースケースとして追加課題の通貨機能を実現するためには、新たにコイン管理テーブル作成し、アプリ側はコイン管理テーブルのModel作成を行う。といった流れでテーブルを追加します。

データベースクライアント

mysql-client

コマンドラインから MySQL に接続するためのクライアントです。基本的にはこれだけでデータの閲覧や操作が可能です。

phpMyAdmin

ブラウザからMySQLに接続するためのクライアントです。
ブラウザから直感的にデータベースの操作を行う事ができ、MySQLへの接続ユーザーの作成や権限管理までこれ一本で完結します。
ただしアサインされたチームによってはphpMyAdminのようなGUIツールが導入されていないパターンもありますので、コマンドラインの方でも対応出来るよう練習しておきましょう

コンテナ技術:Docker

類似技術:LXC, LXD, Kubernetes

Docker社が開発しているコンテナ型仮想環境の管理ツールです。
最近では DockerDesktopForWindows の登場により、Windowsでもグラフィカルにコンテナ操作が可能となりました。

Dockerを使用する利点は大きく2点

  • 用途に応じたソフトウェアをインストールする必要が無い
    • 例えば動画のフォーマットを変更したい場合、通常だと変換アプリを探してインストールする必要があります
    • 半年後にまた同じことを行い、過去にインストールした事を忘れて新たな変換アプリをダウンロードしちゃいますよね
    • そしてどんどん環境が汚れていき、プログラム一覧が整理しきれなくなるのはよくある話だと思います
    • Dockerを使用する場合は動画変換用のイメージに動画を食わせるだけで、変換が完了次第コンテナが終了します
      • 個々のアプリケーションをインストールする手間が不要!
      • インストールしたアプリケーションの管理が不要!
  • 開発環境の構築が容易
    • コンテナを常駐させる事も出来るので、webサーバーのようなデーモン型にも対応しています
    • docker-compose を導入することで最速1コマンドで環境を立ち上げる事が可能です

今回のインターンでも Docker は使用しましたが、あくまで本質はガチャプログラムの実装ですので開発環境の定義は全て1コマンドで立ち上がるようにしました。

※とはいえ、Windowsでの開発環境構築に必要なWSLの設定では少々時間が掛かってしまいました…

左:Webサーバーイメージ作成用Dockerfile 右:docker-compose.yml

バージョン管理システム:Git

類似技術:Subversion, Mercurial

Linuxカーネルの開発者である、リーナス・トーバルズ氏により開発されたプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。

サーバーサイドに限らず、コードを書く職種であればもはや必須と言えるシステムです。
エンジニアに限らず小説家が Git を使い、差分を編集者と共有するケースもあるそうです。

GitHubGitLab といったSaaSと連携する事で、チーム内でソースを共有する事はもちろん、比較差分が目視しやすく工夫されたGUIでコードレビューを行う事も可能です。

一人で開発を行う場合恩恵を感じにくくはありますが、まだ Git に触れた事の無い方はぜひとも使いこなせるようお試し頂く事をオススメします。

改修前の箇所が赤くハイライトされ、青緑の部分に書き換わっているというように、差分が一目瞭然である

最後に

サーバーサイドインターンを題材に、ざっくりとスタンダードな技術を紹介させて頂きました。

サーバーサイドエンジニアはWebアプリ、業務系、ゲームと幅広い開発で必要とされている職種です。

最近では社内にサーバーを構えること無く、AWSGCP などのクラウドサービスを利用することが一般的となっており、リモートワークとも相性の良い職種と言えるでしょう。

サーバーの構築・チューニング・保守、コード設計、データベースチューニングなど、あらゆる技術知識を駆使して高負荷に耐えうるシステムを構築し、リリースを迎え、想定通りの高負荷がキッチリ捌けていることをグラフで監視する。その瞬間に味わう安堵感と達成感がサーバーサイドの魅力の一つと言えるでしょう。

インフィニットループではサーバーサイド技術をお互いに高め合う仲間を募集しています。
この記事をお読み頂き興味を持たれた方、弊社への エントリー をお待ちしております!

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!