一躍話題「鍵垢しかないSNS」。天才たちに囲まれてしまった筑波大生の個人開発奮闘記【フォーカス】

2024年8月30日

筑波大学 情報学群 情報科学類 2年

n4mlz(ネームレス)

小学生時代にビジュアルプログラミング言語「Scratch」に熱中し、情報技術者を志すようになる。古典的AIを入口として機械学習にも興味を抱き、高校進学後は本格的なテキストプログラミング言語学習に取り組む。現在は情報科学について体系的に学びつつ、フリーランスでのWeb制作業務受託や個人開発に勤しんでいる。名前は、良いハンドルネーム案が思いつかず、ひとまず無名を意味するNamelessにしたのがきっかけ。あまり気に入ってはおらず、いずれ改名したいと考えている。
X
GitHub
snooze(n4mlzさんが個人開発したSNS)

2024年5月、「鍵垢しかないSNS」をコンセプトとする「snooze」というサービスがひっそりと運営を開始しました。全てのユーザーのアカウントはデフォルトで非公開設定となっており、互いにフォロー・フォロワーになった場合にしか表示されません。プライバシー保護や信頼できる人間としかつながないことに重点を置いたゆるいSNSです。

自身の技術力を試しつつ、ポートフォリオとするためにこのサービスを開発・運営しているのは、筑波大学情報科学類の2年生・n4mlz(ネームレス)さん。勉強の一環として設計にはDDDを取り入れており、そのソースコードはGitHub上に公開されています。サーバーを自前で用意し、オンプレミス環境でデプロイしています。

「高校では、自分が誰よりも一番パソコンができた。この大学に入った当初はその自信が打ち砕かれ、深く落ち込む時期もありました」と話すn4mlzさん。個人開発SNSに込めた設計思想と、数々の有名技術者を輩出してきた筑波大情報科学類に身を置く、若きエンジニアの奮闘の日々について聞きました。

「見られて恥ずかしくないコード」にひと苦労

――取材に応じてくださり、ありがとうございます。まず、n4mlzさんがどんな方なのか自己紹介をお願いします。

n4mlz:僕は、筑波大学情報科学類の2年生です。大学では現在、システムプログラムや情報数学、データ構造とアルゴリズムといったことを学んでいます。

大学の講義で体系的な知識を学びつつ、自分で手を動かす経験を積むために、個人でのWebアプリケーション開発やサーバーの管理・運用といった活動にも注力しています。

――「鍵垢しかないSNS」という発想に至ったきっかけについて、教えてください。

n4mlz:僕は中学生時代から「こういうモノがあるといいなあ」と何か思いつくたびに、アイデアリストに書き留める癖がありまして。snoozeの構想も、そのリストに記していたものです。

高校時代に、友人間で、お互いしかフォロー・フォロワーがいないプライベートアカウントを用意して、Twitter(現X)を使っていたことがありまして。くだらないことや愚痴を気軽に書き込めるし、個人間のメッセージのやりとりのような、相手からの返事を求めるニュアンスもない。仲の良い人しかいないTLは、とても居心地がよかった記憶がありました。

実際にこうした使い方に特化したSNSがあればいいのになあと思って、アイデアリストにメモしていました。「鍵垢しかない」というコンセプトがキャッチーだし、皆さんから面白がってもらえるかもしれないな、と。

そして去年の終わりごろ、「Webアプリケーションを自分ひとりでつくってみたい。何かネタはないかな」とリストを引っ張り出してみたところ、このアイデアが目に留まり、実際に制作を始めたのです。

▲snoozeのサービス説明ページ

――開発にあたって、苦労した点があればお教えください。

n4mlz:Webアプリをつくるにあたっては、最初からソースコードもGitHubで公開すると決めていました。公開を前提にすると、どうしても「人に見られて恥ずかしくないコード」を書きたいという気持ちが出てきます。この気持ちに沿って開発を進めるのは、想像以上に大変でしたね。

DB設計、コミット名、ブランチ名といった細かな部分まで、常に「これで良いのか?」と試行錯誤しながら開発していました。ベストプラクティスやアンチパターンについても調べ尽くし、自分のコードに当てはめては一喜一憂する日々でした。

また、技術的な挑戦として、ドメイン駆動設計(DDD)を採用したシステム開発にもチャレンジしましたが、案の定一筋縄ではいきませんでした。

