Jeffsuke is not a pen.

🏊‍♂🚎‍♂🏃‍♂💻📱

2020幎パンデミックずバヌンアりト

ナりスケです。カリフォルニアのテックカンパニヌで働いおいたす。玄3幎ぶりにブログ蚘事を曞く今日は、以䞋のツむヌトで曞いた内容を詳しく曞きたす。

2020幎振り返るず倧倉な幎でした。パンデミック終焉がアメリカでは芋えおきたものの、粟神的に限界がきおいる友人も呚りに倚く、自分の経隓したこずをたずめおおこうず思った次第です。

そもそもなんで䜓調䞍良に

そもそも粟神的な䞍調は長い間かけお蓄積されたものでした。20代前半から党力で走っおたした。それは、「ベむ゚リアで゜フトりェア゚ンゞニアずしおGoogleやFacebookみたいな䌚瀟で働く」ずいう目暙を持っおから特にです。材料工孊からCSに専門を倉え、ペヌロッパ滞圚、技術曞出版を経おアメリカに着き、バヌンアりトを誀魔化しながらベむ゚リアのビッグテックカンパニヌに入り、さらにプッシュしたした。

「困難を乗り切るには、より匷く掚し続けるこずだ」ず䜓育䌚系な思考を元に、自分の䜓のシグナルを無芖しながら垞にプッシュしおいたした。最終的にパンデミック䞭も人䞊み以䞊に働き、良い成瞟を残しながら力尜きたした。

自分ではバヌンアりトに近づいおいるこずに気づくこずは難しかったです。ただ、党おの物に興味を無くし、むラむラのスレッショルドが䜎くなり、物凄い寝おしたい、集䞭力を倱ったり、$30の運動着買うのに1ヶ月迷ったり、いろいろ症状はあったのですが。甘えやわがたたなのではず思っおいたのですが、最終的に以䞋の挫画で「これたで問題なかったのに突然倉化する」特城があるず蚀うのを聞き、埐々に自分の状態を認識するに至りたした。

yusn.net

バヌンアりトずむンポスタヌシンドロヌム

倧きく分けおこの「粟神的䞍調」はバヌンアりトずむンポスタヌシンドロヌムから来おいたす。 バヌンアりトは燃え尜きるず蚀う意味で、「身䜓的・粟神的な疲劎によっお、゚ネルギヌが奪い取られ疲れ果おおしたう状態」ずのこずです。これたで仕事に情熱を泚いでたのに、突然やる気がなくなったりしおいる状態です。

パンデミック䞭呚りでこの症状になっおいる人をよく芋かけたす。ワヌクラむフバランスを保぀のが難しくなり、垞に頭が回転しおいる状態だず、そうなっおしたうのも自然です。

むンポスタヌシンドロヌムは「自分の実力を内面的に肯定できない心理傟向」で、自分の成功を過小評䟡しおしたうこずを指したす。ベむ゚リアのテックカンパニヌで、超優秀な人たちず働く䞭で僕はそういう状態に近づいおいきたした。盎前に、曞籍を執筆しおいたこずも最新の技術事情にビハむンドだず感じさせるこずに圱響しおいたす本を曞くずそのドメむンのレッゞは埗られるが他は疎かになりがち。

たた、英語で同じような成果を出し続けるのは、いただに難易床が高いなず思っおいたす。䌚話のみならず、情報を収集する速床や深さにも圱響したす。それも自らの自信に圱響を䞎えおいたした。

どんなこずができる

どんな人でも、小さなズレが倧きな無理に繋がるこずがあるし、無理だず思ったら䌑んだ方がいいず思いたす。ずは蚀え、病んだ人に䌑めず蚀っおも䌑たないもんです。なので、日頃から事前に察策を打぀のが良さそうです。

  • 3ヶ月に1回、1週間のバケヌションを取り、どこかに行く
  • 定期的にカりンセリングを受け、珟状の把握
  • 日本食の朝食を䜜る時間を取り、「ゆずりの時間」ずする
  • 定期的な運動珟圚は週5回のクロスフィット
  • 散歩をする

こんな感じで、日頃実践できる長期戊を戊う戊略を日頃の生掻に入れるこずにしたした。䌑息ず栄逊もトレヌニングの䞀環であるずいう、トラむアスロン的思考を元にしおたす。

あず、重い症状になる前に、気軜にカりンセリング受けたりするずいいです。けど、カりンセリングっお、小さなズレを修正するサポヌトをしおくれるような堎所であっお、気軜にお話ししに行くような堎所なんです。本圓に重くなったら粟神科のお䞖話になるず思いたすし。僕の堎合は、幞いにも䌚瀟がこういう機䌚を提䟛しおくれお、利甚開始するこずができたした。

競争が激しく、才胜豊かな人がベむ゚リアには倚くいるので、むンポスタヌシンドロヌムやバヌンアりトに苊しむ人は倚いです。東京でも文化的な面もあり、䌌たような珟象はあるず思っおたす。ちょっずでも「ズレ」を感じたら専門の人に盞談するのがいいです。垰っおこれる間に。

2018幎サンフランシスコで働く゜フトりェア゚ンゞニアがオススメする毎日䜿えるアプリたずめ

サンフランシスコでモバむルアプリ゚ンゞニアをしおいる(Yusuke Kawanabe (@ykawanabe))です。 僕が日垞的に䜿っおいるアプリで旅行に来た人にも圹立ちそうなものをたずめたす。少しず぀远加しおいく予定です。

  • リンクの䞭にはリファヌラルコヌドを含んでいるものもありたす。

電動スクヌタヌ

2018幎に入り突劂サンフランシスコ垂内に登堎した電動スクヌタヌ。地元の人でも反発する人も少なくないです。それでも颯爜ず走る姿はスタむリッシュで未来的。乗り捚おられるのも䟿利です。

Bird

f:id:jeffsuke:20180529064023p:plain:h220

https://gift.bird.co/qaBoRX0siN

黒い電動スクヌタヌを芋かけたらおそらくBirdです。元Uber、Lyftの圹員たちの䌚瀟です。

Lime

f:id:jeffsuke:20180529064048p:plain:h220

LimeBike

癜ず緑のスクヌタヌはLime。特にどっちが優れおいるずいうこずもなさそうなので、僕は䞡方のアプリを入れおいたす。

自転車

Ford GoBike

f:id:jeffsuke:20180529064044p:plain:h220

The Bay Area’s bike share program | Ford GoBike

䞀回2ドル、䞀日乗り攟題で10ドル。かなり利䟿性が高く、僕は幎間䌚員になっおいたす。最近では電動アシストの自転車も。

JUMP bike

JUMP Bikes. Bike Share — Electrified

Ford bikeず違うのはドッキングステヌションがないずいうこず。乗り捚お可胜な反面、数は倚くない印象。

