森羅万象プロジェクト　Chapter00-02:自作の「レベル」とは

こんにちは！森羅万象プロジェクトです！  
前回は[プロジェクトの概要を説明した](https://qiita.com/shinrabansyoProject/items/4ce8060f765b2623d7a8)ので、  
  
今回は  
**1.自作の「レベル」とは  
2.どのレベルで自作する？**  
を話していきます。  
  
  
# 1.自作の「レベル」とは  
(この章は当記事を書いているAstalisks個人の主観が含まれています。)  
  
・皆さんは「システム」を作った経験はありますか?  
プログラミングをしたり設計図をもとにモノを組み立てることは「システム」づくりだと思いますし、  
どうプログラミングをするか考える、設計図自体を作ることも「システム」づくりと言えるでしょう。  
ゲームのmodやプラグインをたくさん導入しても自分だけの「システム」を作ることはできますし、  
なんならPCやマウス、キーボードやモニターを買ってセッティングすることを、仕事やゲームをするための  
一種の「システム」を作っている、と考えられなくはないでしょう。  
  
・「システム」を作るには様々な手法があります。  
例として、ゲーム(サービスの)「システム」を開発するとしましょう。  
  
① プログラミングでゲームを作ると考えたあなたは、[Unity](https://unity.com/ja/download)や[Unreal Engine](https://www.unrealengine.com/ja/unreal-engine-5)が  
真っ先に浮かんでくるでしょう。言語は[C#](https://dotnet.microsoft.com/ja-jp/languages/csharp)や[C++](https://learn.microsoft.com/ja-jp/cpp/cpp/welcome-back-to-cpp-modern-cpp?view=msvc-170)といったところでしょうか。Javascriptあたりもイケるかもしれません。  
そしてプログラミングをするとは言ったものの、[API](https://gblogs.cisco.com/jp/2021/08/whats_rest-api_basic/)やプラグイン等の**他の人が作ったコンテンツ**を使うときもあれば、  
一からプログラミングをして今までにない挙動をするコンテンツを創り出すプログラマーもいらっしゃるでしょう。  
  
② プログラミングは苦手という方(私もですよ)はわざわざプログラミングなんてせずに[RPGツクール](https://tkool.jp/mv/about/index.html)とか[Glide](https://www.glideapps.com/)とかを使って  
マウスで作ることもこのご時世可能ですよね。使いこなせないくらい機能もありますし。  
  
③ 別に、自分で作れ、とは言っていません。有名アニメのゲームを作るとなった際、大抵アニメ会社はゲーム会社に制作依頼しているのではないのでしょうか。  
自分のアイデア(と依頼費用)があれば、数万～数十万円でゲーム制作を受けるフリーランスのエンジニアさんにきっとゲームを作ってもらえますよ。  
  
④ 誰かが作ったものを使え、とも言っていません。その気になれば(+できる力があれば)、オリジナルのハードウェアを作ってその上で動作させたり、  
ゲーム向けと言われるプログラミング言語を使わず作ったり、理論上は機械語つまり0と1だけでゲームを作れるわけです。  
  
・ここで、「自作レベル」という指標を使って分析してみます。  
自作レベルが高そうな手法 = 必要な知識が多そう、時間がかかりそう、できる人が少なそう、とざっくり考えます。  
前述した①から④を、個人的に自作レベルの高い順に並び変えると、  
**自作レベルが高い④⇔①⇔②⇔③自作レベルが低い**  
かなと思っています。皆さんはいかがでしょうか。  
ここで注意したいのが、**自作レベルが高いほうが必ずしも良いわけではない**ことです。  
コストパフォーマンスやタイムパフォーマンス、自分の興味やキャリアも考慮して方法を選ぶべきであると私は考えています。  
(高校・大学では②か①を勉強すると思いますが、課題くらいならスピードとクオリティが担保できるならどうでもいいじゃないですか。  
③できる人は④しなくても幸せに生きていけそうじゃないですか、②を極めてたら①に並ぶ自由度で作れそうだし。)  
  
  
# 2.どのレベルで自作する？  
  
このプロジェクトで作るものとして案に挙がったものが、  
・低レイヤーから高レイヤーまで網羅できるもの(詳しくは[OSI基本参照モデル](https://www.iso.org/ics/35.100/x/)の図)  
→CPU、OS、サービスを一通り作成する必要のあるもの  
・コミュニティが広がるもの→コレを作った人同士がつながれるもの  
(+[セキュリティ・キャンプ](https://www.ipa.go.jp/jinzai/security-camp/about.html)の課題である、セキュリティがちょっとでも関わるもの)  
でした。  
  
「今の3Dゲームができるような**CPU・OS**と同じようなものを数年で作るのは現実的ではない(できたら起業してる)」  
「作り終わったら**メッセージが届く**の嬉しいよね、となると**ネットワークへの接続機能**も必要だ、誰でも作れるように**マニュアル**を用意しないと」  
「そもそも日本語や英語ではなく**独自言語による実装**!? でも技術より言語研究にリソースが偏りそう、既存のものに似たようなものにしよう」  
  
など紆余曲折あり、2023/10/15時点では、  
  
**「マニュアルを読んだ人が同じように作ったら、完成した人だけがつながるチャットグループのようなもの」**  
を作成するとし、  
・CPUは**命令セットまで自作**する、OSもプログラミングで**独自実装**する  
・CPU・OSの性能を見てサービスを追加する  
・ネットを介して**メッセージをやり取り**する  
・マニュアルは誰でも読め、理解できるように(こんなかんじに)**記事として投稿**する  
  
という予定になっています。  
  
  
自称:自作レベルでいうと④と①でしょうか、APIやライブラリ(レベル①、②あたり)ですら使えない私ですが、  
せっかくの挑戦の機会ですから、メンバーの力を借りてともに開発に積極的に参加していけたらと思います。  
そしてこの記事を、  
**アプリやサービスがどのように動いているかわからない方！**  
**一からシステム開発してみたいけど、何を勉強したらよいかわからない方！**  
**④①に興味があり、初めてチャレンジしてみたい！苦手だけどできるようになりたい方！！**  
に向けての*一つのアイデア*として書くことができたらと思っています。  
今後質問したいことや書き換えたほうが良いことがあれば是非コメントとして残していってください！！  
  
  
次の記事は[「01-01_CPU自作のための環境構築！」](https://qiita.com/shinrabansyoProject/items/96ccee3a982672f483b4)