――個人開発なのに、DDDを取り入れたのですか?

n4mlz:はい。個人開発でDDDを採用するのは少し大げさな気もしましたが、学習も兼ねて挑戦してみました。DDDについて学びながら手を動かしていくうちに、勉強を通して漠然と浮かんだ「自分なりのDDD」を実現してみたいとの欲求も出てきました。そのため、僕の設計は一般的なDDDのアーキテクチャとは異なるかもしれません。

具体的にいうと、ドメインモデルに仕様やインターフェースだけでなく、バリデーションを含む処理も持たせているのが特徴です。これは、「相互フォローでないと相手のポストが閲覧できない」などの情報もドメインに含まれると考えたからです。だから、ドメインモデルが肥大化している面も否定はできません。

しかし、この方法には、利点があると考えています。バリデーション処理がドメインに集約されているので、他の部分の実装時にバリデーションについて考慮する必要がない、いわゆる「関心の分離」ができるということです。これにより、個人開発としては抜け目がなく一貫した、セキュアな実装が実現できているのではないかと思います。

このように、設計に関する試行錯誤が自由にできるのも、個人開発の楽しみのひとつだと感じています。

「天才」たちとの出会い、そして挫折

――n4mlzさんは、いつから技術の世界に触れるようになったのですか?

n4mlz:幼少期から、パソコンを使ってのイラスト制作や作曲が趣味でした。形やジャンルを問わず、とにかくものづくりが大好きなんです。それで、小学生時代にはビジュアルプログラミング言語の「Scratch」と出会い、ゲームづくりに熱中しました。

中学生に上がってからは、機械学習に興味を持ちました。当時、『テトリス』の世界的プレイヤーがAIに負けた、というお話がネット上で盛り上がっていたためです。自分もAI開発に触れてみたいという意欲が芽生えたのですが、何を思ったのか僕はそのままScratch上で実装をしようとしていました。

当然、行列演算を直接行うための組み込み関数は存在せず、また当時私が利用していたのは Scratch の初代でしたので、関数という機能も存在しませんでした。それでも既存の機能をフル活用し、アルゴリズムを自分で実装することを試みていました。

…普通のコーディングを学んだ方が実装が早いな、と気づいたのは高校に入ってからです。これは割と、後悔しています。

n4mlz:中学時代にも、高級言語の技術書を手に取ることは何度かあったのですが、結局「なんだか難しそうだなあ」と開いて閉じるを繰り返してしまっていたので。とりあえず手を動かして挑戦することがいかに大事なのかを、まだわかっていなかったんです。

結局Scratchでの開発が手に負えなくなってしまったので、高級言語の勉強を始めました。それからは、さらに深く技術の世界にのめりこんでいきました。大学も自然と、有名な技術者を何名も輩出している筑波大の情報科学類を志望していましたね。

――「力を付けるには自分で手を動かしていくことが大事」というお話もありましたが、ここまで個人開発に力を入れているのはなぜでしょうか?改めて教えてください。

n4mlz:「強くなりたいから」、です(笑)。自身の技術力で、少しでもこの世の中に影響を与えることができるような存在になりたいのです。

snoozeの開発において「人に見られて恥ずかしくないコードを書かなきゃ」と必死だったのも、DDDに挑戦したのも、「僕は保守性や変更容易性を考慮したきれいな設計ができます」と、アピールしたかったからです。他の人と比べて、少しでも、抜きんでた存在になりたいのです。

こう思うようになったのは、大学に入学してからです。高校時代の僕には、「この学校で一番うまくパソコンを使えるのは僕だろう」という自負がありました。ところが大学に入ったとたん、このプライドは一瞬で打ち砕かれたのです。

僕が所属する情報科学類では、学生が大学公式の『情報科学類誌WORD』という雑誌をつくって配っています。みんなが使っているドメインを集計してみる記事や、マニアックなJavaScriptのバグ紹介、Gentoo LinuxやOpenSUSE Linuxのレビューなど、各々の好き勝手な技術発信をまとめた学内誌です。

▲『WORD』公式サイトのスクリーンショット。誌面はpdf形式で配布されている

n4mlz:WORD編集部は、ソフトイーサ創設者の登大遊さんやSkeb開発者のなるがみさんらを輩出している、学類内で有名な団体でもあります。技術が大好きな人だらけなので、僕にぴったりな環境かもと思い、僕も入学2日で編集部に入ってみました。