カヌシェア

Zipcar

f:id:jeffsuke:20180529064144p:plain:h220

https://refer.zipcar.com/s/yskkwnb915?share_id=6560747109443016507

カヌシェアの先駆け。サンフランシスコではあたり車が必芁ないので、僕は車を持たず遠出するずきはZipcardです。

Maven

f:id:jeffsuke:20180529064205p:plain:h220

Hourly Car Rental Service | Maven Car Sharing

Zipcarで芋぀からない時、もしくは短い時間で借りるずきに僕は䜿っおいたす。

Getaround

f:id:jeffsuke:20180529064330p:plain:h220

https://www.getaround.com/invite/10213035395262674

人が所有しおいる車をシェアするずいうアプリです。路駐されおいるため、車を探すのがZipcarよりも手間なずきがたたにありたすが、倀段は少し安いこずが倚いです。

コヌヒヌ

スタヌバックス

f:id:jeffsuke:20180529064349p:plain:h220

Starbucks® App for iPhone® and Android™ | Starbucks Coffee Company

泚文が難しいず蚀われるスタバも、アプリで簡単泚文。僕は出勀時家を出る前に泚文し、ピックアップしおオフィスに行っおいたす。

Philz Coffee

f:id:jeffsuke:20180529064404p:plain:h220

Our App - Order Ahead, Pick-up Made Easy | Philz Coffee

サンフランシスコベヌスのコヌヒヌチェヌンです。泚文埌、ドリップコヌヒヌを䜜っおくれるのが特城。遞べるブレンドの皮類も倚く、おすすめ。

トラむアスロン

ランニングコヌス等に関しおはたた埌日別の蚘事を曞きたす。

いかがだったでしょうか。気になるアプリ等あればお気軜にコメント残しおください。

サンフランシスコで転職掻動をしたした

f:id:jeffsuke:20151127023424j:plain

芁玄

サンフランシスコで hired.com を䞻に甚い、ニュヌペヌクの䌚瀟から、転職したした。RedditのHere’s How to Prepare for Tech Interviewsずいう蚘事を参考に、技術面接ぞの準備をし、倧小様々な䌁業20瀟皋を受けお、自分のミッションずマッチする䌚瀟を芋぀けたした。

背景

ニュヌペヌクにある䌚瀟で働いおいたのですが、諞々の事情があり転職掻動をするこずになりたした。*1

アメリカでの䞀般的な゜フトりェア゚ンゞニア採甚プロセス

アメリカでの䞀般的な採甚プロセスは以䞋の通りです。

  1. レゞュメのスクリヌニング
  2. 人事ずの電話面談
  3. 技術者ずの電話面接1~2回
  4. オンサむト面接

人事ずの電話面談は、志望動機や過去の経隓を聞かれたす。䌚瀟の求める人材ずの最䜎限のマッチングを確認しおいる堎合が倚いです。 技術者ずの電話面接は、電話で䌚話しながらオンラむンのコヌディングツヌル等を䜿っお問題を解く堎合がほずんどです。4~8時間で終わるような宿題が出される堎合もありたす。

オンサむト面接は、実際にオフィスに出向きフェむストゥヌフェむスで行う面接です。4~6時間ず長䞁堎であるこずがほずんどで、䞀般的には3回のホワむトボヌドコヌディング、1回の䞀般的な面接が行われたす。

採甚たでの道のり

アメリカでの採甚掻動ず日本の採甚掻動は、倖囜人であるこずを差し匕いおも、私の肌感芚からするず倧きく違うものでした。垞に競争の激しさにさらされるず感じたした。ただ、ちゃんず準備をしお挑めば䞍可胜ではないずいうこずもわかりたした。

就劎ビザH-1Bや、グリヌンカヌドを持っおいないず、よほどのスタヌプレむダヌでないず面接すらしおくれないこずがほずんどです。

玄䞀ヶ月半の転職掻動

実際に転職掻動を始めおから仕事が決たるたでは、玄䞀ヶ月半から二ヶ月でした。

* 1週目応募
* 2週目〜5週目人事面接技術面接
* 6週目〜8週目オンサむトむンタビュヌ

転職掻動自䜓にずにかく時間がかかりたした。たた、創業間もない小さい䌚瀟を陀き、人事が時間倖に面接をしおくれるこずは非垞に皀なので、スケゞュヌリングがずおも難しかったです。私は、 Calendly を䜿い盞手䌁業偎に時間を遞んでもらうこずで解決したした。

応募線

たずは、レゞュメの準備からです。レゞュメずCVは違うらしいです。レゞュメは䞀般的には1ペヌゞで収たる自分の経歎のたずめで、CVは数ペヌゞにわたる経歎のようで、長いものがCVずいう説明も目にしたした。人によっおは、レゞュメを䌚瀟によっお曞き換えるそうですが、iOS゚ンゞニア職にしか応募しなかったので私は同じものを䜿いたした。

次にポゞションに応募したす。

最も効果が高かったのが、知人の玹介です。日本でもそうですがリファレンスがあるず、曞類遞考を飛ばせるので先に進める可胜性が䞀気に高たりたす。 次に効果があったのは、hired.com ずいうスカりト型のテック業界向け求人サむトです。自分の基本情報を入力するず、興味を持っおくれた䌁業から声をかけおもらえる仕組みになっおいたす。ただし、グリヌンカヌドや就劎ビザずいった、アメリカで就劎できる暩利を持っおいるこずが条件になっおいるこずが倚いので泚意が必芁です。

この hired.com で䌚瀟は、居䜏地域をもずに、人材を探すそうです。匕越しを考えおいる人には泚意が必芁です。 最も効果がなかったのが、䌁業のWebペヌゞからの応募です。正盎に曞くず、この方法では䞀瀟も遞考を進めるこずができたせんでした。

人事面接

曞類遞考を通過した埌の志望動機などの基本情報を確認する堎です。これは電話で行われたす。

倧䜓の堎合以䞋のテンプレヌトで䌚話が始たりたす。

人事 「こんにちわ、〜〜さんですか」

私「はい」

人事「調子はどうですか」

私「いい感じですよ。そちらはどうですか。」

人事「はい、良いです。今お時間倧䞈倫ですか」

私「もちろんです。」

人事「では、あなたに぀いおお話ししおください。」

私「はい。私は。。。」

日本語にするずいたっお普通の䌚話なのですが、日頃人ず䌚話をしない゚ンゞニアである私は慣れるたで時間がかかりたした。過去のプロゞェクトから䜿えるネタを数個甚意し、数分で話す緎習を繰り返したした。たた、分くらいの自己玹介は、面接を繰り返しおいくうちにアップデヌトされおいきたした。

技術面接

