さんぽしのBLOG

さんぽしのBLOG

非理系の大学生が頑張りに頑張り抜いてエリートエンジニアになるシンデレラストーリー(予定)です。

インターン選考を通して感じたtips

こんばんは、さんぽしです。

コロナが大変な中、そろそろ夏本番といった感じですね。

学生エンジニアの夏といえば「サマーインターン」ですよね??(個人差あり

僕個人、今年は夏に向けていくつかのインターンに申し込みました。

そうです、これは流行りのインターン選考記みたいなやつです。

僕自身先代の方々の記事も参考にしてきたので、参考になるか怪しいですがサンプルとして僕のものも後世に残しておきます。

インターン選考記録と言うよりは、タイトルの通りインターン選考のtipsのような内容にしているつもりです。

注意点

この記事は1大学生が書いた物です。ここに書いてあること参考にしたけど落ちたやんけとか言われても知りません。そんなレベルの記事を書けるのならば僕のインターン合格打率は1.00になっているはずです。悲しい。

「ほへぇ〜」くらいの雑な感じで読んでください。一切の期待とまさかりを禁じます

また、記事の特性上、人によっては「胡散臭えな」「自分語り多くね」「なんだこの雑魚偉そうだな、Oねよ」って思うかもしれないですが、有料noteってわけじゃないし別に胡散臭くてもええやろ!嫌なら見るな!雑魚って言うのだけはやめて!ということでどうか許してください。mm

雑に僕のスペック

です。

なので、そもそもWebフロントエンド開発/ネイティブアプリ開発などの方などにはあまり参考にならないかもしれないです。

また、僕の受けた企業のインターン選考に限った話と言うのも注意です。

どのようなインターンに申し込むか

まず、どのようなインターンに自分は申し込みたいかというのを持っておくと、それ系の質問に答えやすくなる気がします。

僕は

  • インターンでは『個人開発/個人で勉強が可能なこと』以外、言い換えると実務でのみ経験が積みやすいものを経験してみたい
  • ハッカソン系というよりは就業型

と考えていました。なので、可能であればアプリ開発というよりはインフラよりの開発をやってみたいと言っていました。

(もちろん「アプリ開発なんて個人でもできるしインターンでやっても意味ないやろ!」って言いたいわけじゃないです、インターンでのアプリ開発もすごいいい経験になるというのは大の承知です)

また、後者に関しては就業型の方がその会社の雰囲気分かるだろしな〜というのがありました。(本当はオフィス/実際に働く社員さんの様子が知れて良いよね!というところも大きかったのですが…)

選考でされる質問に関して

選考での質問に関してですが、いくつかカテゴリに分類されると思います(後述)

何か漏れてるかもですが、結構同じような内容が聞かれます。なので面接に慣れているかどうかで差が出ることもあるかもな〜とか思ったりしてました(一度答えた経験のある質問は当然ながら答えやすい)

なので、夏はまじでインターンで埋めるくらいの気持ちで行くぜ!!みたいな人は適当に興味が出そうなインターンにぽんぽん申し込みまくって面接慣れするってのもありなのかな〜と

また、選考を通して思ったのは「いや、レベル高くね???」でした。僕がインフラ〜バックエンドのインターンと言った感じで広めに申し込んでいるからかもですがアプリケーション層の話からインフラ層の話まで幅広く聞かれて、ミ"ッとなっていました。

以下聞かれた気がする質問です。

お気持ち系

これまでの経験を測る系

  • これまでの開発経験をESに書かれてるより詳しく(インターンでどう言うことをしたかなど)
  • ↑以外でもESに書いてあることをより詳しく
  • OO(ESに書いた開発経験)の開発中に困ったこと/どのように解決したか
  • OO(ESに書いた開発経験)の開発中に工夫した点
  • Nginxやクラウドなどのインフラ周りの経験

ESが話のねたになることが多い気がするので書けるだけ書いておいた方が良さそうです

技術力測る系

前述の通りですが、別の職種の方には参考にならないかもと思います

  • 普段の開発で一番気をつけてること
  • PRを見る時に意識してること
  • OOというサービスを作るとしたときのDBスキーマ設計
  • OOというサービスを作るとしたときの雑にインフラ設計
  • OOというサービスを作るとしてこう言ったインフラ構成になってる時の改善点

僕がこの夏ではないですが、受けて困った質問は

  • 子供にOOを説明するとしたらどのように説明するか

です。

その他

人事面接で聞かれがち

  • ガクチカ(学生時代に力を入れたこと)
  • 今までの人生で一番頑張ったこと
  • 会社を選ぶ軸
  • 5年後どのような姿になっていたいか(キャリアプラン

正直後半二つは「いやまだ決まってねぇ」「10年後とか誰が分かるねん」と言った感じでしたが、適当に用意しておいた方がいいかもです。

反応がよかった気がすること

反応がよかった気がしてるだけで内心「何言ってんだこいつ」って思われてたかもですが、どう言ったことを言うと反応が良さげな気がしたか書いておきます。

  • バイト、授業以外でも勉強している(個人開発なども含)ことをさらっとアピール
  • DDD、クリーンアーキテクチャなどの設計みたいな部分も、にわかなりに知ってることをさらっとアピール
  • Hack the Boxなどをはじめ、知識的な部分のセキュリティも色々勉強してるってことをさらっとア(ry
  • Qiitaで記事書きまくってることをさらっと(ry
  • OSSにプルリクを出した経験が数回あることをさらt(ry

反応が良いこと=自分はやってるけど他の学生でやっている人が少なそうなことなので、他の学生とのdiffをみて、そう言った自分の中の武器的な物がどこにあるのかを考えて、さらっとアピールするのが良さそうです。

にわかすぎると面接官から深堀られた時に殺られるので注意です、と言うかにわかはバレます。

diffを見つけるためにはTwitterを始めるのも一つの手だと思います。実際インターンなどであった学生がTwitterをやっている率は恐ろしく高いと思います(ソースは無いけど…

また、せっかくの武器のアピール方法もせっかくなら考えた方が良いです。

例えば、AtCoderは色を伝えるだけじゃなくて具体的に上位どのくらいに位置するかを説明すると反応が良かったと言うツイートをつい最近見かけた気がします。

記事のここまでを振り返って

ここまで読んで「いや武器とかないんやが」的な感じで思った方もいるかもですが、そう言ったことを逆算して武器はつけていけばおkだと思います。

「インフラ構成の知識とかないんやが」であれば勉強すればよく、「アピールできるアウトプットが無い」ならQiita書く癖をつけるなり、なんかアプリ作るなりしてみましょう。

必要そうで必要なかった物について

競プロは就活のためのものでは無いことは大承知ですが、「コーディングテスト対策にやるべきである」と世間一般で言われがちと言う風潮があるのは否めないと思うので入れています。また、選考において必要でなかったと言うだけで、開発において競プロの経験が必要かどうかの議論はここではしません。

また、もちろん全てあった方が良いに決まっていますし、逆にこれらがあると前述の武器になり得ると思います。

ちなみに競プロやってなくてもおk!とか言ってますが、アルゴリズムゴリゴリのコーディングテストで一つ落ちています…(おい

逆選考について

絶対に参加した方が良いと言い切れます。逆求人の1on1はゴリゴリ質問されるわけではもちろんないですが、ある程度の面接の練習にもなると思います。

そして何より、運が良ければ

  • 1on1後にエンジニアの方と1on1を複数回面談(not 面接)を組んでもらえる
  • 選考の一部もしくは全部の免除がもらえる

と言うのがあります。前者は超貴重&超楽しいですし、後者は言わずもがな超ハッピーです。が、運が良ければなので期待しすぎない方が良いです(まあ運と言うか実力でもあるわけですが…)

終わりに

ざらっとこのような感じで書いてみました。

ちなみに僕はこの夏は今のところmとmとAとRに行くことになっています。殆どリモートで直接会えることはないかもですが、一緒に参加する人は仲良くしてください。

特に宣伝する物もないけど、この記事が参考になればTwitter(@sanpo_shiho)でもフォローしてやってくれよな!

どぶ素人がHack the BoxでHackerになるまでの道のり

こんばんは

さんぽしです。

1月頃から始めたHack the BoxでやっとこさHackerになりました。

記念なので、これまで何してきたかという競プロでいう「色変記事」的なのを雑に書こうかと思います。

Hack the Box気になってるけど何からやればいいかわからない🤔的な人の参考になればと思います!

www.hackthebox.eu

1月 - 3月

Hack the Boxとの出会い

Hack the Boxのことは初めは単なる常設CTFだと思っていて、なんとなく登録してみました。 この時点での僕の経験は「CTFのWeb問のすごい簡単なやつが解ける」程度でした。

登録してみるとHack the BoxがCTFとちょっとだけ違うことに気がつきます。(challengeはCTFっぽいけど)

今更ながらの紹介ですが、Hack the Boxはいわゆるペネトレーションテストが実践できるようなサービスです。CTFではPENTESTというジャンルでペネトレ問が出されることはありますが、そんなに頻繁ではないです。

Kaliなどの環境を構築する

ペネトレーションテストにはKali Linuxなるものを使うらしい…」ということを聞きつけたので「ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習」という本を借りてKaliの環境構築&さらっと流し読みで雰囲気を掴みました。

www.shoeisha.co.jp

Hack the Boxでいきなり課金

Hack the BoxにはVIP会員という制度があり、10ドル/monthでvipになれます。

vipになると

  • Retired Machineに挑戦できる
  • 空いてるMachineに挑戦できる

などなどの特典があり、最も大きいのは一つ目の「Retired Machineに挑戦できる」です。

そもそもMachineというのは攻略対象のマシンのことですが、ランクに関係するActive Machineとランクに関係しないRetired Machineの二種類が存在します。

Retired Machineというのはランクに関係しないため、公式が「Retired MachineならWriteup書いていいよ!」と言っていて、公式を含めかなり多くの人がWriteupを出しています。

僕的には、Hack the Boxを楽しみたいならVIPになるのがおすすめです

Retired MachineはこれまでのMachineが全て含まれている(多分)のでActive Machineよりも圧倒的に量があります。

また、多くの人がwriteupを出しているため、何からすればいいかわからない人もwriteupを見ながら手を動かして学習することができ、自力で解けたMachineも他の人の解法をみると別のルートを通っていたり、別のツールを使っていたりと多くの学びがあります。

ということで僕は初手でVIPに登録し、Retired Machineをやり続ける日々を送ります。

また、あとで復習しやすいように自分でもWriteupを書いていました。

qiita.com

多分この期間で14個のMachineを攻略しました。

4月- 5月

3月後半 - 4月前半はインターンに行っていたので全然何もしていませんでした。

4月の後半からTryHackMeというHack the Boxと似たようなペネトレを学べるサービスをやっていました。(これまたVIPで)

やってみて思いましたが、Hack the Boxより先にTryHackMe始めればよかったかもな〜とか感じました。

TryHackMeに関しては詳細は別の記事にまとめてあります。

sanposhiho.hatenablog.com

また、TryHackMeに関してもWriteupをQiitaに書いていました。

qiita.com

また、5月の真ん中辺りで「ハッキングという言葉に憧れるエンジニア達に贈る Hack the Box入門」という題でLTをした資料がちょっと話題になってよかったです

speakerdeck.com

5月 -

TryHackMeのVIPが終わってからHack the BoxのVIPに戻ってきた僕はこれまで通りRetired Machineを進めつつ、Active Machineの攻略も始めました。

また、自分なりにチートシートをまとめ始めました

github.com

また、今までは難易度easyのMachineしか解いていませんでしたが、難易度mediumのMachineでも簡単なものは解けることに気がつき、最終的に

  • Blunder - easy
  • ServMon - easy
  • Traceback - easy
  • Remote - easy
  • Magic - medium

を攻略し、Hackerに昇格しました。

f:id:sanpo_shiho:20200608123952p:plain

↑見ての通りUser Rated Difficultyで簡単なものから攻略していった感じです。

最終的にこの時点でActive, Retired合わせて26個のMachineを攻略していました。

終わりに

Hack the Box気になってる!みたいな人がどのように始めるかの参考になるといいなと思いこの記事を書いてみましたが、意外と内容薄っっぺらくなってしまった…

僕的にHack the Boxはどこから始めればいいかわからない(Kaliのセットアップも含む)という最初のハードルが一番大きいと思っていて、特に日本だとWriteupを書いている人やこう言った入門的な記事を書いている人も少ないので、ハマると楽しいのに勿体無いな〜と思っています。

この記事を読んでHack the Boxを始めようみたいな人が増えてくれたら嬉しいです

また、セットアップなどの部分は@v_avengerさんの下の記事が一番分かりやすいと思います。

qiita.com

僕も次のランクのPro Hackerを目指して頑張りたいと思います🏃‍♀️

CyberAgentの2daysインターンに参加してパフォーマンスチューニングを完全に理解した話

こんばんは

さんぽしです。

6/6 - 6/7でCyberAgentの2days サーバーサイド向け 開発型インターンシップに参加していました。

2日間オンラインでパフォーマンスチューニングを実際に行い、その後解説をもらうという流れでした。

この記事ではパフォーマンスチューニング何も分からんの僕がアプリケーションに対してどのような修正を入れて行ったのかをざくっと時系列で紹介していきます

ツール色々いれる

まず事前にまとめておいた↓のgistを基に

  • alp
  • pprof
  • pt-query-digest

を導入しました。

Cheat Sheet on Performance Tuning · GitHub

一瞬で導入できたのでgistにまとめといてよかったという気持ちになりました。 ついでにソースコードをGit管理して、Nginxとかの設定ファイルは手元にバックアップしました。

vimmerなのでファイル編集とかに困らなかったのは楽でした

pprof見てみる

なんかgetArticleTagNamesという関数が遅そうってことが判明 見てみると明らかにN+1だったので修正を入れました。

が、点数に変化なし。

ちなみに初期スコアは750点くらいです

DBから画像バイナリを抜く

DBに画像のバイナリが直で突っ込まれていたので、修正しました。

具体的には

  • photo_binaryに挿入しようとしている部分を代わりにlocalに保存するように変更
  • デフォルトの画像を落として、わざわざdecodeしないようにする
  • Nginxで配信するように変更

をしました。

が、またも点数に変化なし。泣きました

スロークエリを見る

スロークエリをpt-query-digestで解析すると、index貼ってないのにわちゃわちゃSELECTしてる部分が色々あったので適当に良さげなindexを貼りました。 スコアが一気に1500くらいになりました。

記念のスクショ

この時に暫定一位になっていて、命は短いだろうと悟っていたので記念にスクショを撮る

f:id:sanpo_shiho:20200607173717p:plain

MYSQLとかNginxの設定をいじる

ネットに「こうするといいよ!」みたく転がってる設定をいれるが効果なし ちなみにこの辺りで2位に転落しました

初日の中間解説でindexの解説がされる

この解説でみんながindexを張り出したが意外と抜かれなかったのでN+1改善とかが後になって効いてきてるのかもーとか思ってました

deferをなくす

deferをなくすといいらしいとどこかで見た気がしたので全部のdeferをなくしました。

効果がなかった上に非常にめんどくさくて悲しくなりました。

Template周りの改善

以下の記事を参考にtemplateを毎回Parseしていたので修正しました。

mercari_go_isucon.md · GitHub

20点くらい上がりました。

getLoginUsers改善

getLoginUsersというLoginしているUserを取得する関数が遅かったです RedisでややこしいLoginUserの管理をしているのが原因だったので、"login_users"というkeyでセット型でLoginUserを管理するように変更

200点くらい上がりました

いいね数をRedisに載せる

いいね数の取得のクエリが時間がかかってそうだったのでいいね数をRedisで管理

具体的に

  • どの記事に誰がいいねしているかというのを"iine_{articleID}"というkeyのセット型でRedisに載せる
  • GetInitializeでDB内に既に入っているいいねをRedisに載せるように修正
  • PostIineでDBと共にRedisにもいいねの情報をいれる
  • getArticleIineUsersとgetIineCountでDBからではなくRedisからいいねの情報を取得

の変更を加えました。

200点くらい上がってこれで1950点くらいになりました。

getArticleTagNames再改善

N+1を直したgetArticleTagNamesがいまいちまだ遅いのでsql/databaseではなくgorpを導入して一気に複数列を取得するように変更しましたが効果無し。

また最終時間ギリギリにRedisに載せようとしましたが時間が足りず…

getPopularArticlesが遅い

getPopularArticlesは直近一定期間でいいね数が多かった記事を取得する関数です。 これが遅くて初日から何度か修正を試みたのですが、最後まで修正できませんでした。

まずはSQLを改善することをTableの構造変更も含めて検討しました。 しかし、直近一定期間のいいね数をTableに格納するとなるとかなりの頻度で定期的に更新をかけなければいけないので諦めました。 (ベンチが走るのは一瞬なのでこれでもいけたかもとは思いましたが…)

次に、先ほどのようにRedisに載せることを検討しました。 しかし、

  • Redisからいいね取得→直近の物だけに絞る→記事ごとにいいね数を数える→いいね数上位5件を取得
  • 定期的にRedisを更新

がかなり煩雑すぎる処理になるなと思い、諦めました。

あとで聞いた話だと優勝のhppくんはRedisでやったってことなのでほへぇってなりました。

反省点

  • deferやtemplate改善などのプロファイルから見えてない部分の改善は優先度を下げればよかった(実際そこまで効果が大きくなかった)
  • Nginx、MYSQLの勉強不足で設定まわりを弄れなかった(特にNginx)

終わりに

終結果は1950点ほどが最大値でした。順位は最後2時間見えないようになっていたので分かりませんが、20人中4-7位辺りだと思います。(多分…)

パフォーマンスチューニングは本当に全然経験がなく、今回ガッツリ2日間の開発-解説で本当に大きく成長できたな〜と思いました。

とても楽しい2日間でした、ありがとうございました!!

9月のISUCONにむけてパフォーマンスチューニング完全理解していきたいと思います

TryHackMe OSCP path Review

こんにちは

さんぽしです。

この1ヶ月TryHackMeのサブスクをしてその中のOSCP pathにチャレンジしていました。

TryHackMeに関してはHack the Boxなどと比較するとマイナーで情報も少ないと思うのでどんな感じだったかというのを残しておきたいと思います

※記事の特性上完全に僕の主観で感想を述べています。TryHackMeええやんってなった人は無料でできるmachineもあるのでそっちから試して見た方がいいかもです

※TryHackMeのRoomのことをmachineとこの記事では呼ぶことにします(Hack the Boxとの違いが出るのがややこしいので)

先に結論

  • TryHackMeはHack the BoxやVulnHubを今から始めようと思ってる人がその前に調査の流れ、ツールの使い方などを覚えるのにお勧め
  • 僕みたいなHack the Boxかじってましたみたいな人でもOSCP Pathを攻略していけば体系立てて色々学べるので知らなかったツールなどを覚えるきっかけになる
  • 逆にある程度できる人には物足りないかも(Hack the Box、VulnHubにmachine数、やってる人の数、Writeup数などの点で勝てない)

TryHackMeって何なん?

Hack the Boxのようにリモートに存在するmachineをネットワークに接続し、攻略していくというサービスです。

tryhackme.com

Hack the Boxでええやん

Hack the Boxとの大きな違いはmachineの攻略にある程度の道筋が示されているという点かなと思います

Hack the Boxは「machineは用意したからあとは頑張ってね!Try harder!!」といった感じですが、

TryHackMeには以下のmachineをみてもらうと分かるようにかなり丁寧な誘導が付いています。

tryhackme.com

そのため、例えば

  • Sambaがいるけどなにすれば良いかわからない…
  • SQLiが通りそうだけどなにすれば良いんだ…
  • Windows問解いたことがない…

などのように自分にとっての初見の技術が使われている場合/何から手をつければ良いかわからないなどの場合にすごく助かると思います。

そういった意味でHack the Boxなどを今から始めたい!みたいな人は先にTryHackMeから始めると色々学べて良いのではないかなと思いました。

逆にそういった特性上Hack the Boxなどとは違って 「machine攻略したったぜ!!!」 という達成感はあまり無いかもです

OSCP Pathについて

TryHackMeはLearning Pathとしてこういったものの勉強をしたいときはこういった順番でmachineにチャレンジしてくといいよ〜という道筋を示してくれています。

その中の一つがOSCP Pathでした。

示されていたmachineの種類として、

  • metasploitを使わないもの
  • BOF

などがありました。またPathに示されているmachineには似たような種類のものが少なかったため、自分の足りないジャンルの知識埋めになると思います。

僕はBOF問まではスラスラ進んだのですが、あまりTryHackMeに時間を割けなかったこともあり、BOFやったことないマンだったのでそこで詰まって1ヶ月のサブスクでは終了できませんでした。

ですが、ある程度の経験はあり、1ヶ月そこそこ時間が取れる人は普通に1ヶ月で終わるくらいの分量なんじゃないかなって思います。

書いたWriteup達

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

こいつ全然解いてないジャーンと思った方。その通りです

全部のmachineでWriteUp書いた訳では無いですけど↑にプラスで数問しか解いていないと思います。圧倒的精進不足…

総じて感想

僕的にはかなり満足度が高かったです!

  • SQLi問題に今までチャレンジしたことがなかったことに気づいた
  • SambaやPowerShellなど雰囲気で扱っていたもの達をしっかり学べた
  • BOFもやらなきゃなと思った

OSCP Pathから外れたmachineなども含めて学びがかなり多かったです!

終わりに

この記事でTryHackMeを知った方はもしかすると選択肢の一つに入れてみてもいいかもしれません。参考になれば幸いです

僕はBOFをしっかり勉強してからもう一回チャレンジしようかなって思ってます。

OSCP欲しい〜〜(心からの叫び)

雑談

高林さんOSCP取得おめでとうございます!!!!!!!🎉🎉

また色々質問させてください…!🙏

kakyouim.hatenablog.com

脆弱性を直して学ぶ!Webセキュリティハンズオン by Recruit に参加した話

こんばんは さんぽしです。

本日5/16に脆弱性を直して学ぶ!Webセキュリティハンズオン by Recruitというイベントに参加したので、軽くですが参加記を残しておきたいと思います。

セキュリティを学べるようなイベントは(僕の観測範囲だと)少ない気がするのでとても楽しかったです!!

どんなイベント?

イベントタイトルそのままですが、事前課題となるリポジトリを与えられて、そこに残された脆弱性を修正する、当日に脆弱性一つ一つ解説してもらう、といったイベントでした。

また、僕が一方的に知っている方などの豪華解説陣となっていて、とても貴重な機会だなぁ…と感動していました。

以下が事前課題となっていた、いわゆるやられアプリBadsnsです。

github.com

見ての通りRailsのアプリで、この中に計20個の脆弱性が存在します。

元々Recruitで新卒研修に用いられるものだそうです。

事前課題に関しては僕は締め切り直前に申し込んだということもあり、全く手を付けられず当日イベントに参加しました。割と同じ理由で手をつけてない人が何人かいて安心しました。

誰かがWriteUpをあげる的なことをいっていた気がするので、詳しく知りたい方は誰かが上げてくれるWriteUpをお待ちください…(人任せ)(僕は軽く目を通しただけで自分で一つも解いてないので…)

内容に関して

脆弱性は簡単なSQLiやディレクトリトラバーサルから、SSRFなどの珍しい(気がする)ものまで豊富なバリエーションのものが存在しました。

Railsのopen関数などの仕様を利用したものなどもあり、Railsをにわかなりに扱うこともあるので、アプリの実装側としてもこれは注意しないと自分で脆弱性作っちゃうな…と感じました。

またSSRFに関しては僕は知識としてしか知らず、実際にどのようにSSRFを利用した攻撃が行われるかなどがわかっていなかったため、攻撃例やクラウド環境を交えた悪用のされ方/対策などとても学びが深かったです。

僕は普段からHack the Box、時々CTFといった感じで攻撃側に回ることが多く、

脆弱性があることがわかりゃ後は攻撃するだけ!中身の実装がどうなってて脆弱性が生まれてるかなんて知らん!w」

といった感じだったのですが、実際に実装の際に気をつけるべき点や脆弱性の原因となっている実装など、普段の↑のようなことをしていては学びにくい内容を経験できました。

当日の僕のツイートを載せておきます、

終わりに

イベントに際して、3000円分のUberEatsなどで使えるギフトがもらえたりしたのですが、むしろ3000円払ってでも参加したいくらいの濃い内容でした。

3時間の濃密な解説本当にお疲れ様でした & ありがとうございました!!

Google Summer of Code2020に申し込んでみた話

落ちました。

こんにちは さんぽしです。

Google Summer of Codeと言うプロジェクトをみなさんはご存知でしょうか。

summerofcode.withgoogle.com

毎年行われている学生向けのGoogleが認定した(?)OSSのプロジェクトに参加することで報酬(50万円!!)なりが貰えるというプロジェクトです。

f:id:sanpo_shiho:20200428234808p:plain

プロジェクトごとに一人の学生が選ばれるという形になっています。(学生は複数のプロジェクトに応募可能、ただし複数のプロジェクトから承認されることはできない)

かなり多くのプロジェクトがあるので自分の知っているようなものも必ずあると思います。パッとみた感じ有名なものだとDjangoPostgresqlなどがありました。(有名なものはその分倍率はたかそうですね)

僕は今回Erlang Ecosystem Foundationに申し込みました。Erlangとなっていますが、Elixirも含まれます。

出だしの通り僕は落ちてしまいましたが、日本語のGSoCに関する記事はかなり少ないので、申し込みに必要だったことやproposalの書き方などを後世のために残しておこうと思います。

申し込みに必要なもの

必要なものとしては学生であることの証明などがありますが、一番重要なのはproposal(提案書)です。

proposalというのはOSSに対して具体的に自分がどのような機能の追加であったりの活動を行うのかといった内容を書くものになります。

しかし、一から考える必要はありません。プロジェクトごとにIDEAS LISTが用意されています。なので多くの人はIDEAS LISTの中から自分のできそうな or 興味のあるものを選んでproposalを書くことになると思います。

僕はElixir/ErlangのpackageシステムであるHexに対して

  • 脆弱性報告のフォームをhexpmに設ける
  • 脆弱性報告→Elixirの管理者の承認→ライブラリの管理者へ通知 といった流れの作成
  • hexpm上で脆弱性のあるライブラリの情報の公開
  • mix hex.auditコマンドの作成
  • hexのAPI脆弱性情報を取得できるAPIを生やす

といった改善を行うproposalを書きました。

実際のproposalはこちらです

docs.google.com

英語でうげっと思ったそこのあなた、安心してください。僕もかなりの英弱ですがDeeplという魔法を駆使してなんとか書き上げました。

また、自分のproposalは提出前に実際のプロジェクトのメンターからレビューをもらうことができます。僕は何度か送ったメールにガン無視をキメられたのでメンターさんが忙しかったのかレビューをもらうことはできませんでした。

しかし多くのプロジェクトではレビューをもらうことができているようで、GSoCの参加記のような記事のほとんどにはレビューをもらうことの重要性が書かれていました。

その他、アドバイスとしてよく書かれていたのはそのプロジェクトへのOSSコントリビュート経験です。僕はElixirやPhoenix本体にいくつかPRを出したことがあるので(全てがmergeされたとは言ってない)その点は大丈夫だったと思います。

原因として考えられるのは

  • シンプルに他に強い人がいた、実力不足(多分これ)
  • スケジュールの粒度がアバウトだった(1週間単位で書いてる人もいました)
  • 英語がおかしかった…?
  • 50万円が欲しいという強欲が滲み出ていた

あたりですかね。悔しい

終わりに

GSoCは学生の内しか受けることができません。来年の僕の手の空き具合が分からないですが、再チャレンジしたいと思ってます。

この記事を読んで興味を持った方は来年一緒に頑張りましょう。💪

Dive into mixi GROUP 2020 (春) に参加してきた話

こんにちは さんぽしです

3/16 - 4/17 でmixiの長期就業型インターンDive into mixi GROUP 2020に参加してきました。

僕は今回Unlimというスポーツギフティングのサービスを開発している部署に配属されました。(ここでは僕の大好きなElixirが使用されています!珍しい!)

unlim.team

選考〜インターン参加まで

選考の流れは数回人事の方と面接、その後エンジニアの方とも面接して、最後に実際に配属(予定)のチームの方と最終面接という流れでした。 個人的にはコーディングテストがなくて助かりました。笑

僕の場合インターンの最終面接に通ったのが3月の頭でした。

そこで最終面接かつ面談のような形でUnlimのチームの方と実際にお話させていただいて、実際にインターンでどういったことに取り組むかと言うことをざっくりと聞きました。

そこでElixirでバックエンドの開発というよりはDockerやKubernetesなどを使った開発を任せることになると思うという趣旨のお話を頂きました。

その当時の僕は「Dockerって何?」「Kubernetesってもっと何???」と言う状態でした。

3/16からインターン開始ということでかなり時間のない中でしたが(2週間)、事前課題ということでざっくりDockerとKubernetesをminikube上で動かして見て欲しいと言われていたのでとりあえず動かしてみつつ、Qiitaの記事にまとめたりしました。(Qiitaちゃんぶりにプチバズったので嬉しかったです)

qiita.com

この記事を書き終わった時点で1週間ほど余っていたので、これまで逃げてきたAWSのお勉強に勤めました。Qiitaに出てくるようなAWSの記事を色々読んでAWS上のどのサービスでどのようなことができるのかというのを本当にざっくり勉強しました。

インターンでやらせてもらったこと

はじめにメンターの社員さんとインターンの最終的な目標となるタスクを設定しました。

僕の最終目標として定めたタスクは masterブランチにPRを投げたときに自動で環境が作成されるデプロイフローの作成 です。

現在Unlimチームでは

  • masterにマージされる前にstaging/unstableブランチに一旦マージしてみる。
  • staging/unstableにマージされるとCircleCIが回ってstaging/unstable環境のデプロイが実行される。
  • staging/unstable環境でOKそうならmasterにマージ

と言う流れで開発が行われています。

これをmasterにPR投げただけでCircleCIが回りデプロイされるような環境に変更しようと言うのが今回の僕の最終タスクでした。

はじめはCircleCIの回るタイミングを変えるだけじゃね?みたいなことを思っていましたが、デプロイは単純にkubectl applyを打っているだけではなく、AWS上のリソースなどもどのように作成/管理するかという部分などもあり、とても面白いタスクでした。

使用した技術としては、Docker, Kubernetes, Helm, CircleCI(,ECR, EKS)あたりです。

詳細はQiitaに別記事としてまとめたので興味のある方はぜひ読んでみてください!

qiita.com

インターンの途中でコロナが猛威を振るう

インターンの2週間目を終えたとき小池さんが「東京やばいっす、外出まじやめてね」という会見をしたこともあって、インターン生含めて(基本)リモートの勤務に変更されました。

mixi.co.jp

個人的に文章を書くのがすごく苦手で冗長にタラタラ書いてしまう癖があるので(ブログも読みにくいと思います…)、Slackなどのコミュニケーションだけになるという部分は不安もありましたが、1日に2回ほど入れてもらったオンラインでの1on1などで心配することはなかったです。

というか後でよく考えたらいつも開発する時は爆音イヤホンで周りの音をシャットアウトするのでそこまで頻繁に直接コミュニケーション取ってたわけでも無いなとも思ったり

また、リモート勤務の開始に伴って、契約社員やアルバイトを含む全ての社員にhoge万円の機材購入支援が行われました。

小池さんの会見があった2日後にもう機材購入支援の事がアナウンスされ、会社としてエンジニアの働きやすさ(=生産性につながる)を重視するという姿勢が見て取れてすごいなっと感じました。

僕も遠慮なくディスプレイを購入しました。京都の下宿にディスプレイがなく、そういう面でもとても嬉しかったです。

これからの開発にめちゃめちゃ役立てていきます…!!!💪

終わりに

Docker、Kubernetes何も知らない状態から本当に多くのことを学ぶことができました!

具体的には

  • Docker, Kubernetesとはなんぞや
  • CiecleCI、CI/CDとはなんぞや

と言った基本的な部分から

  • どのようにmanifest, リソースが管理されるか(Helm, ArgoCD)
  • アプリケーションがどのようにインフラ的に組み合わさって動作しているか

などまで本当に幅広く濃い内容を学ぶことができました。

最高のインターンでした!! 一ヶ月の間お世話になりました!!!

興味がある方は夏季とかもやってるので応募してみてください!!

mixi-recruit.snar.jp