rastam

英語圏のオススメ Ruby・Rails 書籍


初めまして!エンジニアのラスタムです。

英語圏ウェブ開発業界で独自の文化を作り出した Ruby と Rails。
そのコミュニティーに大きな影響を与えた書籍が沢山あります。
日本でも話題になり、和訳されているものもあれば、訳されていないものも未だに山ほどあります。
代表的な作品を紹介させていただきます。

初心者向け

Programming Ruby

Ruby 言語を初めて英語圏に普及させた超大作。
表紙のつるはしにちなんだ、「The Pickaxe」という愛称がつくほどの名声を博しています。
Ruby の言語的仕組みに興味がある方にオススメ。

★ 和訳あり!

The Ruby on Rails Tutorial

Ruby・Rails コア機能だけでなく、git や bundler など、現代ウェブ開発でよく使うツールを総合的に紹介する入門書。
他言語のウェブ開発を既に経験しているエンジニアには特にオススメ!

★ 和訳あり!

Why’s Poignant Guide to Ruby

不思議なプログラマー兼イラストレーター why the lucky stiff 氏が執筆した青年向け入門書。
3 コマ漫画を添えた、独特でユーモア溢れる文章が、Ruby エンジニアの間で人気を集め、流行語さえ生み出しました。
2009 年に why the lucky stiff 氏は、なぜか Ruby コミュニティーから脱退しましたが、今も愛され続けているこの作品は、ボランティアにより維持され続けています。

★ 和訳あり!

中上級者向け

Rails Antipatterns

Thoughtbot 社初期刊行物のひとつで、個人的に最もお気に入りの一冊。
Model、View、Controller の各レイヤーでよく悪用されるアンチパターンとその解決案を読みやすく紹介しています。
Rails 3 以来は改訂されていないため、時代遅れになってしまいましたが、スパゲッティーが美しくてシンプルなコードへと変わっていくリファクター談を楽しむだけでも十分読む価値があると思います。

Practical Object-Oriented Design in Ruby

通称 POODR(púdər、プードル)で知られている名作で、執筆者 Sandi Metz 氏が 2013 年 Ruby Hero 賞を受賞するほどの盛名を馳せました。
カプセル化やポリモーフィズムといったオブジェクト指向を具体的な例を添えて紹介している、経験者向けの技術書。

★ 和訳あり!

99 Bottles of OOP

Sandi Metz 待望の最新作。
そして共同執筆者として参画しているのはなんと、感動作カンファレンストーク Therapeutic Refactoring と、レビュー駆動多言語学習ツール exercism.io 生みの親 Katrina Owen 氏。
99 Bottles of Beer 民謡生成アルゴリズムを題材に、実装・リファクター案をいくつか取り上げ、それぞれのメリット・デメリットを丁寧に説明しています。


PadrinoからRailsに移行しました


こんにちは、ソフトウェアエンジニアの藤井です。

今回は弊社で開発・運営を行っている 幻塔戦記グリフォン のWebAPIサーバーで使用していたPadrinoアプリケーションをRailsに移行した話を紹介します。

以下はチームのメンバーが発表したスライドです。

 

続きを読む


GAME CREATORS CONFERENCE’16 登壇させて頂きました

リンク


エンジニアの山藤です。

2016年3月5日に開催されたGAME CREATORS CONFERENCE’16で登壇させて頂きました。当日は朝一番のセッションでしたが聴講して下さった皆様、懇親会でお声掛け下さった方々もありがとうございました、運営スタッフの皆様もお疲れ様でした!

当日使用した資料です。

既にCEDECの資料でも公開してますが、ゲームサーバは複数のプロセスから構成されていて、このプロセス数もゲーム内のコンテンツ追加に伴って増えたりします。開発中から将来の拡張をある程度見越した設計・実装を行い、後は運用に合わせて柔軟な対応が必要になったりします。

