EduTalk

教育に関するテクノロジーやスタートアップ、考えたことについて発信中。

流行の兆しを見せるフィリピン留学からカナダやオーストラリアへのプログラミング留学、海外就職という流れ

f:id:atsuhio:20140731052323j:plain

海外就職には大きなエネルギーが必要

マーケティングの世界では「キャズム」という有名な言葉があってほとんどのプロダクトはまずイノベーター、アーリーアダプターという新しい物が好きな人が使い始めて、そこからキャズムという大きな谷を超えてアーリーマジョリティ層以降の段階へ浸透し始めると言われています。(最近はこれが当てはまらないケースも多い。)このアーリーマジョリティ層へ行くことが出来ないままほとんどの製品は終わると言われています。

で、人生の選択にもキャズムみたいな大きな谷があると思うのですね。
ほとんどの人は毎日の生活をコンフォートゾーンと認識していて、そこから新しいことをするということの間には大きな谷があって乗り越えるのに大変大きなエネルギーが必要です。

で、こうした大きなエネルギーが必要なことの一つが海外就職かと思います。

フィリピン留学をステップにしてカナダやオーストラリアへ

最近はフィリピンへ語学留学をしてからオーストラリアやカナダ、ニュージーランドの専門学校、あるいは大学へ入りそのまま現地就職するという選択をする人が増えているようです。

ようです、と言っても統計的なデータがあるわけではないのですが、セブでも何人か留学後はカナダのバンクーバーでデザイン(あるいはプログラミング)を学んで出来ればそのまま就職したい、という方に会いました。看護師からプログラマーという大きな職業転換を狙っている方もいました。

セブにある留学生向けのフリーペーパーなどでもオーストラリアやバンクーバーにステップアップ留学しようというような広告が掲載されたりしています。

バンクーバーのWeb屋さんの会社Frogがやっているようなプログラミング学習スクールなどもこうした流行を捉えているようです。(あるいはこのスクールがこの流行を生んでいる可能性も高いですが)
school.frogagent.com

これってとても良いのではないかと個人的に思います。

なぜかというと、フィリピンに英語留学するにしても多くの人がそれを何のためにしているのか、というのが明確でないように感じる中、こうした方々は明確な目的意識を持っているからです。

当たり前ですが、英語を身につけて何がしたいのか明確な答えを持っている人の方が、なんとなく英語を身につけてグローバル人材になりたいです。という人よりもモチベーションを高く持って学習を続けられますよね。

また語学の習得とプログラミングやデザインの習得はどれも継続が重要という点で似通っています。語学留学で実際に英語を身につけて自身が付けば海外就職に繋がるレベルのプログラミングスキルやデザインスキルを身につけられる可能性も高いのではないでしょうか。

もう一点良いなと思うことは、こうした流れが一つ出来ることで最初に挙げたような海外就職するために必要だったパワーが大分減るんじゃないかと思うからです。

今までは、中々海外就職っていっても人それぞれな方法で海外で働いていたりしてプログラマになるとか、デザイナーになるという分かりやすい流れは提示されてなかったと思うのですね。

それがこうした明確な道のりが出てくることで、もっと多くの方が海外に出ることを身近に感じて行動に移すケースが増えると思うのです。

個人的にもこうした流れを作っていくことについて何か出来ないか考えようと思った次第です。

まとめ

フィリピン留学からステップアップしてプログラミング留学後に海外就職、という流れは最近出てきたものなのでロールモデルが増えるのはこれからかと思います。しかし、もしこれから語学留学を考えていたり、英語を身につけて海外就職したいということを考えている方がいたら是非、こうした流れがあるのだということも意識してみてはいかがでしょうか。またそうした方自身が今後海外就職を考えている方のロールモデルとなっていくと良いのではないでしょうか。


【宣伝】
オンライン英会話のリンガルボックスを企画、開発、運営しています。留学前にある程度英会話を身に付けたいという方や、英語学習のペース作りをしたいという方は是非ご覧になってください。

ja.lingualbox.com

海外ノマドをしたい方に台湾・台中は現状あまりオススメ出来ない理由

f:id:atsuhio:20160528204006p:plain

台湾・台中市で2ヶ月間ノマドをしていました

