ゼロからの通信対戦オセロ

はじめに

はじめまして! 2016年のこの4月に入社した青木と申します。まさしく今月に入社したばかりです。

まず、研修の一環ということで私のような新入社員がこのブログに記事を投稿しているということを明言いたします。ではその研修課題とはなんなのか。

 

「通信対戦が可能なオセロを作る」
(自力で)

流石ベンチャー、早速意表を突きにきた!と、最初に聞かされたときに新入社員ながら思いました。まあ研修としてやる企業はそうはいないだろうと想像つきます。なぜオセロなんでしょう。当然ながらオセロ自体は弊社に関係ないはずです。

なにはともあれ新入社員である私らに3か月の期間を与えるので自分の力でオセロを作りあげなさいというオーダーをいただきました。自分の力でというところがハードル高めなポイントになります。

というのも、私はこれまでの人生で情報系の勉強に触れたことがありません。ですので、この課題の達成が厳しいものなのかどうかの判断すらつけることができません。また、同じ新入社員の田中くんも同様な知識レベルです。

そのような知識レベルの我々が、どういう過程を経て、通信対戦オセロを作り上げ、成し遂げるか。それを記していこうというのがこの記事・これからの記事のねらいです。

これから毎週更新することになったので、今後ともよろしくお願いします。

今週の目標

というわけで野に放たれました青木です。

目標とは銘打っていますが、最初の記事更新となりますので、まず現状を書き記していきます。

野に放たれたという表現ですがこれがまさしくで、ここ1週間は検索エンジンという広大な大地で目的地もわからず彷徨っているかのようです。

ITについて何を理解していないかというと何も理解してないのですが、最終的に何を要求されているかはある程度理解できます。というよりそもそも、成果物として出すうえでの要件をいただいているのでここにそのままコピペしておきます。

  • ゲームにエントリーする
  • 2人エントリーされたら対戦スタート(通信対戦)
  • 先行後攻を決める
  • 15秒カウンター付き、15秒過ぎたら負け
  • タッチかクリックでオセロの駒を置く
  • 手詰まりの場合は自動的に相手のターン
  • 2人とも手詰まりでゲームオーバー
  • 全てマスが埋まったら勝敗判定
  • ゲームのプロセスを記録・表示 ・勝率ランキングを出す

この要素が詰まったオセロが作れるのであれば、ブラウザで動かすのかスマートフォンのアプリとして動かすのかなど、我々の裁量で決めてよいとのことです。

こうやって並べただけでは意味がないので、これらの要件それぞれを「機能」に落とし込みます。そうすると、どういう技術が必要なのかがやっと浮いて出てきます。その技術をもってして如何にして作るか……そもそも何の技術を使うか……を検索エンジンを駆使して判断をするというところからスタートしました。

そのようなことを、この入社してからの2週間かけて検索・検討していった結果、ブラウザにてjavascriptでオセロというゲーム部分の処理を書き、サーバーにてJAVAで同期の部分を制御して、データベースとしてMySQLで勝利数などのデータを管理していくことになりました。

使う技術はこのように決まったので、それらを発揮して機能を作るために、何を調べて勉強するべきなのか見えてきました。

ここで今週の目標として、サーバーとの通信を果たすということに設定しました。

なぜサーバーから手を付けるかというと、研修課題であるところの通信対戦可のオセロですが、オセロというゲームがどういうロジックで作られるかというところを考えるところに研修の肝があるわけではなく、通信というのを理解するところにあると考えたので、サーバーから触ることにしました。

行ったアプローチ

20160420_192302

 

 

というわけでサーバーをいただきました。

サーバーから攻略したい!と意気込んでみたものの、そもそもサーバーに対する理解が少なく、そもそも何なのか調べることから始まりました。 ここで、その調べたことを記事として書き記すことができたら良かったのですが、いまだに理解が追いついてない部分があるので迂闊にわかったような文章を書くのは危険と判断して書きません。

とはいえ、通信対戦という面では、ブラウザ間を仲介するところに立つというイメージ通りのことができればよさそうであり、最初はその通りのことができるように設定してみます。

このサーバーはOSも何もないまっさらなものをいただいたので、OSをインストールするところからです。調べたところ、サーバーとしてのOSという中では今現在ではCentOS7が最メジャーな風潮が見受けられたので、無難にその風潮に従いました。

では、どうやって通信するかですが、どうやらこれも再メジャーな風潮があるTomcatを入れれば解決するというのはわかりました。ただし、解決するのはわかってもTomcatが具体的に何かという理解がかなり怪しいです。まあ最初はとりあえずサーバーと他端末との通信ができるのであればいいか……として、Linuxコマンドを駆使してTomcatの最新バージョンの導入を試みました。(当然Linuxコマンドも一つ一つ調べつつでした。)

作業結果

Tomcat最新バージョンの導入するに際して、参考になるであろう各webサイトの文言の理解ができず、なんと断念をしてしまいました……。

そのさっさと断念してしまいました理由として、導入の参考となるwebサイトを探す段階で、そもそもCentOS7にはその中にtomcatが存在して、それを導入できる簡単なLinuxコマンドがあることが発覚してしまったのが大きいです。


# yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps

これです。紹介されるwebサイトに一発で導入できると書いてあり、簡単すぎる印象を持てます。私としてもこのコマンドについてはあまり使いたくはなかったのですが、一日足踏みするのはメンタルに堪えるので1段階進めようと思い使ってみました。

Linuxってなにかを実行後におのずと結果がわかるわけではないところがドキドキしますね。とはいえやはり簡単だったので、その後にサーバー自体のIPを調べてそこへ別端末からアクセスするという目指していた部分も簡単にできてしまいました。おそらくなんですけど、最新版のソースファイルから導入していたらまだまだ障壁が待ち構えていたんだろうと察し、楽してしまったなあと酸っぱい顔してしまいました。

課題

オセロにおいて通信で何をするかというと、ふたつのブラウザ上で一方が入力した石の位置がサーバーに送られて、その情報をサーバーがもう一方に送ることが肝であって、それさえできれば通信対戦オセロという体裁は最低保たれるはずと考えました。

ですので、次回はそれを叶えるためにJAVAと戦います。

以上で今回の更新を終わります。