そこらへんの大学生のブログ

iOS開発やったり、海外に住んだり、大学生やったりしてます。

オーストラリアワーホリにてファームで3ヶ月以上働いてセカンドを取得するまでの記録③

終わらない肉体労働の日々

初日の仕事を終えた僕は疲労困憊だった。

初日の時点で仕事中に「これ、いつ終わんねん。。。」と思いながら働いていた。

ファームの仕事に決まった退勤時間はない。
ボスが今日はここからここまで収穫すると決めたら、何時までかかろうが途中で終わることはない。

毎日、ボスのさじ加減で何時までやらされるか分からないという点は部活で味わった感覚に近かった。
何時までか分かっているなら頑張れるが、いつまで続くか分からない過酷な肉体労働ほど理不尽に辛いものはない。

経験が増えてくると「今日は大体何時くらいやな。」と自然に分かるようになるのだが、最初は全く予想できなかったので肉体的だけでなく精神的にも辛かった。

仕事が終わった時の喜びと充実感も部活に近いものがあった。
その喜びはバイトの退勤とは比べ物にならない。

仕事を終えて家に帰ると、まず真っ先にシャワーを浴びる。風呂はもちろんないので、シャワーのみ。

疲れて何もする気が起こらず、スマホにダウンロードしていた動画をマットレスの上に寝転んでただただ観続けるだけ。
そして、晩御飯を適当に作って食べてまた明日の仕事のために早く寝る。

f:id:Rwkabms:20190429033454j:plain:w400:h300
散らかっているが、こんな感じでマットレスの上で暮らしていた。

そんな日々だった。休みは1日も無かった。(たしか初日から数えて休みなく33連勤したと思う。)

とにかく辞めたかった。

仕事先に日本人はいたが仕事のグループが異なるため話す機会はほぼ無く、友達はいなかった。
日本人から仕事を教えてもらえたなら、もう少しましだったと思うが周りにいなかったので怒鳴られながら仕事をしていた。

怒鳴られるわ、キツイわ、友達いないわで何重苦かと思うほど辛かった。
(こういう暗い話は僕も嫌いなので、書いてて落ち込んできた笑 もうちょっとしたら、明るい話になっていくのでもう少しお待ちを。)

自分は2年休学しているので同級生は既に会社で働いているというのに、自分は何でこんな仕事をしているんだというのも辛い理由の1つだった。

ファームに来てから2週間くらいで本気で辞めようと思って、メルボルンでエンジニアインターンを探して応募したりしていた。
もし採用されたら、それを理由にファームを辞めれば大義名分もあるし、そっちの方が将来のためにもなると考えていた。
まあ、結果的にはもちろん返信すらなかったけど。。。笑

人は辛くなるとそこから逃げ出す理由をどうにか作りだして正当化しようとすることを学んだ。
当時は本気でそっちの方が将来のためになる選択だからそうしようと考えていたが、今考えると自分はただ逃げたかっただけなんだなと分かる。

ここからちょっと明るくなります笑

そんなわけで一時は本気で辞めようとしたことはあったが、幸か不幸かインターンの応募先からメールの返信が無かったこともあって何とか1日1日乗り越えていた。

ただ不思議と毎日怒鳴られながらも仕事を続けていると、段々と仕事の仕組みが分かってきた。

最初はただの鈍臭いやつだった僕も、人並みに仕事が出来るようになってきた。
仕事といっても肉体労働なんだけど、それでもコツはある。仕事っていうものは最初は何も分からずに悔しい思いをしても、愚直に続けていれば上達していくものなんだなと。
続ける大切さを教えてもらった。

どんな仕事でも、頼りにされると楽しくなってくるものだ。
僕は少しずつ、仕事を楽しめるようになってきた。まあ、依然としてめちゃくちゃキツかったし、仕事中はとにかく家に帰りたかったけど笑

そんな頃に同じ家に日本人のカップルの2人が入居してきた。
この方々は僕より年上だが、既に僕が働いているファームで過去に半年ほど働いており、貯めたお金でオーストラリアを一周し、またファームに帰ってきたというツワモノだ。

僕なら何があってもまたファームで働くという選択はしないだろうにこの人たちはすごいなと思いながら、お互い自己紹介して次の日から一緒に働き始めた。

以前に半年ほど働かれていただけにボスも彼はとても頼りにしており、すぐに僕たちバケボのリーダーになった。

同じ家ということもあり、すぐに仲良くなり、気づけば毎朝彼の車でファームに向かうようになった。

