window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() Rubyプログラマーのための特別ゲーム - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2019-04-15
ソフトウェア開発

Rubyプログラマーのための特別ゲーム

The Codest

トマシュ・シュカラデク

開発アーキテクト

3年前のある日、The CodestチームではRubyプログラマーのための素晴らしいCodyゲームを準備した。今日の記事では、このプロジェクトでの作業がどのようなものであったかを説明し、何よりもこのプロジェクトのコードをお見せしたいと思います。

ゲームデザイン

このゲームをデザインする際、私たちの主な目標は、プログラマーのための楽しいエンターテインメントを用意することと、会社での仕事の一環として何か面白いことをすることでした。これまでのところ、私たちはゲームを作る能力を持っていなかったので、それは私たちにとって大きな挑戦でした。まず、このゲームが何であるかに焦点を当てた。最初の企画を考えた後、私たちは本番に臨んだ。

ゲーム制作の一環として、ハッカソンを実施し、グループに分かれて特定の作業を行うことにした。このような8時間の作業分担により、ゲーム内の対戦相手の外観、全体のレイアウト、システム全体のタスクとAPIの基礎を実現することができた。次の段階では、月に1回、4時間のミーティングを行い、3回でゲームを完成させることができた。

実施

弊社はRubyOnRailsに特化しているため、代表的な技術として選びました。しかし、このゲームはテキストになることを意図していなかったため、それに対するアプローチはSPAタイプのアプリケーションに反映されました。タスクの一部として、私たちはrailsからのアセットのよく知られたパイプラインに取り組み(2016年には、原理的にこれ以上のものはありませんでした)、全体の ジャバスクリプト に基づいている。 コード TypeScriptの助けを借りた。アプリケーションでは、標準的な役割分担があった:アセットとAPIソースとしてのRails、ユーザーとのインタラクションとしてのjavascriptと関連。しかし、ここではハイブリッドとして機能し、いくつかのビューは単にrailsからレンダリングされ、他のいくつかはJSからレンダリングされました。

タイプスクリプト

この分野での最初の実験だった。CoffeScriptの成功を信じていた時代だった。TypeScriptを使うには、typescript-rails gemを導入する必要があった。残念ながら、typescriptは静的型付け言語であるため、railsにデフォルトでアタッチされているライブラリからもこれを必要としたため、これは最終的なものではなかった。

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/jquery.d.ts (特にrailsを使った組み込み資産管理システムを使う場合)。

ゲームとしてのCodyは、DOMのツリーを変更するだけでなく、ブラウザ側で多くのダイナミクスを必要としました。バニラjavascriptの代わりにTypeScriptを使うことは、コードの質において大きな飛躍であり、クラスとカプセル化の存在は、私たちにとって非常に魅力的でした。

APIとSPA

2019年、SPAアプリケーションは、壮大なReactまたは Vue 図書館を利用した。しかし2015年、私たちは別の方法でそれを行った。先に述べたtypescriptはゲームの実装に役立ち、一方jQueryはxml httpリクエストに関連するすべての作業を取り消した。当時は`$ .ajax`が仕事に必要なすべてだったのに対して、今はfetchを使うことができます。クライアントAPIを見てみよう!

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/services/api_client.js.ts

もしapiだったら、認証の問題をどうにかして解決しなければならなかったのでは?そうだね。しかし、その場合、私たちはバンドを追いかけ(ここに書くことは可能でしょうか?私たちはバンドを使いました!)、railsセッションでcookie_keyを作成し、その後データベースに保存しました。それゆえ、私たちはすべてが順調であることを知っていた。

https://github.com/codesthq/cody_the_game/search?q=cookie_key&unscoped_q=cookie_key

ゲームのステータスはデータベースに保存され、何人のユーザーがポイントを持っているかという情報はデータベースから来ていた(まったく同じデータベースなのだろうか? 代名詞で変えればいいのだろうか?)システム側にキャッシュがない場合、ACIDはいつも便利だ;)