僕は普段セブに滞在しているのですが、ちょっとしたきっかけがあって昨年9月10月の2ヶ月間を台中でノマドをしていました。
台中がどこにあるかというと、名前の通り台湾の中で真ん中あたりに位置してます。北の台北、南の高雄に次ぐ台北第三の都市です。

なぜこの台中でノマドすることを僕が選んだかというと、

1. 台北は短期滞在するには生活費が割高
2. 高雄は暑そう
3. 台中は台湾人自身が台湾の中で一番住みたい都市として選んでいる
(最近もCNNでも台中が台湾で一番住みやすい理由という記事が書かれたようです。下記リンク)

edition.cnn.com

という3つの理由があったからです。

実際に住みやすい台中市

実際、台中に行ってみたのですがかなり住みやすい場所だなぁというのが感想です。

個人的に思う台中が住みやすい理由は、

1. 人口がそんなに多くないため、道が混んでいない。
2. しかし、ある程度発展していて美味しいレストランもおしゃれなカフェも大量にある。
3. 家賃が台北と比較すれば大幅に安い。(短期滞在なら半額)
4. 大きな公園が多く緑が多い。

といったものが挙げられます。

また小さな都市ではありますが、地域の住民向けのイベントも毎週のように開催しており僕が滞在してる時は
世界でも最大規模のジャズのフェスティバルが開催されていてかなり楽しめました。

台湾のウユニ塩湖と呼ばれている高美湿地があったり、日月潭も近かったりと観光名所があるのも魅力です。

また行く前に台湾のコワーキングスペースについても調べたのですが、台中市にはコワーキングスペースが2つあり
ノマド向け環境が整ってそうな印象がありました。

10 great co-working spaces in Taiwan

それでも台中市ノマド向けではない理由

それでも個人的に台中がノマドをしたい人にはあまりオススメ出来ないな、と思う理由は1つです。

1. 海外からのノマドワーカーがほぼいない。

上述の通り、台中市にはコワーキングスペースが2つあり僕は2つとも見に行ったのですが1つ目のコワーキングスペースも2つ目のコワーキングスペースも外国人はゼロでした。尚且つどちらのコワーキングスペースも普段からそこにいるノマドな人達が4,5人しかいない。という状態です。

つまり話されている言語は中国語のみかつその4,5人で小さなコミュニティが出来てしまっている状態でした。もちろん英語を話せる人はいるのでその人とは話すのですが、他の人は英語がぜんぜん話せなかったりします。

まあそんな中でも台湾人の友達を作ったりはもちろん出来るのですが、基本的にビジネス的な話をするとかそんなのはゼロなので他の人がやっているスタートアップの話やビジネスの話を聞いて刺激を受けるとかは全くないのです。

Meetup.comのイベントに参加したりもしましたが、台中市にいる外国人は英語の先生ばかりで上記と同様刺激的な話は全然ない状態でした。

よく言われるように、台湾では日本人はモテるし、日本への好感度が高いのですぐ仲良くなれたりはするので、それだけでも満足
という方はいいのですが海外ノマドの人達が求めているものとはちょっと違うのかなというのが最終印象でした。

語学留学をしたり、別に特にビジネス面の刺激は求めてないって方にはとても良い場所だと思うのでそうした方にはオススメしたいと思います。

ビジネス的刺激を受けたいノマドなら台北がオススメ?

逆に台北には2日ほどしか滞在しませんでしたがBufferのグロースハッカーをしている人と出会って話をして大きな刺激を受けられたので次行くならやはり台北かなと考えてます。
(台北はほとんどの賃貸で最低でも6ヶ月からじゃないと借りられず、それより短期のところはものすごい割高なのが問題ですが。。)

台湾で海外ノマドしたいという方の参考になれば幸いです。

【宣伝】
オンライン英会話のリンガルボックスは僕が企画、開発、運営まで全て行っているWebサービスです。英語を身につけたい方、ノマドしながらどんなサービスを運営しているか気になる方は是非ご覧になってください。

ja.lingualbox.com

フィリピンへ短期英語留学するなら日本人が居ない語学学校を選ぶのもいいかも

f:id:atsuhio:20120213132825j:plain

僕は2011年の11月からかれこれ4年半の間セブを拠点にしているのですが、元々なぜフィリピンに来たかというとTOEFLを語学学校で勉強するためでした。