今まで友達がいなかった僕も彼を通じてファームの色んな人と仲良くなることが出来、その頃から仕事だけで無くファーム生活が徐々に楽しくなり始めた。

今までは一人で飲み込むだけだった愚痴を言える相手が出来たし、仕事も分かりやすく教えてもらえたし、お互いUFOとかUMAみたいなミステリーとか怖い話が好きという共通点もあって話がとても合った。

年齢的には僕より8つくらい上だったが、僕にとって初めての年上の友達が出来た感覚だった。

彼に仕事を教えてもらったこともあって、より仕事が出来るようになった僕は仕事内容も変わった。

バケボにもランクがあって、説明が難しいので省略するがトラック周りの仕事を任せてもらえるようになった。
実はこの仕事の方が肉体的には断然キツかったのだが、任せてもらえるのが嬉しかった。

そんな感じで2ヶ月くらいの時間が経っていた。
気づけば2ヶ月経っていたような感じで書いたが全然そんなことはなくて、毎日「今日で○日目。。」と自分を鼓舞していた。
それでも全然、先は長くてファーム生活が終わる気はしなかった笑

続きはまた今度。

「逆説のスタートアップ思考」は反直感的な教訓にあふれていた

何度も言いますが、大学の図書館最高!笑

相変わらず大学で本を借りまくっております。

最近、読んだ本のうちの1つが馬田隆明さんの「逆説のスタートアップ思考」です。

この本はどこかの企業の経営者さんがオススメしていた本で、調べてみるとやっぱり大学の図書館にあったので借りました。

さすがオススメされているだけあって、とても面白い本で「読み終わったら、この内容をまとめてブログに書こう!」と思いながら読み進めていました。

そして、まさかのブログに書く前に返却してしまうという。。。

というわけで覚えている範囲で面白かった点、納得した点についてまとめたいと思います。

スタートアップが成功するためには反直感的なアイデアに従うことが大切

まず本の冒頭で「スタートアップ」という言葉の定義を説明されています。

既に確立された市場で安定、確実な成長を目指すスモールビジネスとは異なり、スタートアップとは「不確実性の高い市場の中、短期間で急成長を狙う」点が特徴であると。

そうなったときにスタートアップはスモールビジネスとは異なる手法、戦略を取るべきなのは当然です。
馬場さん曰く、スタートアップの成功にはスタートアップに適した思考が必要であるそう。

それがタイトルにある「逆説のスタートアップ思考」

なぜ「逆説」なのかというと、スタートアップが取るべき戦略には『本当は正しいのだが、直感的には間違っているように感じるもの』が多いからだそうです。

例えば事業アイデア。
本来、企業などが新規事業を立ち上げる際には出来るだけ成功率の高い市場で企画、ビジネスモデルを固めて実行するというのが普通です。

しかし、それは大手企業などのリソースが十分にある前提で取れる戦略です。
なぜなら成功率の高い市場とはある程度確率された市場であるため、既に大企業がひしめき合っています。
そういった市場に挑んでも価格競争などにもつれこめば、資金が少ないスタートアップには勝ち目はありません。

よって、スタートアップが事業アイデアを考える時に気をつけるべきことは
『市場が確立されておらず、不確実性が高い、もしくは誰もやりたがらないところで勝負すること』
が一見成功率が低そうに見えて、最も成長する可能性が高いということが言えるそうです。

これはまさに「逆説のスタートアップ思考」らしい考え方でスタートアップは資金も時間もないため、出来るだけ早く成功しようとして成功確率が高そうなところに飛び込んでしまいがちです。

しかし、今まで大きく成長したスタートアップの多くはその逆を行きました。

例として挙げられていたのがAirbnb。
Airbnbは創業する際、「他人に自分の家のスペースを貸し出す」という事業内容を投資家に説明すると「誰がわざわざそんなことをするんだ?」や「クレイジーすぎる。」と出資を断られ続けたそう。

ただそんな「クレイジー」なアイデアだったからこそ、大企業は参入してくるはずもなく地道にユーザ獲得に奮闘して、世間に価値が認められてからは短期間で急速な成長を果たしました。

ビルゲイツは

「自分が出したアイデアを少なくとも1回は人に笑われるようでなければ、独創的な発想をしているとは言い難い」

と言っていました。成功するスタートアップにはまさにこの考え方が必要なようです。


そして、事業アイデア以外で興味深かったのは「最初はスケールしないことをする」という点。

