Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

Akatsuki Hackers Labは株式会社アカツキが運営しています。

Akatsuki Summer Internship 2019-7

はじめまして、イチノセです。

この度、株式会社アカツキにて「八月のシンデレラナイン」の部署にて3週間就業型インターンをさせていただきました。ここで何を学び、何を見たのか語っていきます。

 

経緯

2018年12月、私はインターンを探していました。将来の就職のために行くに越したことはないと思いネットで探していました。探している中、普段からお世話になっている教員の方から「アカツキで新しいイベントをやるから行ってみては?」と勧められ、そちらの会社ではお世話になった先輩が就職した会社であるということもあり、アカツキのイベントに参加することにしました。

 

「Akatsuki Geek Live」と呼ばれるそのイベントは、LT(Lightning Talks)と呼ばれるプレゼンテーションを企業と学生から数名ずつ募り登壇するイベント(以下LT会)でした。第1回目は2月にあり私は聴衆側でしたが、エンジニアの集う会ということもあり、面白い話を多く聞きました。何度かLT会にお邪魔させていただいてると夏に3週間就業型インターンシップがあると聞きました。

 

こちらでは参加期日が3種あり、7〜9月の頭の平日からそれぞれ3週間ありました。3週間という長いインターンであり、参加したら他の会社のインターンを受けることができないと思った私は学校と話をつけて7月の頭から3週間インターンに参加することにしました。

 

目標

こちらのインターンでは何をテーマにするかを初めに自分で決めるところからスタートします。テーマを決めたらメンターの方と話し合ってテーマに対する目標、そのための道筋を一緒に考えました。

選べる道が多い中で「データ管理、効率化をより深掘りしていく」ことを目標にしました。私はワークフローエンジニア(データの管理、効率化を図るエンジニア。エディタやパラメータ管理、処理軽減など)を目指しており今までの制作の中ではそちらの処理に関わる機会が多くありました。今回のインターンではそちらの実力を伸ばそうと考えたのです。

 

インターン課題1

目標を決めた後はタスク管理ツールを閲覧して、どのタスクが目標に沿っているか確認して課題を決めていきました。候補はいくつか挙げられた中で、デザイナーからのタスクに「デバッグ機能としてキャラクタのシーン画像を追加した際の表示範囲、座標をどのスマートフォン検証端末からでも確認できるようにしてほしい」とありました。データの管理に沿うということで今回はこちらの作業を行うことにしました。

初めはすぐに作業を開始するのではなく会社のコードを読むところから始まりました。会社の方で参考になる処理があれば使用できるからです。コードを読んで3日ほどで作業に取り掛かり始めました。コードを読んだりメンターの方と話して知ったのですが、IOSに合わせて画像サイズを合わせた後、画像の表示可能範囲、必須表示範囲からIOSに合わせた表示範囲を計算して描画してくれるオブジェクトがすでにあるそうなのでそちらを利用しながら作業しました。

そちらを加えた後は画像の情報を取得する手段について考えました。画像の表示位置を変更したい、表示範囲を変更したい、画像自身を移動させたいなど後々で変更もできるようにしようと思い、画像の表示範囲、座標をUIで表示し変更ができるようにしてデザイナー側からも楽に変更ができるようにしました。さらに画像自身をスライドして表示中心座標を感覚で変更できるようにしました。

こちらのゲームではキャラクタの画像を閲覧する方法として、パラメータ確認の時にも閲覧できるようになっています。そちらの挙動も確認できるようにしたほうがいいということを話し合って挙動を追加しました。そしてこれらUIの表示を消すフルスクリーン機能、読み込みの処理の多重化など測りました。

 今回の制作では、使いやすくわかりやすい機能を目指して開発できたのでいい経験になりました。

 

インターン課題2

次の課題は「対戦時のキャラクタ表示を上記で使用したオブジェクトを使用して表示する」ことすることでした。表示方法が「背景、半透明の黒、キャラクタ」の順で後ろから表示します。こちらではSSR未満の場合には背景はデフォルトの背景画像、SSR以上ならばキャラクタの背景画像を表示させていました。しかし、私がオブジェクトを追加してこの処理を真似て表示させようとすると背景と画像で表示範囲が合いませんでした。そちらの原因を調べていると背景とキャラクタの継承先が違く描画手段が違っていました。ならばと、背景抜きをするシェーダーを背景を薄暗くするシェーダーに書き換えて完成させようとしたのですがその途中で作業は中断してしまいました。なぜならば、今回のインターンの期日が来てしまったからです。