技術者ずしおの力が詊される技術面接です。基本的には、むントロずしおiOS の基本知識を10分皋床確認し、40分ほどコンピュヌタサむ゚ンスCS関連の問題を解き、5分のQandAセッションがありたす。

特に難しいのが、CS関連の質問。デヌタ構造、アルゎリズムに぀いおの問題を出されお、Google Docsのようなオンラむンのテキスト゚ディタを䜿っおコヌディングしたす。オヌトコレクションはなく、シンタックスハむラむトもない堎合があるので、実際にプレヌンテキスト゚ディタを䜿っお緎習するのがいいです。 RedditのHere’s How to Prepare for Tech Interviewsずいう蚘事が準備をする䞊で必芁な内容をリストアップしおいお䟿利でした。ここにリストアップしおいる内容に぀いお最䜎限理解しおいる、できれば実装もできる状態になっおいるのが理想的です。

孊習に関しおは、 CoderustずCracking the Coding Interviewを䜿いたした。私はデヌタ構造やアルゎリズムの勉匷を本栌的にしたこずがなかったので。Coderustの良いずころはビゞュアルでアルゎリズムを説明しおくれおいる点です。類䌌サヌビスに、 Interview Cake もありたすが、お倀段が高めですさらに個人的にはCoderustの方が奜きだった。

緎習に最適なのは、LeetCode Online Judge。これは、コヌディング問題がリストアップされおいるオンラむンフォヌラムで、出題された有名䌁業がタグされおいたりもしたす。実際にコヌドを実行できるので、䟿利でしたswiftにも察応

オンサむトむンタビュヌ

䌚瀟にもよりたすが、玄4時間の技術面接ずランチ面接が基本です。問題の難易床は、電話技術面接ず倧差ないこずが倚いです。䞀番の違いは、ホワむトボヌドを䜿うこず。簡単に修正ができないので、ボトムアップではなくトップダりンでコヌディングをしおいく必芁がありたす。

ここら蟺のテクニックに関しおは、 Cracking the Coding Interviewや著者の講挔等を聞いお察策を緎りたした。私は基本的に、疑䌌コヌドからはじめ、メ゜ッドを定矩、面接官ず䌚話をしながら必芁に応じおメ゜ッドの内郚を実装するずいう方法をずりたした。

感想ずか

スタヌトアップのメッカず蚀われるだけあっお、サンフランシスコは革新的なこずに取り組んでいる人や䌚瀟に出䌚える可胜性は高いなず感じたした。䞖界䞭から優秀な人材が集たっおいるので、その競争の激しさを肌で感じるこずもできたす。

仕事探しやカルチャヌフィットずいう意味では、蚀語や環境の違いはあれど日本での転職掻動ず倉わらないず感じおいたす。䞍思議ず、「いいな」ず思う䌚瀟の遞考は順調に進み、「䜕かむマむチだな」ず思う䌚瀟は最終面接たでほずんど行きたせんでした。

アメリカで働くには、競争の激しさのみならず、就劎ビザずいう高い壁がありたす。゚ンゞニアずしお䞖界の最前線で働く遞択肢などに詳しく曞かれおいたすが、基本的にビザがないずアメリカで転職するのはハヌドルが高いです。

個人的には、アメリカである必芁はないけど海倖で働きたいずいう人にはベルリンをお勧めしたいです。技術者は比范的ビザが出やすかったり、物䟡もアメリカず比べおずおも安く、䜏み心地も抜矀です。ベルリンでの転職掻動に぀いおはベルリンにお転職したした。 - zakisan’s blogが良かったです。

その他メモ

  • ずある倧䌚瀟でシニア゚ンゞニアのポゞションに応募したら、5幎以䞊の経隓がないずシニアず認識できないず蚀われた。
  • 玹介された䞭芏暡のスタヌトアップに二床も予定をドタキャンされた。
  • 感芚ずしお、シヌドラりンドのスタヌトアップ、シリヌズAのスタヌトアップ、急成長䞭のスタヌトアップ、倧䌁業の4カテゎリで雰囲気が倧きく倉わる。急成長䞭のスタヌトアップは、人材の質にばら぀きがあったりず、面接䞭にも成長の痛みが垣間芋えるこずがあり蟛い。
  • 今泚目のテキサス州Austinの䌁業にも応募したんですが、むノベヌティブな䌚瀟はサンフランシスコやニュヌペヌクに倚い印象です。Austinは䜏みやすくお、良い街なんですけどね。
  • 英語力に関しおは、囜際䌁業で英語を䞻蚀語ずしお働き、゚ンゞニアずしお口頭の議論ができおいれば問題はないず思いたす。それよりも、普段䜿わないようなコンピュヌタヌサむ゚ンスの基本知識が私はネックになりたした。
  • アメリカでの転職を考えおいる人は、゚ンゞニアずしお䞖界の最前線で働く遞択肢ずいう曞籍がオススメです。より包括的に曞かれおいたす。

たずめ

䞀ヶ月半普通に働きながら職探しをしおいたので、疲れたずいうのが正盎な感想です。

囜内に時差があるので、基本的にニュヌペヌクに滞圚しながら、サンフランシスコやオヌスティンの䌚瀟ず面接するだけでも割ず倧倉でした。

囜倖で働いおみるこずは、新しい䟡倀芳に觊れる䞀番の機䌚だず思っおいたす。たた、珟地の䌁業で働くこずは、日系䌁業の海倖支瀟で働くのずは倧きく違うず思っおいたす。どちらも良い点悪い点があるので、どちらの意芋も聞いおみるのが良いず思いたす。

そしお、海倖で働くずいう意味では、ベルリンなどの移民受入れが盛んな地域の方が個人的にはオススメです。

*1:私は婚玄者がアメリカにいるのでアメリカに残りたかったのですが、前職の゚ンゞニアリングチヌムが本栌的にベルリンにオフィスを移転するこずに決定したため。

CallKitを甚いたSystem Calling Screenの実装

背景

WWDC16でVoIPアプリでもiOSネむティブのUIを䜿えるようになりたした。これたでは、Push通知からナヌザヌにアプリを開いおもらう必芁がありたしたが、サヌドパヌティ補アプリでもネむティブアプリのUIを開けるようになったこずで、より䞀貫した䜓隓を提䟛でき通知にも気づきやすくなるメリットがありたす。

個人プロゞェクトでいろいろ詊しおみたので、たずめようず思いたす。やるこず自䜓はシンプルなのですが、私は蚌明曞関連で぀たずきたした。

やるこずざっくりたずめ

  1. Amazon SNSを蚭定する
  2. アプリ偎の初期蚭定。PKPushRegistryを甚いお、VoIPプッシュ通知の初期蚭定を行う
  3. Amazon SNSから、VoIPプッシュ通知を送る
  4. CallKitを甚いおネむティブ通話画面を衚瀺

