はじめに
今年度ネクストキャンプに参加に参加させていただけることになりました。 私も応募課題を書くときに過去の課題晒しを参考にさせいただいたので、私も公開しようかなと思います。+ 自己紹介的なものにもなりそうかなと (高校生から合わせて過去に3回ほどキャンプに申し込んだものの駄目だったので、なんとか学生のうちに参加できてとても嬉しいです)
あなたに関する問い
私は、父が大学教員であり自宅にMacがあったことをきっかけに、幼少期からコンピュータに興味を持ちました。中学時代にはWebサイトに関心を持ち、PHPでのプログラミングを始めてレンタルサーバーを借り、さまざまな実験を重ねました。より本格的にプログラミングを学びたいという思いから、科学技術系の高校に進学し、そこでのサークル活動ではロボット制作に取り組みました。また、友人とともにPythonを用いたWebアプリケーションの開発にも挑戦し、それをタイで発表するなど、幅広い活動を行いました。先輩の指導のもと、Webアプリ開発だけでなく、マイコンなどハードウェアに関する知識も深めることができました。
その後、情報とネットワークについてさらに深く学びたいと考え、電気通信大学に進学しました。大学1年次にはSecHack365に参加し、ERC20トークンを簡単に発行できるプラットフォーム「Seknot」を開発しました。当時注目されていたブロックチェーン技術に興味を持ち、本と限られたインターネット情報を頼りにゼロから仕組みを学びました。技術の複雑さに直面しつつも、この面白い技術を多くの人に使ってもらいたいという思いから、Web3の機能をWeb2 APIの形式でラップした、開発者向けに使いやすいAPIを実装しました。
大学2年次にはIoTに関心を持ち、LPWAを用いた通信ハッカソンへの参加や、FPGAを活用したライントレーサーの開発に取り組みました。開発スキルを磨くため、年間10回以上のハッカソンに参加し、プラレールの線路にセンサーを設置してクラウド上でデータを集約・自動運転を実現するシステムも開発しました。
大学3年次には、サークルの先輩の影響でProxmoxやKubernetesに触れ、インフラ技術に魅了されました。ネットワークの知識を深めるためにShownetのSTMに参加し、インターンではKubernetesやOpenStackなどのインフラ基盤技術を扱う企業で実務経験を積みました。その中でAWSなどのクラウド技術の便利さに触れ、Serverless技術とそれを支える基盤への興味を持つようになりました。自宅でも実践的に学びを深め、秋葉原で購入したミニPCを用いてProxmoxクラスタを構築し、Kubernetes環境を運用しました。ネットワークスイッチも導入して実験環境を整備し、得られた知見を元に自宅Kubernetesの技術書を執筆し、技術書典で出版したところ予想以上の反響がありました。以後、各種LTにも積極的に登壇しています。
大学4年次には、情報基盤センターの研究室に所属し、情報システムの運用に関する研究を行いました。新設研究室の第1期生として、研究室のインフラ整備を任され、ネットワーク機器の選定やスイッチ設定、Proxmoxによる仮想基盤の構築を幅広く担当しました。同センターでのアルバイトを通じて学内の情報インフラに関する理解も深めました。また、別のアルバイトでは、学内のIoTデータを収集し、AIによってエレベータや照明を自動制御するシステムの開発に関わりました。この経験から、画像認識などのAI技術や、ChatGPTに代表されるLLMの活用にも関心を持ち、AI技術を用いた開発にも取り組むようになりました。
大学院進学後は、自宅ネットワークをさらに拡張し、BGPを用いてHomeNOC団体と接続しグローバルIPアドレスを広報するなど、ネットワーク技術の実践を重ねています。研究室ではEVPN/VXLANネットワークの整備にも取り組みました。インフラエンジニアとしてのインターンでは、AWSを活用したシステム開発に携わり、IaCなどのDevOps技術やServerlessサービスへの理解を深めました。さまざまなクラウドサービスに触れる中で、自身でもクラウド基盤を開発したいという思いから、自宅でプライベートクラウドの構築を始めました。特に最近では、Serverlessを支える技術としてのKubernetesに強い関心を持っています。
セキュリティ・キャンプでは、クラウド技術を支えるネットワークセキュリティについて学び、TCP/IPプロトコルの実装など、より実践的な技術の習得を目指しています。
課題への姿勢に関する問い
「FaaSってどうやって実装されているのか?」という素朴な疑問から、自分なりに調べてみることにした。きっかけはServerless系のイベントに参加したときで、AWS Lambdaなどがどういう仕組みで動いているのか、純粋に気になったのが始まりだった。
まず調べていく中で、AWS Lambdaは「Firecracker」というマイクロVMを使っていて、それによって高速に立ち上がる仕組みになっていることを知った。Firecrackerってなんだろう?と思って論文を読んだり、Hypervisorに詳しい先輩に話を聞いたりしてみた。実際にはKVMを使っていて、かなり低レイヤで泥臭く最適化していることがわかった。このあたりで、FaaSの裏側ってすごく深い技術に支えられているんだなと実感した。
そこからさらに「他にもFaaS的なものってどんなのがあるんだろう」と調べていくと、GCPのCloud Runは「Knative」というものを使っていることがわかった。Knativeは、Kubernetes上でFaaSを実現するためのプロジェクトで、Cloud Runのマニフェストを見ても、ほとんどKnativeの設定そのものだった。
Knativeについてさらに掘り下げてみると、リクエストが来たときにPodを起動して処理するような仕組みになっていることが分かった。いわゆる「イベント駆動」の設計になっていて、リクエストがなければスケールゼロにしておく、みたいなことができるのもこの構造のおかげだった。