結果に git commit する

つよいエンジニアのブログ

iOSDC 2017にタダで参加させていただいてきた

iOSDC 2017に行ってきました

9月16日、17日に開催された「iOSDC 2017」に参加してきましたので学んだことを残そうと思います。

f:id:snowman_mh:20170924132203j:plainf:id:snowman_mh:20170924132247j:plain

素晴らしいカンファレンスでした

まず初めに、素晴らしいカンファレンスを開催してくださったスタッフの皆さん、ありがとうございました!
僕はこのようなカンファレンスに参加したのは初めてでしたが、とても楽しめました。
スタッフの人がすべてのブログを読むと言っていたので、これも読んでくれているはずです。
来年も参加したいと思います!
スタッフ側で参加できたらいいなぁ

Wantedlyスカラシップスポンサー

今回のiOSDC 2017は、Wantedly株式会社が提供していたスカラシップスポンサー枠として参加させていただきました。
タイトルはなんか軽い感じで書いてしまいましたが、安くはないチケット代を負担していただけるのは学生としてとても嬉しいことで、とても感謝しております。
僕は東京に住んでいるので当てはまりませんでしたが、他の参加者は会場までの交通費や宿泊費なども援助されていたようです。

プレゼンについて学んだこと

いくつもセッションを聞いた中で、技術的な話の前に、プレゼンをするに当たって気をつけるべきと学んだことを残します。

理解してほしいことと理解しなくてもOKなことを明確にする

このような場でセッションをすると、限られた長くはない時間の中で、伝えたいことを伝えて理解してもらう必要があります。
そのためには、「この部分は雰囲気が分かれば良い」「ここはしっかり理解してほしい」「ここは名前だけ覚えておいてほしい」などを明確にすることが大事だと思いました。
今聞いている部分はどのあたりまでの理解度であれば問題ないのかがオーディエンスにオープンになっていると聞きやすいと思いました。

コードは最小限に、大きな文字で見やすく

技術カンファレンスではコードをスライドに含めることは多いと思います。
その際に、必要なコードのみ、必要なタイミングでのみ、最適なサイズで見せることが大切だと思いました。
コードをスライドに出すと、オーディエンスはそれを読み始めるので、読む必要がある分だけ出しながら話すのがベストです。
また、先程の「どのくらい理解してほしいか明確にする」に共通している部分はありますが、理解してほしいコードのみを出しながら、コードをどれくらい理解してほしいかを示しながら話すとオーディエンスは聞きやすいと思いました。

技術的な学び

本当に素晴らしい内容のセッションばかりでした。
qiita.com
このような素晴らしいまとめ記事がQiitaに上がっているので、内容についてはそちらを参照すると良いと思います。

ここでは、数あったセッションの中から、特に「なるほど勉強になった!」と個人的に思ったことを一言で紹介していきたいと思います。

「Build high performance and maintainable UI library」より
  • 「アプリと違ってライブラリは様々な状況で使用されることを想定する必要がある」
  • 「可読性とパフォーマンスのようなトレードオフを知る、優秀なエンジニアほどその見極めができる」
Xcode Source Editor Extensionの世界」より
「結婚式を支えた技術 Firebaseを活用したサーバレスiOSアプリケーション開発」より
  • 「やらないことを決めた」
  • 「チームメンバーに無力感を与えない」
「Human Interface Guidelinesから滲み出る限界感を考える」より
  • 「HIGが作った指針を崩さない程度にHIGを逸脱するオリジナルを加えていくと魅力的なデザインになる」
  • AppleがどのようにHIGを逸脱しているかを参考にする」

おわりに

インターンでお世話になった方や、Qiitaやブログなどでアイコンだけ見たことある人に会えたりしました。
知っている人が結構いて、自分もこの世界で勉強できてるのかなと思えてちょっと嬉しかったです。
これからも頑張っていこうと思いました。

楽天サマーインターンで優勝してきた

目次

はじめに

9/11〜9/15の5日間で開催された楽天株式会社のサマーインターン、「二子玉川 夏の陣 2017」に参加してきました。
そこで学んだことをまとめたいと思います。

corp.rakuten.co.jp

自己紹介

インターンの内容

楽天O-netや楽天競馬などを開発しているOSPDという名前の部署で、平日5日間を利用して行われる短期インターンでした。
高齢者と若者をつなげるWebアプリ」というテーマでチームごとにプロダクトを作り、最後にプレゼンをして順位を決めるという形式でした。
4人のチームにリードエンジニアレベルのメンターの方が3人ついてくださり、サービス企画から実装、プレゼンまでずっとフィードバックを与え続けていただけるという贅沢な環境でした。
サービス開発の醍醐味を感じられたと思います。
参加人数は学生12人で、4人1チームとして3チームに別れて競う形式でした。

