hackenbacker / ios-engineer-codecheck Goto Github PK
View Code? Open in Web Editor NEWゆめみ社コードチェック
License: Apache License 2.0
ゆめみ社コードチェック
License: Apache License 2.0
本プロジェクトは ViewController が必要以上の責務を抱えており、いわゆる Fat VC 状態です。最低限の責務の切り出しをしてあげましょう。
※本課題は #6 の下位互換です。
GitHub APIの仕様が変更となり、watchers_count
は 廃止となり、
stargazers_count
と同じ値がセットされるようになったので、
以下の資料を調査して適切なデータを取得する。
watchers_count の代わりに subscribers_count を使えば良いらしいが、
search-repositories のレスポンスに含まれていなかった。
watchers & watchers_count are incorrect
BUG “watchers_count” is the duplicate of “stargazers_count”
Upcoming Changes to Watcher and Star APIs
検索結果が0件だったとき、リスト上に何も表示されない。
ユーザーは何が起きたのか?次にどんな操作をすれば良いのか?混乱する恐れがある。
検索結果が0件だったとき、画面上に「検索結果が見つかりませんでした。」を表示する。
本アプリの UI は極めてシンプルです。これでも特に問題はありませんが、やはりいまいち映えないです。使いやすさが損なわれない前提で、UI をブラッシュアップしてください。方向性(エレガント、ゴージャス、モダン等)は問いません。また UIKit だけでなく、SwiftUI の導入も OK です。
検索画面のUISearchBarのtextプロパティにplaceholder文字列をセットしています。
この修正でsearchBarShouldBeginEditing()が不要になると思われます。
本プロジェクトは安全性の低いコードたくさんあります。下記のリストを参考に、安全性の低いコードを撲滅し、安全性を高めましょう。
nil
の握り潰し本プロジェクトに Storyboard 含め、至る所にバグが潜んであります。下記のリストを参考にバグを修正してください。
文字列がソースコード上にハードコーディングされているので、
.stringsファイルに設定した方が望ましい。
TableViewのdelegateはstoryboardで設定しているので、SearchBarも合わせてstoryboardで設定した方が望ましい。
LaunchScreenが白紙の状態なので作成した方が望ましい。
現在のプログラムではテストがありません。UnitTest や UITest を追加してください。
dataTask(with:)の応答でresponseとerrorを使っていないので、これらの値も検査するように改善する。
本プロジェクトは様々な原則に違反しています。下記のリストを参考にプログラムをリファクタリングしましょう:
SearchBarに文字列を入力するモード抜けてキーボードを非表示にすることができないので、
SearchBarにキャンセルボタンを設置して入力モードを抜けられるようにするのが望ましい。
MVVMアーキテクチャを採用したので、ViewだけSwiftUIに変更すれば問題なく動作するはず。
通信中に何も表示していない。
通信中はProgressViewを表示して通信中であることをユーザーに伝えること。
最近巷では MVC や MVVM などの GUI アーキテクチャから、Redux や VIPER などのアプリアーキテクチャまで様々なアーキテクチャが話題になっています。どれでもいいので本プロジェクトを自分の慣れたアーキテクチャに修正してください。
※本課題は #4 の上位互換です。
本プロジェクトのソースコードはとても読みにくいです。下記のリストを参考に読みやすいように修正してください。
詳細画面から検索画面に戻ったときに、スクロール位置が先頭に戻ってしまう。
詳細画面から検索画面に戻ったとき、スクロール位置が保持されていること。
1 検索画面を表示する。
2 検索結果が30件以上ありそうなリポジトリを検索する。
3 検索結果を下の方までスクロールする。
4 リポジトリの1つをタップして、詳細画面に遷移する。
5 詳細画面から検索画面に戻る。
検索画面のtableView(_:cellForRowAt:)
内で
cell.tag = indexPath.row
このようにcellに対してtagを設定しているが、
どこからも参照されていないのでこの処理は削除しても構わない。
アプリアイコンがdefaultの状態なので専用のアプリアイコンを作成した方が望ましい。
現在のAPIの使い方では最大30個しか検索結果が表示できない。
search-repositories
検索結果を増やすために以下の対策を検討する。
1ページ当たりの検索結果を100まで増やしてみる。
検索パラメータにper_page=100
を追加する。
リストの最後に[もっと見る]ボタンを設置して続きの検索結果が取得できるようにする。
検索パラメータにpage=<ページ番号>
を追加する。
GitHubのドキュメントにsearch-repositories
Header
Setting application/vnd.github.v3+json
is recommended.
このように書いてあるが現在はセットされていない。
Request Headerに上記の文字列をセットする。
GitHub Actionsを使ってpushされたら自動的にUnit Testが走るように設定する。
検索結果をできるだけたくさん表示したいので
Safariのように下方向にスクロール中はSearchBarが縮小して
リスト表示の面積が広がるように工夫する。
本アプリの機能は極めて単純です。使いやすさが損なわれない前提で、様々な新機能を追加してあげてください。
searchBar(_:textDidChange:)
SearchBar上で文字列が変更されるごとにtask?cancel()
が呼ばれている。
無駄な処理を連発しているので改善が望ましい。
検索結果のリストが 何の順番で並んでいるか? 分からない。
現在の並び順を表示すると同時に「starが多い順」「更新が新しい順」などで
並び替えができる機能を追加する。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.