フィリピン留学をする4年ほど前にTOEICで935点を取っていてそれからも通勤、退勤電車、自宅でオンライン英会話をしたりと英語は勉強し続けていたので留学時点で英語自体は上級レベルでした。

そんなわけで、留学初日から「もう英語喋れるのになんで語学学校来たの?」と先生に言われてしまう状態で実際TOEFLの勉強には授業は役立ちませんでした。

ただ一つ良かったと思うのは、日本人が全くいない学校に入ったことです。僕の入った学校は校長がドイツ人で、生徒はほとんど全員がヨーロッパ(ドイツ、チェコ、スイス、フランス、スペイン、ロシア、トルコなど)からで一部がアジアからというような生徒構成でした。(写真に写っているのは先生、トルコ、スイス、チェコからの生徒)

日本語ではなく英語だけを使う必要がある。

元々、それを目的にしていたので当たり前ですが、外国人だらけの中に行けば日本語は全く使わない状態になります。
僕の友人は日本人だらけの学校に行って、日本人とはなるべくかかわらないようにしている、と話していましたが実際それは結構精神的に強さがないと中々出来ないことかと思います。

僕が行った学校は先程伝えた通り日本人がゼロだったので僕も、留学中から何ヶ月もの間例えば親と話すとか、日本から友達が来ていた時を除けば、英語だけで生活していました。

授業だけで言うならマンツーマンで長く受けるようなところでも1日8時間ですが、外国人だらけのところで外国人とだけ過ごす環境ならこれの1.5倍くらいまで英語を使う時間は伸びます。また当たり前ですが、上手くコミュニケーションが取れるように英語をもっと勉強しようという気になります。

留学が終わってもモチベーションを維持することが重要

国際交流メインで外国人の多い学校に行ったところで見せかけだけの交流しか出来ないから無意味みたいな話があったりするのですが個人的には本当にそうなの?と思ってたりします。

実際に英語でコミュニケーションを取った経験や、英語が通じず悔しさを感じる経験が英語のモチベーション維持に
役立った個人的経験があるからです。

先生との関係は留学期間だけで終わってしまいますが、留学で出会った友人との関係はその後も続く場合が多いと思います。
僕はそんなに人付き合いが良いほうではないですがそれでも留学期間中に出会った人たちとは今でもやり取りが続いているし、1人は親友となっています。

英語学習に関してちょっと不都合な真実を言ってしまうと、英語学習では何を学習したかとか、どうやって学習したかよりはいかに続けるかの方が大事です。継続して学習をした人はすべからく英語が話せるようになるし、継続しなかった人は身につきません。

英語留学は結構期間が長いので英語に難があっても結構仲良くなる友達は作れるはずです。
そうして出来た友達とはまた会おうと言う話になるでしょうし、それが英語のモチベーションに繋がってくるでしょう。

こうした点で言うと、長期留学で一気に身につけようと言う方は日本人に併せた教材を使ったレッスンのメリットが他のメリットを上回るかもしれないですが、2ヶ月にみたいないような短期留学を選んだのであればその後のことも考えて外国人だらけのところに飛び込むのもいいんじゃないかと思います。

日本人の居ない学校の探し方

さて、そうはいってもフィリピンに居る学校はほとんどが韓国経営か日本経営だしどう見つければいいの、と思うかと思います。
ここで個別の学校を書いてしまってその学校が日本人だらけになるのは避けたいので具体名は書かないですが僕の場合は下記のような方法で学校を探しました。

1. 英語で学校を検索して調べる
2. サイトを見てみて日本語訳がないか調べる。
3. 念のため日本の留学エージェントのサイトを見てその学校がないか調べる。

どこにも掲載のない学校で良さそうなところにコンタクトを取る。

まとめ

いかがだったでしょうか?自分はそんなに意思が強くないから日本人ばかりのところにいたら日本語ばかり話してしまうかも、という方や将来的にも繋がっていられる外国人の友人を作りたいという方は是非試してみてください。


留学前に英語をある程度身につけたい方、フィリピン人との英会話を試してみたいという方はオンライン英会話のリンガルボックスも是非試してみてください。

ja.lingualbox.com

10年先の未来は既に始まっている

昨日ですがHacker News上でBBCの'Foxconn replaces '60,000 factory workers with robots'という記事が大きく注目を集めていました。

