はじめに
少し前にFediverseのTLで「別業種とかからプログラマーになった話があるとよさそう」と盛り上がってた。
僕自身は社会人になってからプログラマーとして仕事してるので、その辺の経験とか経緯を記事にしてみると需要がありそうかなと思い、書いてみた。
学生時代
学生時代は特にプログラミングをしていたわけではなく、せいぜいHTMLとかCSSでWebサイトを作ってそれをFTPとか使ってサーバーにあげたりしてるくらいの日々でした。
あとはM.U.G.E.Nという自作のキャラで格ゲーができるゲームで自作のキャラを作るなどはしてました。
ja.wikipedia.org
まあ、ほとんどコードの意味とかは分からなくてコピペして「おお、動いた動いた」とかしてた。
大学ではCやC++でのゲーム制作(主にDXライブラリでの)とかに興味を持ってましたが、特に熱中してやることもなくそのまま卒業(なお、大学では民俗学とか行政関係の法律とかを学んでたので、今の仕事には全然活かせてない感じ……)
社会人になってからプログラミングを始めるまで
就職後、特にプログラミングに接する機会はない生活でした。あったとしてもせいぜいExcelとかでマクロ組んだりとかぐらい。
本格的にプログラミングをやり始めたのは社会人一年目もそろそろ終わりそうな時期でした。
契機は、自作のゲームを作りたくなったことでした。
大学時代、クトゥルフTRPGとかでゲームシナリオ書いたりしてよく遊んでて、ゲームを作る楽しさに触れてました。社会人になってからもちょくちょくシナリオを書いては気心知れた人たちと遊んでましたねー。
で、そんな中「やっぱりPCとかで動くゲームを作りたい……‼」という気持ちが高まってきてて、「よし、ちょっと頑張ってやってみようか!」となりゲームを作りはじめました。と同時にゲームリンクスというゲームを作るサークルも立ち上げたり(これがブログの名前の由来だったり)
ゲームをはじめたころ
とりあえずノベルゲームくらいなら作れるだろうと思い、手始めにティラノスクリプトとかジョーカースクリプトを触りましたね。
tyrano.jp
jokerscript.jp
確か一番最初に作ったゲームはジョーカースクリプトで作ったやつじゃなかったかな……?
まあ、素材の読み込みとかタグの理解とかかなりてこずりながら作ってたように思います。
その分、完成した時の達成感は何とも言えないものがありました。
しばらくはジョーカースクリプトとティラノスクリプトを使ってゲーム制作をしてたんですが、だんだんと開発スピードが遅くなってきてたんですね。
背景には、プログラマーが一人(僕だけ)に対してシナリオを書く人間が4人くらいいたことがあります。
ゲームにする際の人的リソースが圧倒的に足りなかったんですよね……。
「このままだと体がいくつあっても時間がない……より能率的にノベルゲーム作るものないかなぁ……」とか考えてた。
で、どうするかなぁと思ってたところに天啓が
「能率的にノベルゲーム作れるエンジンがないなら、自分で作ればいいじゃない」と
ここで僕のプログラミング学習が本格的にはじまりました。
最初に学んだ言語はCだった
とりあえず大学時代にDXライブラリについて調べていたこともあり、DXライブラリ + C言語で簡易なノベルゲームエンジンを作ることにしました。
確か当時は「猫でもわかるC言語」とかをよみながらC言語の文法とか学びつつ、試作でノベルゲームっぽいものを動かしてたと思います。
当時のソースコードはまあ酷いもので、タグを処理する関数が1000行とか超えてました……。
ただ、当時はそういうコードがよくないコードだとは思わず、動くようになるのが楽しくて仕方がなかったのをよく覚えています。
で、だいたい三か月くらいでファーストリリースできるくらいのものはできました。
かなり簡単なタグの処理(立ち絵とかBGMとか)とセーブとロードくらいしかない簡単なものでしたが、リリースできた時の感動はいまだに忘れられないです。
その後、一年くらい細かなアップデートを繰り返しながらノベルゲームをだいたい7~10本くらいリリースしてましたね。
そんな感じでC言語でのゲーム制作を楽しんでいましたが、だんだんつらいところも出てきました。たとえば、(自分が書いたコードながら)コードが長くて読みにくくなってきましたし、何よりC言語の書かなければならないコード量が煩わしく感じるようになってきました。
そんな時、Rubyと出会いました。たしかDXRubyというゲームライブラリを知って、そこからRubyをはじめたと思います。
Cよりもかなり短くコードが書けることに感動しつつ、Rubyを書くようになっていきました(といっても比重は相変わらずC言語のほうが多い日々でしたが)
これがOSS活動を知ったきっかけでした。
OSS活動について知り、「僕もOSSみたくソースコードを公開してみたい」と思うようになってたんですが「何を公開するかなぁ」というのが当時の悩みでした。
当時の僕が持ってるプロダクトといえば自作のノベルゲームエンジンだけで、コードもきれいとはいいがたいものでした。
とはいえ他に公開できるようなものもないですし、僕の書いたコードをわざわざ見る人もそうそう居ないだろうと思い最終的にはGitHubで公開しました。
で、公開したところコードを読んだ方がおられまして、「これはよくないコードだ」とご指摘いただいたんですよね。
で、その方から「Cで書くよりはC++で書いたほうがいいんじゃないか?」と言われたことがきっかけで今度はC++をはじめることになったんですよね。
まあ、Cに比べて覚えることも多く苦労した覚えがあります。特にコードの指摘をしてくださった方がC++にかなり詳しい方だったのでダメ出しとかももらいながら書いていた日々でした。
でも、Cよりもできることの幅が広がっている感じもあり、楽しい日々でもありましたね。
ちょうど、この頃にC++関係でいろいろ本を読んでいたんですが、だいたいの本が古くて(C++03とか下手したらC++98とか)つらかったですね。
まあ、そのおかげでプログラミング言語にもバージョン(や仕様)が年代ごとにあるということをよく理解できたので良かったと思います。
RubyKaigiに参加
で、そんなころ隣の県の広島でRubyKaigiをするという情報が入り単身乗り込むということをしてました。
rubykaigi.org
多分、はじめて参加した大きなカンファレンスだったんじゃないかな?
参加したことで、Rubyコミュニティの圧倒的Rubyへの情熱を浴び、気づいたら熱狂的なRubyistへと変貌していきましたね……。
結局、RubyKaigiへは毎年参加するようになってました(翌年は仙台、翌々年は福岡)。このころくらいからだいぶアクティブにコードを書いたりするようになったと思いますね。
本格的にプログラミングにのめりこむ
このころにはC言語はあまり書かず、だいたいRubyかC++で何かしらコードを書くようになってました。
特にRailsでサークルのWebサイト作ったりとかしてた頃ですね。
で、そんなころにMastodonのブームがやってきました。
はじめ、Mastodonが登場した時は「へー、そういうのが出たんだ」くらいにしか思ってませんでした。
その後、Mastodon(というか分散SNSの特徴)を知っていくうちに「僕もサーバーを立ててみよう」となり、Creatodonを立てました。
gamelinks007.net
当時はCreatodonという名前でもなく一時創作系のサーバーと銘打ってました。
ただまあ、ほかの大規模なサーバーに比べて知名度とかもなかったので基本的に僕が使っているだけな感じになってました(しかし、それも仕事が忙しかったりすると使うのを忘れたり……)
しばらくアップデートとかもできない日々が続いてて重い腰を上げでアップデートを始めたのがその年の九月ぐらいでした。
gamelinks007.hatenablog.com
ちょうどこの頃からMastodonの使用率がTwitterを超えだしたので、TwitterをやめてMastodonへ引っ越ししたりもしましたね。
あと、Mastodonでログインできるアプリとか、PleromaとかHivewayとか立ててみたりとかしてましたね。
ちなみにこの辺の活動を見ていた方からお誘いいただき、松江Ruby会議でMastodon他分散SNSについて話す機会をもらったりもしました。
OSSへの初コントリビューション
アプリを作ってGitHubで公開とかそういう意味でのOSS活動はしてたんですが、大きなOSSプロジェクトにコントリビューションすることはない日々を過ごしていました。
そんな時、Redmineのドキュメント関係でコントリビューションチャンスが来たんですよね。
gamelinks007.hatenablog.com
HerokuでのRedmineのデプロイ手順が少し情報が古く、うまくいかなかったんですよ。
で、そんなことをMastodonでつぶやいていたところフォロワーさんからフィードバックをもらってうまいことデプロイできたと。
ちょうどその時の手順もメモしていたのでRedmineの公式ドキュメントを編集するといいんじゃないかとなり、OSSに初コントリビュートとなりました。
転職
この頃には、そこそこコードを書くようになってきていたんですが、相変わらず仕事ではコードを書くような場面はありませんでした。
そんな時、現職の会社へと転職するチャンスが来たんですよね。で、これまで作ってきたものとかを紹介して転職することができました。
ほかの人と違ってすでにあれこれやっていたのでポートフォリオを作るのに困ったりとかそういうのは無かったですね。
転職後
転職後は、初学者向けにプログラミングを教えたりしながら教材を作ったりしてました。
最近は開発もやるようになってきたので「スキルが身についてきたなぁ……」とか思ってます。
転職後もちょっとしたアプリを作って公開したりはしてました。がRedmineのドキュメント編集した時のような大きなOSSへのコントリビューションはあまりありませんでした(あってもBoostjpのドキュメントにPR送ったりとかぐらいなじゃいかなぁ……)
で、そんな中Ruby自体の実装に興味を持ち始め「いつかRubyにコントリビューションできるといいなぁ」とか思ってました。
そんな時、ruby-jpでコミッターの方から「テストの修正してくれる人いませんか?」という話が出たんですよね。
で、さっそく飛びついて「やりたいです!」といい、テストの修正に取り掛かりました。
その後、テストの挙動の把握など苦労しながらも修正PRを出せたんですよね
ちなみに初めてマージされたのはこれ。
github.com
まあ、マージされたのがうれしくて小躍りしましたね!
で、このPRがマージされたのがうれしくてどんどんRubyの実装を読むようになっていきました。
その後、builtin対応とかCの関数の修正(使われていないifの分岐を削除とか)してPRを投げはじめましたね。
そして、最終的にはこういうイベントもはじめたり……
hamadarb.connpass.com
おわりに
これがこれからプログラマー(ITエンジニアのほうが近いか?)になりたい人に参考になるかはわかりませんが、こういう道順を経た人もいるんだよと知っていただければ幸いです。
ちなみにC言語学びだしてからRubyに初コントリビューションするまでで5年くらいだったということに記事をまとめながら気づいてびっくりしましたね。
なんと遠くまで来たんだなぁと感慨深いです。