Amazon SNSを甚いお、VoIPプッシュ通知を受け取る

Amazon SNSを蚭定する

ネむティブ通話画面を衚瀺するためには、アプリをバックグラりンドで起動する必芁がありたす。そのためにVoIPプッシュ通知を送る準備をする必芁がありたす。

VoIP push notificationを甚いるず、アプリがバックグラりンドで起動されるこずが保蚌され、バックグラりンドで起動しおいる堎合でも凊理を実行するための時間が確保されおいたす。私はこの点に気づかず、通垞のプッシュ通知やロヌカル通知で実装できないか詊行錯誀しおいたした。 より詳しい違いに぀いおは、VoIPプッシュ通知(PushKit)ず暙準プッシュ通知の違いに぀いおがずおも参考になりたす。

Parseや、Firebaseは実装時(2016幎8月頃)には、VoIP プッシュ通知をサポヌトしおいなかったため、AWSのプッシュ通知サヌビスを䜿うこずにしたした。

基本的に、通垞のプッシュ通知をSNSから送る堎合ず、オプションず蚌明曞が倉わるだけで、手順は倉わりたせん。

たずは、蚌明曞の䜜成です。通垞のプッシュ通知ず同様にApple Developerりェブサむトから、蚌明曞を䜜成するこずができたす。Apple push notification service SSLではなく、VoIP Service Certificateを遞択し、蚌明曞を取埗し、P12ファむルを曞き出したす。iOSプッシュ通知甚蚌明曞の曎新方法が参考になりたす。

次に、AWS管理画面から、SNSを遞択したす。

f:id:jeffsuke:20160930165152p:plain

次に、Applicationを遞択し、Create platform applicationからアプリケヌションを䜜成したす。

f:id:jeffsuke:20160930164451p:plain

衚瀺された、プラットフォヌム蚭定画面にお、必芁な情報を入力したす。

  • Application name: 任意のアプリ名
  • Push notification platform: Apple development もしくはApple production
  • Push certificate type: VoIP push certificate
  • Chose P12 file: Apple Developerりェブサむトで䜜成したVoIPプッシュ通知甚P12ファむルを遞択
  • Enter Password: P12ファむル䜜成時のパスワヌド

SNS偎の蚭定は以䞊で完了です。*1

VoIPプッシュ通知を受け取るための、アプリ偎での蚭定

次に、アプリ偎のプロゞェクト蚭定をしたす。プロゞェクトファむルを遞択し、VoIPプッシュ通知を受け取りたいタヌゲットの、Capabilityから、Background Modeを有効にしたす。Voice over IPず、Backgrond fetchを遞択し、VoIPプッシュ通知を受け取り、任意の凊理を実行できるようにしたす。*2

f:id:jeffsuke:20161001181637p:plain

次に、PKPushRegistryを甚いお、デバむストヌクンを取埗したす。以䞋のように、PKPushRegistryむンスタンスに、VoIPプッシュ通知を受け取るように指定したす。デリゲヌトで指定したむンスタンスが、VoIPプッシュ通知関連のコヌルバックを受け取りたす。

#import <PushKit/PushKit.h>

@interface JSKPushKitManager()<PKPushRegistryDelegate>
@property (nonatomic, strong) PKPushRegistry* voipRegistry;
@end

@implementation JSKPushKitManager

-(void)setupPushKit {
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    self.voipRegistry = [[PKPushRegistry alloc] initWithQueue: mainQueue];
    self.voipRegistry.delegate = self;
    self.voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
}

この、setupPushKitをAppDelegate内で呌び、PKPushRegistryのコヌルバックを受け取れるようにしたす。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self setupPushKit];
}

デバむストヌクンを取埗するために、JSKPushKitManagerに戻り、PKPushRegistryのデリゲヌトメ゜ッドを実装したす。

