【Internship Report】独学で頑張ってたらdipで本当にiOSエンジニアになれてしまった件

※ [dip Advent Calendar](https://qiita.com/advent-calendar/2021/dip-dev) 15日目の記事になります🎄🎄

はじめまして！2021年10月から、[ディップ株式会社](https://www.dip-net.co.jp/)(以下、dip)にて、iOSエンジニアとしてインターンをしております[@Cychow](https://qiita.com/Cychow)です。
dipのインターンに参加してから早2ヶ月が経ちました。
![スクリーンショット 2021-12-14 0.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773915/6a906a2f-1051-9514-db5c-9842390dbdca.png)
本記事ではインターンが始まってから2ヶ月間どのようなことがあったのかについて、技術的な話から普段の生活、働き方の話まで幅広く書いていこうと思います！！！

## 目次
[1. 簡単に自己紹介](#1-簡単に自己紹介)
[2. インターンでやっていたこと](#2-インターンでやっていたこと)
[3. インターンで学んだ技術](#3-インターンで学んだ技術)
　　[① Xcodeでのデバッグ手法 〜ブレイクポイント is いと強し〜](#-xcodeでのデバッグ手法-ブレイクポイント-is-いと強し)
　　[② 配列の範囲外参照時のクラッシュを回避する方法](#-配列の範囲外参照時のクラッシュを回避する方法)
　　[③ R.swiftについて](#-rswiftについて)
[4. 働き方について](#4-働き方について)
　　[4.1 リモートワークについて](#41-リモートワークについて)
　　[4.2 チームの雰囲気](#42-チームの雰囲気)
[5. まとめると...](#5-まとめると)
[おまけ： カジュアル面談のご紹介](#おまけ-カジュアル面談のご紹介)

##1. 簡単に自己紹介
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773915/0fedca9b-99d5-f21f-5771-664152bf26dc.jpeg" width="300"> 
　生まれも育ちも京都府で、関西の大学に現在通っている大学4年生です。(Apple信者です！！笑)

　大学では、化学を専攻しているのですが、文字通り、アプリ開発、ITとは全くもって無関係でした。なので、dipでインターンをする前は、iOSエンジニアになることを夢見て、独学でiOSアプリ開発を学んでいました。
(独学時代にどのように学んでいたかについては別途記事にしてあげようと思います！)

　現在は、dipに内定者兼インターン生として採用していただき、スマートフォンアプリ開発チームにて、iOSエンジニアのポジションで働かせていただいております。

今回の記事で、エンジニアを志す23卒以降の就活生や、エンジニア転職を考えられている方々に対して、dipってどういう会社なのか、開発チームはどのような雰囲気なのかなど、多くの情報をお届けできればと思います！

##2. インターンでやっていたこと
　多くの経験を積むことができていますが、その中から4つほど、ご紹介します！

- iOS開発関連のペーパーテスト ⇦ 研修の一環
- テスト関連
- バグ対応
- バイトル、バイトルNEXTのエンハンスプロジェクト 　


**iOS開発関連のペーパーテスト**
　エンジニアとして就業経験が皆無だったので、技術力を含めて、仕事ができるかだいぶ不安だったのですが、インターン開始後すぐに、研修兼腕試しのために実施されたiOS開発関連のペーパーテストで、思っていた以上の点数を叩き出すことができたので、自分がこれまでやっていたことが技術力向上につながっていたんだなと実感することができました！

**テスト関連**
　バイトルの品質保持のために、単体・結合・総合テストを念入りに行っているのですが、そちらのほうにも現在、参画させていただいております。

**バグ対応**
　テストなどで発覚したバグをチームの皆さんに共有したり、バグそのものを修正したりなどをさせていただいております。バグの修正経験を重ねるたびに、着実に自分の技術力が向上しているのが実感できております。(知識ももちろんですが、デバッグの技術なども学ぶことはたくさんありました！)

**バイトル、バイトルNEXTのエンハンスプロジェクト**
　こちらはdipが実施しているキャンペーンであったり、UIアップデートのプロジェクトに参画させていただき、実際にリリースされたバージョンの1つの画面を作成したりすることができました。（リリース版のアプリを触って、自分が作成に関与した画面を見たときの感動は凄まじいものでした笑笑）

##3. インターンで学んだ技術

　インターンを始めて2ヶ月が経ちましたが、2ヶ月という期間に非常に多くのiOSに関する技術的知識をインプットすることができました。今回はそのうちの3例を紹介したいと思います。

####① Xcodeでのデバッグ手法 〜ブレイクポイント is いと強し〜
　インターンを始める前は、自作アプリを2つほどApp Storeにリリースしたりと個人開発に力を入れていたのですが、デバッグの手法、とくにブレイクポイントなどは意識的に使用しようとはしておりませんでした。あるとき、ソースコードがどの順番で実行されるのかがわからなかったときに、「ブレイクポイントを使用するといいよ」とチームメンバーの方にアドバイスをいただき、無事そのときの問題は解決しました。問題はここからです。そのとき、同時にこちらの記事をいただきました。

　　[iOS アプリのデバッグ術 ~値の出力と代入~](https://dev.classmethod.jp/articles/ios-debug/)

　まとめると、Xcodeのデバッグエリアで、poコマンドとexpressionコマンドを駆使することで、ブレイクポイントまでの変数をコントロールすることが可能であるということです。
これまで、printで変数の中身を確認していた私からすれば、革新的な方法でした！
というのも、毎回ビルドする必要がなくなったわけです。。。

このpoコマンドとexpressionコマンドを知ってから、開発効率も非常に向上しました！！！！！

####② 配列の範囲外参照時のクラッシュを回避する方法
　Swiftを勉強し始めたときや個人開発でアプリを開発しているときなどで、よく下記のエラーで怒られるときがあります。(あれ、、ないですか、、、？ 僕はあります！！！！)

```swift:配列の範囲外参照
let array: [Int] = [1, 2]
array[0] // 1
array[1] // 2
array[2] // fatal error: Index out of range
```
個人開発のときに、UITableViewやUICollectionViewのcellForRowAt()メソッド内でもよくこの子を目にしました...
このようなときに、クラッシュさせるのも一つの手ではあるのですが、クラッシュさせたくないときがたまにあったりします。そのときは、以下の手を使用するとクラッシュさせずに済みます。

```swift:safeを活用
extension Array {
    subscript (safe index: Index) -> Element? {
        return indices.contains(index) ? self[index] : nil
    }
}

let array: [Int] = [1, 2]
array[safe: 0] // Optional(1)
array[safe: 1] // Optional(2)
array[safe: 2] // nil <- 「fatal error: Index out of range」ではない
```
このような方法を紹介していただいたときは、結構感動したのを覚えています笑

####③ R.swiftについて 
![スクリーンショット 2021-12-15 16.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773915/810a8627-917a-a8df-22de-32f5b9ac87ab.png)
 [R.swift](https://github.com/mac-cain13/R.swift)とは、「Swiftプロジェクト内の画像、フォント、セグエなどのリソースを、簡単に管理・取得できるようにするためのライブラリ」です。私の場合は、名前だけは聞いたことのあるライブラリでしたが、実際に使用するのは初めてでした。
R.swiftを使用することによって以下のメリットを得ることができます。

- リソースをキャストせずに使える
- 実行時にアプリがクラッシュしない
- リソース名が自動補完される  
(参考： https://qiita.com/uhooi/items/82fbdd94bdc467a22422)

私も現在、R.swiftについて勉強中ですが、使いこなせるようになれば個人開発でも、非常に力強い味方になってくれることは間違いないなという感触です。

##4. 働き方について

###4.1 リモートワークについて
　dipでは現在、原則リモートワークで、必要なときだけ出社するという方式をとっております。その方式のおかげもあり、私は現在、京都からリモートという形でインターンさせていただいており、大学の卒業研究と両立することができております！(リモート最高！！！！)

チームメンバーとのコミュニケーションは、slackやSpatial Chatというツールでとっており、技術的に点やそれ以外で困ったときなどは、Spatial Chat内ですぐに聞くことができるため、何不自由なく働くことができています。![スクリーンショット 2021-12-15 12.58.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773915/80b7d353-6275-393e-7ede-cc5ad8802548.png)

###4.2 チームの雰囲気
　チームの雰囲気を一言で言い表すと「やぁさしいぃぃぃ！！！」です。(ふつうの「優しい」とは違います。笑)
インターンが始まってすぐ、メンターの方が1人ついてくださり、技術的な部分であるだとか、日々の生活のことについてであるだとか、メンタル面も含めてしっかりサポートしてくださりました。また、他のチームの方々も、気軽に話しかけてくださり、話しにくいという感覚は全くもってありませんでした。定期的にオンライン飲み会なども実施されており、ざっくばらんにお話をすることができました。日々楽しく働くことができております！

##5. まとめると...

　2ヶ月間インターン生として業務に関わらせて頂いておりますが、何不自由なく日々、iOSエンジニアとしてのスキル向上とキャリア形成に勤しむことができております。
インターンとしては2月末まで参加させて頂く予定なので、それまで一つ一つタスクを大切に、スキル向上につなげていきたいと考えております！

##おまけ： カジュアル面談のご紹介
※少しでもdipに興味を持たれた方は、下記URLからdipのエンジニアの方々とカジュアル面談でお話することができます！ぜひっ！！
[https://meety.net/articles/t2--k0y-avtjpmz](https://meety.net/articles/t2--k0y-avtjpmz)