サービス企画

まずは最初の1日と2日目の夕方くらいまでをサービス企画の時間に使いました。
いつも使わない脳を使ってとても疲れましたが、得るものも多かったです。
チームメンバーでアイデアをまとめ、メンターの方々にフィードバックをもらってブラッシュアップしました。
そして、2日目の午前にOSPDのプロデューサー陣にプレゼン形式で発表し、またフィードバックをもらってブラッシュアップしました。

コンセンサスを取ることの難しさと重要性

4人のチームで1日半という短期間でどのようなサービスを作るかを考えるには、「コンセンサス」を取ることがとても大事になってきます。

サービス企画に慣れていなかったので、アイデアを固めるのはとても難しかったですが、それよりも難しかったのは、「細かい部分でみんなの意見を一致させる」ことです。
大枠の意見は一致していても、細かい部分まで確認していくと、「あれ、そうやったっけ?」とメンバー同士が疑問を持ち合うことは珍しくなかったです。
とことんチームで話して細かい部分まで一致させていく必要がありました。
そのあたりをどこまで確認し、一致させ、コンセンサスをチームで取ることの重要性とその難しさを学びました。

煮詰まったときの対応

イデアが煮詰まったときには「第三者の意見を聞く」のと「課題から見つめ直す」というのが大事だな、と学びました。
言葉にすると当たり前に聞こえますが、これが意外と難しく、そして大事でした。
第三者の意見を聞く場合は、「今まで自分たちがどのように考えて、どのような結論に至っているが、どのような問題があるか」を言葉にして説明する必要があります。
さらに、課題を見つめ直し、その課題を解決するようなアプローチを考えることが一番良いサービス企画のやり方です。

チーム開発

サービス企画が終了すると、2日目の夕方から4日目の午前中までの期間で実装に落とし込みました。
チーム開発の経験はありましたが、0からチーム開発をスタートした経験はあまりなかったので良い経験になりました。

0からのチーム開発

4人チームのうち僕を含めた2人はSwiftでクライアントサイドを開発し、他の2人はサーバサイドをPHPで開発しました。
チーム開発自体は初めての経験ではありませんでしたが、学生だけで0からチーム開発を「始める」経験は初めてでした。

.gitignoreの設定などのiOS開発の一般的な知識を共有せずに開発を始めてしまったため、コンフリクトが頻発してしまったりしました。
自分だけが理解していても、チームメンバーが知らなかったり、いくつかのスタイルがあったりするので、開発を開始する前にコーディングスタイルや.gitignoreについて共有・確認するべきでした。

「妥協する」ことの意味

「妥協する」とは、「目的を達成するために手段を代替する」という意味で、目的を変えてしまうものは妥協ではありません。
妥協したために最初に設定した目的が達成されない場合、それは妥協ではありません。
妥協することの意味を今まで理解しているようで理解していなかったと思いました。

短い実装期間であったため、時間の都合で実装できない部分がいくつかありました。
そのとき、妥協して実装しない部分を決めることは珍しくありませんでした。
しかし、そのとき、本当の意味での妥協をして、期間内に収まるように調整することが大切だと学びました。

プレゼンテーションと結果発表

優勝した

3チームそれぞれが成果をプレゼンする発表会にOSPDの偉い人たちが50人くらい参加してくださいました。
「アイデア・新規性」、「プレゼン力」、「技術力」、「テーマに合っているか」、「デモ完成度」の5軸評価を用いて投票で順位が決められました。

僕たちのチームは優勝することができました🎉
本当に優秀なチームメンバーに恵まれました。

優勝賞品として最近楽天が提携したバルセロナの公式ユニフォームをいただきました!
(めっちゃ高いらしい)

f:id:snowman_mh:20170918163239j:plain

残念だったこと

今回のインターンシップはとても得るものが多く、充実した5日間を過ごすことができました。
しかし、僕がこの夏にインターンに参加しているのは「自分の成長」のためもありますが、「仕事の進め方が自分に合う企業を探す」という目的もあります。

今回のインターンでは社員の方と一緒に働くことはできなかったため、楽天のエンジニアの方がどのような開発環境で、どのような開発フローで仕事をしているのかを体験できませんでした。
社員の方とコミュニケーションを取ることはたくさんでき、一緒に働きたいと思ったので、機会があれば長期インターンに参加できたらなぁと思いました。

