はじめに
しばらく前に懸垂機を買って次にフィットネスバイクを買いました、yosuke2です。
部屋着で普通に数十分漕ぐと汗が凄いので近々運動着が欲しいです。
今回は私が何故今の仕事、ITエンジニアな仕事に就くことになったかのきっかけと、そこからどんなことを学んできて、そして今に至るのか。
この辺りを話していこうと思います。
ちなみに私の経歴を簡単に書くと、BPSが2社目で、もうすぐ5年目になります。
BPSでは主に電子書籍関連の仕事に携わっています。
どのような方がこの記事に目を通すのかは分かりませんが、今ITエンジニアを目指している方、途中に転職の話も挟むので転職を考えている方、BPSにどんな人が勤めているのだろうとちょっと気になっている方、などなどの参考になると幸いです。
ITエンジニアな仕事に就くことになったきっかけ
まずきっかけです。
そもそも私は小学生の頃からゲームを作る人になりたいと考えていました。
小学校の卒業文集には、将来ゲームを作る人か小説家になりたいと書いていた記憶があります。
当然その頃はゲームを作る人というのがどのような仕事なのか想像なんてついてなかったので、ふわっと「ゲームを作る人」というイメージでしかなく、具体的にプログラマーなのか3Dモデラーなのかプランナーなのかなどは決めてなかったのですが。
ちなみに私は1995年生まれのため、小学6年生当時のゲームハードとしては「ニンテンドーDS」や「Wii」などの世代で、ポケモンで言うとオリジナルの「ダイヤモンド・パール」を遊んでいた時期になります。
この辺りジェネレーションギャップがありそうですが、もう3Dがすっかり当たり前になっている時期ですね。
初めて遊んだゲームはドリームキャストの「ソニックアドベンチャー」です。
そんな感じで昔からゲームが好きだった私ですが、時は進んで高校生の頃に当然進路の話になります。
私は特別勉強ができた訳ではない、どころか全体で見ると成績は悪い方だったと思います。
それもあって大学という選択肢はあまり考えられず、それならと興味・関心があって意欲を持って学べそうな専門学校はどうかという話になりました。
ちょうど自宅からも通いやすい範囲にテレビCMでも小学生くらいの頃から頻繁に見かけていた専門学校があり、そこでならゲーム業界を目指せる、ということでそこ一本で決めて入学することになりました。
始めはプランナーを目指していたのですが、その学校ではプランナーの学科はないようで(現状どうかは把握してません)、プログラマーとしてなら目指せるということでした。
他にも3DCG学科などからゲーム業界に入る人もいたようですが、基本的にゲーム業界として強いのはそのプログラマーの学科だったようで、結果としてその学科を選ぶことになりました。
ということで、私がITエンジニアになったきっかけはゲームが好きで、進路を決める際にゲームプログラマーとしての道を選んだから、になります。
学生時代のプログラミングの勉強について
ではここからは専門学校でどのようなことを学んできたかを書いていこうと思います。
私がいた学科では基本的にゲーム作りを通してプログラミングを学ぼう、という趣旨でした。
私の1つ下の世代辺りから徐々にゲームエンジンなどを授業に取り入れてUnityを用いたりし始めていましたが、私の世代までは基本的には先生の自作ライブラリやDirectX9などを用いてガッツリC/C++を用いて作るというものでした。
私が専門学校に入学したのが2015年で、その頃には既にスマホゲームが流行していたためか、Androidでのゲーム制作もあり、多少JavaやAndroidの授業もありました。
しかし、プログラマーとしてゲーム会社に就職しようとすると狭き門のようで、当時私の学年で150人ほどいましたが、毎年30人ほどしかゲーム会社への内定は決まらないようでした。
ではその他のほとんどの人はどこへ行くかと言うとIT会社になります。
ということでゲーム制作だけではなく、linuxを触ってみようという授業であったり、IT会社に行くのに有利になるからと資格の授業、C言語検定やおなじみIPAのITパスポートや基本情報などの勉強もしていました。
HTML/CSSやSQLなどの授業もあり、どれも授業でそこまで深いことはやってなかったものの、実際に業務で触れる際にとっつきやすさは感じたので、やっていて良かったのだろうなと思っています。
専門学校1年生
ではプログラミングの授業を少しだけ深堀りしようと思います。
私の通っていた学校・学科では当時2年制と3年制がありました。今は4年制もあるようです。
1年生ではC言語を使ってゲームプログラミングを行っていました。
この時は先生自作のゲームライブラリを用いてまず2Dのシューティングを授業で作るなどしていました。
1年生では後半にチーム制作を行って発表をしたりするのですが、これも基本的には先生自作のゲームライブラリを用いて作るのが大半でした。
他にはVisual Basicの授業もありましたし、アルゴリズムの授業としてソートのプログラムをC言語で組んでみて理解しよう、などといった内容の授業も行っていた記憶があります。
初めての自分だけのPCを手に入れ、初めてのプログラミングを行い、色々と慣れない中で入学前から勉強を頑張っていた記憶があります。
第3版ではないですが、この本とか自分で買って読んでた記憶があります。
専門学生時代の全体を通してですが、技術書は頻繁に買ってよく読んでました。
他には以下の辺りなども読んでた記憶があります(ちょっと新しいのもありますが古いのを読んでたということで)。
後はネットにある個人ブログなどでよく勉強していたように思います。
パッと思いつく辺りでこの辺りなどよくお世話になっていました。
専門学校2年生
やはり昔からプログラミングやってたとかゲーム作ってた、後は私と同じく初めてだけど理解が早い人などもいて、私自身が物凄く優秀だったかと言うとそんなことはないのですが、家でも勉強などに努めていたおかげか、1年生の成績が優良かつ面接を通してのみ入れる2年生の特進クラスに入ることができました。
そうして2年生になると次はCからC++に、そしてAndroidゲーム開発も少し触れるためJavaとAndroidの仕組みを勉強することになります。
C++やJavaということでここで初めてオブジェクト指向な言語に触れることになります。
当然Cと勝手が違いますし始めは慣れなかったのですが、授業外での勉強もあってか周りよりは理解が少しだけ早かったように思います。
1年生の頃は2Dゲームを作ることになっていたのですが、2年生になると3Dになります。
Androidゲーム開発に関しては基本作りやすいのでみんな2Dでしたが、一部物理エンジンを入れている人などもいました。
3Dになると先生の自作ゲームライブラリではなくDirectX9を使うようになります。
Twitter(現X)では2010年代後半時点でゲーム制作を教えているような人が、さすがにDirectX9は古すぎるという意見を表明しているのも見かけましたが、やはりDirectX10以降ほど複雑でなく教えるのに適しているという事情からか2016年時点では私の通っていた学校ではDirectX9が採用されていました。
現在どうなっているのか事情は把握してないですが、いつか学園祭などに行く機会があれば少し訊いてみたいと考えています。
正直3Dゲーム開発で使われる行列やベクトルの計算などは全く理解していないのですが、DirectX9のライブラリ側で計算はやってくれるので、後はその使い方と使った結果がどうなるか、を理解していれば開発はどうにかなりました。
私は数学がとても苦手なのですが、授業での先生の教え方がとても分かりやすく、使い方と使った結果がどうなるかがしっかりと理解できたためそこまで苦労せずに開発ができました。
また2年生では基本的に1人でゲーム開発をします。
Android開発もC++とDirectX9による開発も個人で行い、主にC++/DirectX9で作った3D作品を就活で使用する作品として用いるため、個人でこれを全部作りました、とアピールしやすいからという事情でした。
その分3Dモデル制作も2Dのグラフィック制作も自分でやらないといけませんし、サウンドもフリー素材で構わないとは言え、自分の作品の雰囲気にあったものを探し出すのもとても大変で、ここでゲーム開発って物凄く大変なんだなということを体感しました。
昨今ゲームエンジンが普及し、代表的なUnity、Unreal Engineはもちろん、Godotなんかも流行の兆しがあります。
Game Maker StudioやRen’Py、cocos2Dなどなど、様々なゲームエンジンがあり、個人製作や少人数での制作のインディーゲームも流行っています。
とはいえ個人にせよ少人数にせよ大規模にせよ、ゲームを作るというのは想像以上に大変なのだなと、ゲームを遊んだりSNSでゲームの開発状況を報告している開発者を見たりする度に、その努力に思いを馳せます。
少々話が逸れましたが、そんな感じで2年生の時期は個人で初めてオブジェクト指向な言語に触れつつ主に3Dなゲームを個人で開発していました。
専門学校3年生
3年生になると卒業に向けて課題が増え、就活も終わると引っ越し費用などを工面するためにバイトを始めるなどして、勉強よりはこの先の生活に向けての準備が増えていきました。
なのでプログラミングの自主的な勉強に励めたのは1,2年生の間が主で、3年生になってからは基本的に授業と課題を淡々とこなしつつ、再びチームでの開発になるためその開発を授業時間内とプライベートの時間で進めるという感じでした。
3年生になると開発に用いるのがC++なのは変わらないのですが、DirectX9ではなくDirectX11になります。が、やはり複雑なのを授業で1から学ばせるのが難しいためか、再び先生の自作ゲームライブラリを用いることになります。
もちろん自主的に学んで開発に組み込むのは自由なため、DirectX9では使えなかったシェーダを用いて表現の幅を広げるなどは各々やっていました。
3年生になると3Dプログラミングの授業としてシェーダの勉強などをしていたような記憶があります。
2年生までにゲームプログラミングに必要な基本的なことは学んでいるので、3年生では応用的な内容という趣だったように思います。
学校でのプログラミングの授業としてはこんなところでしょうか。
就職してから
前職(新卒入社)
その後2018年の春に学校を卒業した私は内定の決まっていたゲーム会社に勤めることになります。
初めてのITエンジニアとしての仕事が始まり、どのような仕事をすることになるのか不安混じりにも楽しみにしていました。
しかし結果としては1年と経過せずに退職することになります。
理由は様々ありますが1番大きな理由・原因が、「素人目に見ても負の遺産となっていて、少し触れればすぐにバグが発生するため迂闊に触れられない聖域までできていた巨大なスパゲッティコードとの格闘」です。
残業の常態化も問題でしたが、明らかにこの負の遺産が一因でした。
当然他にもこれを問題視し、過去にどうにかしようと奮闘した方々がいたそうですが、上長にその理解がなく、結果として退職したり、どうにか想いが少し届いて状況の改善が叶ったものの、制約を課された中での作業だったため大幅な改善とは至らなかったようです。
そのため基本的に前職での経験と言うとこの負の遺産との格闘が主であり、古く枯れた技術だが今後活きてくるようなものを学んだり、モダンな技術をキャッチアップして今のトレンドについていこうとするようなことはなく、このままここにいてもこの会社でしか通用しない可能性が非常に高いと考えました。
最近は特に終身雇用という流れもなくなっている印象で、転職サイトの広告などもyoutubeでよく流れてきます。
今後自分の人生がどうなるか正確な予測は誰にもつきませんが、だからこそ1社でしか通用しないような人材となることを危惧しました。
現職(BPS)
そうして転職活動を始めた結果、現職であるBPSに至りました。
ゲーム会社ではなくなりましたが、転職時に「自分が安心して働ける労働環境であることの方が大事だろう。ゲームはやろうと思えば個人や同人でも作れる。」と考えたためです。
ちなみに私がBPSに来た経緯は少し特殊で、いわゆる一般的な転職エージェントを利用したり転職サイトを利用したりといったルートではありません。
学生時代に作ったTwitter(現X)アカウントで始めは同級生らと繋がってたのですが、その内ゲーム開発者やC++関連の人(有名な方だと江添亮さん)をフォローするようになり、そのC++関連の人の中にBPS社員がいて、転職を考えている旨を呟いたら声がかかったという経緯です。
他の会社も考えて、そちらに関しては転職エージェントを利用して探していましたが、他の会社もBPSも同じようにホームページは当然見ますし、会社のブログがあれば見ますし、可能な限りどのような会社かを知るように努めました。
その結果、一番安心して入社できそうだと思ったのでほぼ迷わずに決めました。
ホームページや特に技術ブログであるTechRachoの存在が大きく、使われている技術はもちろん、今回の本記事のようなどのような人がいるのかなど、どのような会社であるか外から見ても参考になるものが多かったのが安心できる要素となりました。
何より前職の負の遺産で苦い経験をした私にとってはホームページの採用情報にある、
ソースコード管理の取り組み
ソースコード管理を全社的にGitLabに集約しています。
readmeなどのドキュメントを整備し、誰でも開発に関わることが出来る仕組みづくりをしています。
コードレビューの文化もあり、特に新人や若手のエンジニアに対して上長がしっかりと目を通しています。
お客さまへの納品物の品質向上に加え、綺麗なコーディングが全社的に根付いています。
採用情報 | BPS株式会社より
この部分がとても目を引きました。
ソースコードを可能な限り綺麗に分かりやすく、というのは学生時代から気を付けていたことですが、前職の負の遺産はある意味反面教師となり、あのようなものを作り上げてしまわないようにと一層意識するようになりました。
BPSに勤めてからは引き続きC++に触れているのですが、新しく触れたフレームワークとしてQt、それからFlutter/Dart、iOSの開発や、学生時代や前職ではSVNを使っていたものの新しくGitに触れたり、GitLabを用いてマージリクエストを作ってのコードレビュー、CMakeやMakefile、XcodeGenを使ってのプロジェクトファイル生成の仕組みを学んだり使ったりなど、これまで経験しなかったことを積み重ねることができています。
以前TechRachoの記事でも書いたようにテストコードを書き始めたりしたのもそうですね。
BPSへの入社は2019年3月1日からなので、2023年12月現在で4年半と少し勤めていることになります。
転職が一般的になりつつある中でもやはり昔からよくある風潮なのか、3年は勤めるべきなど簡単に辞めるなという流れは未だ完全消滅はしておらず、社会経験もほぼ無い中で新卒入社した前職を1年と経たずに辞める決断はある程度の覚悟も必要でしたが、結果として転職して良かったと感じています。
おわりに
今はゲームの開発からはすっかり離れてしまっていますが、今後どこかで個人や同人という形でも何かしら作れる機会があれば作りたいなという気持ちはあります。
特に最近はAIの発展のおかげで、絵が描けない私でもAIに描いてもらえば作れたりするのだろうか、と淡い期待を抱いています。
サウンドもAIで作れるようなのを以前見かけたので、もしかしたら実際にもうAIで作った素材を用いたゲームを作っている個人開発者、なんてのもいるのかもしれませんね。
最近はプライベートでITエンジニアな勉強はしなくなってしまったのですが、勉強の意欲そのものが消えた訳ではないようで、今年は精神医学や東洋医学の本を買って読んだりしています。
特に神田橋條治先生が自分の中でのトレンドです。
この辺りの話は主題から大きく逸れるのでまた機会があればとします。
ということで今回はこの辺りで終わりにしようと思います。
自分語りでしかないのですが、こんな経緯で今BPSにいる人間もいるという一例として、何かしらの参考になればと思います。
読んでいただきありがとうございました。