www.bbc.com

日本語だと、こちらの記事が分かりやすいです。
iPhone製造のFoxconn、6万人の労働力に大ナタ、ロボットが人間に取って代わる - THE BRIDGE(ザ・ブリッジ)

結構前から、10年後に無くなる職業とかそういう記事が結構出てきたものの「そうは言ってもまだ先だよね」、とか「これ本当なの?」と実感を伴わなかった方が多いのでしょうか?

オックスフォード大学が認定 あと10年で「消える職業」「なくなる仕事」702業種を徹底調査してわかった

しかし、既にこうした記事で出てくるような労働力の置き換えというのは始まっています。
BBCの記事では、ロボットが置き換えたのは繰り返しの多い単純な作業であり人間はもっと高度な作業を行うようにした。総合的な人員数は将来的に渡ってはそれほど変わらないというようなことを言っているのですがこれは現状の反発を抑えるために言っていることに過ぎない気がします。11万人中6万人をロボットで置き換えてその6万人分の高度な仕事を作り出すには単純化すると現在の2.2倍の仕事がないといけません。(代替後の高度作業人員数は5万人でそれを11万人にするため)。

Foxconnには140万人の労働者がいるのでそのうち6万人というのは少なそうですが、今後全ての工場でこの流れがおきます。

先日The Economistで中国での都市と地方の収入格差が減りつつあるという記事がありました。
Up on the farm | The Economist

今後ますます地方の収入が上がりFoxconn及び他の工場にとって人間を雇用するよりもロボットを雇用する方がメリットが高い状況がどんどん出てくるということです。

またアメリカのパートタイムの最低時給が15ドルになれば、マクドナルドは人間の代わりに3万5000ドルのロボットアームを採用するだろうという元マクドナルドCEOのコメントも出ているわけです。

ここで考えるべきは今後ロボットの活用が更に増えることによりロボット自体の価格が下がるのであれば、最低時給15ドルどころか9ドルや10ドルでもロボットを採用するほうがコストメリットがある状態になるということです。
そして企業は激しいコスト競争に晒されているので全ての企業はその流れに進むでしょう。

The Economistではフィリピンのコールセンター産業に関しても以前に記事がありました。
フィリピンのコールセンターはアメリカの企業のカスタマーサポートを請け負っているが、その殆どは単純作業のためこれは今後AIに取って代わられるだろうという話です。

The end of the line | The Economist

この記事でフィリピンが取り上げられているのはフィリピンが世界の24%のシェアを占めるBPO大国であるからですが、
日本にもコールセンターはたくさんあります。大連やフィリピンのセブ、マニラにも日本の顧客サポートを行うコールセンターはあります。こうしたコールセンターもどんどんAIに置き換えられるでしょう。

またこれもEconomistの記事ですが、外科手術でさえもコンピュータに置き換わっていくかもしれないという記事がありました。
Will your surgeon be a robot? | The Economist

こうして、色々な産業を見ていくとより実感を持って多くの職業はそれほど遠くない将来に置き換えられるだろうとうことが分かります。

置き換えが行われることを前提にどうすれば良いかを書いた記事は結構あるのでそれについてここでは書かないですが、この記事で言いたかったことは「10年先ってまだ先だよね」とあまり危機感を持ってなかったという方はすでにその未来は始まっているのだということを認識して今から対策をしていくべきということです。

こうした未来が来ることによって人は自分の好きなことを仕事に出来るようになるだろうって話もあるのですが、これは自分でモノを考えて動くことが出来る人に限られてくるんじゃないかなと思います。例えば写真が好きな人ってたくさんいますが同じようなプロカメラマンが何十万人も居てもしょうがないわけです。何かそこに(競争力のある)付加価値を提供することで始めて上手くいくような状況が生まれると思います。この付加価値を付けるのは考える訓練をしていかないと中々難しいんじゃないかということです。

まとめ

長々と書きましたが、結論としてはFoxconnのロボットでの置き換えがいきなり半分以上の人員に対して行われたことに驚いたということです笑 そして、それがたった10年という短いスパンで多くの職業の置き換えがされるという予測に現実味を与えたということです。

【宣伝】
オンライン英会話のリンガルボックスは僕が企画、開発、運営まで全て行っているWebサービスです。英語を身につけたい方、実際独学でどんなサービスを運営出来てるのか気になる方は是非ご覧になって下さい。