今回のインターンで一番悔やむことと言えば最後まで作業をやり抜けなかったことです。余裕を持って全ての作業を完成できなかったことが大変残念です。

 

総評

上記で書かなかったこと以外では、「Git」「アセットバンドル」について関われたこと、チーム制作を学校で行っていた身として会社の制作は経験として得られたこともデータ管理関係として深く理解が得られたと思います。課題2は完成までには至りませんでしたが、現場の作業を1つでも多く行い、最高でした!上記にある課題1を完成に至るまでの過程でのデータの取得、配置、効率化を考察してきたことと、課題2での失敗からのコード読解で処理の理解を深めることができたからです。

過程を理解して簡略化することにより、全ての作業効率をあげることができるのをここまでのインターン活動で深く知ることができました。今回の活動と今後行うインターン活動、普段の作業から成長した自分を9月にあるゲームジャムで証明していきたいと思います。

www.slideshare.net

 

成果報告資料(slideshareには代理で登録しています)

【LT会】Akatsuki Geek Live開催レポート!Vol.3

こんにちは、エンジニア採用担当の宮田です。

先日7/1(月)に学生向けLT会「Akatsuki Geek Live Vol.3」を開催いたしました!

2月・4月に次ぐ3度目の今回は、梅雨になり、ジメジメした天気が続く中、パッとしないお天気をカラッと晴らしてしまうぐらい、パワフルで大盛り上がりの会になりました!この記事ではそのイベントの様子をご紹介いたします。

 「Akatsuki Geek Live」とは...

学生エンジニアと、アカツキエンジニアが登壇するLT会です。今回は学生5名、アカツキメンバー5名の計10名が発表しました。その後、参加者全員で懇親会を実施し、交流の場を持ちました。

▼イベント概要はこちらから

aktsk.connpass.com

 ▼なぜLT会を開催しているのか

初回のレポートに開催の思いを綴っています。ご興味ある方はこちらもご覧ください

hackerslab.aktsk.jp

#当日の様子

序盤からTwitter上で知り合いだったけど顔を合わせたことがなかった人、学校が一緒でこのLT会でお互いの参加を知った人たちなど、思いがけない出会いが判明する中、今回もドリンクを片手にカジュアルな雰囲気で早速スタートです。

 

▼1人目:@きたばやしあでぃ(@tk_adio)さん(アカツキ)

「“はやく“開発するための開発速度のあげかた」

 トップバッターはアカツキから!スクラムマスターでもある金髪のあでぃが“はやく“開発するためのポイントを紹介してくれました。チーム開発のあるある話にみなさん頷いて聞き入っていました。

f:id:kayomiyata:20190704183714j:plain

 発表資料

www.slideshare.net

 

▼2人目:@梶原さん(アカツキ)

「Elixir におけるリスト反転処理の実装を覗いてみよう」

続いてもアカツキから。サーバサイドエンジニアの梶原さんが、アカツキでは初めてプロジェクトで使用に至ったElixirについて、紹介をしてくれました。

f:id:kayomiyata:20190704185429j:plain

 発表資料

speakerdeck.com

 

▼3人目:@大嶋さん(アカツキ)

「カジュアルゲームとチュートリアル 〜実はチュートリアルが一番複雑になってませんか? ちょっとの工夫で改善!〜」

続いてアカツキ大嶋さんによるピッチです。

来たる夏、ハッカソンやイベントでゲーム作りをする機会が増える時期だからこそ心がけたいポイントを伝授してくれました! 

f:id:kayomiyata:20190704192215j:plain

 発表資料(slideshareには代理で登録しています)

www.slideshare.net

 

 ▼4人目:@konnyaku256さん(学生)

「Hyperdashで機械学習モニタリングをやってみよう」

 満を持して、学生さんの登場です!konnyaku256さんが、デモも交えて機械学習におけるあるあるな問題をモニタリングで解決する方法について語ってくれました。

f:id:kayomiyata:20190704192904j:plain

登壇資料 

speakerdeck.com

 

▼5人目:@細川さん(アカツキ)

「CloudFormationと付き合い続けよう」

アカツキ新卒2年目の細川さんは、将来大規模システムに携わる際に役に立つ内容を実体験をもとに発表してくれました。

f:id:kayomiyata:20190705142620j:plain

 登壇資料

www.slideshare.net

 

▼6人目:@f4snさん(学生)

「オンラインゲーム救命救急」

学生枠2人目のF4snさんは、初めてのピッチとは思えないぐらい落ち着いて話をしてくれました!

f:id:kayomiyata:20190704194002j:plain

登壇資料

speakerdeck.com

 

▼7人目:@河野さん(アカツキ)

 「大規模Railsアプリケーションをバージョンアップするときのハマりどころ」

サーバサイドエンジニアの河野さんは、大規模プロジェクトに所属しているからこその苦労話をしてくれました。

f:id:kayomiyata:20190704194845j:plain

登壇資料(slideshareへは代理で登録しています) 

www.slideshare.net

 

▼8人目:@ぷらすさん(学生)

「5分で分かるClean Architecture」

ぷらすさんは、オススメ本やビジュアルも用いながらClean Architectureについてわかりやすく説明してくれました! 

f:id:kayomiyata:20190704195419j:plain

登壇資料

speakerdeck.com

 

▼9人目:@がっちょさん(学生)

「世界を創造するOSS開発を始めた話」

がっちょさんは、ご自身で開発したOSSライブラリについて、開発情報含め紹介してくれました!

f:id:kayomiyata:20190704195842j:plain

登壇資料

www.slideshare.net

 

▼10人目:@Dopponさん(学生)

「Slackをハックしよう」

ここで飛び入りでのピッチをやってくれる学生さんが!

トリを飾るのはDopponさんによる、Slackをハックしよう!という話です。

f:id:kayomiyata:20190704201946j:plain

登壇資料

speakerdeck.com

 

総勢10名による熱のこもったピッチはあっという間に過ぎ、懇親会へと移行します。

LT発表内容についての質問や、最近興味を持っている技術についてなど、話題に花が咲いていました。中には自分で作ったゲームを見せてくれる学生さんも。

f:id:kayomiyata:20190705210500j:plain

登壇者のみなさん、そして参加してくださったみなさん、本当にお疲れ様でした!

アカツキメンバーや学生同士の交流を通して、この時間がこの夏また一歩踏み出すきっかけとなっていたらとても嬉しいです。

夏を経てさらに成長した姿のみなさん、また新たに興味を持ってくださる学生さんと出会えることをいまから楽しみにしています!次回また会いましょう^^

f:id:kayomiyata:20190705213001j:plain

 

▼次回の開催は2019年秋頃予定!

 

インターンでCloud Runに挑戦した話

エンジニアインターンとして約1ヶ月アカツキで就業したyasuさんの体験記をお届けします。来年4月に入社予定のyasuさんですが、今回の経験で入社までの課題も見えてきた様です。

はじめまして、yasuといいます。
今回私はアカツキで内定者インターンに参加させて頂きました。
期間は1ヶ月ほどでしたが、色々と貴重な経験をさせて頂けたので具体的にどのようなことをしたのか紹介して行きたいと思います。

自己紹介

私は現在、大学で経営工学を学んでいる4年生です。
普段は趣味でGo言語を主に触っています。
Go言語で主にやっている事としては研究室のSlackボット開発や自分用のブログエンジンの開発、ハッカソンなどでネイティブアプリ用のAPIの開発などです。
最近はOSのカーネルやコンパイラなどソフトウェアの中でも低いレイヤーに位置する技術に興味があります。
新しいものが好きです。

きっかけ

きっかけは逆求人イベントでした。
逆求人に参加した際に会社訪問に誘われ、そのまま選考 => 内定 => インターン参加という流れです。
大学3年生のころに一度インターンに参加したことがあり、アカツキの技術に対する挑戦的な姿勢や「なぜ?」を大切にする社風、オフィスの快適さに惹かれてすぐに内定承諾とインターンに参加することを決めました。

何をしたのか?

今回は面接の際にお世話になった坂尾さんの所属するゲームの基盤開発チームでお世話になり以下の3つのタスクをこなしました。

  • 基盤の管理システムのCloud Run移行
  • 基盤の管理システムの操作ログのBigQueryからStackdriver Loggingへの移行
  • アプリケーション側でのIP制限機能の追加

今回利用したCloud Runについて

公式の説明ではRun stateless HTTP containers on a fully managed environment or in your own GKE cluster.と書かれています。
Google Cloud Next ’19で発表されました。
Knativeをベースにしたサービスで、オートスケールの機能やインフラ周りの設定の自動化などが特徴です。
Cloud Run ではContainer Imageさえあれば、その他の設定はほとんど自分でせずにデプロイできます。
公式ではCloud Buildを使ってContainer Imageをビルドしているので今回はCloud Buildも合わせて利用します。

基盤の管理システムのCloud Run移行

今回のインターンの大本のタスクです。
もともとGAE FEで動いていた基盤の管理システムをCloud Runへ移行します。
このタスクをこなすために次のフローを踏みました。

  1. アプリケーションのCloud Runでの動作確認
  2. Cloud Run へCircleCIでデプロイするようにする

アプリケーションのCloud Runでの動作確認

もともとGAE FEを使用していたので既にアプリケーションを動かすためのDockerfileが存在しました。
これをドキュメント通りにCloud Buildでimageをビルドしてgcloud beta run deployをするとすんなりとデプロイ出来ました。

また、GAE FE上でシステムを動かしていた際にはこちらのイメージを使っていたのですが、余計なパッケージを含まないようにDockerオフィシャルのPythonイメージを使うようにDockerfileを修正しました。

Cloud Run へCircleCIでデプロイするようにする

管理システムはCircleCIを使ってデプロイを自動化していたのでCircleCIのconfigファイルを修正する必要がありました。
具体的にはGAE FE向けに書かれていたconfigファイルをCloud Buildを使ってイメージをビルドし、Cloud Run へデプロイするように書き直す必要がありました。
gcloud build submitコマンドでイメージをビルドし、gcloud beta run deployコマンドを使ってCloud Run へデプロイするよう修正しました。

システム操作ログのStackdriver Loggingへの移行

管理システムの監査のための操作ログを、もともとは BigQuery に書き込んでいました。 これを Stackdriver Logging へ移行しました。
このタスクでは次の事を行いました。

  1. Cloud Run 上でStackdriver Logging の構造化ロギングが動くことの確認
  2. ログのデータ構造を定義する
  3. 構造化ログを吐くように操作ログのコードを修正する
  4. ログをRequestログと紐づけて表示できるようにする

Cloud Run 上でStackdriver Logging の構造化ロギングが動くことの確認

Cloud Run では 標準出力・標準エラー出力などにログを書き込むことで、 Stackdriver Logging に自動で集約されます。 またJSON文字列でログを書き込むことで Stackdriver Logging の LogEntry に jsonPayload として格納されます。
これを構造化ログと呼びます。
今回はこちらを使用して操作ログを記録することにしました。
参考 Using simple text vs structured JSON

print('{"sample": "hello"}')

実際に上記のようなJSON文字列でログを標準出力に吐くとLogEntryのjsonPayloadに入り、無事に構造化ロギングが動くことを確認できました。

ログのデータ構造を定義する

操作の際に送信されるパラメーターと送信元と送信者を特定するメタデータをログの構造としてまず定義します。 今回は操作ログなので操作内容と実際に操作しているユーザーのemailなどのメタデータをログのスキーマとして定義しました。

構造化ログを吐くように操作ログのコードを修正する

その定義していた構造通りにJSON文字列をログとして出力します。
今回はFlaskのapp.logger(python標準のloggingライブラリ)を使って標準エラー出力へJSON文字列を吐き出すようにしました。

ログをRequestログと紐づけて表示できるようにする。

Requestログとの紐づけは次の資料を参考にしました。

https://cloud.google.com/run/docs/logging#correlate-logs

In the Stackdriver logs viewer, logs correlated by the same trace are viewable in "parent-child" format: when you click on the triangle icon at the left of the request log, the container logs related to that request show up nested under the request log.

Container logs are not automatically correlated to request logs unless you use a Stackdriver Logging client library. If you want this correlation without using a client library, use a structured JSON log line that contains a trace field with the content of the incoming X-Cloud-Trace-Context header. Then your logs will be correctly correlated to the request log.

https://cloud.google.com/logging/docs/agent/configuration#special-fields

logging.googleapis.com/trace is stripped from jsonPayload and assigned to the LogEntry trace field. For example, assume the value of logging.googleapis.com/trace is [V]. [V] should be formatted as projects/[PROJECT-ID]/traces/[TRACE-ID], so it can be used by the Logs Viewer and the Trace Viewer to group log entries and display them in line with traces. If autoformat_stackdriver_trace is true and [V] matches the format of ResourceTrace traceId, the LogEntry trace field will have the value projects/[PROJECT-ID]/traces/[V].

飛んでくるRequestからHTTP HeaderにあるX-Cloud-Trace-Contextの値を取ってログとして吐くだけです。

ちなみにX-Cloud-Trace-Context
X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE
というフォーマットになっているので
/以下を取り除いてTRACE_IDだけ抽出する必要があります。
このTRACE_IDをログとして吐くJSONのlogging.googleapis.com/traceキーのバリューとして設定します。
そうするとLoggingエージェントが収集し、LogEntryのtraceフィールドに自動的にTRACE_IDを設定してくれます。
これでStackdriver Loggingでリクエストログと紐付き、まとまったログとして見る事ができます。

アプリケーションへのIP制限機能の追加

今回の基盤の管理システムは社内用ツールであるため社外からアクセス出来ないようにする必要がありました。
GAE FEではGAEのfirewallの機能でIP制限をしていたのですがCloud Runでは現時点でそのような機能が提供されていませんでした。
なので、今回はアプリケーションレイヤーでIP制限機能を実装することにしました。

最初は Flask の request.remote_addr の使用を試みてみたのですが、 Cloud Run にデプロイすると、これには Google Frontend の IP アドレスが設定されるということがわかりました。
X-Forwarded-For には Google Frontend がクライアントの IP アドレスを付与してくれていたため、こちらの IP アドレスを使用してアクセス制限機能を実装しました。

Cloud Run を実際に使ってみて

学習コストが低いので初学者でもすぐに始められて良いと感じました。
インフラ周り初心者の私でもすんなりデプロイできたのでの学習コストはかなり低いなと感じました。
また、デプロイをすれば設定など何もすることなくスケーリングなどのサーバー全般の管理をGoogleがやってくれるのでかなり便利だと感じました。

インターンで学んだこと

何をするにも なぜ? そうしたのか深堀ること。

インターン中一番改善しなきゃいけないと思った点はこれです。 どのタスクの際にも技術を理解せずに突き詰められていた事が多かったと思います。 例えばシェルスクリプトでShebangを使っているのにshコマンドを使っていたことがありました。

また、traceの設定の仕方もドキュメントを読めばしっかり書いてあるのに網羅的に読まなかったせいで見落としていたりしていました。 プルリクエストで詰めて頂いたおかげでかなり勉強になったので凄く感謝しています。 理解しないで実装するのは結局はバグや脆弱性を生み出し非効率なので一番自分が成長しなければならない部分だと感じました。

チーム開発でのコミュニケーションの大切さ

普段私はハッカソンや個人開発を主にしていたこともあり一人よがりな開発をしがちです。 そのせいで今回、妙に一人で抱え込んだりして余計に時間をかけたり心配をかけてしまったりしていました。 開発の効率にも関わる問題なので普段からのコミュニケーションも大切にしていきたいなと感じました。

良かったこと

新しい技術に挑戦できた!

他社でのインターンやバイトは自分のできる技術をベースにできることを任されることが多かったです。 しかし今回のインターンではCloud Runという発表されて間もない新しい技術を触らせて頂いた上にインフラ部分の移行を任されるという大きな課題に挑戦できたので他では体験出来ない有意義な経験が出来ました。 プルリクエストのコメントも議論が活発でそこから学べる事も沢山あったので凄く感謝しています。 今までのインターン経験上一番悩んで、一番楽しかった1ヶ月でした。

働きやすい環境が用意されている!

アカツキさんのオフィスではみんなが楽しんで仕事をしている雰囲気があり、オフィスも働きやすい設備(バリスタが常駐してたりとか休憩スペースが用意されてたりとか...etc)が整っていたので非常に働きやすかったです! 私の経験上一番働きやすい環境だと思いました。

最後に

2年前にアカツキでインターンをした際も感じたのですが、アカツキの働きやすさを改めて実感できた1ヶ月だったと思います。 インターン生が行うタスクに関しても他では経験できない裁量が与えられる非常に有意義なものでした。 また、今回のインターンで入社するまでのあと半年で解決すべき私自身の課題も見えてきたので半年後には進化した姿でまた戻ってこれるように精進したいです。 今回色々と見て頂いた坂尾さん、田中さん本当に感謝しています。

長々と書いてしまいましたが最後までお付き合い頂きありがとうございました!

インターンでミニゲームづくりに挑戦しました。

エンジニアインターンとして2週間アカツキで就業したkeiwさんの体験記をお届けします。ゲーム開発は経験があったものの、これまで触れてこなかったUnityでの開発。課題としてミニゲームづくりに挑戦してもらいましたが、どのような学びがあったのでしょうか。今回はその様子をご紹介します。

 

こんにちは、2週間ほどインターン生としてお邪魔させていただきましたkeiwです。

 

今回、2週間で、ちょうど企画フェーズにあったバッテイングセンターのミニゲームをインターンテーマとして挑戦させて頂きました。今後、ハチナイ開発チームによる改修などを経て実際ゲームに登場するかも、とのことですが、自分が作ったものの何割が残れるか楽しみです。

この記事では、そのインターン体験記的なことを書こうと思います。(拙い文章ですが、お付き合いください^^;)

 

以下、目次です。

 

 

インターン開始まで

インターン開始まであと1ヶ月のとき。UnityとC#、GitHubをさわってくるように言われました。ゲーム作りはそれまで、バンバンやってきたのですが、それらはノータッチ。やってきてねと言われたリストは一応一通り試したのですが、他の用事などもあって十分にはさわれず、不安しかありませんでした。

 

インターン開始!

不安(と期待もあった)を胸に始まった初めてのインターンでしたが、自分が配属されたチームは会社っぽいというよりは雰囲気は高校の部活という感じで、技術的な不安以外はだいぶ緩和されました。ほとんどの読者には伝わらないと思いますが、とくにアイスブレイク担当を指名する愉快な茶番は面白かったし、そのアイスブレイクの内容自体もけっこう面白かったです。スターウォーズ昼食会などもよかったです。

 

壁、壁、壁!

初めての事ばかりで、当然壁にもぶち当たりました。

まずは、技術的な問題。雰囲気はよかったものの、やはり技術的な不安は的中してしまいました。1か月前からある程度さわってきたとはいえ、ほとんど初心者のUnityやGitHub。けっこう苦戦しました。何よりもMacPCには準備期間もなく、最後まで慣れなかったですね。(普段使っているWindowsやUbuntuもデキるわけではないのですが^^;)

また、今まで個人で何本かゲームを作ってはいたのですが、企画もイラストもコードも全て一人でやってきて、ゲームの内部的なところを人にみてもらうのは初めて。特にプログラムは1か月後の自分が再び編集し始められる程度を目安に書いていたので、人に読んでもらうことを前提とした書き方はなかなか難しかったし、恥ずかしかったです。ただ、細かく丁寧にコメントをしてもらえ、恥ずかしさによる抵抗感はすぐに消えました。

 

成果報告(一応メイン)

先ほど述べた通り2週間でミニゲームをつくることになりました。
ボールが飛んでくる。タイミングよく打つ。飛距離がスコアになる。というバッティングセンターを模したシンプルなゲームをつくりました。以下にゲームの使用を簡単に説明し、できたゲームのスクショにコメントを添える形で成果報告とさせてもらいます。

簡単な仕様

初めて見た現場の仕様書。ちょっと感動しました。

かなり簡単に書くと、

 1:画面内にいるバッターのストライクゾーンめがけてボールが飛んでくる
 2:それを画面をスワイプすることで打ち返す
 3:スワイプのタイミングと位置に応じて飛距離(スコア)が決まる

というもの。これを10球1セットで遊びます。イメージ図もあり、非常にわかりやすく、また作る前からワクワクしてました。

簡単なフロー

下図のように状態遷移させることで実現させました。

f:id:aktsk_keiw:20190315141602p:plain

・「初期化1」

 10球ごとに初期化が必要なものの初期化

・「初期化2」

 1球ごとの初期化

・「準備OK?」

 ボールがいきなり投げられるのを防止。タップで「メイン」へ

・「メイン」

 高スコア目指してバッティング!
 スコア計算はスワイプ終了直後にされる

・「ヒット」

 バッティング成功したら、キャラのカットインが入り、
 スコアがカウントアップするシーンが入る

・「空振り」

 バッティング失敗。タップで「初期化2」に戻り、もう一度トライ!

・「結果」

 今回のスコアを表示。

・「最終結果」

 今回で最高スコアと今までの最高スコアを表示。

プレイ画面

f:id:aktsk_keiw:20190315143155p:plain

「メイン」の画面です。主に右下の赤い十字めがけてボールが飛んできますが、ボールは少しブレます。ボール到達直前に青い十字が出るので、出来るだけ近い位置で指を離そう!

f:id:aktsk_keiw:20190315143834p:plain

「ヒット」のカットインです。バッティングに成功すると見れます。さらにスコアによって効果音が変わります。

f:id:aktsk_keiw:20190315144038p:plain

「最終結果」です。記録更新を目指せ!

スコア計算

スコア計算に使う主な要素は3つで、その要素を掛け合わせることでスコアを決定しました。

・スワイプで指を離すタイミング

・スワイプで指を離す位置

・スワイプにかける時間

工夫・苦労した点

工夫・苦労した点はやはりスワイプの判定です。きちんとスワイプしたかどうかの判断は4つのチェックポイントを設け、順に通過させた場合のみ、きちんとバッティングしたと判断するようにしました。通過したチェックポイントは色を濃くするようにし、次回へのフィードバックができるように工夫してあります。

他にも指を離した位置に白い十字マーカーを置くことでも、失敗しても「次こそは」と思えるようにしてあります。

また、タイミングの判定が悪ければ、面白くならないどころか、理不尽さにイライラしてしまうだけので、タイミングの判定にも工夫をしました。スワイプを終了すべき正しいタイミングを把握するために、発射されたボールの位置を把握してストライクゾーンをいつ通過したのかを把握するのではなく、ボールがストライクゾーンに到達するまでの時間を変数でおき、その変数に応じてボールを動かす感じ(変数が0の時がストライクゾーン通過中)で、正確なスワイプを終了すべきタイミングを得ました。

 

成果報告は以上です。

慣れないツールで、2週間は短かった。やり足りない部分もありますが、自分自身ワクワクしながらでき、先日の簡単なお披露目会では楽しそうにやってもらえたので、おおよそ満足。

 

反省・その他

初めての場所で初めての事ばかりで緊張しまくりの状態。集中したらちょっと周りが見えなくなる性格もあいまって、雑談とかはあまりできなかった。ちょっともったいなかったなぁ。


今後、同じようなインターンを受ける場合、ただ絵を画面に表示させるだけなどの何もしない状態でも実機で試すまでの一連の流れを3日目くらいまでにやるべきだったかなぁと。

色々とギリギリだった今回のインターン、デザイナーさんに絵素材をお願いする機会もあったのですが、背景絵を翌日にもらえないかと無茶な依頼もしました。でも、翌日にはハイクオリティの絵素材が! 感謝するとともになんか感動してしまいました。

 

最後に

サポートしてくれたメンターさんをはじめとする野球チームの皆さんや、人事・総務の皆さん、非常に濃密な2週間をありがとうございました。

初めてのインターンがここでよかったです!

【LT会】Akatsuki Geek Live開催レポート!Vol.2

こんにちは、エンジニア採用担当の花田です。

元号を跨ぐ大型GWも終えましたが、去る4/26(金)に学生向けLT会「Akatsuki Geek Live Vol.2」を開催いたしました!

2月の初開催に次ぐ、2度目の開催となりましたが、今回もリピーターを含む約30名の学生の方に集まっていただき、序盤から大いに盛り上がりました!この記事では、その様子を紹介いたします。

 「Akatsuki Geek Live」とは...

学生エンジニアと、アカツキエンジニアが登壇するLT会です。今回は学生3名、アカツキメンバー5名の計8名が発表しました。その後、参加メンバーで懇親会を実施、学生同士やアカツキメンバーとの交流をいたしました。

▼イベント概要はこちらから

aktsk.connpass.com

▼なぜLT会を開催するに至ったのか

初回の開催レポートに開催の思いを綴っていますのでご興味ある方は、こちらから

hackerslab.aktsk.jp

 #当日の様子

前回、前半のLT会はかなり真面目な雰囲気で進んでいき、後半の懇親会では、わいわいと盛り上がりました。それはそれで良かったのですが、今回は序盤から更に盛り上げていきたいと思い、LT会スタート時から参加者の方にドリンクを取っていただきました。カジュアルな空気で開始したこともあり、Twitterも序盤から活発に動く中、早速スタートです。

 

▼1人目:@3nan3さん(アカツキ)

「Ruby/Railsで、key-valueなオブジェクトから値を取得するイディオム」

1人目は、アカツキメンバーから!Ruby on Railsで「おれはHashから値を取り出したいだけなんだ!」という熱い思いを語ってくれました。

f:id:kenji-hanada:20190509203211j:plain

発表資料

qiita.com

 

▼2人目:@カレーエンジニアkomaiさん(アカツキ)

「世界最大級のゲームカンファレンスGDCって何?どんな雰囲気なの?どうやったら行けるの?」

2人目もアカツキから、絶品カレーを振舞うエンジニアが3月にサンフランシスコで開催されたGDC 2019の紹介をしてくれました!

f:id:kenji-hanada:20190509203208j:plain

発表資料

speakerdeck.com

 

▼3人目:@諏訪さん(アカツキ)

「What's "Google Cloud Next"?」

3人目もアカツキから諏訪さん。GDCに続いて、4月にサンフランシスコで開催されたカンファレンスの参加レポートを紹介!

f:id:kenji-hanada:20190509203205j:plain

発表資料

speakerdeck.com

 

▼4人目:@きょーまさん(アカツキ)

「C#のリフレクションを使ってみよう」

4人目はアカツキ枠からきょーまさん!C#のリフレクションについて基本的な使い方と便利な使用方法を紹介してくれました。

f:id:kenji-hanada:20190509203202j:plain

発表資料

speakerdeck.com

 

▼5人目:@yasu0327さん(学生)

「ゼロから始めるGo Modules」

5人目は学生枠からyasu0327さん。Go Modulesの管理機能とその流れを紹介してくれました!最近Goに取り組まれている学生さん多いですね!

f:id:kenji-hanada:20190509203157j:plain

発表資料(speakerdeckには代理で登録しています)

speakerdeck.com

 

▼6人目:@給前さん(アカツキ)

「Unityエンジニアを目指す方が、学生のうちに学んでおいてほしい技術」

6人目はアカツキから、Unityエンジニアを目指す方向けに、自身の学生時代の学習方法・内容を交えながら語ってくれました。勉強量がとにかくすごい。

f:id:kenji-hanada:20190509203151j:plain

 

▼7人目:@Matts966さん(学生)

「Go言語で書くLispインタプリタ」

7人目は学生枠からMatts966さん!この発表では特に「タイトルがもう強い」「Lispインタプリタすごい」とTweetが盛り上がっていました!

f:id:kenji-hanada:20190509203148j:plain

発表資料

 

▼8人目:@takanakahikoさん(学生)

「学生がOSSに挑戦するということ」

トリを務めるのは学生枠よりtakanakahikoさん!OSSへの挑戦について語ってくれました。実は私も彼が作った拡張機能を使わせて頂いています!

f:id:kenji-hanada:20190509203140j:plain

発表資料

speakerdeck.com

 

8名による熱のこもったの発表はあっという間にすぎ、懇親会へと移ります。

今回も学生 x アカツキメンバーの交流が盛んで、至るところで笑い声が聞こえました。中にはセグウェイに乗りながら懇親会に参加するメンバーも笑

f:id:kenji-hanada:20190509203137j:plain


参加者のみなさん、お疲れ様でした!

今回、アカツキの技術領域の話はもちろん、海外カンファレンスの話や、学生同士の交流を通して、これからの一歩を踏み出す一つのきっかけとなったのではないでしょうか。

次回は7/1(月)に開催予定です!またエネルギー溢れる皆さんにお会いできることを楽しみにしています^^

f:id:kenji-hanada:20190509203134j:plain

 ▼次回予約はこちらから

aktsk.connpass.com