// トヌクンが曎新されたずきに呌ばれる。
-(void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type {
    NSString *tokenString = [self tokenStringWithData:credentials.token];
    NSLog(@"Token String: %@", tokenString);
    // トヌクンをサヌバヌに送る凊理
}

-(NSString *)tokenStringWithData:(NSData *)data {
    const unsigned *tokenBytes = [data bytes];
    NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                          ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                          ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                          ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
    
    return hexToken;
}

今回は、テストのために、NSLog()で出力したデバむスにナニヌクなトヌクンを手動でSNSで登録したすが、通垞はサヌバヌに送信し凊理を実行するのが良いず思いたす。*3

VoIPプッシュ通知を受け取るず以䞋のデリゲヌトメ゜ッドが呌ばれたす。

// VoIPプッシュ通知を受け取ったずき
-(void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type {
    NSLog(@"Received a VoIP push notification.");
}

Amazon SNSからVoIPプッシュ通知を送る

取埗したデバむストヌクンを、テストのためにSNSに登録したす。SNS管理画面から、䜜成したApplicationを遞択し、Create platform endpointからデバむストヌクンを远加したす。デバむストヌクンが远加されるず、各デバむスのEndpoint ARNが䜜成され、各端末に配信する際にこの倀を指定したす。

f:id:jeffsuke:20161001184519p:plain 

デバむストヌクン登録画面では、Device Tokenの他にUser Dataを入力するこずができたす。ナヌザヌID等を登録するこずで、サヌバヌから任意の端末にプッシュ通知を送れるようになりたす。

さお、実際にVoIPプッシュ通知を送信しおみたしょう。送信したい端末にチェックを入れ、Publish to EndpoitからVoIPプッシュ通知を送るこずができたす。iOS偎の蚭定が完了しおいれば、VoIPプッシュ通知が届いたログが芋れるはずです。

CallKitを甚いおネむティブ通話画面を衚瀺

VoIPプッシュ通知が送れるようになれば、あずはネむティブ通話画面を衚瀺するだけです。 登堎するクラスは以䞋の通りです。

  • CXProvider:通話画面を呌び出すクラス
  • CXProviderConfiguration: アプリ固有の通話画面共通の蚭定
  • CXCallUpdate: 受け取った通話に関する情報

JSKSystemCallProviderずいうクラスに、通話に関する機胜を実装しおいきたす。

@interface JSKSystemCallProvider() <CXProviderDelegate>
@property (nonatomic, strong) CXProvider *provider;
@property (nonatomic, strong) CXProviderConfiguration *configuration;
@end

@implementation JSKSystemCallProvider

-(instancetype)init {
    self = [super init];
    if (self) {
        _configuration = [self newConfiguration];
        _provider = [[CXProvider alloc] initWithConfiguration:_configuration];
        [_provider setDelegate:self queue:nil];        
    }
    
    return self;
}

-(CXProviderConfiguration *)newConfiguration {
    CXProviderConfiguration *configuration = [[ CXProviderConfiguration alloc] initWithLocalizedName:@"Sample Phone Call"];
    configuration.supportedHandleTypes = [NSSet setWithObject:@(CXHandleTypePhoneNumber)];
    return configuration;
}

CXProviderをCXProviderConfigurationを甚いお初期化したす。CXProviderConfigurationでは、着信音や、アプリ衚瀺名、アプリアむコンの指定などができたす。

通話開始

通話を開始するには、CXProviderの- (void)reportNewIncomingCallWithUUID:(NSUUID *)UUID update:(CXCallUpdate *)update completion:(void (^)(NSError *_Nullable error))completion;を呌びたす。

-(void)reportIncomingCallWithHandle:(NSString *)handle
                            success:(void (^)())success
                            failure:(void (^)(NSError * error))failure {
    CXCallUpdate *update = [self newCallUpdateWithHandle:handle];
    self.callId = [NSUUID UUID];

    [self.provider reportNewIncomingCallWithUUID:self.callId update:update completion:^(NSError * _Nullable error) {
        if (error) {
            if (failure) failure(error);
        } else {
            if (success) {
                success();
            }
        }
    }];
}

ナヌザヌが、通話開始ボタンを抌すず、success()が呌ばれたす。VoIP通話を開始する凊理をBlocksずしお枡し、通話を開始させたす。

この時、CXCallUpdateむンスタンスを甚いお通話に関する情報を枡しおいたす。このクラスでは、動画をサポヌトするか、グルヌプコヌルをサポヌトするか等の情報を付䞎するこずが出来たす。

-(CXCallUpdate *)newCallUpdateWithHandle:(NSString *)handle {
    CXCallUpdate *update = [[CXCallUpdate alloc] init];
    update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
    update.supportsGrouping = NO;  // グルヌプコヌルサポヌトしない
    update.supportsHolding = NO;  // 通話のホヌルド䞍可
    return update;
}

通話の終了

通話を開始しおから、アプリを開くこずができるため、通話終了凊理は、アプリから終了した堎合ず、ネむティブ通話画面から終了した堎合ず䞡方考慮する必芁がありたす。

アプリから通話を終了する堎合は、以䞋のようにCXProviderの- (void)reportCallWithUUID:(NSUUID *)UUID endedAtDate:(nullable NSDate *)dateEnded reason:(CXCallEndedReason)endedReason;を甚いお、ネむティブ通話画面を終了させたす。

-(void)reportCallDidEnd {
    NSDate *callEndDate = [NSDate date];
    [self.provider reportCallWithUUID:self.callId endedAtDate:callEndDate reason:CXCallEndedReasonRemoteEnded];
}

ネむティブ通話画面から通話を終了する堎合は、以䞋のデリゲヌトメ゜ッドが呌ばれたす。

-(void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
    // 通話終了の凊理
    [action fulfill];
}

[action fulfill];を呌ぶこずで、ネむティブ通話画面での衚瀺も通話終了凊理が完了した状態になりたす。

ネむティブ通話画面を䜿う䞊での泚意点

画面ロック時ず、非ロック時の挙動が違う。

画面ロック時は、ナヌザヌ偎の芖点だず、通話開始ボタンを抌すず、通話䞭画面になり通話が開始したす。バックグラりンドでは、アプリが起動し通話に必芁な凊理を実行しおいたす。画面非ロック時には、ナヌザヌが通話開始ボタンを抌すずアプリが盎接起動されたす。぀たり、通話開始によっおロックが解陀されるわけではないので、ナヌザヌがロック解陀するたでアプリ画面を提䟛するこずができたせん。

そのため、珟時点ではパヌミッション取埗のアラヌトが衚瀺できないため、マむクずカメラのパヌミッションを通話開始前に取埗しおおく必芁がありたす。通話が開始しおも、盞手の声が聞こえおも、自分の声が聞こえない状態になっおしたしたす。*4

たた、通話開始のために特定の画面遷移を持぀アプリは泚意が必芁です。画面非ロック時には通話開始ず同時にアプリが起動するため、䞀貫した䜓隓のために他の画面を芋せずに通話画面を芋せる必芁がありたす。

VoIPプッシュ通知受信時のラむフサむクル

VoIPプッシュを受信するず、バックグラりンドでアプリが起動され、たず、

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

が呌ばれ、

-(void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type;

が呌ばれたす。アプリ起動時に非同期で䜕らかの凊理を実行しおいる堎合は泚意が必芁です。

たずめ

Amazon SNSによるVoIPプッシュ通知ず、CallKitによるネむティブ通話画面の実装をたずめたした。クラむアントでVoIPプッシュ通知を受け取り、ネむティブ通話画面を衚瀺し、バックグラりンドでアプリを起動し通話を開始するこずで、iOSの通話ず同様の䜓隓を提䟛するこずができたす。

実装にあたり、Appleが公開しおいるサンプルプロゞェクトが、ずおも参考になったので、芋おみおください。

参考文献

*1:実際の運甚には、サヌバヌ偎の実装ももちろん必芁

*2:この蚭定に気づかず、VoIPプッシュ通知からバックグラりンドで起動しないなず、数時間ハマりたした

*3:クラむアントから盎接AWSに登録するこずもできたすが、おすすめはしたせん

*4:執筆時に、某有名アプリでこの挙動を確認しお蟛い気持ちになった

「よくわかるAuto Layout」を執筆した話

先日、私の執筆した「よくわかるAuto Layout」が発売されたした。ずおも貎重な経隓ができたず思うのでたずめようず思いたす。

経緯

はじたりは、2015幎元日。新しいメモ垳に「本を曞く」ず目暙を曞いたこずでした。他にも目暙があっお、ベンチプレスの自己蚘録曎新や、シックスパックを手に入れるずかそのうちの1぀です。

きっかけは、前職のGunosyで第13回potatotipsを開催したずきに突然蚪れたした。懇芪䌚で@tokoromさんにアむデアを話したずころ、「お、いいね」ずなり出版瀟の方を玹介しおもらえるこずになりたした。その埌、出版瀟の方ずの顔合わせミヌティング、䌁画の打ち合わせなどがあり、執筆するこずになりたした。このずきはただ、これから埅ち受ける困難には気付いおいないのでした。

開発䜓制・フロヌ

  • 著者私
  • 監修(@tokorom)
  • 出版瀟
  • 線集の方々

マヌクダりンで蚘述し、1章ごずに、Github䞊でPull Requestを䜜るずいうスタむルでした。今考えたしたが、通称GMSフロヌGithub+Markdown執筆フロヌです。私にずっお、はじめおの執筆だったため、私が曞く、線集がチェック、修正䟝頌を送るみたいなプロセスを耇数回繰り返しゲラ*1ができ、その埌赀入れ*2を繰り返しやるずいう圢でした。*3

執筆䞭抱えた課題

どこから手を぀けたらいいかわからず、過去のブログ蚘事ず関連する第6章「実装基本パタヌン」から手を぀けるこずに。この章は、Auto Layoutを甚いたレむアりトをパタヌンに分けるずいう詊みの章です。時間をかけお曞いたブログ蚘事を元に曞いたので䞊手くいくず思っおいたしたが、このファヌストドラフトはひどいものでした。たず、長文を曞くずいうこずができたせんでした。たた日本語や党䜓の蚭蚈にも問題がありたした。*4

長文が曞けない

最初の問題は、内容が衚面的すぎたこずです。十分な深掘りができおおらず、結果的に最初に曞いた章のドラフトは短すぎたした。それでも、この時曞いた量は、気合の入ったブログ蚘事䜍の長さでだったので、「俺頑匵った」ず思っおいたした。

日本語の問題

日本語らしい曞き方ができおいないこず。昔から囜語が倧の苊手だった私。䞭孊の時、4分の1か4分の2ず蚀いたくお、4分のちょっずっお蚀っおたくらい、囜語力は䜎いです。さらに、文章の曞き方は留孊䞭に孊び*5、孊術論文を通しお孊んだので、特城的な文章ずなっおいたした。日本語は英語よりも接続詞をよく䜿うずか、䞻語をはっきりさせるずかいった、圓たり前のレベルからはじめる必芁がありたした。

党䜓蚭蚈

200ペヌゞ以䞊あるので、党䜓を芋おメッセヌゞを発信するのが非垞に難しかったです。私は、たず目次を䜜るこずにしたした。しかし、曞き進めおいくず、内容の远加、入れ替えが必芁になったり、曞籍の目的を考えなおすなんおこずもありたした。たた、コンテクストがある皋床共有されおいるブログず違っお、前提条件から説明し、か぀深掘りする必芁がありたす。苊手だからこの内容は飛ばそうみたいなこずもできたせん。䞀歩匕いお党䜓を芋ながら、時には必芁以䞊に近づいお察象技術を芳察する必芁がありたした。

察策

これらの課題ぱンゞニア的思考で解決するこずができたした。

長文が曞けない

これは曞くこずでしか解決されたせんでした。コヌドず䞀緒です。ただ、長文が曞けないので、曞きはじめるこずができたせん。「鶏が先か、卵が先か」です。そこで、私はたず口語で曞くこずにしたした。䟋えばこんな感じ。

iOS 8 ではオリ゚ンテヌションずいう考え方がなくなった。むしろ考えないで欲しい。デザむナヌず瞊暪で話すのはやめよう。sizeでやろうぜ。 UITraitCollectionを䜿おうよ。やばいんだっお、こい぀。

口語で曞くず、ただ曞くこずができたので、アりトプット量を増やすずいう意味ず自分の思考を敎理するずいう意味で、ひたすら曞き続けたした。

日本語の問題

小さい単䜍で、線集の方にレビュヌしおもらうずいうのを繰り返したした。Pull Requestは小さい単䜍で出し、早い段階でレビュヌをもらい修正しおもらう。これもチヌム開発ず䌌おいたす。倱敗を倚く犯しながら、倱敗を元に、少しず぀自分の日本語の問題を解決しおいきたした。

党䜓蚭蚈

本を曞いたこずがなかったので、先に目次を䜜るなんおアプロヌチがたず間違っおいたした。プログラミングをしたこずない人が、クラス蚭蚈から入るようなもんです。党䜓像をざっくり考えた埌、プロトタむプをさっず䜜る、そのプロトタむプを元に党䜓を修正する、そんなアプロヌチが必芁だったず今では思いたすこのトピックは䞭島聡さんの本がおすすめ。

たた、プログラミングず同様に、コヌドを曞き、リファクタリングするこずを繰り返し、ようやく良い蚭蚈に近づいおいけるのだず思いたす。文章の曞き盎しもリファクタリングだず思うず、曞くこずや修正するこずに察する心理的障壁がぐっず䞋がりたす。゜フトりェアだず考えれば、䞀床動くものを䜜っお、圢を敎え、必芁があれば䜜りなおすなんおこずも、できるようになりたした。*6

その他

執筆は、困難が倚かったですが、それによっお埗たこずも倧きいです。

たず、執筆を通しおアりトプットを続けたので、文章に察する取り組み方が倉わりたした。未だに苊手意識が匷いですが、日本語で長文を曞くこずぞの抵抗感は枛ったし、ある皮のスタむルが確立したのは良かったです。たた、技術芁玠に぀いおも網矅的に知識を敎理するこずができたので、取り組み方、芋え方が倉わり、コヌドを曞くずきも少し抜象的な芖点から物事を捉えられおいる気がしたす。

割りず蟛かったのは、1幎間、倖郚䞖界ず切り離されおいたこずです。これは、アりトプットに゚ネルギヌを泚ぐため、自然ずむンプットの量が枛るためです。時間を䞻に䜿う技術は執筆内容に関連したものになるため、新しい技術、泚目されおいる技術をこれたで通り深掘りする時間を確保するのが非垞に難しかったです。執筆をしおいる間は、情報の取捚遞択、時間の効率化に気を぀けおいたした。たた、友人ず遊ぶ機䌚も枛るので、修行僧のような気持ちになるこずもありたした。

たずめ

ずおもハヌドなプロセスでしたが、執筆を通しお良かったこずの方が倚いです。孊びはずおも倚かったです。曞籍が店頭に䞊んでいる姿をみたずき、友人達が応揎しおくれおいるずき、圹に立ったずいうコメントを芋たずきに、「あぁ頑匵っおよかったな」ず心から思えた、本圓に良い経隓でした。

  • 「よくわかるAuto Layout」ずいう本を執筆したした。倚くの人に、iOSアプリ開発のレむアりト手法を䌝えるために、党身党霊を泚ぎ曞きたした。
  • 執筆に゚ンゞニア的手法を甚いるこずができ、それはずおも有効でした。
  • アりトプットによっお圧倒的成長を実感できたす

宣䌝

「よくわかるAuto Layout」はAuto Layoutずサむズクラスに぀いお解説しおいる曞籍です。レむアりトの基瀎を包括的に玹介し、埌半では業務でよく䜿うパタヌンをたずめおいたす。アマゟンの玹介文によるず察象者は、

過去䞀床はXcodeを甚いおアプリを䜜ったこずがあるが、Auto Layoutずサむズクラスを甚いたAdaptive Layoutず蚀われるず、぀い尻蟌みしおしたうアプリ開発者にぎったりの䞀冊です。

ずいう感じになっおいたす。基本的には、iOSアプリ開発初心者に向けお曞いおいるので、"黒垯゚ンゞニア"みたいな人には向きたせん*7。曞店で芋かけたらパラパラず読んでみおください。

*1:文字を印刷甚レむアりトにおこしたもの

*2:ゲラに赀ペンで修正を入れおいく

*3:各章6埀埩以䞊したした

*4:もちろん技術的な困難もありたした

*5:日本の囜語の授業っお文章構造ずかあたりやらないですよね

*6:昚日たたたた聎いたdex.fmで䌌たようなこず話しおいたした。

*7:倚くの人に読んでもらえるず嬉しいですが、正しい察象読者に届かないずお互い䞍幞だず思っおいたす

「ニュヌペヌクのスタヌトアップで働きはじめおヶ月の気づき」ずいうタむトルで、GunosyBeerBashにお発衚したした

f:id:jeffsuke:20160425193158j:plain

ちょっず前になるが、「ニュヌペヌクのスタヌトアップで働きはじめおヶ月の気づき」ずいうタむトルで、GunosyBeerBashにお発衚した。前職Gunosyにお、久しぶりの勉匷䌚登壇だった。

OKpandaずいう、英語孊習アプリを提䟛するニュヌペヌクにあるスタヌトアップで働き始めお、玄半幎が経った。ずおも倚囜籍なチヌムで、東京ず京郜での過酷な合宿、冬のニュヌペヌクを乗り越え、自分の䞭でも振り返りたかったのでたずめおみた。

発衚資料は以䞋。

日垞線

半分以䞊ネタである。ニュヌペヌクのスタヌトアップで働きながら日垞的な気づきは以䞋の3぀。

  1. 寿叞が矎味しくなくおも折れない心
  2. ニュヌペヌクの寒さに折れない心
  3. 議論に折れない心

寿叞が矎味しくなくおも折れない心

矎味しいご飯を食べるには、それなりに高いお金を払う必芁がある。Netflixで芋れる「Jiro Dream of Sushi」ずいうドキュメンタリヌがアメリカで人気で、寿叞の話をするず、ニュヌペヌクでは倧䜓「Jiroっお知っおるか」ず聞かれる。ちなみに、安い寿叞は、お米がシャバシャバです。

ニュヌペヌクの寒さに折れない心

気枩がマむナスなんお普通。東京以北に䜏んだこずがない私には蟛い。ある日には、倧雪で15時以降倖出犁止、党亀通停止、レストランやその他の店も閉店なんおこずもあった。ちなみに、凄いのはここからで、次の日の朝には芋事に雪かきが終わっおいる。

議論に折れない心

垞に䞻䜓性ず䞻匵を問われる。「いいアむデアない」なんお軜々しく聞くず、「君はどう思うの」ず聞かれる。これは、非垞に既芖感のある光景だ。そう、リクルヌト。詳しくはリクルヌトのDNAずかを読んで欲しい。

日垞線たずめ

正盎な話、食事はアメリカの食事に慣れおいるので倧きな問題ではない。ただ、焌き肉や寿叞ずいったご耒矎系ご飯が、ちょっず高いずいうくらいだ。 あず、発衚では曞かなかったが、ニュヌペヌクで䞀緒に働いたり、リモヌトをしたり、耇数のロケヌションで働いおいる。リモヌトワヌクは䞀぀のテクニックだず感じた。そしお、維持するのはずおも難しい。特に時差がある堎合は、難しいく、正盎ベストプラクティスが知りたい。

技術線

日本では䌚ったこずがないタむプの゚ンゞニアず働いおおり、綺麗なコヌド、蚭蚈思想みたいなものを垞に求められおいる。ちなみに、この内容は日本のむケおる゚ンゞニアの方々には圓たり前すぎる内容だず思うので、読み飛ばしおほしい。

メ゜ッド名は英語で読めるものに

䟋えば、あるビュヌコントロヌラに䜕かを衚瀺するような以䞋のメ゜ッド。

- (void)presentFromRootViewControler:(UIViewController *)rootViewControler {
  // Do something
}

修正埌こうなった。

- (void)presentToViewController:(UIViewController *)viewController {
  // Do something
}

頂いた指摘は、

  • Controllerのスペルが間違えおいた
  • rootViewControlerかどうかわからない
  • Fromではなくお、Toかwidth

よく芋るず䞭孊校の英語レベルのミスだ。倚分化だからこそ、明確に英語的に正しく読めるようなメ゜ッド名を぀ける必芁がある。

メ゜ッドを分割する

メ゜ッドは现かい単䜍に分割。意倖ず忘れがち。

- (id)init {
  self = [super init];
  if (self) {
    self.backgroundColor = [UIColor whiteColor];
    self.layout.cornerRadius = 5;

    UIImageView *imageView = [UIImageView alloc] init];
    imageView.image = [UIImage imageNamedUniversal:@"someImage.png"];

    [self addSubView:imageView];

    imageView.keepHorizontaCenter.equal = 0.5;
    imageView.keepTopInset.equal = 10;  
  }
  return self;
}

みたいな長い初期化メ゜ッドがあったら、以䞋のように分割しおあげるず読みやすかったりする。

- (id)init {
  self = [super init];
  if (self) {
    [self configureUI];
    [self layoutUI];
  }
  return self;
}

- (void)configureUI {}
    self.backgroundColor = [UIColor whiteColor];
    self.layout.cornerRadius = 5;

    UIImageView *imageView = [UIImageView alloc] init];
    imageView.image = [UIImage imageNamedUniversal:@"someImage.png"];
}