ところが、部員の人たちをきっかけに部内外の人たちと交流しているうち、情報科学類の同期や先輩方に、競技プログラミングの上位ランカーや、CTF(Capture The Flag)の世界的に大きな大会に出場されている方、有名なOSSのヘビーコントリビューターだとか、すでに高単価の開発業務を受託して高額を稼いでいるだとか、そんな経歴を持つ学生が何人もいることを知りました。

正直言って、あまりにレベルが違いました。そんな人たちを目の当たりにし、何者でもない自分とのあまりの差にすっかりと落ち込んでしまって。お恥ずかしながら、入学後は自宅に2週間ほど引きこもってしまいました

「強くなった自分」に会いたくて

――そんなにレベルの高い環境で、どうやって挫折を乗り越えたのでしょうか?

n4mlz:しばらく部屋の中で自問自答をしてみて、やっぱり技術者の道は諦められませんでした。「結局、いまこの瞬間も僕は手を動かしていない。気を落としている暇があったら、将来のために何かにとりかかるべきなんじゃないか」との結論に至ったんです。

だって、登大遊さんをはじめ、大学の有名OBたちはみんな、すごい経歴を持った僕の同期や先輩のように、同じ年齢のころから何かしらの形で頭角を現していらっしゃる。

WORD編集部にいるのは、会話しているだけで挫折してしまうほどにすごい人だらけです。でも、せっかくそんな環境に身を置くことができたのだから、自分の未熟さや弱さを認めたうえで、技術者として「強く」なりたくなったんです。おこがましいかもしれませんが、ここで踏ん張ったら、こうしたすごいエンジニアさんに少しでも近づけるかもしれないから。

それで、授業の合間に、競プロ、個人開発、フリーランスとしての案件参画。目の前にあるものには、なりふり構わず取り組んでいくようになりました。

――すごい情熱が伝わってきます。フリーランスとしてのお仕事は、いつ始めたのでしょう?

n4mlz:1年次の7~8月に本格的にReactを学び、10~11月にWeb開発のフロントエンドエンジニアとして働き始めて、開発ノウハウを培いました。

でも、実務経験はほとんどないし、大した実績もないので、同期のような「高単価なハイレベル開発!」って感じでは全然ないです。とにかく、お仕事や個人開発も一歩一歩、スキルを高めていきながら実績を積んでいきたいという思いです。

――先ほどお話に出た「WORD編集部」には、まだ身を置いているのですか?

n4mlz:はい。編集部専用の部室のようなスペースがあり、そこに毎日通っています。昨日も、一昨日もいました(笑)。自分よりはるかにすごい部員ばかりなので最初は気おくれしましたが、高度な情報交換ができ、いろんな刺激をいっぱい受けられるので、こんなに貴重な環境はない、と感謝しています。何より、技術に興味のある人ならだれでも受け入れてくれるので、ありがたく仲良くさせてもらっています。

遊びを兼ねて、部員同士で何かを開発することもあります。snoozeのローンチ前には、仲間内でペネトレーションテストをしてもらうこともありました。

――なんだか、とっても楽しく切磋琢磨できそうな環境ですね。

n4mlz:いや、本当に最高の環境だと思っています(笑)。なにか面白い開発をしていると誰かが興味を持って、いい意味でいじってくれるんです。

「脆弱性を見つけてやる」と言って snooze のソースコードを熟読してもらったり、冗談半分でスクリプトを書いてsnoozeにスパムのような連投をしたり、「あ、これ空白でもポストできちゃうじゃん」と issue を投げてくれたり。

snoozeの開発にあたっては、WORD編集部の存在は本当に大きいです。

――それでは、これからの目標を教えてください。

n4mlz:学ぶべきことは多いですし、社会に出ているわけでもないので、明確なビジョンは正直、まだないです。でも、ものづくりは幼少の頃からずっと大好きなので、自分の考えたアイデアで、世の中を変えることができる存在になりたいと考えています。

snoozeについては、これを大きくサービスとして盛り上げていこう、という意識は特になくて。「X」で表立って発言するほどでもないことや、ちょっとした日常の弱音とか、そういうことを気楽につぶやけるSNSとして、細々ながらも誰かの支えになってくれれば本当にうれしいです。

取材・執筆:田村 今人
編集:光松 瞳

関連記事

人気記事

  • コピーしました