ja.lingualbox.com

自分が作りたいWebサービスの見つけ方

f:id:atsuhio:20160526161704p:plain

さて、昨日のブログ記事でプログラミングで挫折しないためには自分が何を作りたいのかを明確にすることが重要という記事を書きました。

atsuhiro.hatenablog.com


しかし、「作りたいサービスとか特にないしどうすればいいの」と面倒くさくなってしまう方も多くいるでしょう。

そこで今回は、そんな時にどうすればいいのかの方法を挙げてみます。

1.あなたがスタートアップ志向の方の場合

スタートアップ志向の方の場合、小さなツールを作るよりは継続的に拡大していけるようなサービスを作りたいと考えるでしょう。

それならやるべきことは自分の興味の持てる分野をまずは意識してみましょう。またはこれまでの自分の経験も重要です。これまでBtoBのサービスに関わる機会が多く社会人経験が長い方ならBtoBのサービスがいいかもしれません。社会人経験が短くて若いならBtoBでもBtoCでもどちらでもいいかと思います。

現在の僕の場合、興味の持てる分野は大きく分けて、料理、旅行、教育の3つなので、この3つの分野で新しいことが出来ないかを考えます。

業界ごとのマーケット規模なんかを考える方もいるかと思いますが、対してFinTechに興味ないのにFinTechの会社を作ろうみたいなことになると興味が途中で無くなるのでやめた方がいいかと思います。

といってもリンガルボックスはまだ成功してないので説得力に欠けるかと思いますので、既に成功しているけんすうさんの記事を引用すると、

自分が得意なこと、自分とマッチしそうなもの、自分が根源的に欲しいと思うもの、というのをやったらいい気がします。

blog.livedoor.jp


そして、その自分の好きな分野、興味の継続する分野を絞ったら情報を収集しましょう。情報収集するならAngelListを使うのがオススメです。AngelListのStartup Jobsのページでは業界、資金調達段階、企業規模などでしぼり込めます。ここでシード段階やシリーズA段階のサービスを自分の興味のある業界で絞って見ていけば業界の傾向がつかめるはずです。最近の教育業界だとAI関連やVR関連、WebRTCを利用したサービスなどが増えてきてるなー、というようなことが分かるはずです。

例えば下記のように、「シリコンバレー、シード段階、教育」の3つで絞って検索すると、

f:id:atsuhio:20160527141847p:plain

55件の検索結果が出てきます。
f:id:atsuhio:20160527142101p:plain

シリコンバレーでこれから出てくるサービスをそのまま日本に持ってくるのもありだと思います。日本のスタートアップ業界で有名なサービスの結構な割合は海外のものをローカライズしたものだったりします。

後は、そうしたこれから出てきそうなサービス(シード段階)や既にある程度マーケットフィットが確認出来てるもの(シリーズA段階)に足し算、引き算、掛け算をして行けば自分の作りたいサービスが見えてくるはずです。

僕の場合は、次作るとしたら「小規模グループでの学習マーケットプレイス」かなー、とか「プロの料理人と一般料理愛好者」を結びつけるサービスかなーとかということを考えたりします。

料理に関して言えば最近はYouTubeのファウンダーだったスティーブ・チェンNomという食特化型のYouTubeみたいなサービスを始めていて個人的に興味を持ってみていたりします。

2.小さなツールを作りたいという場合

継続的なサービスよりも、特定の人に気に入ってもらえるようなツールや小規模なサービスを作りたいという方もいるでしょう。(実はこっちの考え方からスタートしているスタートアップのほうが大きく成長してたりします。)

この場合だったら何よりも自分が面倒だな、嫌だなと思っていることや普段からこういうのあればいいのにと思うことを周りから発見するのが大事だと思います。

それが現状思い当たらないという方や、考えられないという場合は、まだ引き出しが少ないということだと思うので1の場合と同様にどんなサービスが具体的に現状あるのかというのを調べてみて何かきっかけがあった時に、その自分の持っている知識ときっかけが合わさるような状態にしましょう。

1の中では簡単に書きましたが、世の中にあるほぼ全てのサービスというのは既にあるものに対する引き算、足し算、掛け算で出来ています。それをするためには土台になる知識があった方がいいということですね。調べてる中で自分がほしいなと思っているものが実は既にあった、と気づいたりするかもしれません。