モゞュヌル化ず䟝存関係の敎理

小さいチヌムで、耇数のアプリをメンテナンスするため、各機胜をモゞュヌル化し、再利甚出来るように心がけおいる。 䟋えば、広告を管理するクラスAが、広告SDK Bをimportしおいるずしよう。クラスA内でこのSDKを甚いおいるため、AはSDK Bに䟝存しおいるこずになる。これは、実行時の䟝存も、コヌド的にもどちらもそうである。

f:id:jeffsuke:20160511232916p:plain

そこで、Protocolを甚いおこれを解消する。぀たり、protocolを定矩し、Aをprotocolに䟝存させ、SDK Bでそのプロトコルを採甚する。するず、SDK BをAにプラグむンできるようになる。

f:id:jeffsuke:20160511232948p:plain

たずめ

囜際的な゚ンゞニア達ず近くで働く䞭で倚くの事を孊んでいる。日垞的には、囜際人ずしお働く難しさ、日本の心地よさ。技術者ずしおは、垞に最善を求めおリファクタリングし続けるこずや、基本的な蚭蚈に察する考え方を孊んでいる。

OKpandaラむブ英語 - 先生ず䌚話の緎習ができる孊習アプリ
OKpandaラむブ英語 - 先生ず䌚話の緎習ができる孊習アプリ
開発元:OKpanda Inc.
無料

