About Me

プロフィールと開発の軌跡

Profile

@oz-codenです。

Unityを用いたゲーム開発、ツール作成等を含む個人開発をメインに活動しています。

アルゴリズムのデザインや抽象化、構造化が好きなことです。

興味のあることとしては、セキュリティや暗号化、ネットワークなども上に含みます。


基本的に使っている言語はJava, C#がメインで、PythonやJavaScript等もよく使っています。最近になってGitHubにアップロードするということを始めたので、メインで上がっているのは後者のものが多いかもしれません。

CやVisual Basic等、その他の言語も一部使うことがあります。

My History

私が最初にプログラミングというものに触れたのは、小学生のころ、およそ10歳程度のころのことでした。きっかけは父のすすめで、Small Basicという言語に触ってみたらどうかというのが始まりでした。

当時の私は、ゲームを遊ぶのが好きで、ゲームがどのように動いているのかに興味を持っていましたが、プログラミングというものは当然何も分からず、すすめられた最初はアプリをインストールしてサンプルコードを動かしたり、入力候補から出てくる関数をただ並べてどうなるのかを観察しているだけでした。まるで無限のサル定理のように...

結局、多少触れることはあれど、そのあとはあまりプログラミングに触れることはありませんでした。


何を思ったのか分かりませんが、それから少し時間が経って小学校高学年になったころ、そういえばプログラミングというものがあったな、と思い出しました。それから、またSmall Basicに触ってみて、あれこれ考えたり、調べたり、そういったことをしながら簡単なプログラムを書くことができました。当時のプログラムはもうありませんが、自分で考えたものが動くというのは、なぜだか私の中にある興味や好奇心をくすぐったみたいで、それが原動力となってプログラミングの道に戻ることになりました。

しかし、Small Basicという言語には、今のメジャーな言語におけるimportやらusingといったものはまったくなく、言語に標準搭載された機能しか使うことができませんでした。私はその中でほとんどの搭載された関数を理解したと思い、また、使えるようになったと感じました。そして、それと同時にこの言語における限界を感じるようになりました。そこでよくアプリのインターフェースを確認してみると、Visual Basicで書く(正確にはどのように書いてあったかは覚えていませんが)というボタンがありました。これを押してみると、Visual Studioのインストールをすすめられて、そのままインストールしました。

それから、そのインストールが終わってVisual StudioでVisual Basicを使って今まで書いたものを表現できるようになったわけですが、そこには何もなく、そしてすべてがありました。これはあくまで比喩のような表現ですが、私が書いたプログラムというのはまるでそこにある使える機能に比べてほぼ何も使っていないに等しいような量で、また、Visual Basicを使えば今までできなかったこともほとんどのことが実現できるのではないかという、そういったすべてがそこにあるのではないかと感じるようになりました。

これが、Visual Basicとの出会いでした。


Visual Basicに出会ってから、しばらくはVisual Basicというものについて調べていました。そして、これまでのSmall Basicの比にはならないくらいのドキュメントがインターネットにはあり、そこで様々なドキュメントを読み漁るようになりました。特にそこで使っていたのは、Microsoftの公式ドキュメントでしょうか。そこにはVisual Basic以外にも、C#という言語での書き方も併記してありました。そこが、私のC#との出会いです。

ここで少し話が変わりますが、このころのインターネットにあるドキュメントというのは、今ほど比べてインターネットが日本語で埋め尽くされていたようなわけではない(と思うのですが...)ですし、AIという便利なものもありませんでした。当然、多少日本語で書かれたドキュメントもありますが、英語でのドキュメントもそれなりにあり、必然的に英語のドキュメントも読まざるを得ないことがありました。当時の私にとって、英語に慣れ親しめるようにあれこれ教えてくれた母の存在もあり、英語というのはそこまで嫌悪するような対象ではなかったので、インターネットで英単語を調べながら地道に読み進めました。

ただ、単語をメインでとにかく読み進めることを重視していたその弊害で、文法にはあまり詳しくありませんでしたが...。どちらにせよ、おかげさまで特に勉強をせずとも英語の試験や検定などはパスできるようになりました。

話を戻しますが、Visual Basicを使ってしばらく書いていたわけですが、どうも外部のライブラリを使うにはあまり向いていないみたい、C#のほうが使いやすいかも。と感じるようになって、C#に触れるようになりました。

