エンジニア・佐藤のプログラミングへの飽くなき挑戦と自分を成長させる環境づくり

こんにちは、インターンの吉岡です。12回目は、エンジニアとして異色(!?)の経歴を持つ佐藤淳にインタビューしました。


ーエンジニアになる前は何をしていたんですか。

 高校卒業後、一般企業で営業をやったりフリーターになったりしながら5年くらい自由に生活していました。

ーエンジニアになろうとしたきっかけは。

 当時 Diablo2 とか Lineage2 みたいなオンラインの PC ゲームにどハマりしていて「パソコン好きだしプログラマーになろう!」っていう安易な発想でした。エンジニアで優秀な方のインタビュー記事をみると「小学生の頃に家にあったマイコンでプログラムを書きはじめました。」みたいなエピソードが多いんですけど、自分は高卒で20代半ばに未経験から職業プログラマーになったので、業界ではわりと異色だと思います。なにしろ「Hello, World!」を初めて書いたのが24歳の時でしたから相当遅い走り出しでした。

ー24歳からプログラミングの勉強を始めたんですか!

 求人誌を見ていたらプログラマーで未経験募集の人材育成会社があったんです。3ヶ月の研修期間で Java を学んで、提携会社に転籍して SIer の2次請け・3次請けとして3年間、Struts や Seasar 等の Web フレームワークを使った業務アプリケーションの開発に携わりました。ですが Excel 駆動開発もそうですし、古いバージョンのライブラリを使い続ける文化や、あるいは給与面も含めて自分の理想とかけ離れていたので転職を決意しました。

ーどんな経緯で転職したんですか。

 技術系のブログ記事をたくさん書いていた時期で「仕事を探しています。」と書いてみたら、人材紹介をされている方の目に留まってサイバーエージェント・アメリカの方と面談させていただけることになったんです。当時はアピールできるほど技術力も高くなかったですし、BtoC の経験もなかったので不安でした。でも関心のある分野と志向がマッチしていたみたいで、ポテンシャル採用に近い形で仕事をさせてもらえることになりました。そこでは8年前の当時はまだ採用実績の少なかった AWS が使われていて、MongoDB や Memcached、独自のソケットサーバ実装があったりと最高の環境でした。

佐藤のデスク。以前はキーボードにこだわりがあって HHKB や Kinesis Advantage2 を使っていたものの最終的にはミニマルな構成に落ちついたそう。今は筋トレが趣味でサプリメント (画像右上) にこだわっているようです。

ーキャリアの転機になったんですね。

はい。設計・開発・運用・インフラ構築をまるっと経験できたので、飛躍的にスキルアップしました。働く場所や人が変わればこんなにも違うんだなって実感したんです。裁量の大きさからくる技術の選択肢や、ひとりで扱える領域の広さ。これが Web 業界でソフトウェアエンジニアとして働くことの一番の魅力だと思います。ちなみにサイバーエージェントでは4つのサービスに関わったんですが、2つめのサービスで今の代表である高場と同じチームでした。その縁があってトランスリミットに転職したんです。

ートランスリミットに入ってどうでしたか。

 入社したのは Craft Warriors の開発が始って半年くらい経った頃なんですが、一番よかったのは使用言語が今までと大きく違っていたことですね。クライアントは Cocos2d-x (C++)、メインのサーバは Ruby on Rails、その他のサブシステムが Node.js、デプロイ関連のツールに Python という感じで、Node.js を除けば未経験でした。

ーそれって大変じゃないですか!

0から作るとなれば大変ですけど、経験豊富なエンジニアが書いた動くコードがある状態でしたから C++ も Ruby もそれぞれ3日目くらいには GitHub に push して開発に貢献しはじめることができました。あと、新しいことをすればその分だけ成長できるということでもあるので、気持ちの面でも楽しいです。

ー開発では複数の言語を使い分けることが多いんですか。

 トランスリミットでは、パフォーマンスやコストを考慮しながら、その時々のフェーズに合わせてベストな技術を選択しています。例えばどれだけ優れた技術だとしても学習コストに長い時間がかかればそれだけサービスのリリースも遅れてしまうので採用は難しいですよね。幅広い経験を持ったエンジニアが多いですし、CTO やエンジニアでもある社長のバランス感覚が優れているのでうまくいっていると思います。

 直接聞いたわけではないんですが、おそらく初期の頃は短期間でリリースすることやエンジニアの採用のしやすさから Ruby on Rails をメインに据えていたのだと思います。最近ではバックエンドで外部 API を使ったり時間のかかる I/O 処理が増えてきたから Node.js を使うケースが多くなりました。Rails は待ち時間が発生するとサーバが詰まってしまうので、メモリの限界までワーカーを増やしたり、サーバをたくさん並べてスケールさせる必要がでてきてしまいます。それだと運用コストがかかるのでノンブロッキング I/O の Node.js の方が手軽にスケールアウトできて効率的ということですね。ちなみに最近は Go 言語を使う機運がかなり高まってきています。クライアントツールが作りやすく、サーバでの並行処理も得意、しかもバイナリを作れるからイメージサイズを小さくできて Docker との相性も良い、さらに採用企業が急速に増えていて人材も増えつつあるからです。

ー現在ではどのようなことをしているんですか。

 直近では HighwaySurf という新規プロジェクトを技術選定の段階から担当させてもらいました。任せてもらった領域も広いのでいろんなチャレンジがありました。一つはうまくいっていた Node.js はそのままに、JavaScript を TypeScript に代えました。動的型付け言語では正しい型であるかのチェック処理とそれを保障するテストコードが必要になってしまうので、結局あらかじめ型宣言できる TypeScript の方が合理的なんです。Nest.js や TypeORM のような TypeScript ベースのフレームワークが増えてきたことも導入を決めるのに十分な理由でした。
 二つめは今までアプリケーションを EC2 インスタンスにデプロイしてオートスケールさせていましたが、Docker でコンテナ化し ECS + Fargate 構成にしました。インスタンス管理なしで自動起動やオートスケールできるようになったので手間が減りました。
 三つめはプロジェクトの初期構想として同じ世界を活用しながら横展開する計画があったので、コードを基盤化することにも注力しました。ランキングのような汎用機能をマイクロサービスとして独立させてメインのサーバと gRPC で通信させたり、TypeScript ベースのコードが複数プロジェクトに増えたから共通処理をコアモジュールにしたりとかですね。
 四つめに DevOps にも力を入れていて、CodePipeline, CodeBuild, CodeDeploy を使った継続的デプロイとブルー・グリーンデプロイメントの仕組みを使ったり、インフラ構成も Terraform を使ってコード化したので、3分で作成・破棄ができるようになっています。

ーエンジニアとして遅いスタートですが、努力してきたことはありますか。

 あまり意思の強いタイプじゃないので努力とか気合では長続きしないんですよね。それよりもどういう状況が楽しくないか、どういう事で時間を消耗しているかを考えて環境を変えることを意識しています。良い環境で仕事できれば楽しいし集中できる。そしてスキルアップにも繋がります。そうすれば後から振り返ったときに「結果からみると努力していたな」と思えます。今までのエンジニア人生でも SE をやめて Web 業界に転職したこと、トランスリミットで新たなチャレンジをさせてもらったこと。どれも環境が変わったことで大きく成長しました。なのでチャレンジできる環境に身を置くことが一番重要だと思います。
 そういえば自分は登山とかバイクツーリングが趣味なんですけど、これも見知らぬ環境に見を置くということが共通点ですね。引っ越しも好きですし。やはり今の自分を形作ってきたのは環境だと思います。

株式会社トランスリミット's job postings
Anonymous
98658423 036b 4006 a41c bb0a5567b871?1541557831
Picture?1523032822
12111939 957583704297524 6487986288944929775 n
Fe7b0c4b 9588 4348 a976 1436384b2150?1541897076
A2714e58 ff89 4d85 b8cb bafed4587dee?1545396373
5 Likes
Anonymous
98658423 036b 4006 a41c bb0a5567b871?1541557831
Picture?1523032822
12111939 957583704297524 6487986288944929775 n
Fe7b0c4b 9588 4348 a976 1436384b2150?1541897076
A2714e58 ff89 4d85 b8cb bafed4587dee?1545396373
5 Likes

Weekly ranking

Show other rankings

Page top icon