見出し画像

42Tokyoでチャットのサーバーをつくった

やっと、42Tokyoの「ft_irc」という課題をクリア。

今年の2月の終わりからスタートして、先日終了。

費やした時間は205時間ほど。

課題の内容

「ft_irc」の課題の内容をとても簡単にいうと、チャットのサーバーを作成するというもの。

ircは「Internet Relay Chat」のことで、インターネットを通じて、複数の利用者がリアルタイムに文字メッセージを交換することができるチャットシステム。

例えばDiscord上で、他のユーザーにメッセージを送ると、Discordのサーバー側を通じて、相手の画面にメッセージが表示される。

このDiscordの「サーバー側の役割」のようなものを作る課題だった。(メッセージを受け取り、他の人に送信する)

サーバーは、クライアント(上のDiscordでいうと、それぞれのユーザーのこと)同士をつなぐ役割なので、クライアントも必要。

今回の課題では、サーバーの作成だけでよく、クライアントは外部のプログラムを使用してもいいことになっていた。

一つは指定されており、「nc」というもの。

ncはコマンドの一つで、MacやLinuxのターミナルで使用することができる。

この「nc」コマンドは優れもので、クライアントだけではなく、実はサーバーとしても機能するのだが、今回はクライアントとしてだけ使用。

もう一つは自分たちで好きなものを選んでよく、ぼくたちのチームは「Irssi」というクライアントを使用した。

Irssiを選んだ理由は、他のチームの使用していたので、わからないことがあれば、そのチームに聞けば知見が簡単に得られるからだ。

そして、他のチームのft_ircの課題をレビューした際に、すでに自分のパソコンにIrssiをインストールしており、使用方法をある程度分かっていたことが大きかった。

課題の進め方

「ft_irc」はチーム課題だったので、ひとりでは取り組むことができない課題。

2~3人のチーム編成であればよく、ぼくと大学院生一人の2人チームで挑んだ。

相方はぼくよりもはるかにプログラミングの知識を持つ、頼れるメンバーだ。

この方とは入学試験の時からチームを組み、42 Tokyoに入学してからも、2つの課題を一緒に取り組んできた。

個人的には週2回ぐらい進捗確認やペアプログラミング(初心者と上級者、または上級者同士でペアを組み、開発を行う手法)時間があると、進んでいることが実感できて良いと思っている。

しかしお互いの時間の都合もあり、一週間に一回Discord上であつまってMTの時間を取った。

結果的には、おたがいの予定もあわせやすく、週一ペースでよかったと思う。

レビュー当日

二人ともオフラインの学生(校舎から電車の通学時間が2時間以内の学生)なので、校舎にて足を運んでレビューを受けた。

朝の11時に校舎に集合。

ぼくが10:50ごろに到着したが、相方は10分ほど早く到着していた様子。

提出前に最後のテストに取り組んだ。

そこで相方が、コードの致命的なミスを発見。

ぼくが書いたコードの箇所だったのでショック。

いままでミスに気づけなかったのは、たまたまうまくいっていただけだったよう。

危ない危ない。

相方がコード修正も担当してくれ、感謝しかない。

コードの提出が済んだのが12時すぎ。

コードを提出して、最短で受けれるレビューを予約した。

レビューまでは50分程度時間があったので、レビューの前に昼ごはんを済ませることに。

気晴らしに校舎近くのファミリーマートまで歩いていくことにした。

いままで校舎に行っても、サクッと用事だけすませてすぐに帰宅しており、校舎周辺を散策したことがなかったので新鮮だった。

ビルの周りにはほどよく緑が植えられており、建物も洗練されていて散歩をするのの気持ちがいい。

おにぎりを朝つくって持ってきていたので、ファミリーマートではおかずとなるポークタンだけ買い、校舎にもどって校舎内で昼食。

校舎内では至る所に食事を取れる場所があり、iMacで作業する場所となんの区切りもなくつながっている。

そのため、レンジでチンしたものや、カップラーメンを食べる学生がいると、においが作業している場所にまでにおうのが少し気になる。

(だからといって校舎にいくのをためらうほどではないが)

レビュー

食事後にレビュー開始。

レビューは、合計三人の人からコードレビューを受けなければいけない。

レビューをする人が誰なのか、レビュー開始の15分前から知ることができる。

同時に、その人がどれくらい課題を進めているかも確認が可能だ。

レビュー1人目は、今回ぼくたちが提出した課題をまだやったことがない学生だった。

大体1時間ぐらいで終了し、無事にクリア。

終了してからすぐに2回目のレビューを予約。

そして45分後ぐらいに、2回目のレビューがスタートした。

2人目のレビュワーも、ぼくたちが提出した課題をまだやったことがない学生。

2回目のレビューもスムーズにクリア。

そして最後の3回目のレビューだが、3人目のレビュワーも同様に、ぼくたちが提出した課題をやったことがない学生だった。

3回目のレビューも無事にクリアしたのだが、一人でもよいので、課題をこなしたことがある学生からのレビューを受けたかった。

といっても、レビューをする学生を選ぶことがはできないので仕方がない。

すでに課題をやったことがある学生がレビュワーであれば、前提知識を持っているので、より詳しく、コードの仕様や、課題への解釈について議論することができる。

(課題に取り組んだことがない学生とも、もちろんコードの仕様や、課題への解釈について議論は可能だが、やはり一度実際にやったことがあるか、やったことがないかは、経験値が違い、議論の深みも違ってくる)

反対に課題に取り組んだことがない学生がレビュワーでであれば、前提知識を口頭や、図を書いて説明しなければならないので、こちらの理解力、説明力が問われる。

それはそれで鍛えられるのでよいのだが、1日に3人に対して同じことを説明するので、非常に骨がおれた。

次の課題にむけて

42 Tokyoでは卒業までにみんながほぼ同じ課題をこなす基礎コースの1stサークルと呼ばれるものと、それぞれの専門分野に特化した2ndサークルというものが存在する。

1stサークルの期間は、退学までのカウントダウン(ブラックホールと呼ばれる)が存在しており、課題に取り組むにさいして時間のプレッシャーがある。

しかし、2ndサークルにはブラックホールはなく、他国の42の校舎への移籍も可能となる。

今回課題をクリアしたので、1stサークルを突破するには、のこすところ「ft_transcendense」というチーム課題と、「exam06」という中間試験のようなものの2つだけ。

exam06は来週にはクリアしようと考えているので、それをクリアすれば、残るはたった一つの課題だけとなる。

この課題がかなりヘビーで、今までの課題よりも、実際に企業がリリースしているプロダクトにより近いものになっており、超実践的だ。

言語もTypeScript(JavaScripttを拡張して開発された新しい言語)を使用し、ReactやNestJS、PostgreSQLといった技術を学ばなければいけない。

チームもすでに組んでおり、今回は5人チームで、実は先週キックオフミーティングがあった。

「ft_irc」に一緒に取り組んだ大学院生もメンバーに入っている。

5人という規模での開発ははじめてなのと、実践的な課題なので非常に楽しみだ。

9月上旬には終わらしたい。

匿名のコメ・質問はmondまで👍 https://mond.how/ja/hovinci_jp