オンラインゲームでは日々ゲームを取り巻く色々な状況も変わってくるので、継続的なソフトウェアのチューニングもですが、システム、ゲームバランスの改善、それらに合わせたハードウェア構成の変更・運用が必要になってきます。

リリースした後も、こうやって一つのタイトルをお客様と一緒に育てていくのもオンラインゲームの醍醐味だと思って日々頑張らせて頂いております。これからもよろしくお願いします!


ttsuchie

C++14プロジェクトでのType Erasureの活用について発表しました


こんにちは、エンジニアの土江です。

今回の開発者ブログでは、プロジェクト内の勉強会で発表した、C++のType Erasureという手法について紹介します。

併せて、Boost.TypeErasureのコンセプトを元にGoogle Mockのモックを自動生成するライブラリを開発中です。今回はそのライブラリの開発中のコードを掲載します。ライブラリのイメージとしては、C#のNSubstituteのようなものです。

 

所属しているプロジェクトについて

本題の前に、現在所属しているプロジェクトの文化と開発体制の紹介をします。

今所属しているプロジェクトでは隔週で勉強会をする文化があり、技術をチーム内で共有する場としています。

プロジェクトではC++14とBoostライブラリを活用したサーバーの開発をしています。その中でType Erasureという手法を使ってコードの見通しを良くしています。

この記事では、Type Erasureという手法について、チーム内勉強会でチームに共有した内容を紹介します。

 

Type Erasureとは

C++におけるType Erasureとは、テンプレートや継承では難しい、動的で柔軟な多態性を実現するための手法です。

標準ライブラリ内でも使用されている手法であり、少々複雑ですが非常に便利なテクニックです。

今回の発表の内容は、Type Erasureとは何か、Boost.TypeErasureライブラリの使い方、更に便利にType Erasureを利用するために、といったものとなっています。

 

Boost.Type Erasureの活用

スライド中に出てきた、Boost.TypeErasureのコンセプトからgmockのモックを自動生成するライブラリを現在開発中です。

基本となるコードを以下のgistに掲載します。

https://gist.github.com/ttsuchie/efd5dc4f200efd0b3231

まだまだ開発中ですが、基本機能はすでに整っています。

終わりに

今回の開発者ブログでは、C++のテクニックを紹介しました。

AimingにはC++を採用しているプロジェクトがいくつかあり、BoostやC++11/14の新機能を取り入れた開発を行っています。


『剣と魔法のログレス(PCブラウザ版)』の運用について


はじめまして。Aimingエンジニアの角谷です。
「剣と魔法のログレス(PCブラウザ版)」(以下ログレス)でサーバー・クライアントの
開発に携わっております。

今回は社内勉強会で話した内容を紹介したいと思います。
テーマは社内からのプロジェクトに対する質問のいくつかを取り上げたものになりました。

勉強会テーマ

  • ゲーム紹介
  • 過去に起きた問題で一番大変だった問題とどのような対応をしたか
  • これまでで一番大変だった事とどのように乗り越えたか
  • 産まれてしまったと思う技術的負債について。それについての失敗談や内容について
  • プロジェクトでエンジニアからみて他のプロジェクトに自慢したいこと

勉強会について

弊社では、運用(開発)をしているプロジェクトを対象に、定期的にテーマに沿った
勉強会を行っています。この時は新人向け、他プロジェクトに興味のある人向けに
行ったものになりました。

開発1.5年、運営4年+

Aimingで開発している中では相当なレガシーな運用と開発を行っていると思います。
(データ管理が Git でなくsvn など)
しかし、だからこその開発のシンプルさと親和性があると思いたいですね。
成果物の一部はスマホ版にも引き継がれています。

Flash開発

レガシーな開発として筆頭なのが Flash を利用している事があるでしょうか。
ブラウザとの相性も悪くなく、Adobe製品との組み合わせもやり易いものでした。
ブラウザによる動作違いも当時は少ないものでした。(PPAPI導入後はその範疇ではない)
MXML(Slide参照)によるUI作成機能は、これまでの開発の中ではやり易いものでした。

