STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

STORES レジ ~ iOSインターン 体験記 ~

前座

始めまして,ちゃんくろです。 普段は大学に通いながらiOSエンジニアとしてインターンに参加させていただいたり,IT系学生団体Tech.Uniの運営をさせていただいたりしている中で2024年春のサポーターズ1on1できっかけをいただき,10月中旬から11月中旬にかけて STORES レジでiOSインターンをさせていただくことになりました。 そこで学んだことや取り組み。僕自身1ヶ月のSTORESでのインターンを通して得たことを書いていければと思います。

期間中の取り組み

期間中に取り組んだTaskとしては以下のものが挙げられます。

  • レジ七不思議
  • 会計後の顧客検索条件のリセット
  • カート内キーボードの挙動修正
  • レシート印刷完了検知の調査
  • GraphQLのコンソールに出力されるレスポンスの詳細化
  • 新規機能画面のプロトタイプの作成
  • 多くの方との1on1

この中で掻い摘みながらご紹介できればと思います。

会計後の顧客検索条件のリセット

ここのTaskに関してはインターン入社後2,3個目のものになります。 実際にこのTaskを消化するにあたって,これまで僕自身VIPERやClean Architecture, MVVMをメインで使用することが多かったため,初めて目にしたReduxのコードはとても難しかったです。 このTaskに取り掛かる中で僕自身0からコードを読み進めてしまうと少し難しいということで,メンターの方にReduxベースのアーキテクチャについての概要などを説明していただきました。 はじめに一旦質問して大枠を掴むことは非常に大切だと思いました。

具体的な実装としては Reduxアーキテクチャのdispatcherでグローバルで保持している状態をCleanする処理を支払いが終了した段階で仕込むという,言葉で説明するには簡単なものではありましたが,コードの難しさに苦戦しました。

【入門編】Reduxによる状態管理の仕組みを理解する を参考

レシート印刷完了検知の調査

このTaskでは基本的に調査メインでした。StarXpand SDKのドキュメントから,特定のプリンターにおける印刷完了を検知できる項目があるかどうか調査を行う中で,調査対象端末以外ではできそうなのに...ということがありました。 そこで考えた対処法としては 印刷直前と直後のプリンターにエラーがなく,印刷においても正常なレスポンスが返ってくるという判断で良いのではないかと考え,その方向で進めることになりました。 結果行った修正としては,プリンターのエラーが印刷前に出力されていないのかということを確かめるものです。

反省

このTaskに取り組む中で,大きな反省として Issueとして求められているものと自分が実現しようとしていることの差分をできる限り無くす必要があると思いました。 今回のインターンでは大学や私用などが重なってしまい,週によっては20時間を切る週もあったため, 時間は大変重要なものでした。その中で,どうやってできるだけ限られた時間の中で自分にできることをするかを考える必要があると思います。 実際に僕はこのTaskの中で印刷が成功した際に成功内容の詳細がレスポンスとして取得できないか,といった部分まで調べてしまい適切なコミュニケーションをとり,求められているものと自分が実現したいことの差分が大きく発生してしまったことで大幅に時間をロスしてしまったと反省しています。 就業の時間が限られているからこその学びだったと思います。

GraphQLのコンソールに出力されるレスポンスの詳細化

ApolloClientをアップデートした際に起きた,これまで出力されていたレスポンスがAnyHashable(~)でまとめられてしまう事象に対して,コンソール画面にこれまでのように レスポンスであることがわかるタグ, GraphQL Query名, レスポンスデータ (値がわかること)でかつKVで出力したいというTaskでした。こちらに関してはDecodeする箇所の変更が問題かと思いApolloClientのDocumentを読み進めました。

読み進める中で,ほぼ確実に正確なデータは取れていることからdebugPrintベースのLoggerをdumpを使用してみたところ,たった1行で糸口が見えてきました。

新機能画面のプロトタイプの作成

これまで基本的には調査系のTaskが多く,こちらから打って変わって実装が多くなりました。 こちらに関しては新機能なので,UIなどの写真を載せることはできませんでしたが新しい機能画面を0から作成することは非常に貴重な経験だったと思います。 ここでは,既存のコードの利用をできる限り利用することでUIのテイストを揃えることを意識しました。

その分UIの作成は大方できたのですが,時間の都合上並び替えやViewModelにまつわる部分を書くことができなかったのでこちらに関しては非常に残念です。

多くの方との1on1

こちらは,レジチームの方だけでなくビジネス側で責任者をされている方などの幅広い方とお話をする機会をいただきました。 その中でも,サービス法人部門 部門長の方とお話をさせていただいた際に僕自身が感じたことなども少し以下に記載します。

僕自身,エンジニアで就活をするべきなのかそれともそれ以外の道に進むのか少し迷っている部分がありました。そのような心境もあったためエンジニアという職能から距離が離れていてかつ,プロダクト,サービスにおいて責任を持つ方との面談機会を作ってほしいというお願いをさせていただき,実際に1on1を組んでいただきました。 この面談の中で,実際にプロダクトやサービスへの関わり方やキャリアについての考え方においてとても貴重な意見をいただけたと考えています。

これまで,1on1文化があまりないインターンが多かったのですがコミュニケーションの取り方やチーム内での距離感が非常に居心地よく勉強になる機会でした

インターンを通して得た反省,学び

インターン期間,様々なTaskに取り組んだ中で,根本的な技術力の無さがあると感じました。

  • 技術検証において,初めて読むドキュメントに対しての慣れがなく時間がかかりすぎてしまう
  • コードの実装スピードが遅い
  • なんとなく,で理解せずにコードを書いてしまっているところがある

これらに関してはもちろんSwiftの経験年数によるところは少なからずあるのだと思いますが,業務として取り組む以上は経験を言い訳にはせずに定量的な結果を出せるようになりたいと思いました。

技術的なところ以外で

STORESでインターンに参加する中でとても暖かく迎えてくださり,Taskを考える中でも「せっかくSTORESでインターンをしているのだからこのTaskに着手してみよう。」と,すごくインターン生に対して考えてくださっていると終始感じました。その分コードは難しく質問が抽象的になってしまったり,悩む時間が多くなってしまうことはありましたが,どんな時でも親身に毎日の1on1や,ちょっとした質問にもすぐに対応していただきインターンに参加している中で心理的安全性がとても高く恵まれた環境でした。

インターン,ありがとうございました!

今回のインターンでは,これまでにないアーキテクチャやハードウェアに関するコードに触れることができ,多くの知見やSTORESという会社の魅力について知れたと感じました。 至らぬ部分は非常に多く,メンターのsatoryoさんをはじめレジチームの皆さんには大変お世話になりました! STORESのインターンで感じた自分の改善点や問題点を見つめ直して技術力を伸ばしていける1年にしようと思います!