やはりスケールに関しても、余裕のないスタートアップにとっては出来るだけ早く規模を拡大しようとしてしまいます。
しかし、これは長期的に見ると失敗を招く考え方だそうです。

それでは「スケールしないこと」とは具体的にどういうことかと言うと、初期フェーズでは創業メンバーだけで全ての業務を行うべきとのこと。

これはなぜなら、いきなりスペシャリストを雇って任せるのではなく、創業者自身が全ての業務を行うことでその事業のプロセスや発生する問題について深く理解することが出来るからだそうです。

あるレストランのメニューを自宅に届けるというフードデリバリーサービスを展開し、成功したスタートアップがあります。

従来、そのようなサービスを持つスタートアップを始めるとするとまずデリバリー元のレストランをいくつか確保し、注文用のウェブサイトを作り、デリバリーシステムを作り上げてからお客さんを待ちます。

ただそのスタートアップが最初にしたことは近所の1つのレストランのメニューと自分たちの電話番号のみを公開しただけでした。

しかし、実際にお客さんの注文が数件入りニーズがあることを確かめると、彼らはそれからしばらくは自分たちでレストランに出向き、注文されたメニューを自宅へと届けていたそうです。

そんな「スケールしないこと」をした結果、創業メンバーが自ら全ての業務を行う中で必要なプロセスを理解し、逆に事業拡大時には効率的なスケールを達成したそうです。

今後スケールしていく上で必要なことを学ぶという目的において、非効率に思えますが創業者が初期に全ての業務に関わるメリットは大きいというわけです。

また、「スケールしないこと」は業務のことだけではなく、顧客とのコミュニケーションも同じです。

ある企業では創業者自らが初期の顧客に対して、一人一人感謝の手紙で贈っていたそうです。これも経営的にはとても非効率に思えますが、これによって初期の顧客が離れることなく、安定したユーザ数を保つことが出来たとか。


他にもたくさんの反直感的な学びが多く得られた本書ですが、最後に語られていた言葉が個人的には最も強く響きました。

「スタートアップを始めるために何か事前に知識がなかったとしても問題ない。逆説的ではあるが、スタートアップのやり方を学ぶ一番の方法はスタートアップを始めてみることだ」

これは起業に限らず、全てのことに言えますよね。準備の時間はムダだ。さっさとやれと。。。

オーストラリアワーホリにてファームで3ヶ月以上働いてセカンドを取得するまでの記録②

ついにファームへと旅立つ

いよいよ5日間滞在したゴールドコーストを去り、ファームがあるクイーンズランドへ出発する日が来ました。

クイーンズランドへは電車を乗り継いでいきました。チケットはエージェントの人が予約するのを手伝ってくれるので良かったのですが、移動自体は1人なのでそこそこ不安でした。たしか9時間くらいかかったと思います。

長旅の末に到着した駅ではこれから住む家まで送ってくれる迎えが待っているはずでしたが、全然見つけられません。。。

困ってウロウロしていると突然、電話がかかってきました。恐る恐る出てみると、全く聞き取れない英語でめちゃくちゃ喋っています。

かすかに黄色の服を着てる的なことが聞き取れたので必死に黄色い人を探すと1人の歯がほとんど抜けている白人の大男が電話を耳に当てて話していました。
服は明らかに仕事を終えてきた感じのドロドロで長靴を履いていました。

彼を見た瞬間に改めて、「おれはここで生き抜けるのか、、、」と不安になりました。
正直、日本で出会った誰とも違う明らかに野生の男って感じの人でしたから。

そのまま彼に言われるがまま車に載せられると、途中で1人のおじいちゃんが乗車してきます。彼こそ、前に記事でも紹介した鉄人爺ちゃんです。

そのまま近くの大きなスーパーに連れて行かれて、「明日から働くから早速必要な道具を買う」と言われてグローブやランチバッグ、シャツ、ズボン、大量の水、パン、ピーナッツバターなどを買いました。

そして、家に向かいます。家に到着したら、この記事にも書いたようにそれはそれはボロくて何もない家でした。

www.yashinka-engineer.blog

「これから3ヶ月、ここに住むのか、、、」と絶望したことを覚えています。何よりWi-Fiがないことが日本で快適なYouTube生活を送ってきた僕には耐えられませんでした。

Wi-Fiがとんでいないことはエージェントの方から、うっすら聞いていたので念のため街のWi-Fiで暇つぶし用の動画をダウンロードしまくっていたのですがさすがに3ヶ月はきつすぎます。