今後

プロジェクト運用中で得た経験や事実は、本だけでは得られないものです。
長期運営しているからこそ出来ること・起きたモノの解消をログレスは目指します。
まだまだ国内開発で頑張っておりますので、これからもよろしくお願いします。


「関西ゲーム勉強会 2015冬」に参加させて頂きました!


初めまして、Aimingエンジニアの山藤です。

先日、11月28日に大阪で行われた「関西ゲーム勉強会 2015冬」で発表させて頂きました、当日はかなりの盛況でした。勉強会運営の皆様、参加者の皆様、ありがとうございました。

内容は「ログレスの戦闘からみるデータ同期」という事で、「剣と魔法のログレス〜いにしえの女神〜」の戦闘コンテンツでのゲームサーバ・クライアントのやりとりや、通信遅延をフォローする実装例についてです。

 

ログレスでは、クライアントがサーバからの返答を待ってから動かす、クライアント間の厳密な同期が必要になる戦闘コンテンツや、返答を待たずに動作を開始するマップ移動等、ユーザー様が不快感の少ない操作ができ、ゲームが破綻しない様に、コンテンツ毎に同期の取り方を微妙に変えていたりします。

また機会があれば他のコンテンツの実装例も紹介させて頂きます。

丁度この記事を書かせて頂いてる間に、12月4日台湾のAppleStoreで台湾版のログレスがセールストップ取りました。これからも応援よろしくお願いします。


hirooka

C# + MySQL + Dapper で軽量 O/R Mapper


エンジニアの廣岡です。

最近は仕事で C# を用いたサーバを書いていますが、C# で O/R Mapper (ORM) を使ったことがなくて「とりあえず動く軽量なものが欲しい」と思って見つけ出した Dapper という Micro-ORM を紹介していきます。

Dapper: https://github.com/StackExchange/dapper-dot-net

ところで Micro-ORM とは、ORM の機能のうちいくつかの機能が無いものを指すようですが、「SQL 文を作るクエリビルダの機能」がないものを指すことが多いようです。

C# + MySQL + Dapper

C# から MySQL に接続するときは、ADO.NET インターフェイスを持った MySQL 公式の Connector/Net を使うのが無難でしょう。
http://dev.mysql.com/downloads/connector/net/
これを使えば基本的な MySQL への接続・SQL 実行などはできるようになるのですが、IDataReader や DataSet といったややローレベルなインターフェイスなのでちょっと使いにくいです。
そこで ORM が登場するわけですが、Entity Framework のようなリッチな ORM の導入がちょっとめんどくさかった(というか勉強不足だった)ので、超軽量な ORM は無いのかな〜と思って探していたら Dapper という Micro-ORM を見つけました。
これがどう軽量なのかというと

  • ライブラリは SqlMapper.cs ファイルだけ(数千行ありますが)
  • 基本的には ADO.NET の IDBConnection に拡張メソッドを追加しているだけ

というもので、基本は ADO.NET として使えばよくて、SQL クエリの結果をクラスや構造体にマッピングしたい時に Dapper による拡張メソッドを呼び出すというものです。
クエリビルダは無くデータマッピングしかしないのですが、今すぐ欲しい物としては十分な機能だったので採用しました。

サンプルコード

Dapper の IDbConnection.Query を使って DB 上の Users テーブルから User クラスの一覧を取得するコード

class User
{
    public int Age { get; set; }
    public string Name { get; set; }
}

using (var connection = new MySQLConnection("設定"))
{
    connection.Open();
    var users = connection.Query<User>("SELECT * FROM Users"); // この行だけ Dapper
    foreach (var user in users)
    {
        Console.WriteLine(user.Name);
    }
}

Dapper の IDbConnection.Execute を使って DB 上の Users テーブルにレコードを挿入するコード
(あまり ORM の恩恵がないケース)

