この記事は
2021年11月からheyでAndroidエンジニアとして長期インターンを始めた大学4年生が、そのまま内定をもらうまでのお話です。
自己紹介
記事を書き始める前に、軽く自己紹介させて下さい。
- 名前:みっちゃん(@mimimi_engineer)
- 大学4年生
- 専攻:生命科学系(DNAとかタンパク質のお勉強)
- プログラミング歴2年(Android歴は多分合計で1年くらい)
- 2021年11月からheyでインターンを始めた
- 2022年4月からheyで正社員として働きます
よろしくお願いしますー!
heyでインターンすることになった経緯
2020年頃からAndroidの勉強はしていましたが、その頃は特に技術にこだわりがなく、 heyでのインターンを始める前は既にweb系の企業で内定を頂いており、 そこの企業で入社後活躍すべくwebのインターンをしていました。
しかしwebもAndroidも経験し、「やっぱAndroidの方が好きかもしれない」と思うようになりました。 このままAndroidへの気持ちを抱えながらwebに行くことを考えると、次第に怖くなっていきました。
Androidが好きなのか、webが好きなのか、確かめたい...!!!
そう思い、webのインターンをやめ、Androidのインターンを探し始めました。
この時2021年の10月。私は22卒として既に他社に内定を頂いていており、大学を卒業するまで残り半年を切っている状態でした。
当然、どこの企業も私をインターン生として採用してはくれませんでした。 既に内定があり、勤務期間半年を切っている私を雇うメリットはないのです。
そんな時にツイッターのご縁で、heyでのインターンを紹介して頂きました。
ただ、やはり条件的に私を採用するのは厳しく、「ダメもとで受けてみたら?」という雰囲気でした。
そして面接を受けると、あれよあれよというまにインターンが決まりました。 速すぎて記憶ないです。
hey には下記のプロダクトがありますが、
- STORES
- STORES 決済
- STORES レジ
- STORES 予約
私はインターン生として STORES 決済 チームに配属となりました。 ちなみに STORES 決済 Androidチーム初の長期インターン生だそうです。
STORES 決済 アプリに関して
私がインターンで扱っているアプリに関して簡単に説明させて下さい!
STORES 決済 では、決済端末と接続して決済を行うアプリを開発しています。
決済端末とは、クレジットカードで決済を行う時にカードを挿入したり スワイプさせたりした後、必要な場合は暗証暗号を入力したりする「あれ」です。 決済端末自体はheyで開発しているわけではなく、 その決済端末と接続して決済を行うアプリの開発をしています。
例えば、あなたがオーナーとしてお店を構えていて、お客さんが商品を持ってレジまで来てくれたとします。
商品の金額が1000円だった場合、 あなたが STORES 決済 アプリの金額入力フォームに「1000」と入力→お客さんが決済端末にクレカを挿入する→暗証番号入力→決済端末と決済アプリが通信→決済完了 みたいなことをします。
他にも、オーナーさんに入金を行ったりなど色々しますが、 とにかく、決済端末という他のデバイスと通信する必要があるAndroidアプリの開発に関わっているという事を理解して頂きたいです!
多くのインターンの場合、他のハードデバイスと通信するようなアプリの開発はあまり経験できないのではないかと思われます。
それが STORES 決済 インターンの面白いところです!!
インターンの流れ
もしheyでインターンしてみたいという方がいた時のために、 インターンの不安を払拭すべく、簡単にインターン内定後の流れをまとめておきます。
- インターン初日〜2週間
- 環境構築
- 各種設定
- なんかお茶会とかに参加してみんなとお話など
初日から2週間目くらいまでは結構ゆるゆるしてます。 色々働くための準備をしますので、出勤日数が多いと早く終わりますし、 少ないと2週間くらいかかると思います。 私は最初は週3勤務だったので2週間くらいかかった気がします。
最初の1ヶ月はチームリーダーが毎出勤日最初に1on1をして下さります。 なので、「分からないところがあるんだけどいつ聞いて良いか分からない💦」みたいなのは起こりません。 また、issueはインターン生用の特別なissueではなく実務のissueです。 ですが、インターン生のレベル感に合ったissueをくれますし、自分で何をやりたいか選べたり、結構柔軟です。
私の場合は、最初は JavaのコードをKotlinにConvertしたり、簡単なリファクタリングから入りました。 その後で機能追加系のissueや、バグ修正的なissueにも対応するようになっていきました。
- インターン1ヶ月目以降
- 毎出勤日の1on1がなくなる
- 基本的には一人でもくもく仕事
- たまに勉強会・コードレビュー会
1on1については、あくまで目安です。 もう少しサポートがほしい場合は延長可能です!
私は結局2ヶ月くらい毎朝1on1や勉強会的なのをしてもらいました。 2ヶ月目以降は1人で仕事できることが増えてきましたので、毎朝の1on1はしなくなっていきました。
heyの雰囲気
私は、heyでインターンをして3日目くらいですぐに「ここで働きたい!」となりました。 思い立ったら即行動スタイルの私は、「本選考に入らせて欲しい」と申し出ました。 そして自分をもっと知ってほしい気持ちと、働くのが楽しい気持ちで、 当初週3で出していたシフトも週5日8時間でほぼフルタイムで働かせて欲しいと申し出ました。 あまりの勢いにみんなちょっと引いてました()
そんなheyですが、私が特にここが魅力的だなぁと思ったところをいくつか紹介させて頂きます。
- 適宜勉強会を開いてくれる
チームメンバーの提案で開催される勉強会・コードレビュー会もありますし、 私が提案する場合もありました。 私が提案したパターンですと、 STORES 決済 アプリ勉強会がありました。 なぜこの勉強会を提案したかというと、 私は当時日々の業務の中で分からないことが多すぎると感じていました。 AndroidやKotlinの技術的な知識不足もありますが、 それ以上に「アプリの仕様を知らなさすぎる」という課題がありました。 この課題はAndroidやKotlinの技術的課題に比べると解決が簡単なので、 対応を優先したほうがいいと考え、 STORES 決済 アプリ勉強会を提案しました。 もちろん仕様書にもまとめられていますが 実際にコードを見ながら設計や決済の仕組みなどを教えて頂きました。 1ヶ月くらい毎日やってもらいました:azamasu:
- みんな穏やか
なぜか誰も怒っていません。いつ会っても穏やかです。 私がgitのrebaseをしくじりまくって先輩をmeetにお呼び出しした時も、 slackで1日に10回くらい質問した時も、 勉強会を毎朝1ヶ月間開催してほしいと言った時も、 クソみたいなコードを書いてプルリクを出した時も、 みんな穏やかでした。
- 褒めてくれる
すごく褒めてくれます。 なんかslackのスタンプとかで「天才」とか「すごいえらい」とか貰えます。 「エヘヘ///」てなります。 お給料とは違うモチベーションです。
- オンラインだけど他のチームの人ともお話しできる機会がある
お茶会やチームランチとかで他のチームメンバーともお話しできます。 heyは全体として穏やかな雰囲気があるので、 他のチームの方々も自分が普段いるチームと変わらないくらい穏やかで、 誰とでもお話ししやすいです。
- 家庭を大事にしている人が多い
heyは家庭を持っている人が多い印象です。 フルリモート環境を活用して家庭と仕事を両立している人がたくさんいます。 素敵ですね。
- STORE Visitがある!
福利厚生の一つです。 STORESの加盟店で毎月5000円までの買い物なら会社が補助してくれます。 毎月頑張ったご褒美に美味しいものを購入するのを、とても楽しみにしています。
インターンで実際にしたお仕事
インターンをしてから私が実際に取り組んだissueをいくつかピックアップして書いてみます!
- 決済が成功したときに音を鳴らす対応
決済が完了した時には成功音を鳴らし、失敗した時には失敗音を鳴らすissueです。
音を鳴らすのには、SoundPool
を使って実装しました。
しかし実はこのタスクで一番難しかったのは、音を鳴らすこと以外にありました。
それは、決済の仕組みとそれに基づく実装を把握することでした。
どのようなデータを決済端末から受け取り、どのクラスでどのように処理分岐させているか。
それが分かっていないと、正確なタイミングで決済音を鳴らすことができません。
決済が成功した時、決済端末からアプリにTLVという形式のバイナリデータが送られてきますが、
個人開発ではそのような形式のデータを扱うことは滅多にないのでとても苦戦しました。
今は、理解しています!ちょっとは!!笑
- 決済端末アップデート中のアニメーションを追加
機能追加などのタイミングで、決済端末のアップデートが必要になることがあります。
これは、決済端末をアップデートする時に表示されるダイアログの中に、
アップデート中であることを示すアニメーションを埋め込むという対応でした。
このissueはアップデート中のアニメーションと、
アップデート完了の画像との切り替えに少し苦戦しました。
アップデートのアニメーションが完了した後、
今度は同じ位置に成功もしくは失敗を示す画像を表示する必要がありました。
画像をImageView
に表示する場合は、setImageResource()
を使いますが、
アニメーションを表示する場合はsetBackgroundResource()
を使います。
したがって工夫をしない場合だと、アップロード終了後に
アニメーションと画像が重複して表示されてしまう問題が起こってしまいました。
最終的には、アニメーション表示用と画像表示用でImageView
を分けて対応しました。
- コードレビュー
私はこれまでコードレビューをした経験がなかったのですが、 してみたいと言ったらさせて貰えました。 まだ何かSO NICE な指摘ができるほどの知識は私にはないのですが、 他のメンバーが対応しているissue内容を把握することは、 自分が開発しているアプリの仕様や現状抱えている問題点を より深く理解することに繋がりました。
この他にも色々なissueを頂きました。 どれもそんなに大きなissueではありませんが、実務の環境で取り組んでみると、 些細な仕事にも本当にたくさんのAndroid/Kotlinの知識が詰まっていました。
そして、2022年4月からはついに正社員としてheyに入社します。 今後は大きなプロジェクトにも携わっていって、もっと大きなissueの対応もしていきたいです。
頑張るぞ〜!
最後に
heyを宣伝します! heyではお商売のデジタル化を支援する「 STORES プラットフォーム 」を展開しています! また、新卒・中途問わず一緒に働く仲間を募集しています! (※ 23卒の募集は締め切っています:bow:)
↓ 以下参考リンクです