まとめ

総じていえば、新しいサービスを作るにはアンテナを張っておくことが重要だと思います。
僕の場合は既にリンガルボックスを運営してはいますが、例えばEdSurgeの記事や、TechCrunchのUS版の記事、HackerNewsの主要記事などを追いかけて業界の最新トレンドが常に頭のなかにある状態にしています。

もちろん、それだけで上手くいくとはいえないと思いますが意識しないで毎日過ごすよりは自分の作りたいものが見えてくる可能性は格段に高まるのかなと思います。

プログラミングやりたいけど、特に作りたいものが思い浮かばないなぁ、という方の参考になれば嬉しいです。


オンライン英会話のリンガルボックスは僕が企画、開発、運営まで全て行っているWebサービスです。英語を身につけたい方、実際独学でどんなサービスを運営出来てるのか気になる方は是非ご覧になって下さい。

ja.lingualbox.com

プログラミングで挫折しないために必要なたった一つの重要なこと

f:id:atsuhio:20160525214941j:plain

「プログラミングを始めてみたものの、しばらくしたら分からなくなって挫折した。」

こういう経験を持っている方は結構多いんじゃないかと思います。

今では、日本ならドットインストールProgate、海外ならCodecademyやCode Schoolなどプログラミングをインタラクティブに学べるサービスは多くありますが、こうしたサイトを利用しても個人的にはほとんど問題は解決してないなという風に感じています。

個人的な挫折経験

僕も実際のところ何度もプログラミングに挫折しています。
僕の場合は高校を卒業して、これからはコンピュータの時代だと思い早稲田大学のCS学科に入りました。(確か第二期生)
しかし、1年で転部して文学部に入り直しました。

転部した理由の一つは、理系の頭でビジネスが分かる人になれば最強だというようなことを考えたからですがもう一つ大きな理由は、
Javaプログラミングでいきなり挫折してプログラミングはあまり向いてないな、と考えたためです。

その後、大学3年時に再度やはりプログラミングは重要だと再認識してRubyJavaを再度学んでRuby Quizを解いてみたりしていたものの就活時にまた挫折することになります。

今は上場してアプリ開発をしていて、当時から現在まで就活生からの人気も高いあるベンチャー企業(当時はスタートアップという呼び方はしなかった)での最終面接で、当時書いていたプログラミング関係のブログを見たCTOから「これでは使い物にならないね」と言われあっけなく落とされたのです。

また他のベンチャー企業でプログラマとして採用されたのですが、その企業でのインターン中に「あまりプログラムに夢中って感じじゃないし、まだスキルが足りないね」ということで有給インターンから無給インターンとして経験を積むことを指示されたりもしました。

その会社での最終的な職種選択時にプログラマと営業を選べたのですが、結局営業を選びプログラミングをしない期間が数年また積もることになります。この営業を選んだのも自分の頭では「営業は会社の中でしか経験出来ないけど、プログラミングは自分だけでも勉強できるから営業をまずは身につけよう」ということを思っていたのですが、今思うと何度も挫折したためにプログラミングから逃げた部分もあったのかなと思います。

そんなこんなで25歳まではプログラミングを何度も学んでみては途中で挫折するということを繰り返したわけです。

プログラミングが身に付いたのは作りたいサービスがあったから

ですが、現在ではReact.jsとFluxを利用してフロントエンドを開発し、サーバーサイドはRuby on RailsAPIを開発、サーバー構築も全て自分で行う。という風にそれなりに開発出来るといえるぐらいにはなっています。

で、なぜそういう状態に持ってこれたかというと自社サービスであるリンガルボックスを開発したからという一点に尽きます。

リンガルボックスは2012年2月頃からRubyを再度勉強し始めて、8月に公開しました。Rubyは就活の時以降触ってないのでほとんど一から学んだ形ですね。

この時ももちろん途中で挫折しそうになったりはしました。独学だったのでRuby on Railsの構造やMVCの概念を理解するのにかなり時間がかかったし、当時のPayPalサンドボックス(開発者向け環境)は酷い出来で決済を導入するのにも大分時間がかかりました。

それでもどうにかこうにかリリースまで挫折せずにもっていけたのは上記の繰り返しですが作りたいサービスがあったからです。