しかも、明日から早速仕事。明日は3時に起きて4時に出発、ファームに5時くらいに到着して仕事開始と言われて、もう憂鬱以外の何者でもなかったです。

初日は同居している鉄人じいちゃんと色々話した後、朝3時に起きなければならないので夜9時くらいに寝ました。

そして朝3時、目覚ましで何とか目覚めた僕はじいちゃんに言われるがまま、昼食(パンにピーナッツバターを塗って折りたたむ)を準備して、おじいちゃんと同居していた黒人のおばちゃんと一緒に昨日の大男が運転する車でファームに向かいます。

まだまだ外は真っ暗だったのですが、彼の運転が荒すぎてめちゃめちゃ怖かったのを覚えています。

そして1時間ほどの車移動のあとにファームに到着しました。思ってた数倍広くて、ほんとにどこが終わりか全くわからなかったです。

f:id:Rwkabms:20190425030650j:plain:w400:h300
これは極一部。

そんなファームに10台ほどの車が既に止められていて、たくさんの人が仕事着を着て、寒そうに待っています。
オーストラリアは南半球なので4月頃から寒くなり始めます。朝5時は特にめちゃくちゃ寒いです。

日本人も何人かいたので少し挨拶しました。

そんな中で大声で笑っているデカくてゴツいおじさんがいました。彼こそがこのファームのボスでした。

初対面の印象はめちゃめちゃ声がデカくてテンションの高いおじさんって感じでした。このトルコ人のボスが悪魔かと思えるほどキレまくるパワハラボスだと気づくのは少し後のお話。。。

ファームジョブ初日!

しばらくして、そこのファームで働いている人が全員到着すると仕事が始まりました。

バケットバーイの仕事は説明が難しいのですが、めちゃめちゃシンプルに言うとピッカーと呼ばれる人がもぎってバケツに入れたトマトをトラックに積み込む作業です。

トラックは止まることなく進んでいくので、遅れる訳にはいきません。全員ダッシュでバケツを運び続けます。

そして、お給料を計算する時のためにピッカーの人はバケツ何個収穫したかの指標としてタグと呼ばれる各自の番号が書かれているスティックをバケツに入れているのでそれを回収しながら運ぶ必要があります。

最初はじいちゃんに言われるがまま、意味も分からず見よう見まねでやりました。

バケットボーイ(以後バケボ)の給料は回収した全てのタグ(つまりピッカー全員がその日収穫したバケツ数)をバケボの人数で割った額になります。

なのでバケボが何個タグを取っても、全員の給料は同じです。

最初はそれも知らずに「おれのタグバッグぱんぱんだから、このタグもらってよ」と言われるたびに心から「Thank you so much!!」って言ってました。
相手は何でこんな感謝されるのか意味が分からなかったでしょう。

そんな感じで訳も分からないまま仕事は進み、初日は朝5から昼3時くらいまで働きました。最後にはほとんど腕が上がらなくなるくらい疲労困憊でした。

こんな感じで怒涛の1日目が終了です。


続きはまた後日。

オーストラリアワーホリにてファームで3ヶ月以上働いてセカンドを取得するまでの記録①

ワーキングホリデー、オーストラリアを選んだ理由

僕が留学ではなく、ワーキングホリデーを選んだ理由は「圧倒的に予算が少なく済む!」でした。

留学になると学費でかなりの予算が必要になりますし、学生ビザだとほとんど働けないので回収することも出来ません。

それに比べて、ワーキングホリデーはマジで何の予算もいりません笑
行き先で別に何もしなくてもいいわけですからね。なので予算のほとんどを占めるのは海外保険になります。

そして、ワーキングホリデーの行き先の中でもオーストラリアを選んだ理由は「最長2年間滞在できる!」でした。

基本的にはワーキングホリデーって1年間だけなんですよね。
ただオーストラリアはその倍、2年間まで滞在することが可能です。ただ1つだけ条件があります、、、

『最低88日以上の季節労働を最初の1年以内に行うこと』

これがオーストラリアで2年目を過ごすための必要条件です。

それを出国前にワーホリの手配をしてくれるエージェントさんから聞いた時、「あ、それだけでいいんだ。どうせ働かなきゃいけないし、お金たまるからラッキー♪」とか思っちゃってました。

後々、あれほど辛い日々が待ち構えているとも知らずに、、、(期待感煽る演出のつもり)

オーストラリア到着、現地のエージェントさんと合流!