おわりに

楽天バルセロナと提携をしたあと、バルセロナの主要選手が楽天のオフィスに遊びにきたらしいです。

さらに最近、NBAのチーム「Golden State Warriors」と提携しました!!!
最近NBAは見れていませんが、僕の大好きなチームです。
楽天の人事の人にウォーリアーズが楽天オフィスに来るときは絶対呼んでくださいと伝えたので、カリーとハイタッチできる未来も遠くないはずです。
とても楽しみです。

snowman_mhとして生きてゆく

はじめに

はてなサマーインターン2017

先日はてなのサマーインターン2017に参加してきました。
まだブログ読んでない人は読んでね。

snowman-mh.hatenablog.com

はてなIDの話

株式会社はてなには、はてなIDで社員同士呼び合うという文化があります。
そして僕のはてなIDは、アカウントを作った高1のときに雪だるまが好きだったという謎な理由で「snowman_mh」でした。
最初はちょっと恥ずかしかったけど、何回も呼ばれるうちに親近感が沸いてきました。
そして、はてなサマーインターンが終わったあと、これからsnowman_mhで生きていこう、と思いました。
同じIDで活動することでブランディングしていくことも大切なのかな、というのもあります。

変えてゆくぞ

Twitter

以前までは、「@bilimboy」というスクリーンネームTwitter活動をしていました。
YouTuberのバイリンガールという人の動画が好きで、ガールの部分をボーイにしたってのが由来でした。

これからは「snowman_mh」で生きてゆくので、スクリーンネームを「snowman_mh」を変更しよう、と思ったら、既に使われてました。
しかも凍結されてる。。。何をしたんだ先代snowman。。。

とりあえずアンダースコアを2つにした「@snowman__mh」にしました。
以前までの「@bilimboy」にメンションしてくれたツイートとかからもリダイレクトしたかったので、テスト用に作っていたアカウントのスクリーンネームをbilimboyにして、そこからsnowman__mhに飛べるようにしました。

twitter.com

GitHub

以前までは、「MasayaHayashi724」というなんとも面白くないusernameでGitHub活動をしていました。
GitHubのusernameはアンダースコアが使えないということなので、「snowman-mh」とハイフンを使いました。

リポジトリへのリンクは新しいusernameへGitHubが勝手にリダイレクトしてくれるそうですが、一応いろいろなところに置いていたリンクは新しいusernameに更新しておきました。
めんどくさかった。

リポジトリへのリンクをリダイレクトしてくれるので、ローカルリポジトリに登録しているリモートリポジトリのURLなどは変える必要はないそうですが、「MasayaHayashi724」というusernameのユーザが新しく登録されるとそのリダイレクトは切れてしまいます。

$ git remote set-url origin [新しいURL] 

で変更することができるのでやっておいたほうが良いですね。
.gitconfigのuser.usernameは変更後のusernameに変更しておく必要があります。

github.com

Qiita

QiitaはGitHubと連携してアカウントを作っていました。
連携してるんだからGitHubのusername変わったら追従してくれるんじゃね、とか思ってましたが、それはさすがにありませんでした。
普通にQiitaのusernameは「snowman_mh」にしました。
連携しているGitHubはハイフンですが、気にしない気にしない。

qiita.com

Speaker Deck

Speaker DeckもGitHubと連携してアカウントを作っていました。
もちろん自動でusernameが変わることはありません。
こちらも「snowman_mh」にしました。
スライドへのリンクが変わってしまうので、リンクをどこかに置いていた場合は修正しないといけません。

Presentations by Masaya Hayashi // Speaker Deck

connpass

connpassもGitHubと連携して登録していたので、connpassのusernameもsnowman_mhに変えようと思ったのですが、connpassはusernameを変更できない仕様になっていました。。。
表示名は変えられるのですが、usernameは変更できないことが公式で明記されていました。
残念です。
connpassはこれからもMasayaHayashi724で生きていくことになりました。

アイコン

アイコンはとりあえず、とてもおもしろいコレに統一しました。

f:id:snowman_mh:20170918143314j:plain:w200

はてなインターンで身につけた一生の財産

f:id:snowman_mh:20170910175249j:plain

目次

はじめに

はてなサマーインターン2017」の「ブックマークアプリコース」に参加してきました。
はてなインターンのいいところの1つに「体験談が豊富」というところがあるので、僕も学んだことをまとめたいと思います。

