こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
先日DataScienceHubを立ち上げてから一週間が経ちましたが(2020年9月16日現在),すでに300人以上の方々に参加いただいてめちゃくちゃ有益なコミュニティになってます.
今回はDataScienceHubコンテンツ第一弾として,Coding Challengeを開始します!
(我ながら)こんなすばらしいサービスを提供しているコミュニティは他にないと思うので,興味がある人は是非DataScienceHubへ!
なお,本ページで解説している一連のGitのフローは一般的なOSS等の開発フローに類似しているので,コミュニティメンバーでない人にとっても有益なので是非一読ください!!
目次
新コンテンツ ”Coding Challenge”とは??
DataScienceHubのメンバー限定コンテンツです.毎週プログラミングの課題が追加されるので,参加者は課題に従ってコーディングします.(DataScienceHubのメンバーであれば誰でも参加可能です)
他の方々が提出したコードも見れるようになっているので,分からない箇所があったり,つまづいたりしたら見てみましょう!
また,コードレビューやコメントが欲しい人はメンターからコードレビューを受けることができます.(メンターは全員現役データサイエンティスト/AI開発者/AI研究者です.)
コードレビュー は自分がプログラミングを学習したての時に,一番欲しかったサービスです.超超有益なサービスだと思うので,初学者の人は是非使って欲しいです.DataScienceHubへの参加はこちらから!
参加方法
ここでは,Coding Challengeへの参加方法と,実際にコードを提出してコードレビューを受けるまでの手順を紹介します.
基本的に全てGithub上で行われるので,Gitのいい練習にもなります.また,「GitやGithubの操作が不安だ」と言う人は是非こちらの無料講座を読んでみてください.1日あれば読めると思います.無料なので是非!
追記) Gitの動画講座を公開しています.あらゆるUdemyのGit講座で最も評価が高い講座となっています.Gitに自信がない方はこちらの講座を受講していただくことを強く推奨します.
なお,今回のフローは一般的なOSSなどの開発にもかなり近いフローです.Githubは1人ではなかなか練習できないので,本当にいいチャンスなので騙されたと思って(?)これ通りやってみてください.初めての人は最初の1~2回は慣れなくて大変かもしれませんが,慣れると1~3分でこれらのステップを踏めるようになります.
↓はStep by stepに手順を説明しています.一見長く見えますが,慣れると楽ですし,今後チームで開発する際にも必ず活きるのでやってみてください!
1. DataScienceHubへ入会する.
↓のページから入会手続き(PayPal)をしてください.その後,Slackへの招待メールとGithubのOrganization(D-S-Hub)への招待メールが届きます.(PayPalのご登録のメールアドレスに届きます)
2.GithubのOrganization”D-S-Hub”への招待を許可する.
PayPalご登録後,以下のようなメールが送られてくるかと思います.(通常はご登録から送付まで2営業日いただいておりますが,現在サービス開始直後につき一週間いただいてます.)
もしまだGithubのアカウントをお持ちでない場合はこちらの記事を参考にサインアップしましょう!
3. Organization”DataScienceHub”に加入していることを確認する
自分のGithubのアカウントページにアクセスすると,「Organizations」にDataScieceHubのロゴが見えるのでそこをクリックします.
4. Repositoriesタブをクリックしてcoding-challengeリポをクリックする
5. D-S-Hub/coding-challengeをforkする.
forkすると,自分のアカウントにリポジトリのコピーを作ることができます.こうすることで,元のD-S-Hubのcoding-challengeリポを変更することなく,安全にコーディングをすることができます.
6. 自分のアカウントにforkされたcoding-challengeリポがあることを確認し,cloneする.
‘Code’ボタンをクリックし,Clone with HTTPSに表示されているURLをコピペし,Terminalを開いてcloneしたいフォルダに移動して
$git clone <コピーしたURL> を実行すればOK
追記:2021年8月13日以降,httpsでの認証ができなくなるようです.その場合他の認証方法を使う必要があります.SSH設定の仕方を記事にしたのでこちらを参考にしてください.
cloneの仕方はこちらで詳しく解説してますので,合わせてご確認ください.また,必要に応じて $git config でローカルリポのユーザ設定をしておきましょう. $git config についてはこちらの記事もご確認ください.
例えば~/Desktopにリポジトリをcloneする場合は
1 2 3 4 |
$ cd ~/Desktop $ git clone <コピーしたURL> $ git config user.name '<username>' $ git config user.email '<email address>' |
のようにすればOKです.
1. 本家リモートリポ(D-S-Hub/coding-challenge)
2. 自分のリモートリポ(<username>/coding-challenge)
3. 自分のローカルリポ(coding-challenge)
7. 本家リモートリポをupstreamとして登録する
本家のリポ(D-S-Hub/coding-challenge)には課題が追加されていくので,Forkした自分のリポを常に本家のリポの更新に合わせてアップデートする必要があります.
リモートリポの登録は,$git remote add <name> <リポのurl>で可能です.通常Fork元の本家のリポを’upstream’として登録しておくのが一般的なので以下のコマンドを実行すればOKです.
1 |
$ git remote add upstream https://github.com/D-S-Hub/coding-challenge.git |
すると,リモートリポとして’upstream’が作られます.リモートリポの一覧を表示するには $ git remote -v を実行しましょう.
1 2 3 4 5 |
$ git remote -v origin https://github.com/<username>/coding-challenge.git (fetch) origin https://github.com/<username>/coding-challenge.git (push) upstream https://github.com/D-S-Hub/coding-challenge.git (fetch) upstream https://github.com/D-S-Hub/coding-challenge.git (push) |
‘origin’にはforkした先の自分のリポジトリが,’upstream’にはfork元の本家のリポジトリが登録されているのがわかると思います.
8. 本家リポから(自分のローカルリポに)fetchしてmergeする(clone直後は不要)
本家リポ(D-S-Hub/coding-challenge)の更新に合わせて自分のリポ(ローカルリポとリモートリポ)も更新する必要があります. 本家リポの情報をfetchしてまずは自分のローカルリポにmergeしましょう!
基本的にはmasterブランチを使ってやります.以下のコマンドを実行すればOKです.
1 2 3 |
$ git checkout master $ git fetch upstream $ git merge upstream/master |
これでローカルリポが本家リポと同期されます.(なお,本作業はclone直後は不要です.すでに最新の情報になっているはずなので)
この時点ではまだリモートリポは更新されていないので,手順11.に書いているやり方で,適宜リモートリポにpushしていきましょう.
9. 課題別にmasterから新しいbranchを作成して,課題に従ってファイル作成とコーディングをする
例えば課題「99-bottoles-challenge」に挑戦する場合は,
1 |
$ git checkout -b 99-bottles-branch |
のようにそれ用のブランチを作成してください.ブランチ名はなんでもOKです.ご自身でわかりやすい名前をつけましょう!
(基本的に課題毎にmasterからブランチを作成してください.)
10. 課題の README.md にしたがってファイルを作成し,そのファイルにコーディングをする
例えば,「99-bottoles-challenge」では「bottle_song_lyrics.py」を作成するとなっています.課題によって指示があるのでそれにしたがってファイルを作成し,コーディングしましょう.
11. git add & commit & pushする
いわゆる普通のGitフローです.commitメッセージはなんでも構いません.この辺りのフローがあやしい人はこちらで一度Gitの復習をしましょう!
1 2 3 |
$ git add . $ git commit -m 'commit message' $ git push origin <branch_name> |
12. 自分のGithubのリポ’coding-challenge’にアクセスして,Pull Requestを作成する
[New pull request]をクリックすると,以下のページになるので,request元のブランチを確認して,[Create pull request]をクリックします.
13. Pull Request名をChallenge名(課題のフォルダ名)にして,コメントを記入してPull Requestを作成する.
(重要!!)Pull Request名には,必ずChallenge名を指定してください.
なんでもいいのでコメントを書いていただけると嬉しいです!
Pull Requestをした後に,間違えて本家のmasterブランチにmergeしないようにお願いします.間違えてmergeした際にはslackの#coding-challengeにて@かめと@永山をメンションして教えてください.
14. (オプション)メンターからのコードレビューが欲しい人はSlackの#coding-challengeチャンネルに投稿する
PRを作成したら是非,SlackにPRのURLを投稿しましょう!特にコードレビュー やコメントを依頼する場合は@永山をメンションして投稿いただければと思います.
15 (オプション)コードレビュー を確認する
コードレビュー を終えたら,Slackの投稿に返信する形でその旨ご連絡します.
コードレビュー を確認できたら,Pull RequestをCloseしてください.コードレビュー 後時間が経っているPR(Pull Request)は運営チームのほうでCloseします.
Close後はSlackの投稿になにかコメントいただけると幸いです.
16. 2回目以降の手順
2回目以降は手順8.に戻って本家リポと同期させてからブランチを作成して別の課題に取り組みましょう!基本的にはmasterからブランチを作成して,各ブランチにそれぞれの課題のファイルを作成するイメージです.
作成した課題をどこか1つのブランチにまとめたい人は適当にブランチを作成して,そこに各課題のファイルをpushしていけばOKです.ただ,それらのファイルがPRに含まれないように注意してください.(PRに複数の課題のファイルが入ってしまうので)
間違えても大丈夫
間違えてもOKです.とにかくPR名に課題名をちゃんと書いてさえくれれば,ゴミファイルがあっても問題ありません.なお,コードレビュー は指定された課題のファイルにのみ行います.(ほかの課題ファイルがあってもそれについては見ませんのでご了承ください)
難しいと思った人は,是非今回の機会に練習しましょう! 一般的な開発の際のGithubのフローに近いので,いい練習になると思います.(一般的な開発現場では最後にmergeしますが,今回の場合はmergeはしません.)
わからないことがあったらDataScienceHub内で聞きましょう.そのためのコミュニティです!
他の人のコードをみてみよう!
他の人が書いたコードを読むことも,自分がコードを書くのと同様以上にスキルアップにつながります.
本家のリポ(D-S-Hub/coding-challenge)の’Pull requests’タブをクリックすれば,他の人が出したPRを見ることができます.(すでにCloseされたものも見てみてください)
課題名で検索すれば,興味のある課題に絞って一覧を出すこともできます.
課題につまづいたらみてみましょう
それでは,Happy Coding!!