そんな感じで特に深く考えずに出国の日を迎えました。

出国1週間前くらいから死ぬほど行きたくなくなりましたが、これはアメリカに留学した時も同じで「海外長期滞在の直前は急に日本が恋しくなる」というあるあるなので特に気にせず。

オーストラリアのゴールドコーストに無事到着し、空港で待ってくれていた現地のエージェントさんと合流します。

スマホが使えないのが不安だったので、合流時間直前に少し待ち合わせ場所を離れてSiMカードを買おうとしていたので「ここで待ち合わせって言ってたでしょ!」と軽くキレられながらもお互い自己紹介。

5日間ほどは近くの街のバックパッカー宿に泊まって現地の生活やファームの仕事に関する説明を受けて、それからファームがある州へと移動することになっていました。
ここにも書いた憂鬱になりながら泊まった最初のバックパッカー宿です。

www.yashinka-engineer.blog

空港から宿がある街まで車で移動しながら、エージェントのおじさんと世間話をしていました。

そんな中でファームの仕事についての話になったのですが、そこでそのおじさんが言った一言が

「多分、数日で辞めたくなるくらい辛いよ。」

でした。

ワーホリに関してめちゃめちゃ軽い気持ちで来ていた僕は「、、、え?」と改めて聞き返します。
すると、またそのおじさんは

「もう二度とやりたくないって言うと思う。ついこの前も体育会系の大学生がファームの仕事始めたんだけど1週間で辞めちゃったんだよね、はははは」

と笑っていました。

その時、僕は心の中で「このおじさんは何を言ってるんだ。ファームは太陽の下で良い汗をかいて大自然を満喫しながら野菜とかを収穫する仕事だろ?」と呟いていました。

しかし、よくよく聞いてみると、それは女の子がやる仕事(ちなみにこの仕事もめちゃくちゃきつい。腰が壊れる。)で男はバケツボーイと呼ばれる収穫された野菜でいっぱいのバケツをトラクターにひたすら積み込む作業だと教えられました。

しかも仕事は基本的に朝5時頃からスタートし、休みは基本的に無いと聞かされました。

この時点で僕は「うん、おれには無理だ( ^ω^ )」と確信しました。

ただここまで来て、「やっぱ帰ります」とも言えずにめちゃくちゃ憂鬱になりながら、5日間の講習を受けます。

講習はそのエージェントの別のお兄さんが担当だったのですが、やっぱり講習でも「ファームの仕事は辛いです。」の一点張り。

彼が何度も強調していたのは「初めが一番きつい。2週間必死に耐えてください。次第に慣れていきます。」

いやいや、2週間耐えられたとしてもそこからあと何週間残ってるんだよ、、、と心の中で思いながら「頑張ります。」と死んだ顔をしながら答えていました。

たまたま宿の同じ部屋の1人が日本人だったので彼に毎晩ファームに行きたくないと愚痴っていました笑
彼も内心「知らねーよ」と思っていたでしょうが、黙って聞いてくれて感謝しています。

そんなわけで休学してまでオーストラリアに来ている僕は「やっぱ辞めて日本に帰ります。」とも言う訳にもいかずにファームに向けて出発する日を迎えるのでした。。。

f:id:Rwkabms:20190425020009j:plain:w300:h300
とても爽やかな街でした


思っていたより超大作になりそうなのでこまめに切りながら、ファームの思い出を書いていきたいと思います。

それでは今回はこの辺で。

休学で卒業が遅れることが就活に与える影響

2年休学した僕。

近年では海外留学する大学生はそんなに珍しくはないと思います。僕の友達にも春休みや夏休みを利用して海外の語学学校に通っていた人が多かったです。

ただ海外留学経験者が少なくないとは言っても、それは長期休暇を利用して1ヶ月くらい留学するというパターンが大多数だと思います。

休学してまで1年間海外留学していたとなるとグッと割合は下がるのではないでしょうか。

更に僕は2年も休学して海外に行っているので、さらに少数派ではないかなと思います。

そんな僕も2年目の休学を決めるときはかなり迷いました。

オーストラリアに行きたかったことは間違いなかったのですが、何より2年も周りより遅れてしまったら就活に悪い影響があるのではないかとめっちゃ悩みました。

オーストラリアに行った後でさえ、こんな感じで不安感MAXのツイートをしています。
ちなみにオーストラリアは2年間滞在する予定だったので、もともとは休学3年になる予定でした笑