あ、応募するのを悩んでいる方がこれを見ているのなら、さっさと応募してからこのエントリーを読みましょう😃❗

自己紹介(2017年夏時点)

インターンの内容

はてなインターンは平日20日間で開催されるため、約1ヶ月間京都に住むことになります。
前半の10日間が講義パート(超楽しい)で、後半の10日間がチームに配属されての実践パート(超楽しい)になります。
前半と後半に分けて学んだことを残しておきます。

前半過程

すべてが繋がっていた

前半過程はPerlを使って日記サービスを作りながらサービス開発について学んでいく、という感じでした。
前半の内容はすべてが繋がっていて、独立した部分がほとんどありませんでした。
カリキュラムがよく設計されていてすごいなと思いました。
講義形式のインターンは最近増えてきていますが、さすが10年目の講義形式インターンなだけあるなぁと感じました。
講義や課題の詳細は他のインターン生が書いてくれるはずなのでここでは割愛します(お願いします、書いて)。

Perlは良い言語です

はじめに、Perlを触ったのは事前課題と前半過程の合わせて3週間くらいなので、そういうレベルのやつが喋っていることをご理解ください。

Perlについて思った印象は「全部俺たちがやらなあかんやん」です。
オブジェクト指向もWeb Application Frameworkも自分で(先人のすごい人たちの手を借りて)実現してあげないといけません。
しかし別にこれは悪いことではありません。
プログラミングの根幹部分となる基礎知識をしっかり身につけることができるため、プログラミング学習に向いていると思いました。
よってPerlは良い言語です。
実際のサービス開発をする上で良い言語かどうかは、残念ながら僕の経験では判断することはできませんでした。

学び方を学ぶ重要性

このIT業界は新しい技術がどんどん出てきて、今持っている技術がいつ廃れるかは誰も予想できません。
そんな世界で優秀なエンジニアとして活躍するには「学び方」を習得するのが一番簡単です。

はてなインターンの前半過程では、全体を通して様々なことを学びますが、それらすべてが綿密に設計されており、「学び方」が学べるようになっています。
Perlを使ったサービス開発」を学べるのではなく(もちろん学べますが)、「サービス開発をする上で必要な知識と手法」を学ぶことができます。
つまり、言語や技術が変わったとしても、サービス開発を行うための知識や手法はずっと活きるということです。
はてなPerlがたまたま利用されているから前半過程でもPerlを使っているだけです。
大事なのは言語ではありませんでした。びっくりです。

後半過程

最高のチームでした

後半過程は「はてなブックマーク」を開発しているブックマークアプリチームにお世話になりました。
同じコースに配属されたid:ishikawa_proと一緒に「クイックブックマーク」という新機能を追加しました。
実装やプレゼン、すべてにおいてサポートしていただいたチームの皆さんにはとても感謝しています。

bookmark.hatenastaff.com

チームのスピード感

毎日チームでランチ前に会議を行うのですが、たった15分という短い時間でその日やることを共有してチームの方向性を決めていくスピーディーな感じがとてもかっこよかったです。
小さいチームなので一度にできることは少ないですが、それでもあの開発スピードを維持しているのは、このような効率的な意識共有を行っているからだろうと思いました。
チームの規模にもよるとは思いますが、チームメンバー全員がそれぞれの力を最大限活かせるような情報共有の方法を考えるのが大事なんだと学びました。

コミュニケーション

ブックマークアプリチームでは、ディレクターとプランナー、デザイナーの方が基本的には東京で勤務しています。
そのため、コミュニケーションがとても重要になってきます。
Slackで会話をすることが多いのですが、僕たちインターン生も発言しやすい空気作りがされていました。
そのため僕たちインターン生も議論に参加しやすく、力を発揮できるような環境がしっかり築かれていました。

さらに、僕が開発を担当した部分がビューまわりを触ることが多かったため、実装したものを東京に勤務しているデザイナーの方に確認していただき、修正を行う、という作業を数回行いました。
もちろんデザイナーの方が見やすいようにGIFアニメに出力してGitHubに貼ったりすることは大切ですが、フォーマットの確認を行うこともさらに大切でした。
つまり、デザイナーの方がデザインを行うときに使用した画面・画像サイズを把握した上でそれに合わせたスクリーンショットなどを共有する必要があります。
また、iOSアプリにはiPhoneからiPadまで様々な画面サイズが存在するので、デザイナーの方がデザインを行う際に使用した画面サイズ以外のサイズでの見え方も共有し、デザインの修正などを行っていただく必要もあります。
デザイナーの方(リモート勤務含む)と連携してプロダクトを作っていくノウハウを学ぶことができました。

