プログラミング遍歴
2024年
2023年
Cysharp さんでオープンソースソフトウェアのメンテナンスのお手伝いをする。 2022年
VContainer がUnity社サンプルをはじめ様々な企業に採用される。Github ☆1,000獲得。 2021年
Niantic さんで ゲームのパフォーマンス改善に取り組む。
某ゲーム開発会社さんで設計のアドバイザーとして活躍。
ボーンデジタル社さん「Unityプログラミングバイブル2nd」の執筆に参加。
2020年
2019年
フリーランスエンジニアとして独立
Rust で画像処理サーバの設計開発をするお仕事
2018年
プロジェクト内の研究開発をする班に。
Unity 製ゲームのパフォーマンスチューニングをするなど。
IL2CPPランタイムやシェーダの事前読み込み問題、ロードの最適化などに取り組む。
大手ゲームメーカーさんと協業のプロジェクト(その2)に参加
2017年
たまたまアーキテクトの方が休職され、サーバサイドのアーキテクチャづくりを引き継ぐことになる。
双方向通信できるゲームサーバを同時接続数数万に耐えるようにする、という高い目標が課される。
社内にはオンラインゲームサーバー黎明期から活躍していたような方もおり、インフラチームや社内の熟練者の方々と議論を重ねつつ、いろいろ作り直す。
この辺りでマルチスレッドプログラミングの基本的なパターンを学びつつ、ゲームサーバー1台あたりのスループットを改善したり、並行実行される大小さまざまなタスクの単位ごとにエラーを適切に伝搬させるようにするなど、アプリケーションより下の基礎部分を書いた。
メモリリークやマルチスレッド下の不具合、ソケットのバッファあふれ など、低めのレイヤの複合条件が絡んだ問題と格闘する。バグと対抗する経験値が溜まる。「バグは再現条件がわかっているのに直せない、ということはほとんどありえない。再現条件を完璧に理解すれば仕事はほぼ終わっている」という先輩のお言葉は名言として記憶されている。
kubernetes 上で、おもに C# で書かれた自前のミドルウェアや自前のアプリケーションプロトコルを組み合わせたシステムをつくる。
ゲームは、スモールスタートということはあまりせず、リリース時点で宣伝を力に入れる。そのため、リリース遥か以前に単位あたりのサーバのスループットを割り出す、全体のスループットを試算する、といった方法論を学ぶ。
2016年
Aimingに入社
クライアントサイドもサーバサイドもひっくるめて設計を考えるというこれまでの仕事を高く評価していただいた
オンラインゲーム開発の仕事をする
大手ゲームメーカーさんと協業のプロジェクトを経験する
さらにチームの人数規模が大きくなる
規模の大きく複雑なプロジェクトにおいては、 判断力のあるリーダが立っているととても効率が良いことを体感する。あるいは、ゲームプログラミングのようなおよそどんなことも資源を投入すれば実現できる可能性のある世界では、判断力が生産性に大きく関わってくることを学ぶ。
Unity における Rx (UniRx) に啓蒙したり、Web界隈で発達していた MV* や単方向制御フローなどの設計パターンを共有するなどする。
四分木、Triplaner Texture Mapping、エフェクトのシェーダなど、ゲームっぽい部分の実装も経験させてもらう。
C# の 実用性の高さが好きになる。バランスの良さや、Rx や async/await などの発達、IDEの出来に感銘を受ける。
「Dependenciy Injection .NET」という本に出会う。オブジェクト指向的な発想の設計について書かれた本のなかでは自分の中で最高の本。
DDD などの エンタープライズ由来の堅い設計も好きになる。
2014年
新規Webサービス立ち上げに企画開始手前から参加。ごく少人数チームでプロダクトの形を決めていった。
Webやスマホというものが決まりきったUIコンポーネントの組み合わせに収束していることに不満のようなものがあり、既存の「いわゆる」なUIでない新しい工夫をしようと、うんうん悩みながらいろいろと試みた
システムもアーキテクチャも、まずユーザになにを提供するかから逆算してすべてを設計するべきだと考えていて、そうできるように努力していた。
iOSアプリでは、物理エンジンをつかったり、操作に対するフィードバックのエフェクトにシェーダをつかったり、 Webブラウザ側では、ユーザのリアクションが 円状にランダムに散らばる動的なレイアウト、 css3 での GPU アニメーションなど表面的なことも試していた。
その他、この頃は、手広くなんでもやっていた。動的に画像を生成して返すサーバを書く、 jpegを圧縮するライブラリにパッチを投げる、フロントエンド、バックエンドのアーキテクチャ全般をみる、 検索、レコメンドのシステムをつくる、サービスの命名案が採用される、マスコットキャラに命を与えるなどの活躍をする。
このプロジェクトはそこそこ支持を集め事業部化。その後10年続くサービスに成長した。
2012 - 2014年
paperboy&co. に入社
規模の大きいチームで仕事をする
Webサービス開発という、道具の革新が日々起きている現場で色々なものをさわってみることに。
Webのフロントエンド javascript 、UIのMV* な設計、 Rx (Reactive Extensions) などに興味を持つ。
この頃、C10K問題とか言われだしたり、Webのリッチ化やリアルタイムな面が注目され始めていた。node.js に興味を持つ。
Webサービス開発はビジネスではなく思想の社会実装である、という理想や哲学に魅かれる。コンピューターの歴史や思想面の本とかも高額を投じて集めてた。
「すごいHaskell楽しく学ぼう」という本に出会う。プログラミングの話をすばらしい文章表現や語り口で語ることも可能だと教えてくれた本
関数型プログラミングに興味を持つ。 rust に興味を持つ。 swift にも興味を持つ。
2011年
ゲーム開発会社でアルバイトをする。
自分より遥かに年下でC++ とグラフィックスAPIだけでゲームを書いている人など、ゲームやグラフィックスプログラミングができる人達に出会う。
C++ の本を何冊も読む。C++の本はなぜかテクニックが書いてあることが多くておもしろいなとおもう。Effective-C++ シリーズで例外安全性やオブジェクト指向の概念を、Efficient-C++ ではミクロなパフォーマンスチューニング手法やメモリ管理手法に触れる。
継承の問題点を説明する喩え、「鳥は飛べる」→「ペンギンは鳥」 → 「ペンギンは飛べない」は名言として記憶されている。
Unity 、C# の仕事をする。
2009年
ソーシャルゲーム開発の仕事をする。
いわゆるフィーチャフォン(ガラケー)向け、HTML & Flash を組み合わせたゲームサービスをつくっていた。
それなりのトラフィック規模のサーバ開発を経験。
本番で問題なく運用できる状態と、手元でなんとなく動いてる状態とではまったく違うことを学んでいった。
趣味で iOS SDK や C++ をさわり始める。
このとき所属していた会社は後に Klab に吸収されることに。
2008年
Ruby の自然言語ライクな字面の配置に極端にこだわったスタイルを気に入る。
当時のwebプログラミングは、HTML文字を動的に生成するといった内容でほぼ完結した。スクリプト言語全盛時代。Ruby on Rails はこの「決まった処理をいかに直感的に書くか」という部分への執着が異常で、その極端に字面にこだわったスタイルに感動する。
それまで、プログラミングというものは理系で論理的で形式的なものというイメージがあったが、人間が読む文としてコードを考えている感性がとてもかっこいいと思った。たくさんの正しさ、透明性/並行性制御/参照透過性/オブジェクト間の依存構造……などをすべて捨てて「たのしい書き味」だけを優先順位の一番上に置く反骨精神、「ホワイの感動的rubyガイド」などをはじめとする界隈の詩想、などなどにこのとき触れたおかげで、プログラミングというものと自分との距離が縮まる。
たかが本一冊読んだ程度の知識でも、使える道具をつくれることを体験し、良い商売だなと思う。