余談ですが初期のリンガルボックスを開発する上ではRailsCastsがかなり役に立ちました。いまだとGoRailsというサービスがいいかと思いますのでこれからサービスを作るという方は是非使ってみてください。

こうした経験から、これからプログラミングを始めようという方にはプログラミング学習サイトを使ってみるよりもまずは自分が何を作りたいのかということを明確にするのがいいのかなと思います。

作りたいサービスがあることのもう一つのメリット

作りたいサービスがあるということのメリットは挫折するのを防ぐという以外にも大きなメリットがあります。自分に何が必要かが明確になるということです。

例えばリンガルボックスでは現在チャット機能を開発しています。チャット機能を作成する上で僕は現在BEMというCSSの命名パターンを学んでいます。またレイアウトは新たに学んだFlexboxを駆使して作っています。

なぜBEMを勉強したのかというと、今後サービスの規模が大きくなるにつれてCSSがより整理されていることが重要になると考えたためです。以前にもBEMの概念は知っていたし少し学びましたが今回必要に駆られたことで初めてちゃんと身に付いてきていると感じます。

Flexboxについても同様です。Flexboxについては以前Treehouseというプログラミング学習サイトの動画や課題は全てこなしたのですが恥ずかしながら全く身につきませんでした。ただ今回チャットのレイアウトをデザインするにあたってFlexboxが便利そうだと判断したから再度学び今度は身に付いてきています。

簡単にいうと、挫折するような学習の流れでは、

1. 学習サイトや本を上から順番に読む →
2. 覚えることが多すぎて途中で分からなくなる。 →
3. 挫折したと感じて放棄してしまう。

ということが起こるのに対して、作りたいもの起点なら

1. 作りたいものがある。→
2. その作りたいものを実現するために必要なことだけ学ぶ。→
3. 学ぶ分量が少ないのでちゃんと理解出来る。

という風な流れが出来るのです。

また学習サイトなんかだと、学習した割合がパーセンテージ表示されていてちゃんと理解してなくても次から次へと進みたくなってしまったりすることも途中で分からなくなって挫折する一因かと思います。

まとめ

結論を言うと、プログラミングをこれから始めるあるいは前に挫折したけどまたやろうかなという方はまず作りたいサービスを考えるということから始めましょう。また作るサービスを考えたら学習サイトや参考書を一から全部やろうとしたりせずに、実現したいことは何かそれをするには何を学べばいいのかを意識して、そこだけを学習サービスや参考書で学んでいくことが重要です。
参考にしていただけると嬉しいです。


そもそも作りたいサービスはどう見つけるの?という方のために関連記事を書きました。
atsuhiro.hatenablog.com



オンライン英会話のリンガルボックスは現在も絶賛運営中です。英語を身に付けたいという方や、独学でどんなWebサービスが作れたのか気になる方は是非ご覧になってください。

リンガルボックスja.lingualbox.com

Rails APIとEmber CLIでユーザー登録、ログインを実装する - パート4

f:id:atsuhio:20150411183835j:plain
このシリーズではRails APIとEmber CLIを利用してユーザー登録、ログインを実装していきます。

前回までで、ユーザーがログイン出来るようになり、シークレットページにユーザーの情報が表示されるところまでを実装しました。今回はログアウトとユーザー登録を実装します。

ログアウトを実装する。

まずはログアウトを実装します。ログアウトの流れは下記のとおりです。

  1. ユーザーがsecretページでlogoutボタンをクリックして、logoutアクションを呼び出す。
  2. Secretコントローラー内のlogoutアクションはAuthサービスのlogout()メソッドを呼び出す。
  3. Auth内のlogoutメソッドは、AuthのuserId、authTokenプロパティを消し、stateが"logged-out"へと変更される。
  4. loginコントローラーのlogoutSucceededメソッドが呼び出され、indexへとリダイレクトされる。

実際に実装していきます。

まずは、Secretテンプレートにlogoutボタンを設置します。

auth-test-web/app/templates/secret.hbs
...
<button {{action 'logout'}} >ログアウト</button>



Secretコントローラーにlogoutアクションを設置します。

export default Ember.Controller.extend({
  ..
  actions: {
    logout: function() {
      var auth = this.get('auth');
      auth.logout();
    }
  }
});



