こんにちは vjsigsigです( ´∀`)
8月15日から19日の5日間、サーバーサイド実践インターンシップにてガチャを題材にしたPHP実装体験を行い、サーバーサイドプログラミングの楽しさをお伝えしました。
詳しくは 2022年「実践!サーバーサイド実装体験5Daysインターンシップ」を開催しました をご覧ください。
PHPを用いたサーバーサイドのプログラムで開発を行うにあたって、使用するツールやミドルウェアはPHPだけではありません。
データを保持するデータベースや、webアプリケーション実装言語。また、それらのミドルウェアを動作させるためのコンテナ管理ツールが必要です。
アプリケーションを実現するための言語については、弊社はPHPがメインであるという事もあり、インターンでもPHPを採用しました。
どの言語を選択しても問題ありませんが、データベースやコンテナ技術はどれも現在のサーバーサイド開発の基礎的な技術となります。
今回はこれらの技術を一挙に紹介します!
アプリケーション言語:PHP
PHP は Web アプリケーションにおける主流な言語のひとつで、WordPress をはじめとする有名なプロダクトにも使用されており、世界的に根強い人気のある言語です。
PHP は動的な挙動が多く大規模開発に向かないのではないかと言われることもありましたが、現在ではタイプヒンティングなどの言語仕様の進歩や静的解析などのツールのサポートによって
スクリプト言語の良さを保ちつつ比較的安全に開発ができるようになっており、ソーシャルゲームのサーバサイドのような高負荷案件においても未だに現役で活躍しています。
元々はHTMLに埋め込む形のテンプレート的な処理を行うだけの言語でしたが、多くの機能追加により汎用的なスクリプト言語となりました。
Apache や nginx などのwebサーバーとの連携が可能で、サーバーサイドWebアプリケーション開発のスタンダードな言語です。
以前までは Apache のモジュールの一つとして提供されておりましたが、最近では独立したFastCGI機構のphp-fpmが提供されており、今回のインターンでも採用しました。
ちなみに nginx にて PHP を動作させる場合、この php-fpm は必須となります。
データベースとの連携モジュールは PDO、 ORM は Eloquent ORM を使用しました。
フレームワーク
CakePHP や Laravel が有名な所ですが、サーバーサイドインターンではオーバースペックなため軽量な 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の設定では少々時間が掛かってしまいました…
バージョン管理システム:Git
類似技術:Subversion, Mercurial
Linuxカーネルの開発者である、リーナス・トーバルズ氏により開発されたプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。
サーバーサイドに限らず、コードを書く職種であればもはや必須と言えるシステムです。
エンジニアに限らず小説家が Git を使い、差分を編集者と共有するケースもあるそうです。
GitHub や GitLab といったSaaSと連携する事で、チーム内でソースを共有する事はもちろん、比較差分が目視しやすく工夫されたGUIでコードレビューを行う事も可能です。
一人で開発を行う場合恩恵を感じにくくはありますが、まだ Git に触れた事の無い方はぜひとも使いこなせるようお試し頂く事をオススメします。
最後に
サーバーサイドインターンを題材に、ざっくりとスタンダードな技術を紹介させて頂きました。
サーバーサイドエンジニアはWebアプリ、業務系、ゲームと幅広い開発で必要とされている職種です。
最近では社内にサーバーを構えること無く、AWS や GCP などのクラウドサービスを利用することが一般的となっており、リモートワークとも相性の良い職種と言えるでしょう。
サーバーの構築・チューニング・保守、コード設計、データベースチューニングなど、あらゆる技術知識を駆使して高負荷に耐えうるシステムを構築し、リリースを迎え、想定通りの高負荷がキッチリ捌けていることをグラフで監視する。その瞬間に味わう安堵感と達成感がサーバーサイドの魅力の一つと言えるでしょう。
インフィニットループではサーバーサイド技術をお互いに高め合う仲間を募集しています。
この記事をお読み頂き興味を持たれた方、弊社への エントリー をお待ちしております!