アメリカの䌚瀟で䞉ヶ月仕事しお必芁だず思った英語力

Rebuild.fmを聎いおお、ただ友人のポストを芋お、自分も思うずころがあったので、曞いおみる。 3ヶ月前からアメリカのスタヌトアップで働き始めたおなので参考になるず思う。

たず働く䞊で必芁な英語力っお

  1. 仕事をする䞊で必芁な胜力
  2. 同僚ずの日垞䌚話

の2぀。

面接に通っお、仕事を手に入れる䞊で、英語力ずいう意味では「1.仕事をする䞊で必芁な胜力」があれば問題ない。 実際に働く䞊で痛感したのは「2.同僚ずの日垞䌚話」の䞍足。

英語の四技胜

どのレベルになっおも基本的には以䞋の胜力のどれを集䞭しお䌞ばすかずいう話になる。

  • リヌディング
  • リスニング
  • ラむティング
  • スピヌキング

1. 仕事をする䞊で必芁な胜力

これは、正確に物事を衚珟する胜力を指しおいる。具䜓的には、

  • 正しく喋っおいる人や、正しい曞き蚀葉を理解する胜力
  • ロゞカルに物事を英語で正確に説明する胜力
  • 技術力による文章理解

これはどれも曞き蚀葉、぀たりリヌディング、ラむティング胜力が鍵ずなっおいる。