次にAuthサービス内のlogout関数を実装します。

export default Ember.Service.extend({
....
  logout: function() {
    this.setProperties({
      authToken: null,
      userId: null,
      state: "logged-out"
    });
    this.sendToApp('logoutSucceeded');
  },
......
});



loginコントローラー内のlogoutSucceededアクションを実装します。

export default Ember.Controller.extend({
  actions: {
    ....
    logoutSucceeded: function() {
      this.transitionToRoute('index');
    }
  }
});



これで、実際にログアウトを行うと、セッション情報が消えてindexページへリダイレクトされます。

ユーザー登録を実装する。

最後にユーザー登録を実装していきます。

まずは、RailsAPI側でUsersControllerのcreateメソッドを実装します。

class Api::V1::UsersController < ApplicationController
  ...
  def create
    user = User.new(user_params)
    if user.save
      render json: { message: "Successfully created a user" }
    else
      render json: { message: "Signup failed" }, status: 403
    end
  end
  ...
end



次に、Ember CLI側で、signupテンプレートを編集し、signupコントローラーにsignupアクションを登録します。

/auth-test-web/app/templates/signup.hbs
<form method="post" {{action "signup" on="submit"}}>
  <div class="form-group">{{input class="form-control" value=name type="text" placeholder="name"}}</div>
  <div class="form-group">{{input class="form-control" value=email type="text" placeholder="Email"}}</div>
  <div class="form-group">{{input class="form-control" value=password type="password" placeholder="Password"}}</div>
  <div class="form-group">{{input class="btn btn-default" value="Signup" type="submit"}}</div>
</form>


/auth-test-web/app/controllers/signup.js
import Ember from 'ember';
import config from 'auth-test-web/config/environment';
import { raw as icAjaxRaw } from 'ic-ajax';

export default Ember.Controller.extend({
  actions: {
    signup: function() {
      var _this = this;
      var data = this.getProperties('name', 'email', 'password');
      var auth = this.get('auth');
      icAjaxRaw(config.host + '/' + config.namespace + '/users/create', {
        type: 'post',
        data: {
          user: {
            name: data.name,
            email: data.email,
            password: data.password
          }
        }
      }).then(function(result) {
        _this.setProperties({
          name: null,
          email: null,
          password: null
        })
        auth.login(data);
      }, function(err) {
        console.log(err);
        _this.set('password', null);
      });
    }
  }
});



ここでは、最初にフォームに入力されたデータを基に、ユーザーを作成し無事ユーザーが作成された場合、同一のフォームデータを利用してログインを行うようにしています。実際に、ユーザー登録を試してみてください。ユーザーが作成され、Secretページへリダイレクトされるはずです。

これで、ユーザー登録、ログイン、ログアウトを実装することが出来ました。時間があれば、パート5以降でFacebook Loginのチュートリアルも公開出来ればと思っています。

実際のコードは、下記のページに上がってますので良かったらご覧下さい。

auth-test-web:
https://github.com/hiro1107/auth-test-web

auth_test_api:
https://github.com/hiro1107/auth_test_api

リンガルボックスでは現在CTOを募集しています。

リンガルボックスでは、オンライン英会話スクール「リンガルボックス」を運営しています。既にオンライン英会話では上場しているレアジョブに、DMM英会話、ラングリッチなど多数の会社がありますが、レアジョブの会員が3万人ほどで、日本だけでも語学学校に通う生徒数全体の中(500万人と言われています。)ではまだ小さな割合しか占めていないこと、まだ開拓の全く進んでいないブラジルやロシア、ヨーロッパなどの市場があること、オンライン英会話のサービス内容自体にもイノベーション余地があることなど、まだまだ可能性があると考えています。しかし、リンガルボックスの考えるビジョンを実現していくためには高い技術力が不可欠です。(こんなチュートリアルを書いていますが、代表は営業出身で技術力は全然高くないですw)
そうした訳で、現在リンガルボックスではCTO(Co-founder)を募集中です。

EdTech、Adaptive Learning、Single Page Application(リンガルボックスではEmber.jsを利用しています。)、Node.js、Socket.io、WebRTC、Ruby on RailsREST API、アプリ開発といったキーワードにピンときた方は是非hiro(at)lingualbox.comまでご連絡下さい。