プレゼンの重要性

高専時代から英語プレゼンテーションコンテストなどに出場したり、KAKEHASHIプロジェクトに参加して企業の前でプレゼンを行ったりしていたので、プレゼンの重要性は十分理解しているつもりでした。
しかしその重要性は自分が思っていたよりも高かったことに気づきました。

前半過程の最後には自由課題として自分たちが作ってきた日記サービスにオリジナル機能追加を行いました。
そして、それについてのプレゼンを社員の方々に行い、投票によって順位を決めました。
僕は、「日記を書くと、日記の本文の応じて勝手にいい感じのオシャレな写真を添付してくれる」という機能を実装しました。
結果は8人中2位でした。とても嬉しかった。
技術的には僕よりもすごいことをしていた人はたくさんいました。
それでも良い順位をいただけたのは丁寧に作ったプレゼンのおかげだったと思います。
どのようにプレゼンを作れば良いプレゼンになるかを明確にできたわけではありませんが、プレゼンの重要性を再認識することができたのは良かったと思います。

自分のレベルが少し分かった

はてな以外にもサマーインターンはいくつか応募しましたが、受かったところもあれば落ちたところもありました。
今まで頑張って学習してきたけど、自分のエンジニアとしてのレベルはどのくらいだろうといつも思っていました。

今回のはてなサマーインターンに参加してみて、ほかのインターン生やはてなの優秀なエンジニアの方とたくさん交流しました。
その中で、自分のレベル感というものが少し分かったような気がしました。
簡単に言うと、高くも低くもないかな、という感じですが、自分の位置づけがなんとなく分かった気がして、モチベーションに繋がりました。
これは自分にとっては結構大きな進歩でした。
様々な環境に身をおいて、自分の実力を正確に判断することの大切さを学びました。

最終日に学んだこと

僕のTwitter史上最高にバズった。

おわりに

まず、はてなのサマーインターンは最高でした。
最高という言葉では足りないくらい最高でした。
エンジニア人生をこれから送っていく上で死ぬまで役に立つ力がついたと思います。

僕が主に学んだことはこのエントリーに書きましたが、人によって学ぶことも違うと思います。
ぜひ他のインターン生のエントリーも読んでみてください。
そして、将来はてなインターンに参加する方がいましたら、ぜひ僕が学んだ以上のことを学んできてください。


余談たち

関モバ

はてなを会場として開催された「関西モバイルアプリ研究会」に発表者として参加しました。
人生初のLTをしました。
これからもチャンスがあれば勉強会に登壇していきたいと思います。

発表資料
speakerdeck.com

ホテル

今年から全員が一人部屋に泊まれるようになったみたいです。
来年は知りませんが、来年の人も一人部屋になるようにここに「一人部屋は最高だった」と書いておきます。
オフィスまで徒歩3分なところも最高。
疲れて帰ってきて汚い体で寝落ちしても、次の日にホテルに帰ってくると綺麗なベッドに戻っているのも最高。

オフィスランチ

毎日うまいランチが出てきます。
「macanai」と呼ばれています。
うまいです。

twitter.com

晩ごはん

はてなインターンが今年で10年目なだけあって、オフィスの近くのうまいごはん屋さん情報が溜まっていて、インターン生に公開されています。
仕事が終わったらそのリストから今日はどこにしようか決めて食べに行くという感じでした。
ときどき社員さんに連れていってもらってご馳走してもらったりもしました。
全部うまかった。

飲み物とお菓子

はてなのオフィスにはボタンを押すだけで無限に飲み物が出てくる魔法の自販機があります。
もう何本「つぶたっぷり贅沢みかん」を飲んだのか分かりません。

https://www.pokkasapporo-fb.jp/products/fruit/other/GV48.htmlwww.pokkasapporo-fb.jp

さらに、いろいろな種類の軽食も食べ放題です。
朝出社すると、こんにゃくゼリーと豆乳を飲むのがルーチンになっていました。

京都では「雨」という水みたいなものがときどき空から降ってきます。
そのときに「傘」というものを頭上に置くと濡れずに済みます。
京都に来る前に荷物に「折りたたみ傘」という折りたためる傘を入れましょう。
忘れてしまった方はご安心ください。
僕が現地で買った傘をはてなに寄付してきましたので、お使いください。