それから、中学校に入って少しぐらいまではC#を使ってフォームアプリケーションでGUIのあるアプリケーションを少し作るなどしながら過ごしていました。


少し話はさかのぼります。私はゲームが好きでした。特にMinecraftというゲームは、その創造性がすさまじく、当時の私にとっては探索、建築、回路など、なんでもできると思わせるほどの魅力がありました。

そして、インターネットで情報を集めていたのと同じぐらいのとき、MinecraftにModという改造をしてもっと要素を追加できるようになるらしいということを知りました。当然、これに食いつかないはずもなく、あれこれ調べてForgeを導入してModを動かせたときには、すごく感動しました。今では、Curseforgeを使えば簡単に導入まで出来てしまいますが...

当然、このころはプログラミングをしていたわけで、これを自分で作れないのかと思うのもある意味必然だったのかもしれません。MinecraftはJavaという言語で動いています。そして、そのModを作るのにもJavaという言語を使って作る必要があると知りました。それが、私とJavaの出会いでした。

時系列を戻しまして、C#をやっていた私は、Javaも似たような設計で作れるというのを実際にやってみて感じました。どうも、似たような思想があるらしい、と。そもそも、私は一度Small Basicでプログラミングの構造をなんとなく理解できていたおかげか、それ以降のプログラミングで困ることはそれほどありませんでしたが、Javaでも特に困ることなく、構文自体はすぐに習得して書くことができるようになりました。

時を同じくして中学生のころ、Modよりも簡単に作れて、マルチをするために建てられるサーバーのためのプラグインというものも作れるというのを知りました。そこから、プラグインの開発も始めました。それから、Modとプラグインの開発は高校生2年になるぐらいまで続けていました。とはいっても、それほど複雑なものは作っておらず、自分が作りたいものを作る、そんな生活でした。


ところで、Minecraftのマルチができるサーバーというのがあるわけですが、いつだったか、中学から高校にかけての間に、Raspberry Pi 4Bというのを親からもらいました。私が言い出したのは、それとも単にもらったのかはもう記憶にありませんが、私にとっては新しく増えたおもちゃのようで、これに触らないという選択肢はありませんでした。Raspberry Pi 4BにはWindowsは入りませんので、Linux、特にRasbianというOSを導入しないといけないわけですが、まったくWindowsとは使い勝手が違いますので、最初はあれこれ戸惑いました。

ですが、このちっこい機械を使ってあれこれできるというのを考えるととてもわくわくしてたまりませんでした。最初はファイルサーバーとして運用しようか、なんて考えていた気もしますが、私はふと思いつくわけです。Minecraftのサーバーにすればいいのではないか?と。

それから、試しに動くかどうかをやってみて、実際に動かすことに成功しました。そして、自分のWindowsのクライアントからも接続することができたときの喜びといえばそれはそれはうれしかったものと思います。さて、サーバーを立てることには成功しましたが、マルチをするにはまずはポート開放やファイアーウォールの解除等々が必要になります。それからは、そういったことについてたくさん調べました。そのときにLinuxやUbuntuなどのOSについて少し調べて詳しくなれたのかな、と。

さて、Raspberry Pi 4B側の設定はいいとしても、これはインターネットにつなぐものです。そして、家でインターネットの管理をしているものといえばルーターやモデムです。その設定をしないことには、外部からの通信を受け取ることができず、マルチができません。そこで、親に許可を取りまして、あれこれネットワークの設定をするようになりました。それが原因なのか原因じゃないのか分かりませんが、この先引っ越しをした際のネットワークの設定を任されるようになったりもするわけですが...。

それは置いときまして、いざ設定を完了して、マルチができる環境になりました。せっかくなので、知り合いを集めて、マルチを始めるようになりました。あれこれプラグインを導入してみて試行錯誤することもありました。そして、自分で作ったプラグインを導入してみることもありました。ある意味では、それが一つの、ある種初めての、人に自分のプログラムを使ってもらう体験だったのかもしれません。それが成功だったのか失敗だったのかは分かりませんが、しばらくはそのマルチーサーバーであれこれと自分でプラグインを作ったり、Raspberry Piを含むハードウェアのことやネットワークのことについて調べたるなどしながら遊びました。