そんな僕が実際に就活を終えて、2年の休学によってどのような影響があったのかを書いていきたいと思います。

全く問題なし

結論から言いますが、何の影響もありませんでした笑

いえ、正確にはプラスの影響しかありませんでした。

まず周りより卒業が遅れることに関する影響ですが、企業は就活生が何歳かどうか何て全く気にしていません。

企業には山ほど全国の大学生からエントリーが来るわけで、いちいちこの人は何歳でみたいなことを考慮している暇はありません。

「自分は周りより年齢が上になるから、、、」みたいなことを考えていた僕に「それはお前の思い上がりで自意識過剰だよ。」と優しく教えてあげたいです。

そもそも2年遅れの大学生自体、大学院に進学した人や浪人した人など、想像しているより多く存在します。そんなに珍しいことではないです。


そしてプラスの影響に関してですが、就活は話せるエピソードが多ければ多いほど強いです。

普通に大学に通って普通にバイトして4年で卒業した人より、むしろ2年ほど休学して海外留学したり企業でがっつりインターンしていた人の方が就活においては圧倒的に強いです。

これは僕が驚いたことなのですが、休学2年して海外に行ってましたと言うと「行動力あるね!」とか「積極性があるね!」なんて褒められたんです。

僕としては普通の大学生は4年間で卒業するところを2年も好き勝手してたわがまま人間だと思ってましたから笑

出来れば休学中は自分の進みたい業界に関わることに打ち込めればベストですが、世界一周やバックパッカー旅などでも話のネタにはなるので差別化できます。


2年の休学を経験した今、僕は大学生はみんな数年休学するべきだと考えています。

初めから自分がやりたいことがはっきりしている人はそんなことする必要もありませんが、ほとんどの大学生がそうではないと思います。

僕はたまにふと、「もし休学せずに4年間ストレートで卒業していたら、どうなっていたんだろう。。。」と考えます。

何となく大企業目指しとけばいいんでしょ的なノリで就活して、どっかの企業に収まって「あれ、おれこれで良かったんだっけ?」といつか気づき、「なんで大学時代に一度立ち止まって考えなかったんだ。。。」と後悔するような日が来ただろうと思います。

普通の大学生には何となく進んでいく大学生活から離れ、どこかで立ち止まって自分と自分の将来について考えるタイミングが必要なのではないでしょうか。

実際、僕は帰国してからすぐ就活を始めましたが自己分析というものをほぼしませんでした。

ただ就活に自己分析が必要ないのかというとそういうことではなく、おそらく僕はその2年の休学期間中に無意識のうちに自己分析を完了していたのではないかと考えています。

休学期間はある意味、孤独です。周りには現地の友達や休学仲間はいます。
しかし、今まで一緒に高校生活や大学生活を送ってきた友人とは違う方向に突然飛び出し、1人違う道を歩き出すようなものです。

そんな生活の中では「何で自分はこんなことをしているんだろう?自分は何になりたいんだろう?」という自己の内面に対して疑問を持ち始めるのは自然なことだと思います。

そして、それこそが自己分析の本質であり『無意識の自己分析』なのではないでしょうか。


もし、就活に与える影響が怖くて休学を悩んでいる人がいるなら迷わず行くべきです。

それでも怖いなら、その休学中に自分のため将来のためになるスキルを磨くと決めるのです。

実際、僕は就活において周りよりマイナスの戦いになると思い込んでいたからこそ、プログラミングに没頭しました。

「やりたいけど怖いからやめる」のではなく、「やりたいからこそ、どうすれば怖さに打ち勝てるのか」を考えればとても充実した休学期間を過ごせると思いますし、きっとそのまま就活していたよりよっぽど良い結果を残せると思います。


なんかめっちゃ真面目で意識高くて熱いこと書いたので、少し後悔してますが過去の自分と同じように悩んでいる人に届けば嬉しいです。

RxSwiftでFirestoreのデータをリアルタイムでTableViewに反映する

RxSwift勉強中です

RxSwiftはずっと前から勉強しようと思っていたのですが、どこを見ても学習コストが高いと書かれていてビビってました。

ただインターン先でRxが使われていて勉強しないわけにもいかなくなったので、勉強会に参加してiOSエンジニアの方に教えてもらいながら簡単にRxを使ってFirestoreにデータを追加、取得をリアルタイムにTableViewに反映するアプリを作ってみました。

完成イメージ。
FirestoreにtextをPostし、その変更をリアルタイムで取得し、そのtextをTableViewCellに表示します。