温泉の場合、ページをリロードしないのが一番です。私たちはそれを古典的に解決し、htmlアンカーは不必要な依存関係を拡大することなく、最良の解決策でした。ターボリンクなんて誰が使うんだ?

スナップSVG

私たちがゲームをデザインする場合、素晴らしいグラフィックとアニメーションがなければリリースできません。当時、私たちは、アプリケーションでそのような要求を満たすにはどうすればいいのか、何時間も悩みました。一方では、キャンバスは奇跡を起こすことができ、他方では、きれいなhtmlは追いつくのがはるかに簡単で、誰もがそれを知っています。最良の解決策を苦労して探した結果、私たちはこの2つの解決策の組み合わせがsvgであることを突き止めた。svgは、グラフィックをベクターで簡単に表現でき、マークアップ言語で記述され、最も重要なことは、その場で修正できることだ。重要なのは、jQueryと同様に動作し、統一された方法で画像に対する操作を可能にするsvgファイル用のライブラリがあることだ。これはhttp://snapsvg.io、 私たちは、その特別なソリューションの使い方について、とてもいい思い出を持っている。

snap.svgをどのように使用したかの例を以下に示します:

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/intro.js.ts

グラフィック・スケルトンを含むhamlファイルそのもの:

https://github.com/codesthq/cody_the_game/blob/master/app/views/game/show.html.haml

見ての通り、普通のDOMツリーと普通のrailsアプリのようなものだ!

トラステッド・サンドボックス

さて、ついにAPI、グラフィックス、SPAが登場した。しかし、ユーザーから送られたソリューションの実装についてはどうだろうか?

真っ先に思い浮かぶのはeval方式だが、我々はおかしくない;)2016年当時、dockerが台頭してきていたので、自然な選択だと感じました。コンテナ自体は完全な分離と保護を保証するものではなかったので、私たちはhttps://github.com/vaharoni/trusted-sandbox というRubyで用意されたソリューションを使いました。サンドボックスを出る前にコードをよりよく保護し、標準化された方法でオペレーティング・システムの要件を設定することができました。コードの実行時間、動作に必要なメモリ、CPUサイクルを適切に制限することが非常に重要でした。我々のコンフィギュレーションは以下から入手できる。

https://github.com/codesthq/cody_the_game/blob/master/config/trusted_sandbox.yml.example

もちろん、同じ信頼できるサンドボックスでは何も保証されない。だからこそ、私たちはコードを実行するための特別なウェブサイトを思いついたのだ。

https://github.com/codesthq/cody_the_game/blob/master/app/services/task_runner/base_task.rb

各タスクにはそれぞれテストケースがあり、実装されたソリューションの正しさを検証することができた。これは、ユーザーコードをテストケースに注入し、すべてを分離して実行することで行われた。

https://github.com/codesthq/cody_the_game/blob/master/app/challenges/challenge/case.rb

もちろん、このアクションにはかなりの時間がかかり、レスポンスを収集している間、サンドボックスを実行する余裕はなかった。そこで、コードをデータベースに保存し、サブミッションを作成し、ロングプーリングを使用して、コードのステータスを取得するためにエンドポイントに問い合わせただけである。これによってアプリケーション・サーバーを解放し、データを適切に検証することができた。もちろん、"スクリプトのクラッシュ "から自分自身を守る必要もあったので、ttl変数を使用してサーバー・クエリの数を制限した。

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/level_controller.js.ts#L92

競技概要

2011年9月までの試合統計は以下の通り:

- セッション数: 1945 - タスクを送った: 4476 - は正解を送った: 1624 - で試合を終えた: 31

ご覧のように、最大の階段はタスク# 2から始まった。

あわせて読みたい:

Ruby 2.6をちょっとだけ体験。何が新しくなったのか?

VuePressのおかげで、ドキュメントの作成が簡単になりました。

 Vue.jsの基礎チュートリアル。このフレームワークを始めるには?

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese