バイクとプログラミング

Month: September 2019

NodejsのTypeScriptでGlobalな変数定義

ゲームプログラミングにて、様々なステータスを引数で渡すことなくアクセスするためのFluxライクなライブラリを書いた。その際にグローバル変数を定義する必要があり、すこしハマったので調べたことをメモ。

グローバルな型定義を行うにはおなじみの.d.tsファイルを使用する。どこに設置しても良いが、今回は/types/index.d.tsに設置する。また、必ず@types/nodeを入れる必要がある。

index.d.tsファイルの内容は以下のような形。

import { State, Dispatcher } from '../src/xxx/State';

declare global {
    namespace NodeJS {
        interface Global {
            state: State;
            dispatcher: Dispatcher
        }
    }
}

declare global宣言でモジュールの型定義を拡張することができる。もちろんNodejsのglobalオブジェクトはNodeJS namespace内に定義されているため、それを拡張することになる。@types/nodeを必要とする理由はこのことから。

また、index.d.tsをtsconfig.jsonで明示的に読み込む必要がある。

{
  "compilerOptions": {
    ...
    "typeRoots": ["types"], // 型定義ファイルを設置したディレクトリ
    "types": ["node"],
    ...
  }
}

これでglobalオブジェクトを使用する準備ができた。あとはコードを書けばコンパイルできる。

global.dispatcher = new Dispatcher();
global.dispatcher.dispatch('your_event');

以上です。

CyberAgent TechJOBに参加しました

非常に有意義な夏休みになりました。

はじめに

インターンの環境や待遇・イベントについては一緒に参加した方が先に記事にされていますので、ここでは自分と直接関係のあることを書いていきたいと思います。

ぜひ他の方のブログも参照してみてください。一口にCyberAgentのインターンといっても、配属される先によって千差万別あることがわかると思います。

【CATechJob】BLADE XLOADで内定者アルバイトとして学んだこと
https://ameblo.jp/yui-unityengineer/entry-12514915180.html

CyberAgentのAbemaTVでインターンしてきた話
https://blog.p1ass.com/posts/abema-intern/

他の方のブログに書いてあるように、人事の方が企画のイベントやランチがとても楽しかったです。”人事”に持っていたイメージがだいぶ変わりましたし、何を相談しても良い雰囲気があってよかったと思います。

何も考えずにTwitterで「野菜不足だー」と呟いたら人事の宇都宮さんが野菜ジュースを買ってきていただいた時はびっくりしました。

美味しかったです!

ここから下は個人的なことになります。

インターン参加の目的

CyberAgentへのインターンに限らず、エントリーするときに考えていたことをまとめました。

ビジネス的な視点を持ちたい

私はここ一年半ほどフリーランスエンジニアとして活動してきました。直近は主にソーシャルゲームのサーバサイドエンジニアで、自由な働き方のできるフリーランスは学業との兼業に最適でしたが、新卒では正社員として入社できることを目標にしています。

例外もありますが、基本的にフリーランスとは顧客の求めるものを納品して、それの対価を得るものです。そのため、チームとしてプロダクトの価値を最大化することや、中長期に渡った経営・運用の知識を得にくく、どうしても個人戦になってしまうイメージがあります。

そこで、会社員としてエンジニアをするのであれば、技術力を伸ばすことだけではなく、どのようにプロダクトを成長させ、コストを減らし、集客を行うのか、そういったビジネス的な視点を得ていきたいと思うようになりました。

その布石として、参加するインターンでは、ビジネス視点もしくはそれに近いものを取り入れることができれば良いと考えていました。

フロントエンドエンジニアとして

上述した通り、実務経験があるのはほぼサーバサイドのみでした。フロントエンドの実務経験は社内向けツールのみで、jQuery+Ajaxのようなシンプルなものしかありません。

そのため、独学でDOMやUIUX、Reactのようなフロントエンドフレームワークを実践してきましたが、これらのスキルセットを次のステップに進めたいと感じ、教えてもらえる立場になれるインターンであれば、フロントエンドをやってみよう!という気持ちになっていました。

エントリーから参加まで

書類選考 → 一次面接 → 二次面接 → 参加という形でした。参加までは全てオンラインで行われ、Webカメラを使った面接も比較的自由に時間の設定が可能でした。

定型文のような質問はなく、事前に提出したエントリーシートやGitHubをベースに話を進めていただけるので、こちらとしても非常に話しやすかったです。

CAM – Fensiに参加

私はCyberAgentグループのCAMという企業に配属されました。CAMは創業2000年と、多数の子会社が存在するCAグループの中でも歴史の長い企業であり、主にファンビジネスなどのBtoCを扱っています。

その中で、私はFensiのフロントエンドチームに配属されました。Fensiは登録者自身のファンサイトを簡単に作成できるサービスで、リリースされてからまだ三ヶ月ほどしか経っておらず、まだまだ新規開発の勢いが残っている感じでした。

業務内容

最初はソースコードの把握を進めつつ簡単な不具合解消を手伝い、慣れてきたらチケットを消費する形で作業を進めました。

最後の二週間ほどは売り上げページや振り込み可能額表示など、新規追加をイチから作成、みたいなタスクもいただきました。

仕事に対してのレベル感はちょうどよく、得るものと提供できるもののバランスが取れている感じでした。技術的にそれほど難しいことを行なっているわけではありませんが、まともにCSSやWeb Componentsでフロントエンドを書くのは初めてだったので、知見を広げることができたと思います。

一日も暇になる日がなく、毎日がっつりと仕事をさせてもらいました。メンターさんも忙しく、近くにいない日が多かったですが、自分でうまく仕事を回せてたのではないかなぁと思います。

最終日にお酒の席でフィードバックをいただきましたが、質問の仕方や仕事の取り方など高評価をいただけて嬉しかったです。

得られたもの

技術については、フロントエンドで一ヶ月も実務経験を積めばその分だけ上がるのは当たり前なので、それ以外に経験したことをベースにまとめてみました。

他業種との調整

BtoCのプロダクトなので、チームの中にはデザイナさんがいます。仕事の流れとしては、デザイナさんがモックアップしたデザインをベースにコードへ落とし込んでいくような流れになっています。

趣味でUIUXを学んでいたので、チャンスだ!と思い自分のタスク範囲内にあるUIUXをチェックしていましたが、流石は本職のデザイナさん、ほとんど気になるところはありませんでした。

一部、おや?と思うところや細かなカラーコードの違いなど、直接お伺いして自分の考えを伝えたこともあり、その時のフィードバックなど、新鮮な気分を味わうことができました。このような業種間の調整ができたのは、自分にとってプラスになったのではないかなと思います。

余談ですが、UXエンジニアという業種が存在することも在籍中に知りました。せっかくBtoCのフロントエンドエンジニアになるのであれば、UI・UXにも気を配れるエンジニアになれたらいいなと思います。

UXエンジニアとアクセシビリティエバンジェリストによる品質と開発速度が担保されたチームのつくりかた | FEATUReS

共通化とお金

これは上述したビジネス視点を持ちたいという点に繋がる成果でした。

コンプラ的な問題から、詳しく書くことはできませんが、Fensiはサービス自体が社内で重要な立ち位置を持っています。簡単に書けば共通化という話になりますが、様々なサイトでシステムが共通化できるようによく考えて作られており、そこが興味深かったです。

メンターさんのお話では、CTO発案のシステムだそうです。共通化によって何割もコストを削減できているようなので、やはり上を目指すのであればこのようなお金周り、運用周りを考えることのできるエンジニアになる必要があるのだなと感じました。

新規開発のスピード感

Fensiの開発は全体的にとてもスピード感がありました。ソーシャルゲーム開発現場では見られない、出してから考えるスタンスで開発を行っていたため、ほぼ必須のように思える売り上げ系の画面の実装がリリース後だったりして面白かったです。

私が担当した振り込み可能額表示画面でも、ユーザに売り上げが発生したことを確認してから開発を行うことが決まるなど、要所要所で優先順位が変化する様子がわかりました。

Facebookの”Done is better than perfect”を思い出させるような現場だったと思います。

不満点

特にこれといった不満点はありませんでした。

強いて言うならモニタが27インチFHDとあまり品質の良いものではなく、コントラストが低めで見にくかったことくらいでしょうか。

人事さんとの面接でも不満点があればと聞かれましたが、本当にストレスレスな環境だったと思います。

今後について

インターン参加で始まった就活ですが、今後も様々な企業を視野に入れて活動していきたいと思います。特に今興味があるのはゲームのサーバサイド、もしくはWebサービスのフロントエンドですので、これらの知見を伸ばしていくことができればいいなと考えています。

一方で、この二つは分野的にあまり重なるものではないので、今後どちらか一つに絞っていく必要がありそうです。どちらも自分にとって興味のある分野なので、就活を進めつつ技術の選択もしていきたいと思っています。

おわりに

割と真面目な感じになってしまいました。余裕があれば、次はエンジョイ編と題してこの続きを雑多にまとめたやつを作れればと思っています。

今回のインターンでは様々な方にお世話になりました。おかげさまで非常に楽しく勉強になる一ヶ月を送ることができました。本当にありがとうございました。

裏には寄せ書きもいただきました

以上です。

Powered by WordPress & Theme by Anders Norén