また時を同じくして、いつからかウェブサイトを作ってみたいと感じるようになっていました。そこで、無料でウェブサイトをホストできるサイトを見つけてきて、HTML、CSS、JavaScriptについて調べながら学びました。それが、HTMLやCSS、JavaScriptなどのWeb系技術に触れた瞬間でした。

このころは、そういったWeb系技術もそうですが、単純なスクリプトを書いて何かを作るというのもやりたいと感じるようになっていました。そういったことがあり、また、以前から時々見るようになってきていたPythonという言語について学習を始めるようになりました。

また、当時はAIというのが世に言葉として出始めてきており(前々からもありましたが)、Pythonを使った機械学習が特にホットな話題になっていました。私も例にもれず、PyTorchでKeras等を使った画像認識AIを組むこともありました。


さて、高校生といえば(といえば、というほどでもないですが)、進路について考えないといけません。私は理科や科学といったものが非常に好きでしたので、最初理学部に進むことを検討していました。もし、そのときそのまま理学部に進んでいたなら、今ほど私は情報系のことをしていなかったかもしれません。当然、こう書くということは進まなかった、というわけです。

理由はいくつかあります。一つは、大学の講義は「速くて難しい」と聞いていたことです(私の家には4年制大学に行った人はいませんので、親に聞いても分かりませんので、そういった未知の世界だったことも理由としてあります)。私は特に自分で自分のことを天才だとか、非常に優秀だとは特に考えていませんでしたので、ついていけるかがかなりの不安要素になっていました。また、高校2年までは前述のとおりあれこれと、いわば情報系のことをやっていたわけですし、ここで急に道を変えて理学部に進むのはどうなのかという考えもありました。

ほかにもいくつかありますが、こういった理由から私は理学部ではなく情報学部に進むことにしました。情報系の学部に進めば、私が今までやってきたことから培った知識や経験を活かせると思いましたし、同時にそれをもっと深められるのではないかと考えてのことでした。


閑話休題、私は情報学部に進学して最初に思ったのは、私みたいな人がたくさんいるのか、ということでした。実際には、まったくそうではありませんでした。大学の講義は速くて難しいかと言われたら難しくもありませんでしたし、全員プログラミングできるのかといわれたら身の回りの人は私に比べるとお世辞にもできるとは言えませんでした。

少し、過剰な期待だったのかもしれません。それでも、私は私なので、私はやりたいことをやることにしました。それから、私は以前と同じような生活を過ごしていました。もちろん、ときどき人にプログラミングを教えたり、ソフトウェアやハードウェアの構造について解説することもありました。当時作った資料も少し現存しています。ただ、この資料も私ほどやる気があったわけではなかったらしく、誰も使いませんでした。ですので、私も使わないなら作る意味がないというので作らなくなりました。私にとってはいい経験になりましたし、反省にもなりました。私ほどやる気があるわけじゃないことの方が多いらしく、人のペースに合わせるということが大事だということです。

教えることについての話が出たので少しふれておきたいことがあるのですが、私がすべてにおいて大事だと感じているのが、「調べる力」です。私ほど狂ったように調べる(私も狂ってる方ではないとは思いますが)、そういう人はあまりいませんでした。これは昔からあれこれ英語のドキュメントをさかのぼるぐらいまで調べていたころの延長線上ではあるのですが、興味があるものにはBy definitionレベルまで見ることがありました。そこまで見て得られるものはたくさんありました。

こうした経験は非常に役に立ちます。日常の中でも必要な情報を抜き出す能力として役立たせることができますし、調べ方というのも身に付きます。案外、調べ方にもコツがあり(と昔はされていましたが、AIの台頭によって少し怪しいように感じます、今ならAIへの指示の出し方でしょうか)、ちゃんと調べたいことを調べるには試行錯誤が必要でした。ただ、その過程で得られるものは非常に多いので、調べる力は重視しています。

今ならAIでしょうか。AI相手でも指示の出し方というのはありますので、こういった根本的な力は調べる力とそれほど変わっていないのではないかとも思います。


話が脱線してしまいましたが、これが私の今までです。たくさん語りたいことや学んだことなどなどはいくつもありますが、このあたりにしておこうと思います。もし気になることがありましたらご連絡のほどよろしくお願いいたします。それではありがとうございました。

Projects

詳しくは、こちらをご参照ください。