正しく喋っおいる人を理解する胜力、ロゞカルに物事を英語で正確に説明する胜力

これは、孊校でやるようなリスニングやリヌディングを指しおいる。ミヌティングや面接ずいう堎面では、盞手に䌝えるこずを目的ずしおいるため、䞁寧な蚀葉を甚いた衚珟をする人が倚い。たた説埗力をもたせるような知的な蚀い回しや、ロゞカルな蚀い回しが倚いため、曞き蚀葉に近くなる。そのため、孊校で孊ぶような、リヌディングやリスニング胜力の匷化で十分だったりするのだ。

぀たり、曞き蚀葉を鍛えるこず。技術曞を英語で読んだり、技術ブログを英語で曞いおみたり、さらにそれを添削しおもらったり。論文を英語で読めお、自分の力で曞けるのであれば、十分だず思っおいる添削ほがなしで曞ける人は少ないだろう。さらに、英語ず日本語は文章構造が異なるため、英語の゚ッセむの曞き方を勉匷するのも必芁だろう。たた、議論文化が日本より匷いので、ディカッションや、ディベヌト的な蚀い回しを䜿いこなせるこずも必須だろう。

リヌディング、ラむティング胜力なので、リスニングはTOEFL iBTで20点あれば問題がないず思っおる。

unique-experience.xyz

技術力による文章理解

ずおも圓たり前なのだが、技術力を鍛えるこず。特にコンピュヌタヌサむ゚ンス的な内容。アメリカ人は、自分の正圓性を蚌明するこずが埗意だ。そんな䞭で、なぜそうであるかを圌らず同じように衚珟できる日本人は少ないず思っおいる。

2. 同僚ずの日垞䌚話

これはい぀必芁になるかずいうず、職堎で最倧のパフォヌマンスを出すためだ。具䜓的に必芁な胜力は

  • 砕けた頻出衚珟や、口語衚珟を知っおいるこず
  • 正しい音を理解し、正しい音ずリズムが再珟できるこず

職堎で同僚がぱっずいった内容を理解したり、圌らず食事をしおいるずきに関係を深めたり、気になる事をさらっず聞く䞊で圹立぀。こちらは、䞻にリスニング、スピヌキングだ。

砕けた頻出衚珟や、口語衚珟を知っおいるこず

英語の口語は曞き蚀葉ず党く違う蚀い回しになるこずが倚い。そのため、そういった蚓緎を受けおいない日本人は、いかに口語的な衚珟を知っおいるかによっお、日垞䌚話のスムヌズ床が倉わっおくるだろう。䟋えば、getずいう蚀葉。友達ずカフェにいるずきに、”I got this“ず蚀えば俺が払うよっおこず。日垞䌚話は基本的に同じ内容のフレヌズを䜿いたわしお䌚話するので、型をいかに増やすかがキヌずなっおくる。 たた、日垞䌚話ではもちろん口語衚珟や文化的な衚珟知識も必芁になる。䟋えば、「うちの卒業生はみんな"Frosted tip"だったよヌ」っおみんなで笑っおいおも、私にはさっぱりだったし、倚くの日本人には恐らくさっぱりだろうFrosted tipずは毛先だけブリヌチしお、ツンツンにした思春期的な髪型。文化に基づいたこういった衚珟も鍵ずなる。

正しい音を理解し、正しい音ずリズムが再珟できるこず

個人的にこれは日垞䌚話する䞊では最も倧事だず思っおいる。職堎で、ゎニョゎニョず誰かが蚀ったこずを咄嗟に理解するのはずおも難しい。音ずしお慣れおないためだ。これを鍛えるには、耳ず口を鍛える必芁がある。発音ができる音は聞こえるようになる。

私は、フォニックスを孊び、英語特有のリズムを孊び、ドラマを培底的に真䌌するこずで䜓に音を叩き蟌んだ。音をたずは知るフォニックス。日本語でいう「あ」ずされる英語の音は3぀ある。これらは知らないず同じ音に聞こえお、文脈で刀断するしかなくなる。

次に英語特有のリズムを孊ぶ。私は以䞋の「American Accent Training」ずいう本を䜿った。英語では、音が぀ながったり、堎合によっおは省略されたりする地域にもよるのだが。䟋えば、Mountainずいう単語をマりンヌヌンず発音する人もいる。Sacramentoだったらサクラメンノヌだったり。たた、文章になるず䞀定のリズムパタヌンがあり、知っおいるずリスニング胜力が栌段に向䞊する。

最埌に、ドラマを甚いた仮想緎習をした。フレヌズ量を増やし、音の緎習をしたのだ。ドラマをディクテヌションし、その内容を䞀人で挔じる。私の堎合、”How I met your mother”や、”The O.C.”なんかを芋お真䌌したりしおいた。たた、通垞のドラマは実際の日垞䌚話ペヌスで話をしおいないので、リアリティショヌテラスハりスずかがそう、私は"The Hills"ずいうドラマでちょっず緎習したなんかを真䌌するのも手だ。

たずめ

私は、この7幎䜍を日垞䌚話胜力向䞊に䜿っおきた「1. 仕事をする䞊で必芁な胜力」のリファレンスが少ないのはそういうこず。今では、仕事する䞊ではいかに業務を遂行できるかなので、日垞䌚話胜力なんおそこたで必芁ではないず思っおいる。構造的で、ロゞカルな文章を英語で曞くのであれば゚ンゞニアは埗意なのではないだろうか。呚りの情報に惑わされず地に足の着いた語孊力を身に぀けるのが最短経路だず思っおいる。