f:id:Rwkabms:20190421015253p:plain:w250:h450 f:id:Rwkabms:20190421015306p:plain:w250:h450

まずはFirebaseの初期設定やCocoa PodsでFirestore、RxSwift、RxCocoaをpod installするなど諸々の設定を完了させます。



早速、まずはPostViewControllerにUITextFieldとUIButtonを用意します。

Rxを使ってボタンをタップした時の処理を書くとこうなります。簡単に書けて良いですね。
Model内のpostメソッドでFirestoreにデータを保存します。

class PostViewController: UIViewController {

    @IBOutlet weak var postLabel: UITextField!
    @IBOutlet weak var postButton: UIButton!
    
    let disposeBag = DisposeBag()
    
    let firestoreDataModel = FirestoreDataModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        postButton.rx.tap.subscribe{ [weak self] _ in
            let text = self?.postLabel.text
            if text != "" {
                self?.firestoreDataModel.post(text: text!)
                self?.postLabel.text = ""             
            }
        }.disposed(by: disposeBag)
    }
    
}



そしてFirestoreにデータを追加、取得するためのFirebaseDataModelを用意します。

class FirestoreDataModel {
    
    lazy var db = Firestore.firestore()
    
    var strings = BehaviorRelay<[String]>(value: [])
    
    func post(text: String) {
        db.collection("sample").addDocument(data: ["text": text])
    }
    
    func get() {
        db.collection("sample").addSnapshotListener{ (snapshot, error) in
            guard let value = snapshot else {
                print("nothing")
                return
            }
            value.documentChanges.forEach{ diff in
                if diff.type == .added {
                    let data = diff.document.data() as? Dictionary<String, String>
                    guard let sample = data else {
                        return
                    }
                    guard let text = sample["text"] else {
                        return
                    }
                    var oldStrings = self.strings.value
                    oldStrings.append(text)
                    self.strings.accept(oldStrings)
                }
            }
        }
    }

}

postメソッドとgetメソッドのデータ追加、取得の部分は公式ドキュメント通りです。
addDocumentメソッドでデータを追加して、addSnapshotListenerで変更を監視しています。

変数stringsは配列の文字列型BehaviorRelayです。

このBehaviorRelayですが、onErrorもonCompletedも流さないObservableです。つまり予期せず終了することなくイベントを流し続けられます。

Rxの基本的な仕組みはBehaviorRelayのようなObservableから流れてくるイベントを、別の場所でsubscribeすることでそのイベントを受け取るというものです。

RelayにはPublishRelayとBehaviorRelayがあって、その違いはBehaviorRelayは初期値や現在値を持っており、PublishRelayは持ってません。

今回で言えば、『Firestoreからデータを取ってきてそれをoldStringsにappendしたという変更』をこのModelからViewModelへ現在値oldStringsと一緒にイベントとして流しています。



そして次はそのイベントを受け取るFirebaseDataViewModelです。

class FirestoreDataViewModel {
    
    let firestoreDataModel = FirestoreDataModel()
    
    var texts: BehaviorRelay<[String]>
    var disposeBag = DisposeBag()
    
    init() {
        firestoreDataModel.get()
        texts = BehaviorRelay(value: [])
        firestoreDataModel.strings.bind(to: texts).disposed(by: disposeBag)
    }
    
}

先ほどのfirestoreDataModel内のBehaviorRelayであるstringsを、自クラス内のBehaviorRelayであるtextsにbindしています。
これでstringsの変更がtextsに反映されるようになりました。


 
最後にそのデータを表示するためのTableViewController。

class TableViewController: UITableViewController {
    
    let firestoreDataViewModel = FirestoreDataViewModel()
    
    var texts = [String]()
    
    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        firestoreDataViewModel.texts
            .subscribe(onNext: { [weak self] texts in
                self?.texts = texts
                self?.tableView.reloadData()
        }).disposed(by: disposeBag)
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return texts.count
    }

    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = texts[indexPath.row]
        return cell
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 120
    }

}

ViewModel内のBehaviorRelayであるtextsからイベントが流れてきたら、それを受け取って、自クラス内のtexts配列に代入し、TableViewを更新しています。

これでこんな感じにTableViewにPostした文字列がリアルタイムに反映されるようになりました。

f:id:Rwkabms:20190421213858p:plain:w200:h450 f:id:Rwkabms:20190421214017p:plain:w460:h450

 
まだ完璧に理解したとは言い難い状況ではありますが、積極的に自分で使いながら慣れていきたいと思います。

