/ios-engineer-code-check

Primary LanguageSwiftApache License 2.0Apache-2.0

株式会社ゆめみ iOS エンジニアコードチェック課題

概要

本プロジェクトは株式会社ゆめみ(以下弊社)が、弊社に iOS エンジニアを希望する方に出す課題のベースプロジェクトです。本課題が与えられた方は、下記の概要を詳しく読んだ上で課題を取り組んでください。

アプリ仕様

本アプリは GitHub のリポジトリーを検索するアプリです。

動作イメージ

環境

  • IDE:基本最新の安定版(本概要更新時点では Xcode 13.0)
  • Swift:基本最新の安定版(本概要更新時点では Swift 5.5)
  • 開発ターゲット:基本最新の安定版(本概要更新時点では iOS 15.0)
  • サードパーティーライブラリーの利用:オープンソースのものに限り制限しない

動作

  1. 何かしらのキーワードを入力
  2. GitHub API(search/repositories)でリポジトリーを検索し、結果一覧を概要(リポジトリ名)で表示
  3. 特定の結果を選択したら、該当リポジトリの詳細(リポジトリ名、オーナーアイコン、プロジェクト言語、Star 数、Watcher 数、Fork 数、Issue 数)を表示

課題取り組み方法

Issues を確認した上、本プロジェクトを Duplicate してください(Fork しないようにしてください。必要ならプライベートリポジトリーにしても大丈夫です)。今後のコミットは全てご自身のリポジトリーで行ってください。

コードチェックの課題 Issue は全て 課題 Milestone がついており、難易度に応じて Label が 初級中級ボーナス に分けられています。課題の必須/選択は下記の表とします:

初級 中級 ボーナス
新卒/未経験者 必須 選択 選択
中途/経験者 必須 必須 選択

課題 Issueをご自身のリポジトリーにコピーするGitHub Actionsをご用意しております。
こちらのWorkflow手動でトリガーすることでコピーできますのでご活用下さい。

課題が完成したら、リポジトリーのアドレスを教えてください。

参考記事

提出された課題の評価ポイントに関しては、こちらの記事に詳しく書かれてありますので、ぜひご覧ください。

環境構築

私の環境では、M1チップを使用したMapBookを使っています。

  • Swift5.7
  • Version 14.2
  • cocoapod 1.11.3
$ arch -x86_64 pod install

アピールポイント

  • 自分がやったことがないタスク、自信のないタスクに関しては、issueを立ててfeatureブランチを切りPRを出すようにした。
    • これによって、それが実現できなかったとしてもmain,developのコミットが汚れない。
  • apiの通信の際にasync,awaitを使用することでネストが深くならずに非同期処理を書くことができた。
  • コンポーネントごとにControllerを作成することで1つのtopPageのviewControllerにたくさんのプロトコルが継承されないようにした。
    • これによりfat VCを解消した。
  • 以下の実装によって、最低限のUXを整えた。
    • 検索結果の取得に時間がかかるためインディケータを表示する。
    • 画像キャッシュライブラリのNukeを使用してスクロールした際のカクつきを抑える。
  • SwiftFormatを使用することによって、インデント修正を自動化した。
  • ここで得た知見を負担にならない程度で、zennにアウトプットした。
    • 御社のカジュアル面談でアウトプットの重要性を熱弁されたので、試してみたところ外部に公開する情報は非常に記憶に残りやすいという発見をした。
  • 最低限のユニットテストを書いた。

今後の課題点

  • tableView,cell,searchBarをコンポーネントで分けるようにしたが、汎用性がなく使い回すことができない。
  • SearchBarControllerにインディケータの処理があり、コンポーネント化しきれていない部分もある。
  • UIテストがない。