using (var connection = new MySQLConnection("設定"))
{
    connection.Open();
    var numOfAffected = connection.Execute("INSERT INTO Users (Age, Name) VALUES (23, Alice)");
}

Dapper で満足?

Dapper は急ぎで欲しかった機能を提供してくれました。ただその後、クエリビルダがないことによって恥ずかしながらテーブル名をタイポしてしまい、気づきにくいバグを作ってしまいました。
この種のバグを二度と作らないためにも Dapper 用にクエリビルダを導入するか、Linq to Entities のようなフル ORM に乗り換えるか、検討をはじめています。

Dapper は ADO.NET をもう少し便利に使いたいなーというシーンには使いどころもありますが、ゲームのサーバ側の MySQL 用に使うには機能不足感があると思います。

Unity 上で SQLite を扱うときなんかにはこの軽量さが発揮されそうですね。


kanbe

CEDEC2014で「剣と魔法のログレス いにしえの女神」について講演しました


こんにちは。クライアントエンジニアの神部です。 9月2日(火)にCEDEC2014にて「剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術」というセッションタイトルで講演を行いました。

OLYMPUS DIGITAL CAMERA

セッションで使用したスライドを公開しましたのでお知らせいたします。


内容としてはMMORPGスマホアプリである「剣と魔法のログレス いにしえの女神」の開発について、開発環境の説明、クライアントサイドはCocos2d-xの使用について、クライアント/サーバ間のリアルタイム通信についての話、またサーバサイドはサーバ構成の説明からチャットシステムのデータフローなどとなっております。

セッション自体の満足度いかんは別として、立ち見が出るほどの盛況なセッションとなり、足を運んでいただいた皆様には感謝を申し上げます。
セッション後に質問があった以下については、また別の機会の勉強会などで掘り下げて話をさせていただくかもしれません。

  • クライアントのパッチシステムについて
  • Cocos2d-x上で動作するFlashアニメーションプレイヤについて
  • 回線切断時などからのゲームへの素早い復帰について(インゲームの表示で”リロードします”の処理)

今回のセッションを聴いていただいた皆様に、スマホアプリでMMORPGが動作していることとそのMMORPGがどのように作られているかが少しでも伝わったなら幸いです。

最後に、講演の機会をくださいましたCEDEC2014 運営事務局の皆様、ありがとうございました!


ppc(細田幸治)

Unityで使える非同期処理のクラスライブラリ(iterator-tasks)を公開しました


こんにちは。Aiming 東京開発グループの細田です。
私たちのチームで開発したロードオブナイツで使っている非同期処理ライブラリを公開しました!!

github のアドレスはこちら
https://github.com/aiming/iterator-tasks

サンプルとテストコード付いてます。

設計者は ++C++; の中の人こと岩永信之さんです。ネットでC#について検索したことがある方なら一度はサイトを見たことあると思います。

公開したクラスをどんな用途で使っているか、どんな設計で出来ているかについては以下のスライドをご参照ください。

.NET 4.0 の Task のような機能を Unity でも使えるようになります。
一般的なゲームで実装されるタスクとはちょっと意味合いが異なり、非同期で動き、必ず終了する処理について使いやすくするためのライブラリです。
WWW での異常系実装やシーケンシャルな非同期処理の実装が簡単に出来るので是非使ってみてください。

 


komaba

Aiming Study 7 「ロードオブナイツ UnityからHTML化する際のアプリの設計とアジャイル的開発管理の話」


初めまして、ソフトウェアエンジニアの駒場です。
11月6日、Aiming Study 7 「ロードオブナイツ UnityからHTML化する際のアプリの設計とアジャイル的開発管理の話」が渋谷で行われました。
当日の様子は以下からご覧になれます。

Video streaming by Ustream

※小林の発表は 40:40 辺りから、質疑応答は 1:14:35 辺りから始まります。

会場はGMOインターネット株式会社さんにGMO Yours をご提供頂き、60名以上の方々にご参加頂けました。ありがとうございました!

続きを読む