大学生の就活OB訪問はMatcherを使いまくるべし

人脈ゼロの大学生こそMatcherでOB訪問

大学生が就活に向けてやることBEST3は

・自己分析
・SPI対策
・OB訪問

じゃないでしょうか?

大抵の大学生は就活に向けて、これらをやりまくりますよね。

僕は何だかんだ自己分析とSPI対策は全くやらずに就活を終えてしまったのですが、OB訪問に関しては一般的な大学生の平均OB訪問回数の倍以上は先輩方にお世話になったと思います。

実際のところ、就活目的が半分で残りの半分は凄い社会人の方達のお話を聞きたいという思いからでしたが。。。

ただOB訪問を実際に始めるまでは、そもそもそのやり方が分かりませんでした。

よく聞くのはサークルやゼミの先輩繋がりとか大学の卒業生繋がりでお話を聞かせてもらうという方法です。
ただ僕は一応サークルもゼミにも入っていましたが、そこまで先輩方との繋がりが深くなかったのでその方法は使えそうにありませんでした。

ある時、先輩方との食事会で、1人の先輩に「そこは上座だよ!」と言われた時に「そうなんですね!じゃあ失礼します!!」と一礼してそのまま上座に居座った僕が先輩と深い関係を築けるはずがありません。(別に生意気なワケじゃなく、天然が炸裂しただけです。)

そして、大学外の人脈も0である僕にとってOB訪問は厳しいだろうと諦めていました。

ただ、前にブログに書いた長期インターン先で出会った意識が高くバリバリ就活に向けて行動していた大学生たちが、彼らが使っているというめちゃめちゃ便利なアプリを教えてくれました。

www.yashinka-engineer.blog

それが『Matcher』です!

MatcherはOB訪問という目的のもとに大学生と社会人をマッチングさせるアプリです。

Matcherは社会人(内定者含む)と大学生の2つにユーザが分かれています。

社会人の方が「就活の悩み聞きます!」や「〇〇業界に興味がある方、相談のります!」みたいな内容を投稿をしており、それに対して大学生がお話を聞くために申し込むという仕組みになっています。

僕は内定者の方や人材関係の方、エンジニアさん、起業家さん、とある企業の社長さんなど様々な業界、職種の方々にお話を聞きに行きまくりました。

就活相談の時もあれば、その業界に関するリアルな話、起業についての話など様々な話を聞かせてもらいました。

そこで出会った方々の何人かとは今だにFacebookなどで交流があったりします。

時には手当たり次第、申し込みすぎていざ会ってみると「あれ、僕は何を聞くためにこの人に会いに来たんだっけ?」ということすらありました。
僕のようにバカみたいにノープランで申し込むのはその方にも失礼なので、やめときましょう。

でも基本的にMatcherに登録している社会人の方々は学生を助けたいという思いからボランティア精神でやられている方が多いので、くだらない悩みかもしれないと自分では思っていても皆さんとても真摯に対応してくださいます。

正直、Matcherには凄い人がめちゃめちゃいるのでOB訪問という目的のためだけに使うのはもったいないとさえ思います。
就活という狭い視点ではなく、人生のアドバイスをもらうためにMatcherを有効活用すべきだと感じます。

現在の僕は就活生ではなくなったのですが、割と登録されている社会人の方々はそこらへん気にせずに「学生の悩み聞くよ〜」的なスタンスの方が多いように思うので、これからもちょこちょこMatcherを使ってお話聞きに行こうと思っています。

ちなみに内定をもらった大学生は学生ユーザから社会人(内定者)ユーザに変更できます。つまり、相談を受ける側になれるということです。

僕くらい小物になると、内定者という立場を利用して後輩たちにドヤ顔で就活を語りたいという欲望に時々襲われるのですが、それをグッとこらえて現在も学生ユーザとして凄い人にお話を聞く機会を虎視眈々と狙っています。

ひと昔前だったら、大学内には自分と同じろくでもない友達しかいない僕のような学生にはOB訪問の機会なんて全くなかったと思います。

それが人脈0でもこのようにアプリを通して、社会人の方々と出会い相談できる環境があるというのはとても恵まれていることですし、これを利用しない手はありません。


僕と同じ人脈0の大学生たちよ、案ずるな。君に人脈など必要ない、Matcherさえあれば。
朝5時にこのブログ書いているので、テンションが若干おかしいですがこれにて失礼します。